├── .changeset ├── README.md └── config.json ├── .github └── workflows │ ├── ci.yml │ └── release.yml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── @types └── svelte-jsx.d.ts ├── CHANGELOG.md ├── LICENSE ├── README.md ├── package.json ├── pnpm-lock.yaml ├── renovate.json ├── src ├── env.d.ts ├── index.js ├── preprocess │ ├── bindthis.js │ ├── bindthis.spec.js │ ├── builder │ │ ├── component.js │ │ └── element.js │ ├── import.js │ ├── import.spec.js │ ├── index.js │ ├── listen.js │ ├── listen.spec.js │ └── types.d.ts └── runtime │ └── index.js ├── test ├── fixture │ ├── component-each │ │ ├── input.svelte │ │ └── output.svelte │ ├── component-modifier-error │ │ ├── error.txt │ │ └── input.svelte │ ├── component-modifier │ │ ├── input.svelte │ │ └── output.svelte │ ├── component-with-handler │ │ ├── error.txt │ │ └── input.svelte │ ├── component-with-this │ │ ├── input.svelte │ │ └── output.svelte │ ├── component │ │ ├── input.svelte │ │ └── output.svelte │ ├── element-forward │ │ ├── input.svelte │ │ └── output.svelte │ ├── element-modifier │ │ ├── input.svelte │ │ └── output.svelte │ ├── element-modifiers │ │ ├── input.svelte │ │ └── output.svelte │ ├── element-multi-element-with-this │ │ ├── input.svelte │ │ └── output.svelte │ ├── element-multi-element │ │ ├── input.svelte │ │ └── output.svelte │ ├── element-no-deligate │ │ ├── input.svelte │ │ └── output.svelte │ ├── element-svelte:element │ │ ├── input.svelte │ │ └── output.svelte │ ├── element-with-handler │ │ ├── error.txt │ │ └── input.svelte │ ├── element-with-this-each │ │ ├── input.svelte │ │ └── output.svelte │ ├── element-with-this-each2 │ │ ├── input.svelte │ │ └── output.svelte │ ├── element-with-this │ │ ├── input.svelte │ │ └── output.svelte │ └── svelte:component │ │ ├── input.svelte │ │ └── output.svelte └── index.spec.js ├── tsconfig.build.json ├── tsconfig.json └── vite.config.ts /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json", 3 | "changelog": [ 4 | "@changesets/changelog-github", 5 | { 6 | "repo": "baseballyama/svelte-preprocess-delegate-events" 7 | } 8 | ], 9 | "commit": false, 10 | "fixed": [], 11 | "linked": [], 12 | "access": "public", 13 | "baseBranch": "main", 14 | "updateInternalDependencies": "patch", 15 | "ignore": [] 16 | } 17 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | workflow_dispatch: 8 | 9 | concurrency: 10 | group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} 11 | cancel-in-progress: true 12 | 13 | jobs: 14 | test: 15 | timeout-minutes: 10 16 | runs-on: ${{ matrix.os }} 17 | strategy: 18 | matrix: 19 | os: [ubuntu-latest] 20 | node: [16, 17, 18, 20, 22] 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: pnpm/action-setup@v2 24 | with: 25 | version: 8 26 | - uses: actions/setup-node@v4 27 | with: 28 | node-version: ${{ matrix.node }} 29 | cache: 'pnpm' 30 | 31 | - name: prebuild 32 | run: pnpm install --frozen-lockfile 33 | 34 | - name: test project 35 | run: pnpm type:gen && pnpm test:all 36 | 37 | - name: install Svelte3 38 | run: pnpm i svelte@3 && pnpm i svelte-check@3.4.5 39 | 40 | - name: test project with Svelte3 41 | run: pnpm type:gen && pnpm test:all 42 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | permissions: 9 | contents: write 10 | issues: write 11 | pull-requests: write 12 | 13 | jobs: 14 | release: 15 | name: Release 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: Checkout Repo 19 | uses: actions/checkout@v4 20 | with: 21 | fetch-depth: 0 22 | - uses: pnpm/action-setup@v2 23 | with: 24 | version: 8 25 | - uses: actions/setup-node@v4 26 | with: 27 | node-version: 18 28 | cache: 'pnpm' 29 | 30 | - name: prebuild 31 | run: pnpm install --frozen-lockfile 32 | 33 | - name: build 34 | run: pnpm type:gen 35 | 36 | - name: Create Release Pull Request or Publish to npm 37 | id: changesets 38 | uses: changesets/action@v1 39 | with: 40 | version: pnpm update:version 41 | publish: pnpm release 42 | commit: 'chore: release svelte-preprocess-delegate-events' 43 | title: 'chore: release svelte-preprocess-delegate-events' 44 | env: 45 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 46 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 47 | 48 | - name: create coverage report 49 | run: pnpm test:coverage 50 | 51 | - name: Coveralls GitHub Action 52 | uses: coverallsapp/github-action@v2.3.6 53 | with: 54 | github-token: ${{ secrets.GITHUB_TOKEN }} 55 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # yarn v2 126 | .yarn/cache 127 | .yarn/unplugged 128 | .yarn/build-state.yml 129 | .yarn/install-state.gz 130 | .pnp.* 131 | 132 | # Jetbrains IDEs 133 | .idea 134 | 135 | # ---------------------------------------------------------------------- 136 | # svelte-preprocess-delegate-events 137 | # ---------------------------------------------------------------------- 138 | 139 | test/fixture/**/actual.svelte 140 | .node-version 141 | types 142 | /preprocess/ 143 | /runtime/ 144 | /index.d.ts -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | test/fixture/**/output.svelte 2 | @types/svelte-jsx.d.ts 3 | pnpm-lock.yaml 4 | /preprocess/ 5 | /runtime/ 6 | /index.d.ts -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "overrides": [ 4 | { 5 | "files": "README.md", 6 | "options": { 7 | "requirePragma": true 8 | } 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /@types/svelte-jsx.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace svelteHTML { 2 | /** 3 | * base: https://github.com/sveltejs/language-tools/blob/651db67858d18ace44d000d263ac57ed5590ea05/packages/svelte2tsx/svelte-jsx.d.ts#L42 4 | */ 5 | type HTMLProps = 6 | Omit< 7 | Omit>> & EventsWithColon>, 8 | keyof Override 9 | > & Override & (Record<'on:*', (event: Event & { currentTarget: EventTarget & EventTarget }) => any | never> | object); 10 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # svelte-preprocess-delegate-events 2 | 3 | ## 0.4.4 4 | 5 | ### Patch Changes 6 | 7 | - [#121](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/121) [`452be37`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/452be3718b5ddf53b048c67c97bc4b5237c8493b) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: do not duplicated variable names when multiple svelte:component exist 8 | 9 | ## 0.4.3 10 | 11 | ### Patch Changes 12 | 13 | - [#78](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/78) [`85afdb0`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/85afdb0bba5d17b2cef6edd39f18658f98052741) Thanks [@MircoSteyer](https://github.com/MircoSteyer)! - fix: fix exports of package.json for ESM resolution 14 | 15 | - [#81](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/81) [`dfb1f59`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/dfb1f5908c122c48e94e737209e84a343b2e305c) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: svelte-preprocess-delegate-events does not support Svelte 5 yet 16 | 17 | ## 0.4.2 18 | 19 | ### Patch Changes 20 | 21 | - [#53](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/53) [`6a15ec8`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/6a15ec8c11d6715d061d2d30b3ce6a277d77c40a) Thanks [@baseballyama](https://github.com/baseballyama)! - fix to generate variable name 22 | 23 | ## 0.4.1 24 | 25 | ### Patch Changes 26 | 27 | - [#29](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/29) [`10350be`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/10350be94598adafef77c80b93e1fae6e3346725) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: I released 0.4.0 but after that, I removed this version and again I tried to publish this. But failed. Therefore I tried to release a new version 0.4.1. 28 | 29 | ## 0.4.0 30 | 31 | ### Minor Changes 32 | 33 | - [#27](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/27) [`e5407a8`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/e5407a8a6492f9086a3717879eb17affe9440943) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: add TypeScript support 34 | 35 | ## 0.3.0 36 | 37 | ### Minor Changes 38 | 39 | - [#22](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/22) [`7cba7e3`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/7cba7e37622af70ae3dafcacae8f44ae68aefba2) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: support `bind:this`. 40 | 41 | ## 0.2.0 42 | 43 | ### Minor Changes 44 | 45 | - [#20](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/20) [`f4f5ee1`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/f4f5ee14a4ad94635541aa51cf0d15e7cd56b9a2) Thanks [@baseballyama](https://github.com/baseballyama)! - feat: Support Element with `on:*` in `{#each}` block 46 | 47 | ## 0.1.5 48 | 49 | ### Patch Changes 50 | 51 | - [#17](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/17) [`9bbcc70`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/9bbcc700f57bd6e980720af52e8faeeea18cfaa0) Thanks [@baseballyama](https://github.com/baseballyama)! - fix type exports 52 | 53 | ## 0.1.4 54 | 55 | ### Patch Changes 56 | 57 | - [#15](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/15) [`0a05acb`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/0a05acbd29b0be23e5783ec317b1abb0d707c228) Thanks [@baseballyama](https://github.com/baseballyama)! - fix: add main and types on package.json 58 | 59 | ## 0.1.3 60 | 61 | ### Patch Changes 62 | 63 | - [#13](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/13) [`5fdb6b3`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/5fdb6b3209be3ce4c18c56f4ee85301fe5f88ce8) Thanks [@baseballyama](https://github.com/baseballyama)! - fix type definition 64 | 65 | ## 0.1.2 66 | 67 | ### Patch Changes 68 | 69 | - [#11](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/11) [`4789412`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/478941204513caee23b2eee68250f56d35611ed5) Thanks [@baseballyama](https://github.com/baseballyama)! - Fix type error by svelte-check 70 | 71 | ## 0.1.1 72 | 73 | ### Patch Changes 74 | 75 | - [#6](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/6) [`ec529bc`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/ec529bca7ec3d81ddb4469a19e71a8d29987d8a4) Thanks [@renovate](https://github.com/apps/renovate)! - chore(deps): update dependency vitest to ^0.31.0 76 | 77 | - [#9](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/9) [`217dc31`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/217dc31c03241c5cd3062c18e28327095321f3d3) Thanks [@renovate](https://github.com/apps/renovate)! - chore(deps): update coverallsapp/github-action action to v2 78 | 79 | - [#10](https://github.com/baseballyama/svelte-preprocess-delegate-events/pull/10) [`99692f4`](https://github.com/baseballyama/svelte-preprocess-delegate-events/commit/99692f4f8dd330a40b751d655f453c5f05e9d9b9) Thanks [@baseballyama](https://github.com/baseballyama)! - chore: add peerDependencies. 80 | 81 | ## 0.1.0 82 | 83 | ### Minor Changes 84 | 85 | - 3c0cf0c: feat: support `on:*` for both HTML elements and Svelte components. 86 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Yuichiro Yamashita 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![NPM license](https://img.shields.io/npm/l/svelte-preprocess-delegate-events.svg)](https://www.npmjs.com/package/svelte-preprocess-delegate-events) 2 | [![NPM version](https://img.shields.io/npm/v/svelte-preprocess-delegate-events.svg)](https://www.npmjs.com/package/svelte-preprocess-delegate-events) 3 | [![Code Style: Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier) 4 | [![Build Status](https://github.com/baseballyama/svelte-preprocess-delegate-events/workflows/CI/badge.svg?branch=main)](https://github.com/baseballyama/svelte-preprocess-delegate-events/actions?query=workflow:ci) 5 | [![Coverage Status](https://coveralls.io/repos/github/baseballyama/svelte-preprocess-delegate-events/badge.svg?branch=main)](https://coveralls.io/github/baseballyama/svelte-preprocess-delegate-events?branch=main) 6 | 7 | # Delegate events with `on:*` 🎉 8 | 9 | - 💡 Easy to use 10 | - ⚡️ No performance impact 11 | - 🔑 No type errors with [svelte-check](https://github.com/sveltejs/language-tools/tree/master/packages/svelte-check) 12 | 13 | ## Try it on [Stackblitz](https://stackblitz.com/edit/sveltejs-kit-template-default-rwmhls?file=src%2Froutes%2F%2Bpage.svelte&terminal=dev) 🚀. 14 | 15 | # Overview 16 | 17 | Since 2019, one popular issue on the Svelte GitHub repository has been delegating all events.
18 | https://github.com/sveltejs/svelte/issues/2837 19 | 20 | This repository aims to solve this issue. 21 | 22 | # Example 23 | 24 | **Component.svelte** 25 | 26 | ```svelte 27 | 28 | 29 | ``` 30 | 31 | **App.svelte** 32 | 33 | ```svelte 34 | 37 | 38 | 39 | 43 | ``` 44 | 45 | # Prerequisites 46 | 47 | This library needs Svelte 3 or Svelte 4. 48 | 49 | # Installation 50 | 51 | ```shell 52 | npm install -D svelte-preprocess-delegate-events 53 | ``` 54 | 55 | # Usage 56 | 57 | After installation, add this as a Svelte preprocessor. 58 | 59 | ```js 60 | // svelte.config.js 61 | import delegateEvents from "svelte-preprocess-delegate-events/preprocess"; 62 | 63 | const config = { 64 | // Add this preprocessor at the end of the array. 65 | preprocess: [delegateEvents()], 66 | }; 67 | 68 | export default config; 69 | ``` 70 | 71 | # Integration with svelte-check 72 | 73 | If you want to use `svelte-check`, create `svelte-jsx.d.ts` at the project root and update `[tj]sconfig.json`. 74 | 75 | **svelte-jsx.d.ts** 76 | ```ts 77 | declare namespace svelteHTML { 78 | /** 79 | * base: https://github.com/sveltejs/language-tools/blob/651db67858d18ace44d000d263ac57ed5590ea05/packages/svelte2tsx/svelte-jsx.d.ts#L42 80 | */ 81 | type HTMLProps = 82 | Omit< 83 | Omit>> & EventsWithColon>, 84 | keyof Override 85 | > & Override & (Record<'on:*', (event: Event & { currentTarget: EventTarget & EventTarget }) => any | never> | object); 86 | } 87 | ``` 88 | 89 | **[tj]sconfig.json** 90 | ```diff 91 | { 92 | + "include": ["./svelte-jsx.d.ts"] 93 | } 94 | ``` 95 | 96 | # How the Preprocessor Works? 97 | 98 | This chapter explains how the preprocessor functions. The preprocessor operates differently for Elements and Components. 99 | 100 | ## Element 101 | 102 | Consider the following simple example: 103 | 104 | ```svelte 105 | 106 | 109 | console.log('clicked!')} /> 110 | 111 | 112 | 113 | ``` 114 | 115 | Svelte executes events registered in `component.$$.callbacks` when an event is triggered in a child component. In the example above, `component.$$.callbacks` is as follows: 116 | ```js 117 | component.$$.callbacks = { 118 | click: () => console.log('clicked!') 119 | } 120 | ``` 121 | 122 | This preprocessor adds a process to listen for events registered in `component.$$.callbacks` for elements with `on:*`. After preprocessing, Child.svelte looks like this: 123 | ```svelte 124 | 125 | 132 | 133 | 134 | ``` 135 | NOTE: The reason for binding ` 157 | ``` 158 | 159 | If you are using `on:*` in `Child.svelte`, you need to forward all events from `GrandChild` to `Parent`. However, `Child` does not know what events are coming from `GrandChild`, so you need to do something. Specifically, when `GrandChild` triggers an event, it will refer to `component.$$.callbacks` to run its event handlers. By proxying `component.$$.callbacks`, you will know which events have been forwarded. Forwarded events can be communicated to the parent component so that the `Parent` component can handle the event. 160 | 161 | After preprocessing, it looks like this: 162 | ```svelte 163 | 164 | 173 | 174 | 175 | ``` 176 | 177 | # Note 178 | 179 | `on:*` does not support specifying event handlers directly because a useful use case could not be found. If you have a useful use case, please create a new issue. 180 | 181 | ```svelte 182 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | ``` 195 | 196 | # For Svelte 5 Users 197 | 198 | For Svelte 5, event forwarding is natively supported.🎉 199 | 200 | https://svelte-5-preview.vercel.app/docs/event-handlers#bubbling-events 201 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-preprocess-delegate-events", 3 | "version": "0.4.4", 4 | "description": "You can delegate events by on:* 🎉", 5 | "type": "module", 6 | "repository": { 7 | "type": "git", 8 | "url": "git+https://github.com/baseballyama/svelte-preprocess-delegate-events.git" 9 | }, 10 | "keywords": [ 11 | "preprocessor", 12 | "svelte", 13 | "sveltejs" 14 | ], 15 | "author": "baseballyama", 16 | "license": "MIT", 17 | "bugs": { 18 | "url": "https://github.com/baseballyama/svelte-preprocess-delegate-events/issues" 19 | }, 20 | "homepage": "https://github.com/baseballyama/svelte-preprocess-delegate-events#readme", 21 | "files": [ 22 | "preprocess/*", 23 | "runtime/*", 24 | "index.d.ts", 25 | "src/*", 26 | "!/**/test", 27 | "!/**/spec" 28 | ], 29 | "exports": { 30 | ".": { 31 | "types": "./index.d.ts", 32 | "default": "./src/index.js" 33 | }, 34 | "./package.json": "./package.json", 35 | "./preprocess": "./src/preprocess/index.js", 36 | "./runtime": "./src/runtime/index.js" 37 | }, 38 | "main": "./src/index.js", 39 | "types": "./index.d.ts", 40 | "scripts": { 41 | "format:check": "prettier --cache --check .", 42 | "format:fix": "prettier --cache --write .", 43 | "publish:check": "publint", 44 | "test": "vitest run", 45 | "test:watch": "vitest", 46 | "test:types": "svelte-check --tsconfig ./tsconfig.json", 47 | "test:all": "pnpm format:check && pnpm test && pnpm test:types && pnpm publish:check", 48 | "test:coverage": "vitest run --coverage", 49 | "type:gen": "rm -rf ./preprocess && rm -rf ./runtime && tsc -p tsconfig.build.json", 50 | "update:version": "changeset version", 51 | "release": "changeset publish" 52 | }, 53 | "devDependencies": { 54 | "@changesets/changelog-github": "0.5.1", 55 | "@changesets/cli": "2.27.12", 56 | "@types/estree": "1.0.7", 57 | "@vitest/coverage-v8": "0.34.6", 58 | "estree-walker": "3.0.3", 59 | "prettier": "3.3.3", 60 | "publint": "0.2.12", 61 | "svelte-check": "3.8.6", 62 | "typescript": "5.1.6", 63 | "vitest": "0.34.6" 64 | }, 65 | "engines": { 66 | "node": ">=16.0.0", 67 | "pnpm": "8" 68 | }, 69 | "dependencies": { 70 | "magic-string": "0.30.17", 71 | "svelte": "4.2.20", 72 | "svelte-parse-markup": "0.1.5" 73 | }, 74 | "peerDependencies": { 75 | "svelte": ">=3 <5" 76 | }, 77 | "packageManager": "pnpm@8.15.9" 78 | } 79 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | magic-string: 9 | specifier: 0.30.17 10 | version: 0.30.17 11 | svelte: 12 | specifier: 4.2.20 13 | version: 4.2.20 14 | svelte-parse-markup: 15 | specifier: 0.1.5 16 | version: 0.1.5(svelte@4.2.20) 17 | 18 | devDependencies: 19 | '@changesets/changelog-github': 20 | specifier: 0.5.1 21 | version: 0.5.1 22 | '@changesets/cli': 23 | specifier: 2.27.12 24 | version: 2.27.12 25 | '@types/estree': 26 | specifier: 1.0.7 27 | version: 1.0.7 28 | '@vitest/coverage-v8': 29 | specifier: 0.34.6 30 | version: 0.34.6(vitest@0.34.6) 31 | estree-walker: 32 | specifier: 3.0.3 33 | version: 3.0.3 34 | prettier: 35 | specifier: 3.3.3 36 | version: 3.3.3 37 | publint: 38 | specifier: 0.2.12 39 | version: 0.2.12 40 | svelte-check: 41 | specifier: 3.8.6 42 | version: 3.8.6(svelte@4.2.20) 43 | typescript: 44 | specifier: 5.1.6 45 | version: 5.1.6 46 | vitest: 47 | specifier: 0.34.6 48 | version: 0.34.6 49 | 50 | packages: 51 | 52 | /@ampproject/remapping@2.3.0: 53 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 54 | engines: {node: '>=6.0.0'} 55 | dependencies: 56 | '@jridgewell/gen-mapping': 0.3.8 57 | '@jridgewell/trace-mapping': 0.3.25 58 | 59 | /@babel/runtime@7.26.0: 60 | resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} 61 | engines: {node: '>=6.9.0'} 62 | dependencies: 63 | regenerator-runtime: 0.14.1 64 | dev: true 65 | 66 | /@bcoe/v8-coverage@0.2.3: 67 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 68 | dev: true 69 | 70 | /@changesets/apply-release-plan@7.0.8: 71 | resolution: {integrity: sha512-qjMUj4DYQ1Z6qHawsn7S71SujrExJ+nceyKKyI9iB+M5p9lCL55afuEd6uLBPRpLGWQwkwvWegDHtwHJb1UjpA==} 72 | dependencies: 73 | '@changesets/config': 3.0.5 74 | '@changesets/get-version-range-type': 0.4.0 75 | '@changesets/git': 3.0.2 76 | '@changesets/should-skip-package': 0.1.1 77 | '@changesets/types': 6.0.0 78 | '@manypkg/get-packages': 1.1.3 79 | detect-indent: 6.1.0 80 | fs-extra: 7.0.1 81 | lodash.startcase: 4.4.0 82 | outdent: 0.5.0 83 | prettier: 2.8.8 84 | resolve-from: 5.0.0 85 | semver: 7.6.3 86 | dev: true 87 | 88 | /@changesets/assemble-release-plan@6.0.5: 89 | resolution: {integrity: sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==} 90 | dependencies: 91 | '@changesets/errors': 0.2.0 92 | '@changesets/get-dependents-graph': 2.1.2 93 | '@changesets/should-skip-package': 0.1.1 94 | '@changesets/types': 6.0.0 95 | '@manypkg/get-packages': 1.1.3 96 | semver: 7.6.3 97 | dev: true 98 | 99 | /@changesets/changelog-git@0.2.0: 100 | resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} 101 | dependencies: 102 | '@changesets/types': 6.0.0 103 | dev: true 104 | 105 | /@changesets/changelog-github@0.5.1: 106 | resolution: {integrity: sha512-BVuHtF+hrhUScSoHnJwTELB4/INQxVFc+P/Qdt20BLiBFIHFJDDUaGsZw+8fQeJTRP5hJZrzpt3oZWh0G19rAQ==} 107 | dependencies: 108 | '@changesets/get-github-info': 0.6.0 109 | '@changesets/types': 6.1.0 110 | dotenv: 8.6.0 111 | transitivePeerDependencies: 112 | - encoding 113 | dev: true 114 | 115 | /@changesets/cli@2.27.12: 116 | resolution: {integrity: sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==} 117 | hasBin: true 118 | dependencies: 119 | '@changesets/apply-release-plan': 7.0.8 120 | '@changesets/assemble-release-plan': 6.0.5 121 | '@changesets/changelog-git': 0.2.0 122 | '@changesets/config': 3.0.5 123 | '@changesets/errors': 0.2.0 124 | '@changesets/get-dependents-graph': 2.1.2 125 | '@changesets/get-release-plan': 4.0.6 126 | '@changesets/git': 3.0.2 127 | '@changesets/logger': 0.1.1 128 | '@changesets/pre': 2.0.1 129 | '@changesets/read': 0.6.2 130 | '@changesets/should-skip-package': 0.1.1 131 | '@changesets/types': 6.0.0 132 | '@changesets/write': 0.3.2 133 | '@manypkg/get-packages': 1.1.3 134 | ansi-colors: 4.1.3 135 | ci-info: 3.9.0 136 | enquirer: 2.4.1 137 | external-editor: 3.1.0 138 | fs-extra: 7.0.1 139 | mri: 1.2.0 140 | p-limit: 2.3.0 141 | package-manager-detector: 0.2.8 142 | picocolors: 1.1.1 143 | resolve-from: 5.0.0 144 | semver: 7.6.3 145 | spawndamnit: 3.0.1 146 | term-size: 2.2.1 147 | dev: true 148 | 149 | /@changesets/config@3.0.5: 150 | resolution: {integrity: sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ==} 151 | dependencies: 152 | '@changesets/errors': 0.2.0 153 | '@changesets/get-dependents-graph': 2.1.2 154 | '@changesets/logger': 0.1.1 155 | '@changesets/types': 6.0.0 156 | '@manypkg/get-packages': 1.1.3 157 | fs-extra: 7.0.1 158 | micromatch: 4.0.8 159 | dev: true 160 | 161 | /@changesets/errors@0.2.0: 162 | resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} 163 | dependencies: 164 | extendable-error: 0.1.7 165 | dev: true 166 | 167 | /@changesets/get-dependents-graph@2.1.2: 168 | resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} 169 | dependencies: 170 | '@changesets/types': 6.0.0 171 | '@manypkg/get-packages': 1.1.3 172 | picocolors: 1.1.1 173 | semver: 7.6.3 174 | dev: true 175 | 176 | /@changesets/get-github-info@0.6.0: 177 | resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} 178 | dependencies: 179 | dataloader: 1.4.0 180 | node-fetch: 2.7.0 181 | transitivePeerDependencies: 182 | - encoding 183 | dev: true 184 | 185 | /@changesets/get-release-plan@4.0.6: 186 | resolution: {integrity: sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w==} 187 | dependencies: 188 | '@changesets/assemble-release-plan': 6.0.5 189 | '@changesets/config': 3.0.5 190 | '@changesets/pre': 2.0.1 191 | '@changesets/read': 0.6.2 192 | '@changesets/types': 6.0.0 193 | '@manypkg/get-packages': 1.1.3 194 | dev: true 195 | 196 | /@changesets/get-version-range-type@0.4.0: 197 | resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} 198 | dev: true 199 | 200 | /@changesets/git@3.0.2: 201 | resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==} 202 | dependencies: 203 | '@changesets/errors': 0.2.0 204 | '@manypkg/get-packages': 1.1.3 205 | is-subdir: 1.2.0 206 | micromatch: 4.0.8 207 | spawndamnit: 3.0.1 208 | dev: true 209 | 210 | /@changesets/logger@0.1.1: 211 | resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} 212 | dependencies: 213 | picocolors: 1.1.1 214 | dev: true 215 | 216 | /@changesets/parse@0.4.0: 217 | resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} 218 | dependencies: 219 | '@changesets/types': 6.0.0 220 | js-yaml: 3.14.1 221 | dev: true 222 | 223 | /@changesets/pre@2.0.1: 224 | resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} 225 | dependencies: 226 | '@changesets/errors': 0.2.0 227 | '@changesets/types': 6.0.0 228 | '@manypkg/get-packages': 1.1.3 229 | fs-extra: 7.0.1 230 | dev: true 231 | 232 | /@changesets/read@0.6.2: 233 | resolution: {integrity: sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==} 234 | dependencies: 235 | '@changesets/git': 3.0.2 236 | '@changesets/logger': 0.1.1 237 | '@changesets/parse': 0.4.0 238 | '@changesets/types': 6.0.0 239 | fs-extra: 7.0.1 240 | p-filter: 2.1.0 241 | picocolors: 1.1.1 242 | dev: true 243 | 244 | /@changesets/should-skip-package@0.1.1: 245 | resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} 246 | dependencies: 247 | '@changesets/types': 6.0.0 248 | '@manypkg/get-packages': 1.1.3 249 | dev: true 250 | 251 | /@changesets/types@4.1.0: 252 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} 253 | dev: true 254 | 255 | /@changesets/types@6.0.0: 256 | resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} 257 | dev: true 258 | 259 | /@changesets/types@6.1.0: 260 | resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} 261 | dev: true 262 | 263 | /@changesets/write@0.3.2: 264 | resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} 265 | dependencies: 266 | '@changesets/types': 6.0.0 267 | fs-extra: 7.0.1 268 | human-id: 1.0.2 269 | prettier: 2.8.8 270 | dev: true 271 | 272 | /@esbuild/aix-ppc64@0.21.5: 273 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 274 | engines: {node: '>=12'} 275 | cpu: [ppc64] 276 | os: [aix] 277 | requiresBuild: true 278 | dev: true 279 | optional: true 280 | 281 | /@esbuild/android-arm64@0.21.5: 282 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 283 | engines: {node: '>=12'} 284 | cpu: [arm64] 285 | os: [android] 286 | requiresBuild: true 287 | dev: true 288 | optional: true 289 | 290 | /@esbuild/android-arm@0.21.5: 291 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 292 | engines: {node: '>=12'} 293 | cpu: [arm] 294 | os: [android] 295 | requiresBuild: true 296 | dev: true 297 | optional: true 298 | 299 | /@esbuild/android-x64@0.21.5: 300 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 301 | engines: {node: '>=12'} 302 | cpu: [x64] 303 | os: [android] 304 | requiresBuild: true 305 | dev: true 306 | optional: true 307 | 308 | /@esbuild/darwin-arm64@0.21.5: 309 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 310 | engines: {node: '>=12'} 311 | cpu: [arm64] 312 | os: [darwin] 313 | requiresBuild: true 314 | dev: true 315 | optional: true 316 | 317 | /@esbuild/darwin-x64@0.21.5: 318 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 319 | engines: {node: '>=12'} 320 | cpu: [x64] 321 | os: [darwin] 322 | requiresBuild: true 323 | dev: true 324 | optional: true 325 | 326 | /@esbuild/freebsd-arm64@0.21.5: 327 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 328 | engines: {node: '>=12'} 329 | cpu: [arm64] 330 | os: [freebsd] 331 | requiresBuild: true 332 | dev: true 333 | optional: true 334 | 335 | /@esbuild/freebsd-x64@0.21.5: 336 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 337 | engines: {node: '>=12'} 338 | cpu: [x64] 339 | os: [freebsd] 340 | requiresBuild: true 341 | dev: true 342 | optional: true 343 | 344 | /@esbuild/linux-arm64@0.21.5: 345 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 346 | engines: {node: '>=12'} 347 | cpu: [arm64] 348 | os: [linux] 349 | requiresBuild: true 350 | dev: true 351 | optional: true 352 | 353 | /@esbuild/linux-arm@0.21.5: 354 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 355 | engines: {node: '>=12'} 356 | cpu: [arm] 357 | os: [linux] 358 | requiresBuild: true 359 | dev: true 360 | optional: true 361 | 362 | /@esbuild/linux-ia32@0.21.5: 363 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 364 | engines: {node: '>=12'} 365 | cpu: [ia32] 366 | os: [linux] 367 | requiresBuild: true 368 | dev: true 369 | optional: true 370 | 371 | /@esbuild/linux-loong64@0.21.5: 372 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 373 | engines: {node: '>=12'} 374 | cpu: [loong64] 375 | os: [linux] 376 | requiresBuild: true 377 | dev: true 378 | optional: true 379 | 380 | /@esbuild/linux-mips64el@0.21.5: 381 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 382 | engines: {node: '>=12'} 383 | cpu: [mips64el] 384 | os: [linux] 385 | requiresBuild: true 386 | dev: true 387 | optional: true 388 | 389 | /@esbuild/linux-ppc64@0.21.5: 390 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 391 | engines: {node: '>=12'} 392 | cpu: [ppc64] 393 | os: [linux] 394 | requiresBuild: true 395 | dev: true 396 | optional: true 397 | 398 | /@esbuild/linux-riscv64@0.21.5: 399 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 400 | engines: {node: '>=12'} 401 | cpu: [riscv64] 402 | os: [linux] 403 | requiresBuild: true 404 | dev: true 405 | optional: true 406 | 407 | /@esbuild/linux-s390x@0.21.5: 408 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 409 | engines: {node: '>=12'} 410 | cpu: [s390x] 411 | os: [linux] 412 | requiresBuild: true 413 | dev: true 414 | optional: true 415 | 416 | /@esbuild/linux-x64@0.21.5: 417 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 418 | engines: {node: '>=12'} 419 | cpu: [x64] 420 | os: [linux] 421 | requiresBuild: true 422 | dev: true 423 | optional: true 424 | 425 | /@esbuild/netbsd-x64@0.21.5: 426 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 427 | engines: {node: '>=12'} 428 | cpu: [x64] 429 | os: [netbsd] 430 | requiresBuild: true 431 | dev: true 432 | optional: true 433 | 434 | /@esbuild/openbsd-x64@0.21.5: 435 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 436 | engines: {node: '>=12'} 437 | cpu: [x64] 438 | os: [openbsd] 439 | requiresBuild: true 440 | dev: true 441 | optional: true 442 | 443 | /@esbuild/sunos-x64@0.21.5: 444 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 445 | engines: {node: '>=12'} 446 | cpu: [x64] 447 | os: [sunos] 448 | requiresBuild: true 449 | dev: true 450 | optional: true 451 | 452 | /@esbuild/win32-arm64@0.21.5: 453 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 454 | engines: {node: '>=12'} 455 | cpu: [arm64] 456 | os: [win32] 457 | requiresBuild: true 458 | dev: true 459 | optional: true 460 | 461 | /@esbuild/win32-ia32@0.21.5: 462 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 463 | engines: {node: '>=12'} 464 | cpu: [ia32] 465 | os: [win32] 466 | requiresBuild: true 467 | dev: true 468 | optional: true 469 | 470 | /@esbuild/win32-x64@0.21.5: 471 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 472 | engines: {node: '>=12'} 473 | cpu: [x64] 474 | os: [win32] 475 | requiresBuild: true 476 | dev: true 477 | optional: true 478 | 479 | /@istanbuljs/schema@0.1.3: 480 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 481 | engines: {node: '>=8'} 482 | dev: true 483 | 484 | /@jest/schemas@29.6.3: 485 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 486 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 487 | dependencies: 488 | '@sinclair/typebox': 0.27.8 489 | dev: true 490 | 491 | /@jridgewell/gen-mapping@0.3.8: 492 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 493 | engines: {node: '>=6.0.0'} 494 | dependencies: 495 | '@jridgewell/set-array': 1.2.1 496 | '@jridgewell/sourcemap-codec': 1.5.0 497 | '@jridgewell/trace-mapping': 0.3.25 498 | 499 | /@jridgewell/resolve-uri@3.1.2: 500 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 501 | engines: {node: '>=6.0.0'} 502 | 503 | /@jridgewell/set-array@1.2.1: 504 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 505 | engines: {node: '>=6.0.0'} 506 | 507 | /@jridgewell/sourcemap-codec@1.5.0: 508 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 509 | 510 | /@jridgewell/trace-mapping@0.3.25: 511 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 512 | dependencies: 513 | '@jridgewell/resolve-uri': 3.1.2 514 | '@jridgewell/sourcemap-codec': 1.5.0 515 | 516 | /@manypkg/find-root@1.1.0: 517 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 518 | dependencies: 519 | '@babel/runtime': 7.26.0 520 | '@types/node': 12.20.55 521 | find-up: 4.1.0 522 | fs-extra: 8.1.0 523 | dev: true 524 | 525 | /@manypkg/get-packages@1.1.3: 526 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} 527 | dependencies: 528 | '@babel/runtime': 7.26.0 529 | '@changesets/types': 4.1.0 530 | '@manypkg/find-root': 1.1.0 531 | fs-extra: 8.1.0 532 | globby: 11.1.0 533 | read-yaml-file: 1.1.0 534 | dev: true 535 | 536 | /@nodelib/fs.scandir@2.1.5: 537 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 538 | engines: {node: '>= 8'} 539 | dependencies: 540 | '@nodelib/fs.stat': 2.0.5 541 | run-parallel: 1.2.0 542 | dev: true 543 | 544 | /@nodelib/fs.stat@2.0.5: 545 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 546 | engines: {node: '>= 8'} 547 | dev: true 548 | 549 | /@nodelib/fs.walk@1.2.8: 550 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 551 | engines: {node: '>= 8'} 552 | dependencies: 553 | '@nodelib/fs.scandir': 2.1.5 554 | fastq: 1.18.0 555 | dev: true 556 | 557 | /@rollup/rollup-android-arm-eabi@4.30.1: 558 | resolution: {integrity: sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==} 559 | cpu: [arm] 560 | os: [android] 561 | requiresBuild: true 562 | dev: true 563 | optional: true 564 | 565 | /@rollup/rollup-android-arm64@4.30.1: 566 | resolution: {integrity: sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==} 567 | cpu: [arm64] 568 | os: [android] 569 | requiresBuild: true 570 | dev: true 571 | optional: true 572 | 573 | /@rollup/rollup-darwin-arm64@4.30.1: 574 | resolution: {integrity: sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==} 575 | cpu: [arm64] 576 | os: [darwin] 577 | requiresBuild: true 578 | dev: true 579 | optional: true 580 | 581 | /@rollup/rollup-darwin-x64@4.30.1: 582 | resolution: {integrity: sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==} 583 | cpu: [x64] 584 | os: [darwin] 585 | requiresBuild: true 586 | dev: true 587 | optional: true 588 | 589 | /@rollup/rollup-freebsd-arm64@4.30.1: 590 | resolution: {integrity: sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==} 591 | cpu: [arm64] 592 | os: [freebsd] 593 | requiresBuild: true 594 | dev: true 595 | optional: true 596 | 597 | /@rollup/rollup-freebsd-x64@4.30.1: 598 | resolution: {integrity: sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==} 599 | cpu: [x64] 600 | os: [freebsd] 601 | requiresBuild: true 602 | dev: true 603 | optional: true 604 | 605 | /@rollup/rollup-linux-arm-gnueabihf@4.30.1: 606 | resolution: {integrity: sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==} 607 | cpu: [arm] 608 | os: [linux] 609 | requiresBuild: true 610 | dev: true 611 | optional: true 612 | 613 | /@rollup/rollup-linux-arm-musleabihf@4.30.1: 614 | resolution: {integrity: sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==} 615 | cpu: [arm] 616 | os: [linux] 617 | requiresBuild: true 618 | dev: true 619 | optional: true 620 | 621 | /@rollup/rollup-linux-arm64-gnu@4.30.1: 622 | resolution: {integrity: sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==} 623 | cpu: [arm64] 624 | os: [linux] 625 | requiresBuild: true 626 | dev: true 627 | optional: true 628 | 629 | /@rollup/rollup-linux-arm64-musl@4.30.1: 630 | resolution: {integrity: sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==} 631 | cpu: [arm64] 632 | os: [linux] 633 | requiresBuild: true 634 | dev: true 635 | optional: true 636 | 637 | /@rollup/rollup-linux-loongarch64-gnu@4.30.1: 638 | resolution: {integrity: sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==} 639 | cpu: [loong64] 640 | os: [linux] 641 | requiresBuild: true 642 | dev: true 643 | optional: true 644 | 645 | /@rollup/rollup-linux-powerpc64le-gnu@4.30.1: 646 | resolution: {integrity: sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==} 647 | cpu: [ppc64] 648 | os: [linux] 649 | requiresBuild: true 650 | dev: true 651 | optional: true 652 | 653 | /@rollup/rollup-linux-riscv64-gnu@4.30.1: 654 | resolution: {integrity: sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==} 655 | cpu: [riscv64] 656 | os: [linux] 657 | requiresBuild: true 658 | dev: true 659 | optional: true 660 | 661 | /@rollup/rollup-linux-s390x-gnu@4.30.1: 662 | resolution: {integrity: sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==} 663 | cpu: [s390x] 664 | os: [linux] 665 | requiresBuild: true 666 | dev: true 667 | optional: true 668 | 669 | /@rollup/rollup-linux-x64-gnu@4.30.1: 670 | resolution: {integrity: sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==} 671 | cpu: [x64] 672 | os: [linux] 673 | requiresBuild: true 674 | dev: true 675 | optional: true 676 | 677 | /@rollup/rollup-linux-x64-musl@4.30.1: 678 | resolution: {integrity: sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==} 679 | cpu: [x64] 680 | os: [linux] 681 | requiresBuild: true 682 | dev: true 683 | optional: true 684 | 685 | /@rollup/rollup-win32-arm64-msvc@4.30.1: 686 | resolution: {integrity: sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==} 687 | cpu: [arm64] 688 | os: [win32] 689 | requiresBuild: true 690 | dev: true 691 | optional: true 692 | 693 | /@rollup/rollup-win32-ia32-msvc@4.30.1: 694 | resolution: {integrity: sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==} 695 | cpu: [ia32] 696 | os: [win32] 697 | requiresBuild: true 698 | dev: true 699 | optional: true 700 | 701 | /@rollup/rollup-win32-x64-msvc@4.30.1: 702 | resolution: {integrity: sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==} 703 | cpu: [x64] 704 | os: [win32] 705 | requiresBuild: true 706 | dev: true 707 | optional: true 708 | 709 | /@sinclair/typebox@0.27.8: 710 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 711 | dev: true 712 | 713 | /@types/chai-subset@1.3.5: 714 | resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} 715 | dependencies: 716 | '@types/chai': 4.3.20 717 | dev: true 718 | 719 | /@types/chai@4.3.20: 720 | resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} 721 | dev: true 722 | 723 | /@types/estree@1.0.6: 724 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 725 | dev: true 726 | 727 | /@types/estree@1.0.7: 728 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 729 | 730 | /@types/istanbul-lib-coverage@2.0.6: 731 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 732 | dev: true 733 | 734 | /@types/node@12.20.55: 735 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 736 | dev: true 737 | 738 | /@types/node@22.10.7: 739 | resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==} 740 | dependencies: 741 | undici-types: 6.20.0 742 | dev: true 743 | 744 | /@types/pug@2.0.10: 745 | resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} 746 | dev: true 747 | 748 | /@vitest/coverage-v8@0.34.6(vitest@0.34.6): 749 | resolution: {integrity: sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw==} 750 | peerDependencies: 751 | vitest: '>=0.32.0 <1' 752 | dependencies: 753 | '@ampproject/remapping': 2.3.0 754 | '@bcoe/v8-coverage': 0.2.3 755 | istanbul-lib-coverage: 3.2.2 756 | istanbul-lib-report: 3.0.1 757 | istanbul-lib-source-maps: 4.0.1 758 | istanbul-reports: 3.1.7 759 | magic-string: 0.30.17 760 | picocolors: 1.1.1 761 | std-env: 3.8.0 762 | test-exclude: 6.0.0 763 | v8-to-istanbul: 9.3.0 764 | vitest: 0.34.6 765 | transitivePeerDependencies: 766 | - supports-color 767 | dev: true 768 | 769 | /@vitest/expect@0.34.6: 770 | resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} 771 | dependencies: 772 | '@vitest/spy': 0.34.6 773 | '@vitest/utils': 0.34.6 774 | chai: 4.5.0 775 | dev: true 776 | 777 | /@vitest/runner@0.34.6: 778 | resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} 779 | dependencies: 780 | '@vitest/utils': 0.34.6 781 | p-limit: 4.0.0 782 | pathe: 1.1.2 783 | dev: true 784 | 785 | /@vitest/snapshot@0.34.6: 786 | resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} 787 | dependencies: 788 | magic-string: 0.30.17 789 | pathe: 1.1.2 790 | pretty-format: 29.7.0 791 | dev: true 792 | 793 | /@vitest/spy@0.34.6: 794 | resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} 795 | dependencies: 796 | tinyspy: 2.2.1 797 | dev: true 798 | 799 | /@vitest/utils@0.34.6: 800 | resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} 801 | dependencies: 802 | diff-sequences: 29.6.3 803 | loupe: 2.3.7 804 | pretty-format: 29.7.0 805 | dev: true 806 | 807 | /acorn-walk@8.3.4: 808 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 809 | engines: {node: '>=0.4.0'} 810 | dependencies: 811 | acorn: 8.14.0 812 | dev: true 813 | 814 | /acorn@8.14.0: 815 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 816 | engines: {node: '>=0.4.0'} 817 | hasBin: true 818 | 819 | /ansi-colors@4.1.3: 820 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 821 | engines: {node: '>=6'} 822 | dev: true 823 | 824 | /ansi-regex@5.0.1: 825 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 826 | engines: {node: '>=8'} 827 | dev: true 828 | 829 | /ansi-styles@5.2.0: 830 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 831 | engines: {node: '>=10'} 832 | dev: true 833 | 834 | /anymatch@3.1.3: 835 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 836 | engines: {node: '>= 8'} 837 | dependencies: 838 | normalize-path: 3.0.0 839 | picomatch: 2.3.1 840 | dev: true 841 | 842 | /argparse@1.0.10: 843 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 844 | dependencies: 845 | sprintf-js: 1.0.3 846 | dev: true 847 | 848 | /aria-query@5.3.2: 849 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 850 | engines: {node: '>= 0.4'} 851 | 852 | /array-union@2.1.0: 853 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 854 | engines: {node: '>=8'} 855 | dev: true 856 | 857 | /assertion-error@1.1.0: 858 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 859 | dev: true 860 | 861 | /axobject-query@4.1.0: 862 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 863 | engines: {node: '>= 0.4'} 864 | 865 | /balanced-match@1.0.2: 866 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 867 | dev: true 868 | 869 | /better-path-resolve@1.0.0: 870 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} 871 | engines: {node: '>=4'} 872 | dependencies: 873 | is-windows: 1.0.2 874 | dev: true 875 | 876 | /binary-extensions@2.3.0: 877 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 878 | engines: {node: '>=8'} 879 | dev: true 880 | 881 | /brace-expansion@1.1.11: 882 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 883 | dependencies: 884 | balanced-match: 1.0.2 885 | concat-map: 0.0.1 886 | dev: true 887 | 888 | /brace-expansion@2.0.1: 889 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 890 | dependencies: 891 | balanced-match: 1.0.2 892 | dev: true 893 | 894 | /braces@3.0.3: 895 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 896 | engines: {node: '>=8'} 897 | dependencies: 898 | fill-range: 7.1.1 899 | dev: true 900 | 901 | /buffer-crc32@1.0.0: 902 | resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} 903 | engines: {node: '>=8.0.0'} 904 | dev: true 905 | 906 | /cac@6.7.14: 907 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 908 | engines: {node: '>=8'} 909 | dev: true 910 | 911 | /chai@4.5.0: 912 | resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} 913 | engines: {node: '>=4'} 914 | dependencies: 915 | assertion-error: 1.1.0 916 | check-error: 1.0.3 917 | deep-eql: 4.1.4 918 | get-func-name: 2.0.2 919 | loupe: 2.3.7 920 | pathval: 1.1.1 921 | type-detect: 4.1.0 922 | dev: true 923 | 924 | /chardet@0.7.0: 925 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 926 | dev: true 927 | 928 | /check-error@1.0.3: 929 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 930 | dependencies: 931 | get-func-name: 2.0.2 932 | dev: true 933 | 934 | /chokidar@3.6.0: 935 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 936 | engines: {node: '>= 8.10.0'} 937 | dependencies: 938 | anymatch: 3.1.3 939 | braces: 3.0.3 940 | glob-parent: 5.1.2 941 | is-binary-path: 2.1.0 942 | is-glob: 4.0.3 943 | normalize-path: 3.0.0 944 | readdirp: 3.6.0 945 | optionalDependencies: 946 | fsevents: 2.3.3 947 | dev: true 948 | 949 | /ci-info@3.9.0: 950 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 951 | engines: {node: '>=8'} 952 | dev: true 953 | 954 | /code-red@1.0.4: 955 | resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} 956 | dependencies: 957 | '@jridgewell/sourcemap-codec': 1.5.0 958 | '@types/estree': 1.0.7 959 | acorn: 8.14.0 960 | estree-walker: 3.0.3 961 | periscopic: 3.1.0 962 | 963 | /concat-map@0.0.1: 964 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 965 | dev: true 966 | 967 | /confbox@0.1.8: 968 | resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} 969 | dev: true 970 | 971 | /convert-source-map@2.0.0: 972 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 973 | dev: true 974 | 975 | /cross-spawn@7.0.6: 976 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 977 | engines: {node: '>= 8'} 978 | dependencies: 979 | path-key: 3.1.1 980 | shebang-command: 2.0.0 981 | which: 2.0.2 982 | dev: true 983 | 984 | /css-tree@2.3.1: 985 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} 986 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} 987 | dependencies: 988 | mdn-data: 2.0.30 989 | source-map-js: 1.2.1 990 | 991 | /dataloader@1.4.0: 992 | resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} 993 | dev: true 994 | 995 | /debug@4.4.0: 996 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 997 | engines: {node: '>=6.0'} 998 | peerDependencies: 999 | supports-color: '*' 1000 | peerDependenciesMeta: 1001 | supports-color: 1002 | optional: true 1003 | dependencies: 1004 | ms: 2.1.3 1005 | dev: true 1006 | 1007 | /deep-eql@4.1.4: 1008 | resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} 1009 | engines: {node: '>=6'} 1010 | dependencies: 1011 | type-detect: 4.1.0 1012 | dev: true 1013 | 1014 | /detect-indent@6.1.0: 1015 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 1016 | engines: {node: '>=8'} 1017 | dev: true 1018 | 1019 | /diff-sequences@29.6.3: 1020 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 1021 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1022 | dev: true 1023 | 1024 | /dir-glob@3.0.1: 1025 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1026 | engines: {node: '>=8'} 1027 | dependencies: 1028 | path-type: 4.0.0 1029 | dev: true 1030 | 1031 | /dotenv@8.6.0: 1032 | resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} 1033 | engines: {node: '>=10'} 1034 | dev: true 1035 | 1036 | /enquirer@2.4.1: 1037 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 1038 | engines: {node: '>=8.6'} 1039 | dependencies: 1040 | ansi-colors: 4.1.3 1041 | strip-ansi: 6.0.1 1042 | dev: true 1043 | 1044 | /es6-promise@3.3.1: 1045 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} 1046 | dev: true 1047 | 1048 | /esbuild@0.21.5: 1049 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 1050 | engines: {node: '>=12'} 1051 | hasBin: true 1052 | requiresBuild: true 1053 | optionalDependencies: 1054 | '@esbuild/aix-ppc64': 0.21.5 1055 | '@esbuild/android-arm': 0.21.5 1056 | '@esbuild/android-arm64': 0.21.5 1057 | '@esbuild/android-x64': 0.21.5 1058 | '@esbuild/darwin-arm64': 0.21.5 1059 | '@esbuild/darwin-x64': 0.21.5 1060 | '@esbuild/freebsd-arm64': 0.21.5 1061 | '@esbuild/freebsd-x64': 0.21.5 1062 | '@esbuild/linux-arm': 0.21.5 1063 | '@esbuild/linux-arm64': 0.21.5 1064 | '@esbuild/linux-ia32': 0.21.5 1065 | '@esbuild/linux-loong64': 0.21.5 1066 | '@esbuild/linux-mips64el': 0.21.5 1067 | '@esbuild/linux-ppc64': 0.21.5 1068 | '@esbuild/linux-riscv64': 0.21.5 1069 | '@esbuild/linux-s390x': 0.21.5 1070 | '@esbuild/linux-x64': 0.21.5 1071 | '@esbuild/netbsd-x64': 0.21.5 1072 | '@esbuild/openbsd-x64': 0.21.5 1073 | '@esbuild/sunos-x64': 0.21.5 1074 | '@esbuild/win32-arm64': 0.21.5 1075 | '@esbuild/win32-ia32': 0.21.5 1076 | '@esbuild/win32-x64': 0.21.5 1077 | dev: true 1078 | 1079 | /esprima@4.0.1: 1080 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1081 | engines: {node: '>=4'} 1082 | hasBin: true 1083 | dev: true 1084 | 1085 | /estree-walker@3.0.3: 1086 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1087 | dependencies: 1088 | '@types/estree': 1.0.7 1089 | 1090 | /extendable-error@0.1.7: 1091 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} 1092 | dev: true 1093 | 1094 | /external-editor@3.1.0: 1095 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 1096 | engines: {node: '>=4'} 1097 | dependencies: 1098 | chardet: 0.7.0 1099 | iconv-lite: 0.4.24 1100 | tmp: 0.0.33 1101 | dev: true 1102 | 1103 | /fast-glob@3.3.3: 1104 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1105 | engines: {node: '>=8.6.0'} 1106 | dependencies: 1107 | '@nodelib/fs.stat': 2.0.5 1108 | '@nodelib/fs.walk': 1.2.8 1109 | glob-parent: 5.1.2 1110 | merge2: 1.4.1 1111 | micromatch: 4.0.8 1112 | dev: true 1113 | 1114 | /fastq@1.18.0: 1115 | resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} 1116 | dependencies: 1117 | reusify: 1.0.4 1118 | dev: true 1119 | 1120 | /fill-range@7.1.1: 1121 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1122 | engines: {node: '>=8'} 1123 | dependencies: 1124 | to-regex-range: 5.0.1 1125 | dev: true 1126 | 1127 | /find-up@4.1.0: 1128 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1129 | engines: {node: '>=8'} 1130 | dependencies: 1131 | locate-path: 5.0.0 1132 | path-exists: 4.0.0 1133 | dev: true 1134 | 1135 | /fs-extra@7.0.1: 1136 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 1137 | engines: {node: '>=6 <7 || >=8'} 1138 | dependencies: 1139 | graceful-fs: 4.2.11 1140 | jsonfile: 4.0.0 1141 | universalify: 0.1.2 1142 | dev: true 1143 | 1144 | /fs-extra@8.1.0: 1145 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 1146 | engines: {node: '>=6 <7 || >=8'} 1147 | dependencies: 1148 | graceful-fs: 4.2.11 1149 | jsonfile: 4.0.0 1150 | universalify: 0.1.2 1151 | dev: true 1152 | 1153 | /fs.realpath@1.0.0: 1154 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1155 | dev: true 1156 | 1157 | /fsevents@2.3.3: 1158 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1159 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1160 | os: [darwin] 1161 | requiresBuild: true 1162 | dev: true 1163 | optional: true 1164 | 1165 | /get-func-name@2.0.2: 1166 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 1167 | dev: true 1168 | 1169 | /glob-parent@5.1.2: 1170 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1171 | engines: {node: '>= 6'} 1172 | dependencies: 1173 | is-glob: 4.0.3 1174 | dev: true 1175 | 1176 | /glob@7.2.3: 1177 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1178 | deprecated: Glob versions prior to v9 are no longer supported 1179 | dependencies: 1180 | fs.realpath: 1.0.0 1181 | inflight: 1.0.6 1182 | inherits: 2.0.4 1183 | minimatch: 3.1.2 1184 | once: 1.4.0 1185 | path-is-absolute: 1.0.1 1186 | dev: true 1187 | 1188 | /glob@8.1.0: 1189 | resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} 1190 | engines: {node: '>=12'} 1191 | deprecated: Glob versions prior to v9 are no longer supported 1192 | dependencies: 1193 | fs.realpath: 1.0.0 1194 | inflight: 1.0.6 1195 | inherits: 2.0.4 1196 | minimatch: 5.1.6 1197 | once: 1.4.0 1198 | dev: true 1199 | 1200 | /globby@11.1.0: 1201 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1202 | engines: {node: '>=10'} 1203 | dependencies: 1204 | array-union: 2.1.0 1205 | dir-glob: 3.0.1 1206 | fast-glob: 3.3.3 1207 | ignore: 5.3.2 1208 | merge2: 1.4.1 1209 | slash: 3.0.0 1210 | dev: true 1211 | 1212 | /graceful-fs@4.2.11: 1213 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1214 | dev: true 1215 | 1216 | /has-flag@4.0.0: 1217 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1218 | engines: {node: '>=8'} 1219 | dev: true 1220 | 1221 | /html-escaper@2.0.2: 1222 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 1223 | dev: true 1224 | 1225 | /human-id@1.0.2: 1226 | resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} 1227 | dev: true 1228 | 1229 | /iconv-lite@0.4.24: 1230 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1231 | engines: {node: '>=0.10.0'} 1232 | dependencies: 1233 | safer-buffer: 2.1.2 1234 | dev: true 1235 | 1236 | /ignore-walk@5.0.1: 1237 | resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} 1238 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1239 | dependencies: 1240 | minimatch: 5.1.6 1241 | dev: true 1242 | 1243 | /ignore@5.3.2: 1244 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1245 | engines: {node: '>= 4'} 1246 | dev: true 1247 | 1248 | /inflight@1.0.6: 1249 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1250 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 1251 | dependencies: 1252 | once: 1.4.0 1253 | wrappy: 1.0.2 1254 | dev: true 1255 | 1256 | /inherits@2.0.4: 1257 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1258 | dev: true 1259 | 1260 | /is-binary-path@2.1.0: 1261 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1262 | engines: {node: '>=8'} 1263 | dependencies: 1264 | binary-extensions: 2.3.0 1265 | dev: true 1266 | 1267 | /is-extglob@2.1.1: 1268 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1269 | engines: {node: '>=0.10.0'} 1270 | dev: true 1271 | 1272 | /is-glob@4.0.3: 1273 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1274 | engines: {node: '>=0.10.0'} 1275 | dependencies: 1276 | is-extglob: 2.1.1 1277 | dev: true 1278 | 1279 | /is-number@7.0.0: 1280 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1281 | engines: {node: '>=0.12.0'} 1282 | dev: true 1283 | 1284 | /is-reference@3.0.3: 1285 | resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} 1286 | dependencies: 1287 | '@types/estree': 1.0.7 1288 | 1289 | /is-subdir@1.2.0: 1290 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} 1291 | engines: {node: '>=4'} 1292 | dependencies: 1293 | better-path-resolve: 1.0.0 1294 | dev: true 1295 | 1296 | /is-windows@1.0.2: 1297 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 1298 | engines: {node: '>=0.10.0'} 1299 | dev: true 1300 | 1301 | /isexe@2.0.0: 1302 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1303 | dev: true 1304 | 1305 | /istanbul-lib-coverage@3.2.2: 1306 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 1307 | engines: {node: '>=8'} 1308 | dev: true 1309 | 1310 | /istanbul-lib-report@3.0.1: 1311 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 1312 | engines: {node: '>=10'} 1313 | dependencies: 1314 | istanbul-lib-coverage: 3.2.2 1315 | make-dir: 4.0.0 1316 | supports-color: 7.2.0 1317 | dev: true 1318 | 1319 | /istanbul-lib-source-maps@4.0.1: 1320 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 1321 | engines: {node: '>=10'} 1322 | dependencies: 1323 | debug: 4.4.0 1324 | istanbul-lib-coverage: 3.2.2 1325 | source-map: 0.6.1 1326 | transitivePeerDependencies: 1327 | - supports-color 1328 | dev: true 1329 | 1330 | /istanbul-reports@3.1.7: 1331 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 1332 | engines: {node: '>=8'} 1333 | dependencies: 1334 | html-escaper: 2.0.2 1335 | istanbul-lib-report: 3.0.1 1336 | dev: true 1337 | 1338 | /js-yaml@3.14.1: 1339 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1340 | hasBin: true 1341 | dependencies: 1342 | argparse: 1.0.10 1343 | esprima: 4.0.1 1344 | dev: true 1345 | 1346 | /jsonfile@4.0.0: 1347 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1348 | optionalDependencies: 1349 | graceful-fs: 4.2.11 1350 | dev: true 1351 | 1352 | /local-pkg@0.4.3: 1353 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} 1354 | engines: {node: '>=14'} 1355 | dev: true 1356 | 1357 | /locate-character@3.0.0: 1358 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 1359 | 1360 | /locate-path@5.0.0: 1361 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1362 | engines: {node: '>=8'} 1363 | dependencies: 1364 | p-locate: 4.1.0 1365 | dev: true 1366 | 1367 | /lodash.startcase@4.4.0: 1368 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} 1369 | dev: true 1370 | 1371 | /loupe@2.3.7: 1372 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 1373 | dependencies: 1374 | get-func-name: 2.0.2 1375 | dev: true 1376 | 1377 | /magic-string@0.30.17: 1378 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 1379 | dependencies: 1380 | '@jridgewell/sourcemap-codec': 1.5.0 1381 | 1382 | /make-dir@4.0.0: 1383 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 1384 | engines: {node: '>=10'} 1385 | dependencies: 1386 | semver: 7.6.3 1387 | dev: true 1388 | 1389 | /mdn-data@2.0.30: 1390 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} 1391 | 1392 | /merge2@1.4.1: 1393 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1394 | engines: {node: '>= 8'} 1395 | dev: true 1396 | 1397 | /micromatch@4.0.8: 1398 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1399 | engines: {node: '>=8.6'} 1400 | dependencies: 1401 | braces: 3.0.3 1402 | picomatch: 2.3.1 1403 | dev: true 1404 | 1405 | /min-indent@1.0.1: 1406 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1407 | engines: {node: '>=4'} 1408 | dev: true 1409 | 1410 | /minimatch@3.1.2: 1411 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1412 | dependencies: 1413 | brace-expansion: 1.1.11 1414 | dev: true 1415 | 1416 | /minimatch@5.1.6: 1417 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 1418 | engines: {node: '>=10'} 1419 | dependencies: 1420 | brace-expansion: 2.0.1 1421 | dev: true 1422 | 1423 | /minimist@1.2.8: 1424 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1425 | dev: true 1426 | 1427 | /mkdirp@0.5.6: 1428 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 1429 | hasBin: true 1430 | dependencies: 1431 | minimist: 1.2.8 1432 | dev: true 1433 | 1434 | /mlly@1.7.4: 1435 | resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} 1436 | dependencies: 1437 | acorn: 8.14.0 1438 | pathe: 2.0.2 1439 | pkg-types: 1.3.1 1440 | ufo: 1.5.4 1441 | dev: true 1442 | 1443 | /mri@1.2.0: 1444 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1445 | engines: {node: '>=4'} 1446 | dev: true 1447 | 1448 | /ms@2.1.3: 1449 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1450 | dev: true 1451 | 1452 | /nanoid@3.3.8: 1453 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 1454 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1455 | hasBin: true 1456 | dev: true 1457 | 1458 | /node-fetch@2.7.0: 1459 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1460 | engines: {node: 4.x || >=6.0.0} 1461 | peerDependencies: 1462 | encoding: ^0.1.0 1463 | peerDependenciesMeta: 1464 | encoding: 1465 | optional: true 1466 | dependencies: 1467 | whatwg-url: 5.0.0 1468 | dev: true 1469 | 1470 | /normalize-path@3.0.0: 1471 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1472 | engines: {node: '>=0.10.0'} 1473 | dev: true 1474 | 1475 | /npm-bundled@2.0.1: 1476 | resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} 1477 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1478 | dependencies: 1479 | npm-normalize-package-bin: 2.0.0 1480 | dev: true 1481 | 1482 | /npm-normalize-package-bin@2.0.0: 1483 | resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} 1484 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1485 | dev: true 1486 | 1487 | /npm-packlist@5.1.3: 1488 | resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} 1489 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1490 | hasBin: true 1491 | dependencies: 1492 | glob: 8.1.0 1493 | ignore-walk: 5.0.1 1494 | npm-bundled: 2.0.1 1495 | npm-normalize-package-bin: 2.0.0 1496 | dev: true 1497 | 1498 | /once@1.4.0: 1499 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1500 | dependencies: 1501 | wrappy: 1.0.2 1502 | dev: true 1503 | 1504 | /os-tmpdir@1.0.2: 1505 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 1506 | engines: {node: '>=0.10.0'} 1507 | dev: true 1508 | 1509 | /outdent@0.5.0: 1510 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} 1511 | dev: true 1512 | 1513 | /p-filter@2.1.0: 1514 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 1515 | engines: {node: '>=8'} 1516 | dependencies: 1517 | p-map: 2.1.0 1518 | dev: true 1519 | 1520 | /p-limit@2.3.0: 1521 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1522 | engines: {node: '>=6'} 1523 | dependencies: 1524 | p-try: 2.2.0 1525 | dev: true 1526 | 1527 | /p-limit@4.0.0: 1528 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 1529 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1530 | dependencies: 1531 | yocto-queue: 1.1.1 1532 | dev: true 1533 | 1534 | /p-locate@4.1.0: 1535 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1536 | engines: {node: '>=8'} 1537 | dependencies: 1538 | p-limit: 2.3.0 1539 | dev: true 1540 | 1541 | /p-map@2.1.0: 1542 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 1543 | engines: {node: '>=6'} 1544 | dev: true 1545 | 1546 | /p-try@2.2.0: 1547 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1548 | engines: {node: '>=6'} 1549 | dev: true 1550 | 1551 | /package-manager-detector@0.2.8: 1552 | resolution: {integrity: sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==} 1553 | dev: true 1554 | 1555 | /path-exists@4.0.0: 1556 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1557 | engines: {node: '>=8'} 1558 | dev: true 1559 | 1560 | /path-is-absolute@1.0.1: 1561 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1562 | engines: {node: '>=0.10.0'} 1563 | dev: true 1564 | 1565 | /path-key@3.1.1: 1566 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1567 | engines: {node: '>=8'} 1568 | dev: true 1569 | 1570 | /path-type@4.0.0: 1571 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1572 | engines: {node: '>=8'} 1573 | dev: true 1574 | 1575 | /pathe@1.1.2: 1576 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 1577 | dev: true 1578 | 1579 | /pathe@2.0.2: 1580 | resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} 1581 | dev: true 1582 | 1583 | /pathval@1.1.1: 1584 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1585 | dev: true 1586 | 1587 | /periscopic@3.1.0: 1588 | resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} 1589 | dependencies: 1590 | '@types/estree': 1.0.7 1591 | estree-walker: 3.0.3 1592 | is-reference: 3.0.3 1593 | 1594 | /picocolors@1.1.1: 1595 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1596 | dev: true 1597 | 1598 | /picomatch@2.3.1: 1599 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1600 | engines: {node: '>=8.6'} 1601 | dev: true 1602 | 1603 | /pify@4.0.1: 1604 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1605 | engines: {node: '>=6'} 1606 | dev: true 1607 | 1608 | /pkg-types@1.3.1: 1609 | resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} 1610 | dependencies: 1611 | confbox: 0.1.8 1612 | mlly: 1.7.4 1613 | pathe: 2.0.2 1614 | dev: true 1615 | 1616 | /postcss@8.5.1: 1617 | resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} 1618 | engines: {node: ^10 || ^12 || >=14} 1619 | dependencies: 1620 | nanoid: 3.3.8 1621 | picocolors: 1.1.1 1622 | source-map-js: 1.2.1 1623 | dev: true 1624 | 1625 | /prettier@2.8.8: 1626 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 1627 | engines: {node: '>=10.13.0'} 1628 | hasBin: true 1629 | dev: true 1630 | 1631 | /prettier@3.3.3: 1632 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} 1633 | engines: {node: '>=14'} 1634 | hasBin: true 1635 | dev: true 1636 | 1637 | /pretty-format@29.7.0: 1638 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1639 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1640 | dependencies: 1641 | '@jest/schemas': 29.6.3 1642 | ansi-styles: 5.2.0 1643 | react-is: 18.3.1 1644 | dev: true 1645 | 1646 | /publint@0.2.12: 1647 | resolution: {integrity: sha512-YNeUtCVeM4j9nDiTT2OPczmlyzOkIXNtdDZnSuajAxS/nZ6j3t7Vs9SUB4euQNddiltIwu7Tdd3s+hr08fAsMw==} 1648 | engines: {node: '>=16'} 1649 | hasBin: true 1650 | dependencies: 1651 | npm-packlist: 5.1.3 1652 | picocolors: 1.1.1 1653 | sade: 1.8.1 1654 | dev: true 1655 | 1656 | /queue-microtask@1.2.3: 1657 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1658 | dev: true 1659 | 1660 | /react-is@18.3.1: 1661 | resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 1662 | dev: true 1663 | 1664 | /read-yaml-file@1.1.0: 1665 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} 1666 | engines: {node: '>=6'} 1667 | dependencies: 1668 | graceful-fs: 4.2.11 1669 | js-yaml: 3.14.1 1670 | pify: 4.0.1 1671 | strip-bom: 3.0.0 1672 | dev: true 1673 | 1674 | /readdirp@3.6.0: 1675 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1676 | engines: {node: '>=8.10.0'} 1677 | dependencies: 1678 | picomatch: 2.3.1 1679 | dev: true 1680 | 1681 | /regenerator-runtime@0.14.1: 1682 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1683 | dev: true 1684 | 1685 | /resolve-from@5.0.0: 1686 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1687 | engines: {node: '>=8'} 1688 | dev: true 1689 | 1690 | /reusify@1.0.4: 1691 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1692 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1693 | dev: true 1694 | 1695 | /rimraf@2.7.1: 1696 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 1697 | deprecated: Rimraf versions prior to v4 are no longer supported 1698 | hasBin: true 1699 | dependencies: 1700 | glob: 7.2.3 1701 | dev: true 1702 | 1703 | /rollup@4.30.1: 1704 | resolution: {integrity: sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==} 1705 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1706 | hasBin: true 1707 | dependencies: 1708 | '@types/estree': 1.0.6 1709 | optionalDependencies: 1710 | '@rollup/rollup-android-arm-eabi': 4.30.1 1711 | '@rollup/rollup-android-arm64': 4.30.1 1712 | '@rollup/rollup-darwin-arm64': 4.30.1 1713 | '@rollup/rollup-darwin-x64': 4.30.1 1714 | '@rollup/rollup-freebsd-arm64': 4.30.1 1715 | '@rollup/rollup-freebsd-x64': 4.30.1 1716 | '@rollup/rollup-linux-arm-gnueabihf': 4.30.1 1717 | '@rollup/rollup-linux-arm-musleabihf': 4.30.1 1718 | '@rollup/rollup-linux-arm64-gnu': 4.30.1 1719 | '@rollup/rollup-linux-arm64-musl': 4.30.1 1720 | '@rollup/rollup-linux-loongarch64-gnu': 4.30.1 1721 | '@rollup/rollup-linux-powerpc64le-gnu': 4.30.1 1722 | '@rollup/rollup-linux-riscv64-gnu': 4.30.1 1723 | '@rollup/rollup-linux-s390x-gnu': 4.30.1 1724 | '@rollup/rollup-linux-x64-gnu': 4.30.1 1725 | '@rollup/rollup-linux-x64-musl': 4.30.1 1726 | '@rollup/rollup-win32-arm64-msvc': 4.30.1 1727 | '@rollup/rollup-win32-ia32-msvc': 4.30.1 1728 | '@rollup/rollup-win32-x64-msvc': 4.30.1 1729 | fsevents: 2.3.3 1730 | dev: true 1731 | 1732 | /run-parallel@1.2.0: 1733 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1734 | dependencies: 1735 | queue-microtask: 1.2.3 1736 | dev: true 1737 | 1738 | /sade@1.8.1: 1739 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 1740 | engines: {node: '>=6'} 1741 | dependencies: 1742 | mri: 1.2.0 1743 | dev: true 1744 | 1745 | /safer-buffer@2.1.2: 1746 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1747 | dev: true 1748 | 1749 | /sander@0.5.1: 1750 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} 1751 | dependencies: 1752 | es6-promise: 3.3.1 1753 | graceful-fs: 4.2.11 1754 | mkdirp: 0.5.6 1755 | rimraf: 2.7.1 1756 | dev: true 1757 | 1758 | /semver@7.6.3: 1759 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1760 | engines: {node: '>=10'} 1761 | hasBin: true 1762 | dev: true 1763 | 1764 | /shebang-command@2.0.0: 1765 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1766 | engines: {node: '>=8'} 1767 | dependencies: 1768 | shebang-regex: 3.0.0 1769 | dev: true 1770 | 1771 | /shebang-regex@3.0.0: 1772 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1773 | engines: {node: '>=8'} 1774 | dev: true 1775 | 1776 | /siginfo@2.0.0: 1777 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1778 | dev: true 1779 | 1780 | /signal-exit@4.1.0: 1781 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1782 | engines: {node: '>=14'} 1783 | dev: true 1784 | 1785 | /slash@3.0.0: 1786 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1787 | engines: {node: '>=8'} 1788 | dev: true 1789 | 1790 | /sorcery@0.11.1: 1791 | resolution: {integrity: sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==} 1792 | hasBin: true 1793 | dependencies: 1794 | '@jridgewell/sourcemap-codec': 1.5.0 1795 | buffer-crc32: 1.0.0 1796 | minimist: 1.2.8 1797 | sander: 0.5.1 1798 | dev: true 1799 | 1800 | /source-map-js@1.2.1: 1801 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1802 | engines: {node: '>=0.10.0'} 1803 | 1804 | /source-map@0.6.1: 1805 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1806 | engines: {node: '>=0.10.0'} 1807 | dev: true 1808 | 1809 | /spawndamnit@3.0.1: 1810 | resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} 1811 | dependencies: 1812 | cross-spawn: 7.0.6 1813 | signal-exit: 4.1.0 1814 | dev: true 1815 | 1816 | /sprintf-js@1.0.3: 1817 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1818 | dev: true 1819 | 1820 | /stackback@0.0.2: 1821 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1822 | dev: true 1823 | 1824 | /std-env@3.8.0: 1825 | resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} 1826 | dev: true 1827 | 1828 | /strip-ansi@6.0.1: 1829 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1830 | engines: {node: '>=8'} 1831 | dependencies: 1832 | ansi-regex: 5.0.1 1833 | dev: true 1834 | 1835 | /strip-bom@3.0.0: 1836 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1837 | engines: {node: '>=4'} 1838 | dev: true 1839 | 1840 | /strip-indent@3.0.0: 1841 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1842 | engines: {node: '>=8'} 1843 | dependencies: 1844 | min-indent: 1.0.1 1845 | dev: true 1846 | 1847 | /strip-literal@1.3.0: 1848 | resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} 1849 | dependencies: 1850 | acorn: 8.14.0 1851 | dev: true 1852 | 1853 | /supports-color@7.2.0: 1854 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1855 | engines: {node: '>=8'} 1856 | dependencies: 1857 | has-flag: 4.0.0 1858 | dev: true 1859 | 1860 | /svelte-check@3.8.6(svelte@4.2.20): 1861 | resolution: {integrity: sha512-ij0u4Lw/sOTREP13BdWZjiXD/BlHE6/e2e34XzmVmsp5IN4kVa3PWP65NM32JAgwjZlwBg/+JtiNV1MM8khu0Q==} 1862 | hasBin: true 1863 | peerDependencies: 1864 | svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 1865 | dependencies: 1866 | '@jridgewell/trace-mapping': 0.3.25 1867 | chokidar: 3.6.0 1868 | picocolors: 1.1.1 1869 | sade: 1.8.1 1870 | svelte: 4.2.20 1871 | svelte-preprocess: 5.1.4(svelte@4.2.20)(typescript@5.1.6) 1872 | typescript: 5.1.6 1873 | transitivePeerDependencies: 1874 | - '@babel/core' 1875 | - coffeescript 1876 | - less 1877 | - postcss 1878 | - postcss-load-config 1879 | - pug 1880 | - sass 1881 | - stylus 1882 | - sugarss 1883 | dev: true 1884 | 1885 | /svelte-parse-markup@0.1.5(svelte@4.2.20): 1886 | resolution: {integrity: sha512-T6mqZrySltPCDwfKXWQ6zehipVLk4GWfH1zCMGgRtLlOIFPuw58ZxVYxVvotMJgJaurKi1i14viB2GIRKXeJTQ==} 1887 | peerDependencies: 1888 | svelte: ^3.0.0 || ^4.0.0 || ^5.0.0-next.1 1889 | dependencies: 1890 | svelte: 4.2.20 1891 | dev: false 1892 | 1893 | /svelte-preprocess@5.1.4(svelte@4.2.20)(typescript@5.1.6): 1894 | resolution: {integrity: sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==} 1895 | engines: {node: '>= 16.0.0'} 1896 | requiresBuild: true 1897 | peerDependencies: 1898 | '@babel/core': ^7.10.2 1899 | coffeescript: ^2.5.1 1900 | less: ^3.11.3 || ^4.0.0 1901 | postcss: ^7 || ^8 1902 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 1903 | pug: ^3.0.0 1904 | sass: ^1.26.8 1905 | stylus: ^0.55.0 1906 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 1907 | svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 1908 | typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' 1909 | peerDependenciesMeta: 1910 | '@babel/core': 1911 | optional: true 1912 | coffeescript: 1913 | optional: true 1914 | less: 1915 | optional: true 1916 | postcss: 1917 | optional: true 1918 | postcss-load-config: 1919 | optional: true 1920 | pug: 1921 | optional: true 1922 | sass: 1923 | optional: true 1924 | stylus: 1925 | optional: true 1926 | sugarss: 1927 | optional: true 1928 | typescript: 1929 | optional: true 1930 | dependencies: 1931 | '@types/pug': 2.0.10 1932 | detect-indent: 6.1.0 1933 | magic-string: 0.30.17 1934 | sorcery: 0.11.1 1935 | strip-indent: 3.0.0 1936 | svelte: 4.2.20 1937 | typescript: 5.1.6 1938 | dev: true 1939 | 1940 | /svelte@4.2.20: 1941 | resolution: {integrity: sha512-eeEgGc2DtiUil5ANdtd8vPwt9AgaMdnuUFnPft9F5oMvU/FHu5IHFic+p1dR/UOB7XU2mX2yHW+NcTch4DCh5Q==} 1942 | engines: {node: '>=16'} 1943 | dependencies: 1944 | '@ampproject/remapping': 2.3.0 1945 | '@jridgewell/sourcemap-codec': 1.5.0 1946 | '@jridgewell/trace-mapping': 0.3.25 1947 | '@types/estree': 1.0.7 1948 | acorn: 8.14.0 1949 | aria-query: 5.3.2 1950 | axobject-query: 4.1.0 1951 | code-red: 1.0.4 1952 | css-tree: 2.3.1 1953 | estree-walker: 3.0.3 1954 | is-reference: 3.0.3 1955 | locate-character: 3.0.0 1956 | magic-string: 0.30.17 1957 | periscopic: 3.1.0 1958 | 1959 | /term-size@2.2.1: 1960 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 1961 | engines: {node: '>=8'} 1962 | dev: true 1963 | 1964 | /test-exclude@6.0.0: 1965 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 1966 | engines: {node: '>=8'} 1967 | dependencies: 1968 | '@istanbuljs/schema': 0.1.3 1969 | glob: 7.2.3 1970 | minimatch: 3.1.2 1971 | dev: true 1972 | 1973 | /tinybench@2.9.0: 1974 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1975 | dev: true 1976 | 1977 | /tinypool@0.7.0: 1978 | resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} 1979 | engines: {node: '>=14.0.0'} 1980 | dev: true 1981 | 1982 | /tinyspy@2.2.1: 1983 | resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} 1984 | engines: {node: '>=14.0.0'} 1985 | dev: true 1986 | 1987 | /tmp@0.0.33: 1988 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 1989 | engines: {node: '>=0.6.0'} 1990 | dependencies: 1991 | os-tmpdir: 1.0.2 1992 | dev: true 1993 | 1994 | /to-regex-range@5.0.1: 1995 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1996 | engines: {node: '>=8.0'} 1997 | dependencies: 1998 | is-number: 7.0.0 1999 | dev: true 2000 | 2001 | /tr46@0.0.3: 2002 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 2003 | dev: true 2004 | 2005 | /type-detect@4.1.0: 2006 | resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} 2007 | engines: {node: '>=4'} 2008 | dev: true 2009 | 2010 | /typescript@5.1.6: 2011 | resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} 2012 | engines: {node: '>=14.17'} 2013 | hasBin: true 2014 | dev: true 2015 | 2016 | /ufo@1.5.4: 2017 | resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} 2018 | dev: true 2019 | 2020 | /undici-types@6.20.0: 2021 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 2022 | dev: true 2023 | 2024 | /universalify@0.1.2: 2025 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 2026 | engines: {node: '>= 4.0.0'} 2027 | dev: true 2028 | 2029 | /v8-to-istanbul@9.3.0: 2030 | resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} 2031 | engines: {node: '>=10.12.0'} 2032 | dependencies: 2033 | '@jridgewell/trace-mapping': 0.3.25 2034 | '@types/istanbul-lib-coverage': 2.0.6 2035 | convert-source-map: 2.0.0 2036 | dev: true 2037 | 2038 | /vite-node@0.34.6(@types/node@22.10.7): 2039 | resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} 2040 | engines: {node: '>=v14.18.0'} 2041 | hasBin: true 2042 | dependencies: 2043 | cac: 6.7.14 2044 | debug: 4.4.0 2045 | mlly: 1.7.4 2046 | pathe: 1.1.2 2047 | picocolors: 1.1.1 2048 | vite: 5.4.11(@types/node@22.10.7) 2049 | transitivePeerDependencies: 2050 | - '@types/node' 2051 | - less 2052 | - lightningcss 2053 | - sass 2054 | - sass-embedded 2055 | - stylus 2056 | - sugarss 2057 | - supports-color 2058 | - terser 2059 | dev: true 2060 | 2061 | /vite@5.4.11(@types/node@22.10.7): 2062 | resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} 2063 | engines: {node: ^18.0.0 || >=20.0.0} 2064 | hasBin: true 2065 | peerDependencies: 2066 | '@types/node': ^18.0.0 || >=20.0.0 2067 | less: '*' 2068 | lightningcss: ^1.21.0 2069 | sass: '*' 2070 | sass-embedded: '*' 2071 | stylus: '*' 2072 | sugarss: '*' 2073 | terser: ^5.4.0 2074 | peerDependenciesMeta: 2075 | '@types/node': 2076 | optional: true 2077 | less: 2078 | optional: true 2079 | lightningcss: 2080 | optional: true 2081 | sass: 2082 | optional: true 2083 | sass-embedded: 2084 | optional: true 2085 | stylus: 2086 | optional: true 2087 | sugarss: 2088 | optional: true 2089 | terser: 2090 | optional: true 2091 | dependencies: 2092 | '@types/node': 22.10.7 2093 | esbuild: 0.21.5 2094 | postcss: 8.5.1 2095 | rollup: 4.30.1 2096 | optionalDependencies: 2097 | fsevents: 2.3.3 2098 | dev: true 2099 | 2100 | /vitest@0.34.6: 2101 | resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} 2102 | engines: {node: '>=v14.18.0'} 2103 | hasBin: true 2104 | peerDependencies: 2105 | '@edge-runtime/vm': '*' 2106 | '@vitest/browser': '*' 2107 | '@vitest/ui': '*' 2108 | happy-dom: '*' 2109 | jsdom: '*' 2110 | playwright: '*' 2111 | safaridriver: '*' 2112 | webdriverio: '*' 2113 | peerDependenciesMeta: 2114 | '@edge-runtime/vm': 2115 | optional: true 2116 | '@vitest/browser': 2117 | optional: true 2118 | '@vitest/ui': 2119 | optional: true 2120 | happy-dom: 2121 | optional: true 2122 | jsdom: 2123 | optional: true 2124 | playwright: 2125 | optional: true 2126 | safaridriver: 2127 | optional: true 2128 | webdriverio: 2129 | optional: true 2130 | dependencies: 2131 | '@types/chai': 4.3.20 2132 | '@types/chai-subset': 1.3.5 2133 | '@types/node': 22.10.7 2134 | '@vitest/expect': 0.34.6 2135 | '@vitest/runner': 0.34.6 2136 | '@vitest/snapshot': 0.34.6 2137 | '@vitest/spy': 0.34.6 2138 | '@vitest/utils': 0.34.6 2139 | acorn: 8.14.0 2140 | acorn-walk: 8.3.4 2141 | cac: 6.7.14 2142 | chai: 4.5.0 2143 | debug: 4.4.0 2144 | local-pkg: 0.4.3 2145 | magic-string: 0.30.17 2146 | pathe: 1.1.2 2147 | picocolors: 1.1.1 2148 | std-env: 3.8.0 2149 | strip-literal: 1.3.0 2150 | tinybench: 2.9.0 2151 | tinypool: 0.7.0 2152 | vite: 5.4.11(@types/node@22.10.7) 2153 | vite-node: 0.34.6(@types/node@22.10.7) 2154 | why-is-node-running: 2.3.0 2155 | transitivePeerDependencies: 2156 | - less 2157 | - lightningcss 2158 | - sass 2159 | - sass-embedded 2160 | - stylus 2161 | - sugarss 2162 | - supports-color 2163 | - terser 2164 | dev: true 2165 | 2166 | /webidl-conversions@3.0.1: 2167 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 2168 | dev: true 2169 | 2170 | /whatwg-url@5.0.0: 2171 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 2172 | dependencies: 2173 | tr46: 0.0.3 2174 | webidl-conversions: 3.0.1 2175 | dev: true 2176 | 2177 | /which@2.0.2: 2178 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2179 | engines: {node: '>= 8'} 2180 | hasBin: true 2181 | dependencies: 2182 | isexe: 2.0.0 2183 | dev: true 2184 | 2185 | /why-is-node-running@2.3.0: 2186 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 2187 | engines: {node: '>=8'} 2188 | hasBin: true 2189 | dependencies: 2190 | siginfo: 2.0.0 2191 | stackback: 0.0.2 2192 | dev: true 2193 | 2194 | /wrappy@1.0.2: 2195 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2196 | dev: true 2197 | 2198 | /yocto-queue@1.1.1: 2199 | resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} 2200 | engines: {node: '>=12.20'} 2201 | dev: true 2202 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base", 5 | ":automergePatch", 6 | ":timezone(Asia/Tokyo)", 7 | "npm:unpublishSafe" 8 | ], 9 | "dependencyDashboard": false, 10 | "prConcurrentLimit": 10, 11 | "prHourlyLimit": 0, 12 | "minimumReleaseAge": "3 days", 13 | "major": { 14 | "stabilityDays": 30 15 | }, 16 | "minor": { 17 | "stabilityDays": 7 18 | }, 19 | "patch": { 20 | "stabilityDays": 3 21 | }, 22 | "ignoreTests": false 23 | } 24 | -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'svelte/internal'; 2 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import preprocess from './preprocess/index.js'; 2 | import * as runtime from './runtime/index.js'; 3 | 4 | export { preprocess, runtime }; 5 | -------------------------------------------------------------------------------- /src/preprocess/bindthis.js: -------------------------------------------------------------------------------- 1 | import { walk } from 'svelte/compiler'; 2 | 3 | /** 4 | * bind:this="{button}" -> button 5 | * bind:this="{button[index]}" -> button 6 | * bind:this="{button.foo}" -> button.foo 7 | * bind:this="{button.foo[index]}" -> button.foo 8 | * bind:this="{button[index].button}" -> throw Error 9 | * @param {import ('estree').Expression} expression 10 | */ 11 | export const getBindThisVarName = (expression) => { 12 | let hasArray = false; 13 | let varName = ''; 14 | walk(expression, { 15 | enter(node, parent, key) { 16 | if (node.type === 'Identifier') { 17 | if (hasArray) { 18 | throw new Error( 19 | `Can only bind to an identifier (e.g. \`foo\`) or an array (e.g. \`foo[index]\`). (${expression.loc?.start.line}:${expression.loc?.start.column})`, 20 | ); 21 | } 22 | const isArray = 23 | parent?.type === 'MemberExpression' && 24 | key === 'property' && 25 | parent.computed; 26 | if (!isArray) { 27 | if (varName) varName = `${varName}.${node.name}`; 28 | else varName = node.name; 29 | } else { 30 | hasArray = true; 31 | } 32 | } 33 | }, 34 | }); 35 | return varName; 36 | }; 37 | -------------------------------------------------------------------------------- /src/preprocess/bindthis.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, it, expect } from 'vitest'; 2 | import { parse } from 'svelte/compiler'; 3 | import { getBindThisVarName } from './bindthis.js'; 4 | 5 | describe('getBindThisVarName', () => { 6 | const testCases = [ 7 | { 8 | title: 'basic', 9 | code: ``, 16 | expected: ``, 17 | }, 18 | { 19 | title: 'already imported', 20 | code: ``, 21 | expected: ``, 22 | }, 23 | { 24 | title: 'has other import1', 25 | code: ``, 26 | expected: ``, 27 | }, 28 | { 29 | title: 'has other import2', 30 | code: ``, 31 | expected: ``, 32 | }, 33 | { 34 | title: 'has default imports1', 35 | code: ``, 36 | expected: ``, 37 | }, 38 | { 39 | title: 'has default imports2', 40 | code: ``, 41 | expected: ``, 42 | }, 43 | ]; 44 | 45 | for (const testCase of testCases) { 46 | it(testCase.title, () => { 47 | const magicContent = new MagicString.default(testCase.code); 48 | addImport( 49 | { 50 | from: 'svelte/internal', 51 | name: 'get_current_component', 52 | content: testCase.code, 53 | parsed: parse(testCase.code), 54 | magicContent, 55 | }, 56 | {}, 57 | ); 58 | expect(magicContent.toString()).toBe(testCase.expected); 59 | }); 60 | } 61 | }); 62 | -------------------------------------------------------------------------------- /src/preprocess/index.js: -------------------------------------------------------------------------------- 1 | import { walk } from 'svelte/compiler'; 2 | import * as MagicString from 'magic-string'; 3 | import { addImport } from './import.js'; 4 | import buildElementRuntime from './builder/element.js'; 5 | import buildComponentRuntime from './builder/component.js'; 6 | import { getBindThisVarName } from './bindthis.js'; 7 | import { parse } from 'svelte-parse-markup'; 8 | 9 | /** 10 | * @param {ReturnType} parsed 11 | * @returns {Set} 12 | */ 13 | const collectUsedVars = (parsed) => { 14 | /** @type {Set} */ 15 | const usedVarNames = new Set(); 16 | walk(/** @type {any} */ (parsed.instance), { 17 | enter(node) { 18 | if (node.type === 'Identifier') { 19 | usedVarNames.add(node.name); 20 | } 21 | }, 22 | }); 23 | return usedVarNames; 24 | }; 25 | 26 | /** 27 | * @param {Set} usedVarNames 28 | * @param {string} name 29 | * @returns {string} 30 | */ 31 | const getUniqueVarName = (usedVarNames, name) => { 32 | // Remove chars that can not use for variable name. 33 | const normalized = name.replace(/[^a-zA-Z_$]|^(\d)/g, '_'); 34 | let i = 0; 35 | while (usedVarNames.has(`${normalized}${i}`)) { 36 | i++; 37 | } 38 | usedVarNames.add(`${normalized}${i}`); 39 | return `${normalized}${i}`; 40 | }; 41 | 42 | /** 43 | * @param {ReturnType['html']} node 44 | */ 45 | const findDelegatedEvent = (node) => { 46 | for (const attribute of node.attributes) { 47 | if (attribute.type === 'EventHandler' && attribute.name === '*') { 48 | const { expression } = attribute; 49 | if (expression) { 50 | throw Error( 51 | `Event handler with \`on:*\` is not supported. (${expression.start}:${expression.end})`, 52 | ); 53 | } 54 | 55 | return attribute; 56 | } 57 | } 58 | return undefined; 59 | }; 60 | 61 | const preprocess = () => { 62 | /** 63 | * @satisfies {Parameters[1]} 64 | */ 65 | const preprocessor = { 66 | markup: ({ content, filename }) => { 67 | /** @type {Record} */ 68 | const addedImports = {}; 69 | /** @type {string | undefined} */ 70 | let currentComponentName; 71 | 72 | let parsed = parse(content); 73 | if (!parsed.instance) { 74 | content = `${content}\n`; 75 | parsed = parse(content); 76 | } 77 | 78 | const magicContent = new MagicString.default(content); 79 | const html = parsed.html; 80 | const instance = /** @type {NonNullable<(typeof parsed)["instance"]>} */ ( 81 | parsed.instance 82 | ); 83 | 84 | const usedVarNames = collectUsedVars(parsed); 85 | 86 | walk(/** @type {any} */ (html), { 87 | // @ts-ignore 88 | enter(/** @type {typeof html} */ node) { 89 | if (node.type === 'Element') { 90 | const attribute = findDelegatedEvent(node); 91 | if (!attribute) return; 92 | const bindThis = node.attributes.find( 93 | (/** @type {any} */ a) => a.name === 'this', 94 | ); 95 | const varName = bindThis 96 | ? getBindThisVarName(bindThis.expression) 97 | : getUniqueVarName(usedVarNames, node.name); 98 | const modifiers = attribute.modifiers; 99 | if (!bindThis) { 100 | magicContent.update( 101 | attribute.start, 102 | attribute.end, 103 | `bind:this={${varName}.bounds}`, 104 | ); 105 | } else { 106 | magicContent.update(attribute.start, attribute.end, ''); 107 | } 108 | 109 | const needGetCurrentComponent = !currentComponentName; 110 | if (!currentComponentName) { 111 | currentComponentName = getUniqueVarName( 112 | usedVarNames, 113 | 'component', 114 | ); 115 | } 116 | const handlerStatement = buildElementRuntime( 117 | bindThis, 118 | varName, 119 | currentComponentName, 120 | needGetCurrentComponent, 121 | modifiers, 122 | (from, name) => { 123 | addImport( 124 | { from, name, content, parsed, magicContent }, 125 | addedImports, 126 | ); 127 | }, 128 | ); 129 | 130 | addImport( 131 | { 132 | from: 'svelte-preprocess-delegate-events/runtime', 133 | name: 'registerDelegatedEvents', 134 | content, 135 | parsed, 136 | magicContent, 137 | }, 138 | addedImports, 139 | ); 140 | 141 | addImport( 142 | { 143 | from: 'svelte/internal', 144 | name: 'get_current_component', 145 | content, 146 | parsed, 147 | magicContent, 148 | }, 149 | addedImports, 150 | ); 151 | 152 | magicContent.appendLeft(instance.end - 9, handlerStatement); 153 | return; 154 | } 155 | 156 | if (node.type === 'InlineComponent') { 157 | const attribute = findDelegatedEvent(node); 158 | if (!attribute) return; 159 | const isOnce = attribute.modifiers.includes('once'); 160 | if (attribute.modifiers.length !== (isOnce ? 1 : 0)) { 161 | throw new Error( 162 | `Event modifiers other than 'once' can only be used on DOM elements (${attribute.start}:${attribute.end})`, 163 | ); 164 | } 165 | 166 | const needGetCurrentComponent = !currentComponentName; 167 | if (!currentComponentName) { 168 | currentComponentName = getUniqueVarName( 169 | usedVarNames, 170 | 'component', 171 | ); 172 | } 173 | 174 | const bindThis = node.attributes.find( 175 | (/** @type {any} */ a) => a.name === 'this', 176 | ); 177 | const varName = bindThis 178 | ? getBindThisVarName(bindThis.expression) 179 | : getUniqueVarName(usedVarNames, node.name); 180 | 181 | if (!bindThis) { 182 | magicContent.update( 183 | attribute.start, 184 | attribute.end, 185 | `bind:this={${varName}.bounds}`, 186 | ); 187 | } else { 188 | magicContent.update(attribute.start, attribute.end, ''); 189 | } 190 | 191 | const proxyCallbacks = buildComponentRuntime( 192 | bindThis, 193 | currentComponentName, 194 | varName, 195 | needGetCurrentComponent, 196 | isOnce, 197 | (from, name) => { 198 | addImport( 199 | { from, name, content, parsed, magicContent }, 200 | addedImports, 201 | ); 202 | }, 203 | ); 204 | magicContent.appendLeft(instance.end - 9, proxyCallbacks); 205 | } 206 | }, 207 | }); 208 | 209 | return { 210 | code: magicContent.toString(), 211 | map: magicContent.generateMap({ source: filename ?? '' }).toString(), 212 | }; 213 | }, 214 | }; 215 | 216 | return preprocessor; 217 | }; 218 | 219 | export default preprocess; 220 | -------------------------------------------------------------------------------- /src/preprocess/listen.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {string} modifier 3 | */ 4 | const get_modifier_function = (modifier) => { 5 | switch (modifier) { 6 | case 'preventDefault': 7 | return 'prevent_default'; 8 | case 'stopPropagation': 9 | return 'stop_propagation'; 10 | case 'stopImmediatePropagation': 11 | return 'stop_immediate_propagation'; 12 | case 'passive': 13 | return undefined; 14 | case 'nonpassive': 15 | return undefined; 16 | case 'capture': 17 | return undefined; 18 | case 'once': 19 | return 'once'; 20 | case 'self': 21 | return 'self'; 22 | case 'trusted': 23 | return 'trusted'; 24 | default: { 25 | throw new Error(`Unknown modifier: ${modifier}`); 26 | } 27 | } 28 | }; 29 | 30 | /** 31 | * @param {string[]} modifiers 32 | * @param {(from: string, name: string) => void} addImport 33 | */ 34 | export const get_listen_params = (modifiers, addImport) => { 35 | const functions = []; 36 | for (const modifier of modifiers) { 37 | const fn = get_modifier_function(modifier); 38 | if (fn) { 39 | addImport('svelte/internal', fn); 40 | functions.push(fn); 41 | } 42 | } 43 | const option = {}; 44 | if (modifiers.indexOf('passive') !== -1) option.passive = true; 45 | if (modifiers.indexOf('nonpassive') !== -1) option.passive = false; 46 | if (modifiers.indexOf('capture') !== -1) option.capture = true; 47 | const left = functions.map((f) => `${f}(`).join(''); 48 | const right = functions.map(() => ')').join(''); 49 | const add_modifiers = `(handler) => ${left}handler${right}`; 50 | return { 51 | add_modifiers, 52 | option, 53 | }; 54 | }; 55 | -------------------------------------------------------------------------------- /src/preprocess/listen.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, it, expect } from 'vitest'; 2 | import { get_listen_params } from './listen.js'; 3 | 4 | describe('get_listen_params', () => { 5 | it('single', () => { 6 | const modifiers = ['preventDefault']; 7 | const { add_modifiers, option } = get_listen_params(modifiers, () => {}); 8 | expect(add_modifiers).toBe('(handler) => prevent_default(handler)'); 9 | expect(option).toEqual({}); 10 | }); 11 | it('multiple', () => { 12 | const modifiers = ['preventDefault', 'stopPropagation']; 13 | const { add_modifiers, option } = get_listen_params(modifiers, () => {}); 14 | expect(add_modifiers).toBe( 15 | '(handler) => prevent_default(stop_propagation(handler))', 16 | ); 17 | expect(option).toEqual({}); 18 | }); 19 | it('config', () => { 20 | const modifiers = ['passive']; 21 | const { add_modifiers, option } = get_listen_params(modifiers, () => {}); 22 | expect(add_modifiers).toBe('(handler) => handler'); 23 | expect(option).toEqual({ passive: true }); 24 | }); 25 | it('mix', () => { 26 | const modifiers = ['preventDefault', 'passive']; 27 | const { add_modifiers, option } = get_listen_params(modifiers, () => {}); 28 | expect(add_modifiers).toBe('(handler) => prevent_default(handler)'); 29 | expect(option).toEqual({ passive: true }); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /src/preprocess/types.d.ts: -------------------------------------------------------------------------------- 1 | interface AddImportProp { 2 | from: string; 3 | name: string; 4 | content: string; 5 | parsed: ReturnType; 6 | magicContent: MagicString.default; 7 | } 8 | -------------------------------------------------------------------------------- /src/runtime/index.js: -------------------------------------------------------------------------------- 1 | import { listen, bubble, once } from 'svelte/internal'; 2 | 3 | /** 4 | * @param {(Element & { _delegated?: boolean })[]} elements 5 | * @param {import ('svelte').SvelteComponentTyped} component 6 | * @param {(event: Parameters[2]) => Parameters[2] } add_modifiers 7 | * @param {Parameters[3]} option 8 | */ 9 | export function registerDelegatedEvents( 10 | elements, 11 | component, 12 | add_modifiers = (handler) => handler, 13 | option = {}, 14 | ) { 15 | for (const element of Array.isArray(elements) ? elements : [elements]) { 16 | if (element && !element._delegated) { 17 | element._delegated = true; 18 | for (const type of Object.keys(component.$$.callbacks)) { 19 | for (const handler of component.$$.callbacks[type]) { 20 | // remove event listner when element is destroyed automatically. 21 | // Therefore don't need to remove event listner manually. 22 | listen(element, type, add_modifiers(handler), option); 23 | } 24 | } 25 | } 26 | } 27 | } 28 | 29 | export function boundElements() { 30 | return new Proxy( 31 | { bounds: /** @type {Element[]} */ ([]) }, 32 | { 33 | get: (target, prop) => { 34 | target.bounds = target.bounds.filter((e) => e.parentNode !== null); 35 | // @ts-ignore 36 | return target[prop]; 37 | }, 38 | set: (target, prop, value) => { 39 | if (prop === 'bounds') { 40 | if (value && !target.bounds.includes(value)) { 41 | target.bounds.push(value); 42 | } 43 | } else { 44 | // @ts-ignore 45 | target[prop] = value; 46 | } 47 | return true; 48 | }, 49 | }, 50 | ); 51 | } 52 | 53 | export function boundComponents() { 54 | return new Proxy( 55 | { bounds: /** @type {import ('svelte').SvelteComponentTyped[]} */ ([]) }, 56 | { 57 | get: (target, prop) => { 58 | // This is super hackey. 59 | target.bounds = target.bounds.filter((c) => c.$$.on_destroy); 60 | // @ts-ignore 61 | return target[prop]; 62 | }, 63 | set: (target, prop, value) => { 64 | if (prop === 'bounds') { 65 | if (value && !target.bounds.includes(value)) { 66 | target.bounds.push(value); 67 | } 68 | } else { 69 | // @ts-ignore 70 | target[prop] = value; 71 | } 72 | return true; 73 | }, 74 | }, 75 | ); 76 | } 77 | 78 | /** 79 | * @param {import ('svelte').SvelteComponentTyped} thisComponent 80 | * @param {import ('svelte').SvelteComponentTyped[]} boundComponents 81 | * @param {boolean} isOnce 82 | */ 83 | export function proxyCallbacks(thisComponent, boundComponents, isOnce) { 84 | for (const boundComponent of Array.isArray(boundComponents) 85 | ? boundComponents 86 | : [boundComponents]) { 87 | if (boundComponent && !boundComponent.$$.callbacks._de_) { 88 | boundComponent.$$.callbacks = new Proxy(boundComponent.$$.callbacks, { 89 | get: (target, prop) => { 90 | if (!target._de_.includes(prop)) { 91 | target._de_.push(prop); 92 | boundComponent.$on( 93 | /** @type {string} */ (prop), 94 | (/** @type {(...any) => void} */ e) => 95 | // @ts-ignore 96 | bubble.call(this, thisComponent, isOnce ? once(e) : e), 97 | ); 98 | } 99 | return target[prop]; 100 | }, 101 | }); 102 | Object.defineProperty(boundComponent.$$.callbacks, '_de_', { 103 | configurable: false, 104 | enumerable: false, 105 | value: [], 106 | }); 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /test/fixture/component-each/input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | {#each numbers as number} 9 | 10 | {/each} 11 | -------------------------------------------------------------------------------- /test/fixture/component-each/output.svelte: -------------------------------------------------------------------------------- 1 | 14 | 15 | {#each numbers as number} 16 | 17 | {/each} 18 | -------------------------------------------------------------------------------- /test/fixture/component-modifier-error/error.txt: -------------------------------------------------------------------------------- 1 | Event handler with `on:*` is not supported. (155:162) -------------------------------------------------------------------------------- /test/fixture/component-modifier-error/input.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /test/fixture/component-modifier/input.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /test/fixture/component-modifier/output.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /test/fixture/component-with-handler/error.txt: -------------------------------------------------------------------------------- 1 | Event handler with `on:*` is not supported. (66:89) -------------------------------------------------------------------------------- /test/fixture/component-with-handler/input.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /test/fixture/component-with-this/input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/fixture/component-with-this/output.svelte: -------------------------------------------------------------------------------- 1 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/fixture/component/input.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /test/fixture/component/output.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /test/fixture/element-forward/input.svelte: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /test/fixture/element-forward/output.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /test/fixture/element-modifier/input.svelte: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /test/fixture/element-modifier/output.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /test/fixture/element-modifiers/input.svelte: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /test/fixture/element-modifiers/output.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /test/fixture/element-multi-element-with-this/input.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/fixture/element-multi-element-with-this/output.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/fixture/element-multi-element/input.svelte: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /test/fixture/element-multi-element/output.svelte: -------------------------------------------------------------------------------- 1 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /test/fixture/element-no-deligate/input.svelte: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /test/fixture/element-no-deligate/output.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /test/fixture/element-svelte:element/input.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | Click Me 6 | -------------------------------------------------------------------------------- /test/fixture/element-svelte:element/output.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | Click Me 13 | -------------------------------------------------------------------------------- /test/fixture/element-with-handler/error.txt: -------------------------------------------------------------------------------- 1 | Event handler with `on:*` is not supported. (94:101) -------------------------------------------------------------------------------- /test/fixture/element-with-handler/input.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/fixture/element-with-this-each/input.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | {#each list as item, index} 7 | 8 | {/each} 9 | -------------------------------------------------------------------------------- /test/fixture/element-with-this-each/output.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 | {#each list as item, index} 12 | 13 | {/each} 14 | -------------------------------------------------------------------------------- /test/fixture/element-with-this-each2/input.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | {#each list as item, index} 7 | 8 | {/each} 9 | -------------------------------------------------------------------------------- /test/fixture/element-with-this-each2/output.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 | {#each list as item, index} 12 | 13 | {/each} 14 | -------------------------------------------------------------------------------- /test/fixture/element-with-this/input.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /test/fixture/element-with-this/output.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /test/fixture/svelte:component/input.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | {#if a} 9 | 10 | {:else} 11 | 12 | {/if} 13 | -------------------------------------------------------------------------------- /test/fixture/svelte:component/output.svelte: -------------------------------------------------------------------------------- 1 | 17 | 18 | {#if a} 19 | 20 | {:else} 21 | 22 | {/if} 23 | -------------------------------------------------------------------------------- /test/index.spec.js: -------------------------------------------------------------------------------- 1 | import { readdirSync, readFileSync, writeFileSync, existsSync } from 'node:fs'; 2 | import { describe, it, expect } from 'vitest'; 3 | import preprocess from '../src/preprocess/index.js'; 4 | 5 | describe.concurrent('test', () => { 6 | const cases = readdirSync('./test/fixture'); 7 | for (const testCase of cases) { 8 | it(testCase, () => { 9 | const expectedPath = `./test/fixture/${testCase}/output.svelte`; 10 | const expectedErrorPath = `./test/fixture/${testCase}/error.txt`; 11 | 12 | const input = readFileSync( 13 | `./test/fixture/${testCase}/input.svelte`, 14 | 'utf-8', 15 | ); 16 | 17 | const expected = existsSync(expectedPath) 18 | ? readFileSync(expectedPath, 'utf-8') 19 | : undefined; 20 | 21 | const expectedError = existsSync(expectedErrorPath) 22 | ? readFileSync(expectedErrorPath, 'utf-8') 23 | : undefined; 24 | 25 | let error = ''; 26 | try { 27 | const actual = preprocess().markup({ 28 | content: input, 29 | filename: 'input.svelte', 30 | }); 31 | expect(expected).toBeTruthy(); 32 | writeFileSync(`./test/fixture/${testCase}/actual.svelte`, actual.code); 33 | expect(actual.code).toBe(expected); 34 | } catch (/** @type {any} */ e) { 35 | error = e.message; 36 | if (!expectedError) { 37 | console.error(e); 38 | } 39 | expect(expectedError).toBeTruthy(); 40 | expect(error).toBe(expectedError); 41 | } 42 | }); 43 | } 44 | }); 45 | -------------------------------------------------------------------------------- /tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig", 3 | "exclude": ["**/*.spec.js", "**/*.test.js"] 4 | } 5 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "moduleResolution": "nodenext", 4 | "allowJs": true, 5 | "checkJs": true, 6 | "strict": true, 7 | "noImplicitThis": true, 8 | "useUnknownInCatchVariables": true, 9 | "alwaysStrict": true, 10 | "noUnusedLocals": true, 11 | "noUnusedParameters": true, 12 | "exactOptionalPropertyTypes": true, 13 | "noImplicitReturns": true, 14 | "noFallthroughCasesInSwitch": true, 15 | "noUncheckedIndexedAccess": true, 16 | "noImplicitOverride": true, 17 | "noPropertyAccessFromIndexSignature": true, 18 | "allowUnusedLabels": true, 19 | "allowUnreachableCode": true, 20 | "skipLibCheck": true, 21 | "declaration": true, 22 | "declarationDir": ".", 23 | "emitDeclarationOnly": true, 24 | "lib": ["ES2016", "DOM"], 25 | "typeRoots": ["@types"] 26 | }, 27 | "include": ["src/**/*", "test/**/*.js"], 28 | "exclude": ["node_modules", "coverage", "test/**/*.svelte"] 29 | } 30 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | coverage: { 6 | reporter: ['lcov'], 7 | }, 8 | }, 9 | }); 10 | --------------------------------------------------------------------------------