├── .eslintignore
├── .eslintrc.cjs
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.yaml
│ └── feature_request.yaml
├── flow.png
├── flow_dark.png
└── workflows
│ ├── lint.yml
│ └── publish-to-npm.yml
├── .gitignore
├── .npmrc
├── .prettierignore
├── .prettierrc
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── package.json
├── playwright.config.ts
├── pnpm-lock.yaml
├── src
├── app.d.ts
├── app.html
├── index.test.ts
├── lib
│ ├── constants.ts
│ ├── defer.ts
│ ├── handle.ts
│ ├── index.ts
│ ├── store.ts
│ └── vite
│ │ └── index.ts
└── routes
│ └── +page.svelte
├── static
└── favicon.png
├── svelte.config.js
├── tests
└── test.ts
├── tsconfig.json
└── vite.config.ts
/.eslintignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 |
10 | # Ignore files for PNPM, NPM and YARN
11 | pnpm-lock.yaml
12 | package-lock.json
13 | yarn.lock
14 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | parser: '@typescript-eslint/parser',
4 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'],
5 | plugins: ['svelte3', '@typescript-eslint'],
6 | ignorePatterns: ['*.cjs'],
7 | overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
8 | settings: {
9 | 'svelte3/typescript': () => require('typescript')
10 | },
11 | parserOptions: {
12 | sourceType: 'module',
13 | ecmaVersion: 2020
14 | },
15 | env: {
16 | browser: true,
17 | es2017: true,
18 | node: true
19 | },
20 | rules: {
21 | '@typescript-eslint/no-explicit-any': 'off'
22 | }
23 | };
24 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.yaml:
--------------------------------------------------------------------------------
1 | name: "\U0001F41E Bug report"
2 | description: Report an issue
3 | body:
4 | - type: markdown
5 | attributes:
6 | value: |
7 | First thing first, thanks for reporting!
8 | - type: textarea
9 | id: bug-description
10 | attributes:
11 | label: Describe the bug
12 | description: A clear and concise description of what the bug is. If you intend to submit a PR for this issue, tell us in the description. Thanks!
13 | placeholder: Bug description
14 | validations:
15 | required: true
16 | - type: textarea
17 | id: reproduction
18 | attributes:
19 | label: Reproduction
20 | description: Please provide a link to a repo or better a stackblitz/replit that can reproduce the problem you ran into. This will speed up the fixing.
21 | placeholder: Reproduction
22 | validations:
23 | required: true
24 | - type: textarea
25 | id: logs
26 | attributes:
27 | label: Logs
28 | description: 'Please include browser console and server logs around the time this bug occurred. Optional if provided reproduction. Please try not to insert an image but copy paste the log text.'
29 | render: shell
30 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yaml:
--------------------------------------------------------------------------------
1 | name: "\U0001F4A1 Feature Request"
2 | description: Request a new feature
3 | body:
4 | - type: markdown
5 | attributes:
6 | value: |
7 | Thank you for taking the time to propose a new idea
8 | - type: textarea
9 | id: problem
10 | attributes:
11 | label: Describe the problem
12 | description: Please provide a clear and concise description the problem this feature would solve. The more information you can provide here, the better.
13 | placeholder: I would like to...
14 | validations:
15 | required: true
16 | - type: textarea
17 | id: solution
18 | attributes:
19 | label: Describe the proposed solution
20 | description: Try to provide a description of the API you would like to see implemented
21 | placeholder: I would like to see...
22 | validations:
23 | required: true
24 |
--------------------------------------------------------------------------------
/.github/flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paoloricciuti/sveltekit-defer/661ec5aecc2202d551231ce898e9cad6bd0015db/.github/flow.png
--------------------------------------------------------------------------------
/.github/flow_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paoloricciuti/sveltekit-defer/661ec5aecc2202d551231ce898e9cad6bd0015db/.github/flow_dark.png
--------------------------------------------------------------------------------
/.github/workflows/lint.yml:
--------------------------------------------------------------------------------
1 | name: Run Lint
2 | on:
3 | pull_request:
4 | branches:
5 | - master
6 |
7 | jobs:
8 | lint:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v2
12 | - uses: actions/setup-node@v2
13 | with:
14 | node-version: '16'
15 | - run: npm install -g pnpm
16 | - run: pnpm install
17 | - run: pnpm run lint
18 | # - run: npm test
19 |
--------------------------------------------------------------------------------
/.github/workflows/publish-to-npm.yml:
--------------------------------------------------------------------------------
1 | name: Publish Package to npmjs
2 | on:
3 | release:
4 | types: [created]
5 | jobs:
6 | build:
7 | runs-on: ubuntu-latest
8 | steps:
9 | - uses: actions/checkout@v3
10 | # Setup .npmrc file to publish to npm
11 | - uses: actions/setup-node@v3
12 | with:
13 | node-version: '16.x'
14 | registry-url: 'https://registry.npmjs.org'
15 | - run: npm i
16 | - run: npm run build
17 | - working-directory: package
18 | run: npm publish
19 | env:
20 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 | vite.config.js.timestamp-*
10 | vite.config.ts.timestamp-*
11 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 |
10 | # Ignore files for PNPM, NPM and YARN
11 | pnpm-lock.yaml
12 | package-lock.json
13 | yarn.lock
14 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": true,
3 | "singleQuote": true,
4 | "trailingComma": "none",
5 | "printWidth": 100,
6 | "plugins": ["prettier-plugin-svelte"],
7 | "pluginSearchDirs": ["."],
8 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
9 | }
10 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | We as members, contributors, and leaders pledge to make participation in our
6 | community a harassment-free experience for everyone, regardless of age, body
7 | size, visible or invisible disability, ethnicity, sex characteristics, gender
8 | identity and expression, level of experience, education, socio-economic status,
9 | nationality, personal appearance, race, religion, or sexual identity
10 | and orientation.
11 |
12 | We pledge to act and interact in ways that contribute to an open, welcoming,
13 | diverse, inclusive, and healthy community.
14 |
15 | ## Our Standards
16 |
17 | Examples of behavior that contributes to a positive environment for our
18 | community include:
19 |
20 | - Demonstrating empathy and kindness toward other people
21 | - Being respectful of differing opinions, viewpoints, and experiences
22 | - Giving and gracefully accepting constructive feedback
23 | - Accepting responsibility and apologizing to those affected by our mistakes,
24 | and learning from the experience
25 | - Focusing on what is best not just for us as individuals, but for the
26 | overall community
27 |
28 | Examples of unacceptable behavior include:
29 |
30 | - The use of sexualized language or imagery, and sexual attention or
31 | advances of any kind
32 | - Trolling, insulting or derogatory comments, and personal or political attacks
33 | - Public or private harassment
34 | - Publishing others' private information, such as a physical or email
35 | address, without their explicit permission
36 | - Other conduct which could reasonably be considered inappropriate in a
37 | professional setting
38 |
39 | ## Enforcement Responsibilities
40 |
41 | Community leaders are responsible for clarifying and enforcing our standards of
42 | acceptable behavior and will take appropriate and fair corrective action in
43 | response to any behavior that they deem inappropriate, threatening, offensive,
44 | or harmful.
45 |
46 | Community leaders have the right and responsibility to remove, edit, or reject
47 | comments, commits, code, wiki edits, issues, and other contributions that are
48 | not aligned to this Code of Conduct, and will communicate reasons for moderation
49 | decisions when appropriate.
50 |
51 | ## Scope
52 |
53 | This Code of Conduct applies within all community spaces, and also applies when
54 | an individual is officially representing the community in public spaces.
55 | Examples of representing our community include using an official e-mail address,
56 | posting via an official social media account, or acting as an appointed
57 | representative at an online or offline event.
58 |
59 | ## Enforcement
60 |
61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
62 | reported to the community leaders responsible for enforcement at
63 | ricciutipaolo@gmail.com.
64 | All complaints will be reviewed and investigated promptly and fairly.
65 |
66 | All community leaders are obligated to respect the privacy and security of the
67 | reporter of any incident.
68 |
69 | ## Enforcement Guidelines
70 |
71 | Community leaders will follow these Community Impact Guidelines in determining
72 | the consequences for any action they deem in violation of this Code of Conduct:
73 |
74 | ### 1. Correction
75 |
76 | **Community Impact**: Use of inappropriate language or other behavior deemed
77 | unprofessional or unwelcome in the community.
78 |
79 | **Consequence**: A private, written warning from community leaders, providing
80 | clarity around the nature of the violation and an explanation of why the
81 | behavior was inappropriate. A public apology may be requested.
82 |
83 | ### 2. Warning
84 |
85 | **Community Impact**: A violation through a single incident or series
86 | of actions.
87 |
88 | **Consequence**: A warning with consequences for continued behavior. No
89 | interaction with the people involved, including unsolicited interaction with
90 | those enforcing the Code of Conduct, for a specified period of time. This
91 | includes avoiding interactions in community spaces as well as external channels
92 | like social media. Violating these terms may lead to a temporary or
93 | permanent ban.
94 |
95 | ### 3. Temporary Ban
96 |
97 | **Community Impact**: A serious violation of community standards, including
98 | sustained inappropriate behavior.
99 |
100 | **Consequence**: A temporary ban from any sort of interaction or public
101 | communication with the community for a specified period of time. No public or
102 | private interaction with the people involved, including unsolicited interaction
103 | with those enforcing the Code of Conduct, is allowed during this period.
104 | Violating these terms may lead to a permanent ban.
105 |
106 | ### 4. Permanent Ban
107 |
108 | **Community Impact**: Demonstrating a pattern of violation of community
109 | standards, including sustained inappropriate behavior, harassment of an
110 | individual, or aggression toward or disparagement of classes of individuals.
111 |
112 | **Consequence**: A permanent ban from any sort of public interaction within
113 | the community.
114 |
115 | ## Attribution
116 |
117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118 | version 2.0, available at
119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120 |
121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct
122 | enforcement ladder](https://github.com/mozilla/diversity).
123 |
124 | [homepage]: https://www.contributor-covenant.org
125 |
126 | For answers to common questions about this code of conduct, see the FAQ at
127 | https://www.contributor-covenant.org/faq. Translations are available at
128 | https://www.contributor-covenant.org/translations.
129 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Paolo Ricciuti
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 | > **Warning** Since this project Sveltekit has proper support for the defer api. This package is hereby deprecated. See [the official documentation](https://kit.svelte.dev/docs/load#streaming-with-promises) to know how to stream in Sveltekit.
2 |
3 | # sveltekit-defer
4 |
5 | ⚠ This is extremely WIP
6 |
7 | This package allows you to transfare Promises over the wire in sveltekit. It uses SSE and stores to let you write code as close as possible to "vanilla sveltekit" while giving you the opportunity (with a simple await) to choose what data you want available as soon as the page load and what data it's not that important to you.
8 |
9 | Here's an example of what you would write;
10 |
11 | **hooks.server.ts**
12 |
13 | ```ts
14 | import { defer_handle } from 'sveltekit-defer';
15 | import type { Handle } from '@sveltejs/kit';
16 |
17 | export const handle: Handle = defer_handle;
18 | ```
19 |
20 | if you have other handles you can chain them with the utility function `sequence` provided by sveltekit.
21 |
22 | **hooks.server.ts**
23 |
24 | ```ts
25 | import { defer_handle } from 'sveltekit-defer';
26 | import { sequence } from '@sveltejs/kit/hooks';
27 | import type { Handle } from '@sveltejs/kit';
28 |
29 | export const handle: Handle = sequence(defer_handle, your_handle);
30 | ```
31 |
32 | you can than define a `+page.server.ts` wrapping the load function inside the defer function
33 |
34 | ```ts
35 | import type { ServerLoadEvent } from '@sveltejs/kit';
36 | import { defer } from 'sveltekit-defer';
37 | import type { PageServerLoad } from './$types';
38 |
39 | async function get_blog() {
40 | await new Promise((r) => setTimeout(r, 7000));
41 | return "A long blog post that it's very critical so the user need to see it right away";
42 | }
43 |
44 | async function get_comments() {
45 | await new Promise((r) => setTimeout(r, 10000));
46 | return [
47 | { author: 'Antonio', comment: 'Very cool' },
48 | { author: 'Oskar', comment: "Yeah it's wonderful" }
49 | ];
50 | }
51 |
52 | /**
53 | * Wrap you actual load function inside our defer function to unlock the defer functionality
54 | */
55 | export const load: PageServerLoad = defer(async (event: ServerLoadEvent) => {
56 | // start the fetch for the comments right away without awaiting
57 | const comments = get_comments();
58 | // await the blog post given that is critical content
59 | const blog = await get_blog();
60 | //return the promise (comments) and the blog post
61 | return {
62 | blog,
63 | comments
64 | };
65 | });
66 | ```
67 |
68 | then on the client side you can access the data via the store provided by `sveltekit-defer`
69 |
70 | ```svelte
71 |
77 |
78 |
79 |
80 |
81 | {$data.blog}
82 |
83 |
84 |
85 |
86 | {#await $data.comments}
87 | Loading...
88 | {:then comments}
89 | {#each comments as comment}
90 | {comment.author} - {comment.comment}
91 | {/each}
92 | {/await}
93 |
94 |
95 |
96 | ```
97 |
98 | ## Configuration
99 |
100 | `sveltekit-defer` makes use of apis that require to choose a name for them (e.g we need to create a couple of endpoints, an event name, a field to store the deferred promises etc etc). We tryed to chose unique enaugh names so that they should never collide with your applications but you know what they say and the internet is a vast enaugh place to encounter the weirdest circumstances. To avoid this `sveltekit-defer` provide a custom vite plugin to override those names.
101 |
102 | ```ts
103 | import { sveltekit } from '@sveltejs/kit/vite';
104 | import { sveltekit_defer } from 'sveltekit-defer/vite';
105 | import type { UserConfig } from 'vite';
106 |
107 | const config: UserConfig = {
108 | plugins: [
109 | sveltekit_defer({
110 | cookie_name: 'your_cookie_name',
111 | stream_event: 'your_stream_event',
112 | stream_pathname: '/your_pathname', //this should start with a / but don't worry, if you don't we take care of it
113 | promise_field: 'your_promise_field'
114 | }),
115 | sveltekit()
116 | ]
117 | };
118 |
119 | export default config;
120 | ```
121 |
122 | Make sure to put this plugin before the `sveltekit` one.
123 |
124 | ## How it works?
125 |
126 | Here's how it works:
127 |
128 | 1. The handle function add two endpoints to your project, a GET and a POST: the GET endpoint uses server sent event to notify the client whenever one of the Promises on the server has resolved and the POST endpoint is used to trigger such event
129 | 1. The defer function takes the return value of your load function and keep track of your Promises sticking them into an array.
130 | 1. Once on the client the store create an EventStream and register a callback on the server sent event, it take the data returned from the load function and for every key in the promises array it create a new Promise saving the resolver and the rejecter in a Map
131 | 1. Once the promise on the server resolves a post request is made to the POST endpoint managed by the handle function
132 | 1. A new event is put out from the server sent event endpoint
133 | 1. The callback registered in the store fires and the store resolves the correct Promise giving you back the data.
134 |
135 | Here's a simple flow diagram to depict this
136 |
137 | 
138 | 
139 |
140 | ## What to do now?
141 |
142 | There's a lot to do, but the first thing is to make sure that this doesn't create some super-huge security/performance issue and generally if there are things that can be done better.
143 |
144 | Feel free to open an issue if you found something that is not working or if you have some ideas on how to improve.
145 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sveltekit-defer",
3 | "version": "0.0.6",
4 | "repository": "git+https://github.com/paoloricciuti/sveltekit-defer.git",
5 | "author": "Paolo Ricciuti",
6 | "license": "MIT",
7 | "scripts": {
8 | "dev": "vite dev",
9 | "build": "svelte-kit sync && svelte-package",
10 | "prepublishOnly": "echo 'Did you mean to publish `./package/`, instead of `./`?' && exit 1",
11 | "test": "playwright test",
12 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
13 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
14 | "test:unit": "vitest",
15 | "lint": "prettier --plugin-search-dir . --check . && eslint .",
16 | "format": "prettier --plugin-search-dir . --write ."
17 | },
18 | "devDependencies": {
19 | "@playwright/test": "^1.28.1",
20 | "@sveltejs/adapter-auto": "^1.0.0",
21 | "@sveltejs/kit": "^1.0.0",
22 | "@sveltejs/package": "^1.0.0",
23 | "@typescript-eslint/eslint-plugin": "^5.45.0",
24 | "@typescript-eslint/parser": "^5.45.0",
25 | "eslint": "^8.28.0",
26 | "eslint-config-prettier": "^8.5.0",
27 | "eslint-plugin-svelte3": "^4.0.0",
28 | "prettier": "^2.8.0",
29 | "prettier-plugin-svelte": "^2.8.1",
30 | "svelte": "^3.54.0",
31 | "svelte-check": "^3.0.1",
32 | "tslib": "^2.4.1",
33 | "typescript": "^4.9.3",
34 | "vite": "^4.0.0",
35 | "vitest": "^0.25.3"
36 | },
37 | "peerDependencies": {
38 | "@sveltejs/kit": "^1.0.0",
39 | "devalue": "^4.2.3",
40 | "magic-string": "^0.27.0",
41 | "svelte": "^3.54.0"
42 | },
43 | "type": "module",
44 | "dependencies": {
45 | "devalue": "^4.2.3",
46 | "magic-string": "^0.27.0"
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/playwright.config.ts:
--------------------------------------------------------------------------------
1 | import type { PlaywrightTestConfig } from '@playwright/test';
2 |
3 | const config: PlaywrightTestConfig = {
4 | webServer: {
5 | command: 'npm run build && npm run preview',
6 | port: 4173
7 | },
8 | testDir: 'tests'
9 | };
10 |
11 | export default config;
12 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@playwright/test': ^1.28.1
5 | '@sveltejs/adapter-auto': ^1.0.0
6 | '@sveltejs/kit': ^1.0.0
7 | '@sveltejs/package': ^1.0.0
8 | '@typescript-eslint/eslint-plugin': ^5.45.0
9 | '@typescript-eslint/parser': ^5.45.0
10 | devalue: ^4.2.3
11 | eslint: ^8.28.0
12 | eslint-config-prettier: ^8.5.0
13 | eslint-plugin-svelte3: ^4.0.0
14 | magic-string: ^0.27.0
15 | prettier: ^2.8.0
16 | prettier-plugin-svelte: ^2.8.1
17 | svelte: ^3.54.0
18 | svelte-check: ^3.0.1
19 | tslib: ^2.4.1
20 | typescript: ^4.9.3
21 | vite: ^4.0.0
22 | vitest: ^0.25.3
23 |
24 | dependencies:
25 | devalue: 4.2.3
26 | magic-string: 0.27.0
27 |
28 | devDependencies:
29 | '@playwright/test': 1.30.0
30 | '@sveltejs/adapter-auto': 1.0.2_@sveltejs+kit@1.3.10
31 | '@sveltejs/kit': 1.3.10_svelte@3.55.1+vite@4.1.1
32 | '@sveltejs/package': 1.0.2_4x7phaipmicbaooxtnresslofa
33 | '@typescript-eslint/eslint-plugin': 5.50.0_go4drrxstycfikanvu45pi4vgq
34 | '@typescript-eslint/parser': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64
35 | eslint: 8.33.0
36 | eslint-config-prettier: 8.6.0_eslint@8.33.0
37 | eslint-plugin-svelte3: 4.0.0_4omm2ewoudhgnmf7aocafatnc4
38 | prettier: 2.8.3
39 | prettier-plugin-svelte: 2.9.0_kdmmghgdi3ngrsq6otxkjilbry
40 | svelte: 3.55.1
41 | svelte-check: 3.0.3_svelte@3.55.1
42 | tslib: 2.5.0
43 | typescript: 4.9.5
44 | vite: 4.1.1
45 | vitest: 0.25.8
46 |
47 | packages:
48 |
49 | /@esbuild/android-arm/0.16.17:
50 | resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
51 | engines: {node: '>=12'}
52 | cpu: [arm]
53 | os: [android]
54 | requiresBuild: true
55 | dev: true
56 | optional: true
57 |
58 | /@esbuild/android-arm64/0.16.17:
59 | resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==}
60 | engines: {node: '>=12'}
61 | cpu: [arm64]
62 | os: [android]
63 | requiresBuild: true
64 | dev: true
65 | optional: true
66 |
67 | /@esbuild/android-x64/0.16.17:
68 | resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==}
69 | engines: {node: '>=12'}
70 | cpu: [x64]
71 | os: [android]
72 | requiresBuild: true
73 | dev: true
74 | optional: true
75 |
76 | /@esbuild/darwin-arm64/0.16.17:
77 | resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==}
78 | engines: {node: '>=12'}
79 | cpu: [arm64]
80 | os: [darwin]
81 | requiresBuild: true
82 | dev: true
83 | optional: true
84 |
85 | /@esbuild/darwin-x64/0.16.17:
86 | resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==}
87 | engines: {node: '>=12'}
88 | cpu: [x64]
89 | os: [darwin]
90 | requiresBuild: true
91 | dev: true
92 | optional: true
93 |
94 | /@esbuild/freebsd-arm64/0.16.17:
95 | resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==}
96 | engines: {node: '>=12'}
97 | cpu: [arm64]
98 | os: [freebsd]
99 | requiresBuild: true
100 | dev: true
101 | optional: true
102 |
103 | /@esbuild/freebsd-x64/0.16.17:
104 | resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==}
105 | engines: {node: '>=12'}
106 | cpu: [x64]
107 | os: [freebsd]
108 | requiresBuild: true
109 | dev: true
110 | optional: true
111 |
112 | /@esbuild/linux-arm/0.16.17:
113 | resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==}
114 | engines: {node: '>=12'}
115 | cpu: [arm]
116 | os: [linux]
117 | requiresBuild: true
118 | dev: true
119 | optional: true
120 |
121 | /@esbuild/linux-arm64/0.16.17:
122 | resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==}
123 | engines: {node: '>=12'}
124 | cpu: [arm64]
125 | os: [linux]
126 | requiresBuild: true
127 | dev: true
128 | optional: true
129 |
130 | /@esbuild/linux-ia32/0.16.17:
131 | resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==}
132 | engines: {node: '>=12'}
133 | cpu: [ia32]
134 | os: [linux]
135 | requiresBuild: true
136 | dev: true
137 | optional: true
138 |
139 | /@esbuild/linux-loong64/0.16.17:
140 | resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==}
141 | engines: {node: '>=12'}
142 | cpu: [loong64]
143 | os: [linux]
144 | requiresBuild: true
145 | dev: true
146 | optional: true
147 |
148 | /@esbuild/linux-mips64el/0.16.17:
149 | resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==}
150 | engines: {node: '>=12'}
151 | cpu: [mips64el]
152 | os: [linux]
153 | requiresBuild: true
154 | dev: true
155 | optional: true
156 |
157 | /@esbuild/linux-ppc64/0.16.17:
158 | resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==}
159 | engines: {node: '>=12'}
160 | cpu: [ppc64]
161 | os: [linux]
162 | requiresBuild: true
163 | dev: true
164 | optional: true
165 |
166 | /@esbuild/linux-riscv64/0.16.17:
167 | resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==}
168 | engines: {node: '>=12'}
169 | cpu: [riscv64]
170 | os: [linux]
171 | requiresBuild: true
172 | dev: true
173 | optional: true
174 |
175 | /@esbuild/linux-s390x/0.16.17:
176 | resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==}
177 | engines: {node: '>=12'}
178 | cpu: [s390x]
179 | os: [linux]
180 | requiresBuild: true
181 | dev: true
182 | optional: true
183 |
184 | /@esbuild/linux-x64/0.16.17:
185 | resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==}
186 | engines: {node: '>=12'}
187 | cpu: [x64]
188 | os: [linux]
189 | requiresBuild: true
190 | dev: true
191 | optional: true
192 |
193 | /@esbuild/netbsd-x64/0.16.17:
194 | resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==}
195 | engines: {node: '>=12'}
196 | cpu: [x64]
197 | os: [netbsd]
198 | requiresBuild: true
199 | dev: true
200 | optional: true
201 |
202 | /@esbuild/openbsd-x64/0.16.17:
203 | resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==}
204 | engines: {node: '>=12'}
205 | cpu: [x64]
206 | os: [openbsd]
207 | requiresBuild: true
208 | dev: true
209 | optional: true
210 |
211 | /@esbuild/sunos-x64/0.16.17:
212 | resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==}
213 | engines: {node: '>=12'}
214 | cpu: [x64]
215 | os: [sunos]
216 | requiresBuild: true
217 | dev: true
218 | optional: true
219 |
220 | /@esbuild/win32-arm64/0.16.17:
221 | resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==}
222 | engines: {node: '>=12'}
223 | cpu: [arm64]
224 | os: [win32]
225 | requiresBuild: true
226 | dev: true
227 | optional: true
228 |
229 | /@esbuild/win32-ia32/0.16.17:
230 | resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==}
231 | engines: {node: '>=12'}
232 | cpu: [ia32]
233 | os: [win32]
234 | requiresBuild: true
235 | dev: true
236 | optional: true
237 |
238 | /@esbuild/win32-x64/0.16.17:
239 | resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==}
240 | engines: {node: '>=12'}
241 | cpu: [x64]
242 | os: [win32]
243 | requiresBuild: true
244 | dev: true
245 | optional: true
246 |
247 | /@eslint/eslintrc/1.4.1:
248 | resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==}
249 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
250 | dependencies:
251 | ajv: 6.12.6
252 | debug: 4.3.4
253 | espree: 9.4.1
254 | globals: 13.20.0
255 | ignore: 5.2.4
256 | import-fresh: 3.3.0
257 | js-yaml: 4.1.0
258 | minimatch: 3.1.2
259 | strip-json-comments: 3.1.1
260 | transitivePeerDependencies:
261 | - supports-color
262 | dev: true
263 |
264 | /@humanwhocodes/config-array/0.11.8:
265 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
266 | engines: {node: '>=10.10.0'}
267 | dependencies:
268 | '@humanwhocodes/object-schema': 1.2.1
269 | debug: 4.3.4
270 | minimatch: 3.1.2
271 | transitivePeerDependencies:
272 | - supports-color
273 | dev: true
274 |
275 | /@humanwhocodes/module-importer/1.0.1:
276 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
277 | engines: {node: '>=12.22'}
278 | dev: true
279 |
280 | /@humanwhocodes/object-schema/1.2.1:
281 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
282 | dev: true
283 |
284 | /@jridgewell/resolve-uri/3.1.0:
285 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
286 | engines: {node: '>=6.0.0'}
287 | dev: true
288 |
289 | /@jridgewell/sourcemap-codec/1.4.14:
290 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
291 |
292 | /@jridgewell/trace-mapping/0.3.17:
293 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
294 | dependencies:
295 | '@jridgewell/resolve-uri': 3.1.0
296 | '@jridgewell/sourcemap-codec': 1.4.14
297 | dev: true
298 |
299 | /@nodelib/fs.scandir/2.1.5:
300 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
301 | engines: {node: '>= 8'}
302 | dependencies:
303 | '@nodelib/fs.stat': 2.0.5
304 | run-parallel: 1.2.0
305 | dev: true
306 |
307 | /@nodelib/fs.stat/2.0.5:
308 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
309 | engines: {node: '>= 8'}
310 | dev: true
311 |
312 | /@nodelib/fs.walk/1.2.8:
313 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
314 | engines: {node: '>= 8'}
315 | dependencies:
316 | '@nodelib/fs.scandir': 2.1.5
317 | fastq: 1.15.0
318 | dev: true
319 |
320 | /@playwright/test/1.30.0:
321 | resolution: {integrity: sha512-SVxkQw1xvn/Wk/EvBnqWIq6NLo1AppwbYOjNLmyU0R1RoQ3rLEBtmjTnElcnz8VEtn11fptj1ECxK0tgURhajw==}
322 | engines: {node: '>=14'}
323 | hasBin: true
324 | dependencies:
325 | '@types/node': 18.11.18
326 | playwright-core: 1.30.0
327 | dev: true
328 |
329 | /@polka/url/1.0.0-next.21:
330 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
331 | dev: true
332 |
333 | /@sveltejs/adapter-auto/1.0.2_@sveltejs+kit@1.3.10:
334 | resolution: {integrity: sha512-UXpEO/gutERZnD+Z5Vi4J/ifD3WSRuCI7xwtLJTcKNQvJ6t5Xsj1X3Mw2F8Vv/XTUuxf7xPLYUgThU331r0Y9w==}
335 | peerDependencies:
336 | '@sveltejs/kit': ^1.0.0
337 | dependencies:
338 | '@sveltejs/kit': 1.3.10_svelte@3.55.1+vite@4.1.1
339 | import-meta-resolve: 2.2.1
340 | dev: true
341 |
342 | /@sveltejs/kit/1.3.10_svelte@3.55.1+vite@4.1.1:
343 | resolution: {integrity: sha512-I3DgWCwTYbTz4ZPCJIRkSDrKkMu0bsdk6ghqsOBVNqesf1wBdTdfkXhag3ESWgIEjUV3VUIWPQF7fnt7328mhQ==}
344 | engines: {node: ^16.14 || >=18}
345 | hasBin: true
346 | requiresBuild: true
347 | peerDependencies:
348 | svelte: ^3.54.0
349 | vite: ^4.0.0
350 | dependencies:
351 | '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.1+vite@4.1.1
352 | '@types/cookie': 0.5.1
353 | cookie: 0.5.0
354 | devalue: 4.2.3
355 | esm-env: 1.0.0
356 | kleur: 4.1.5
357 | magic-string: 0.27.0
358 | mime: 3.0.0
359 | sade: 1.8.1
360 | set-cookie-parser: 2.5.1
361 | sirv: 2.0.2
362 | svelte: 3.55.1
363 | tiny-glob: 0.2.9
364 | undici: 5.16.0
365 | vite: 4.1.1
366 | transitivePeerDependencies:
367 | - supports-color
368 | dev: true
369 |
370 | /@sveltejs/package/1.0.2_4x7phaipmicbaooxtnresslofa:
371 | resolution: {integrity: sha512-VY9U+05d9uNFDj7ScKRlHORYlfPSHwJewBjV+V2RsnViexpLFPUrboC9SiPYDCpLnbeqwXerxhO6twGHUBGeIA==}
372 | engines: {node: ^16.14 || >=18}
373 | hasBin: true
374 | peerDependencies:
375 | svelte: ^3.44.0
376 | dependencies:
377 | chokidar: 3.5.3
378 | kleur: 4.1.5
379 | sade: 1.8.1
380 | svelte: 3.55.1
381 | svelte2tsx: 0.6.1_4x7phaipmicbaooxtnresslofa
382 | transitivePeerDependencies:
383 | - typescript
384 | dev: true
385 |
386 | /@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.1.1:
387 | resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==}
388 | engines: {node: ^14.18.0 || >= 16}
389 | peerDependencies:
390 | svelte: ^3.54.0
391 | vite: ^4.0.0
392 | dependencies:
393 | debug: 4.3.4
394 | deepmerge: 4.3.0
395 | kleur: 4.1.5
396 | magic-string: 0.27.0
397 | svelte: 3.55.1
398 | svelte-hmr: 0.15.1_svelte@3.55.1
399 | vite: 4.1.1
400 | vitefu: 0.2.4_vite@4.1.1
401 | transitivePeerDependencies:
402 | - supports-color
403 | dev: true
404 |
405 | /@types/chai-subset/1.3.3:
406 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
407 | dependencies:
408 | '@types/chai': 4.3.4
409 | dev: true
410 |
411 | /@types/chai/4.3.4:
412 | resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==}
413 | dev: true
414 |
415 | /@types/cookie/0.5.1:
416 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==}
417 | dev: true
418 |
419 | /@types/json-schema/7.0.11:
420 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
421 | dev: true
422 |
423 | /@types/node/18.11.18:
424 | resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
425 | dev: true
426 |
427 | /@types/pug/2.0.6:
428 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
429 | dev: true
430 |
431 | /@types/sass/1.43.1:
432 | resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==}
433 | dependencies:
434 | '@types/node': 18.11.18
435 | dev: true
436 |
437 | /@types/semver/7.3.13:
438 | resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
439 | dev: true
440 |
441 | /@typescript-eslint/eslint-plugin/5.50.0_go4drrxstycfikanvu45pi4vgq:
442 | resolution: {integrity: sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==}
443 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
444 | peerDependencies:
445 | '@typescript-eslint/parser': ^5.0.0
446 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
447 | typescript: '*'
448 | peerDependenciesMeta:
449 | typescript:
450 | optional: true
451 | dependencies:
452 | '@typescript-eslint/parser': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64
453 | '@typescript-eslint/scope-manager': 5.50.0
454 | '@typescript-eslint/type-utils': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64
455 | '@typescript-eslint/utils': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64
456 | debug: 4.3.4
457 | eslint: 8.33.0
458 | grapheme-splitter: 1.0.4
459 | ignore: 5.2.4
460 | natural-compare-lite: 1.4.0
461 | regexpp: 3.2.0
462 | semver: 7.3.8
463 | tsutils: 3.21.0_typescript@4.9.5
464 | typescript: 4.9.5
465 | transitivePeerDependencies:
466 | - supports-color
467 | dev: true
468 |
469 | /@typescript-eslint/parser/5.50.0_4vsywjlpuriuw3tl5oq6zy5a64:
470 | resolution: {integrity: sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==}
471 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
472 | peerDependencies:
473 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
474 | typescript: '*'
475 | peerDependenciesMeta:
476 | typescript:
477 | optional: true
478 | dependencies:
479 | '@typescript-eslint/scope-manager': 5.50.0
480 | '@typescript-eslint/types': 5.50.0
481 | '@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5
482 | debug: 4.3.4
483 | eslint: 8.33.0
484 | typescript: 4.9.5
485 | transitivePeerDependencies:
486 | - supports-color
487 | dev: true
488 |
489 | /@typescript-eslint/scope-manager/5.50.0:
490 | resolution: {integrity: sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==}
491 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
492 | dependencies:
493 | '@typescript-eslint/types': 5.50.0
494 | '@typescript-eslint/visitor-keys': 5.50.0
495 | dev: true
496 |
497 | /@typescript-eslint/type-utils/5.50.0_4vsywjlpuriuw3tl5oq6zy5a64:
498 | resolution: {integrity: sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==}
499 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
500 | peerDependencies:
501 | eslint: '*'
502 | typescript: '*'
503 | peerDependenciesMeta:
504 | typescript:
505 | optional: true
506 | dependencies:
507 | '@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5
508 | '@typescript-eslint/utils': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64
509 | debug: 4.3.4
510 | eslint: 8.33.0
511 | tsutils: 3.21.0_typescript@4.9.5
512 | typescript: 4.9.5
513 | transitivePeerDependencies:
514 | - supports-color
515 | dev: true
516 |
517 | /@typescript-eslint/types/5.50.0:
518 | resolution: {integrity: sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==}
519 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
520 | dev: true
521 |
522 | /@typescript-eslint/typescript-estree/5.50.0_typescript@4.9.5:
523 | resolution: {integrity: sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==}
524 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
525 | peerDependencies:
526 | typescript: '*'
527 | peerDependenciesMeta:
528 | typescript:
529 | optional: true
530 | dependencies:
531 | '@typescript-eslint/types': 5.50.0
532 | '@typescript-eslint/visitor-keys': 5.50.0
533 | debug: 4.3.4
534 | globby: 11.1.0
535 | is-glob: 4.0.3
536 | semver: 7.3.8
537 | tsutils: 3.21.0_typescript@4.9.5
538 | typescript: 4.9.5
539 | transitivePeerDependencies:
540 | - supports-color
541 | dev: true
542 |
543 | /@typescript-eslint/utils/5.50.0_4vsywjlpuriuw3tl5oq6zy5a64:
544 | resolution: {integrity: sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==}
545 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
546 | peerDependencies:
547 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
548 | dependencies:
549 | '@types/json-schema': 7.0.11
550 | '@types/semver': 7.3.13
551 | '@typescript-eslint/scope-manager': 5.50.0
552 | '@typescript-eslint/types': 5.50.0
553 | '@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5
554 | eslint: 8.33.0
555 | eslint-scope: 5.1.1
556 | eslint-utils: 3.0.0_eslint@8.33.0
557 | semver: 7.3.8
558 | transitivePeerDependencies:
559 | - supports-color
560 | - typescript
561 | dev: true
562 |
563 | /@typescript-eslint/visitor-keys/5.50.0:
564 | resolution: {integrity: sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==}
565 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
566 | dependencies:
567 | '@typescript-eslint/types': 5.50.0
568 | eslint-visitor-keys: 3.3.0
569 | dev: true
570 |
571 | /acorn-jsx/5.3.2_acorn@8.8.2:
572 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
573 | peerDependencies:
574 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
575 | dependencies:
576 | acorn: 8.8.2
577 | dev: true
578 |
579 | /acorn-walk/8.2.0:
580 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
581 | engines: {node: '>=0.4.0'}
582 | dev: true
583 |
584 | /acorn/8.8.2:
585 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
586 | engines: {node: '>=0.4.0'}
587 | hasBin: true
588 | dev: true
589 |
590 | /ajv/6.12.6:
591 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
592 | dependencies:
593 | fast-deep-equal: 3.1.3
594 | fast-json-stable-stringify: 2.1.0
595 | json-schema-traverse: 0.4.1
596 | uri-js: 4.4.1
597 | dev: true
598 |
599 | /ansi-regex/5.0.1:
600 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
601 | engines: {node: '>=8'}
602 | dev: true
603 |
604 | /ansi-styles/4.3.0:
605 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
606 | engines: {node: '>=8'}
607 | dependencies:
608 | color-convert: 2.0.1
609 | dev: true
610 |
611 | /anymatch/3.1.3:
612 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
613 | engines: {node: '>= 8'}
614 | dependencies:
615 | normalize-path: 3.0.0
616 | picomatch: 2.3.1
617 | dev: true
618 |
619 | /argparse/2.0.1:
620 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
621 | dev: true
622 |
623 | /array-union/2.1.0:
624 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
625 | engines: {node: '>=8'}
626 | dev: true
627 |
628 | /assertion-error/1.1.0:
629 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
630 | dev: true
631 |
632 | /balanced-match/1.0.2:
633 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
634 | dev: true
635 |
636 | /binary-extensions/2.2.0:
637 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
638 | engines: {node: '>=8'}
639 | dev: true
640 |
641 | /brace-expansion/1.1.11:
642 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
643 | dependencies:
644 | balanced-match: 1.0.2
645 | concat-map: 0.0.1
646 | dev: true
647 |
648 | /braces/3.0.2:
649 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
650 | engines: {node: '>=8'}
651 | dependencies:
652 | fill-range: 7.0.1
653 | dev: true
654 |
655 | /buffer-crc32/0.2.13:
656 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
657 | dev: true
658 |
659 | /busboy/1.6.0:
660 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
661 | engines: {node: '>=10.16.0'}
662 | dependencies:
663 | streamsearch: 1.1.0
664 | dev: true
665 |
666 | /callsites/3.1.0:
667 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
668 | engines: {node: '>=6'}
669 | dev: true
670 |
671 | /chai/4.3.7:
672 | resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==}
673 | engines: {node: '>=4'}
674 | dependencies:
675 | assertion-error: 1.1.0
676 | check-error: 1.0.2
677 | deep-eql: 4.1.3
678 | get-func-name: 2.0.0
679 | loupe: 2.3.6
680 | pathval: 1.1.1
681 | type-detect: 4.0.8
682 | dev: true
683 |
684 | /chalk/4.1.2:
685 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
686 | engines: {node: '>=10'}
687 | dependencies:
688 | ansi-styles: 4.3.0
689 | supports-color: 7.2.0
690 | dev: true
691 |
692 | /check-error/1.0.2:
693 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
694 | dev: true
695 |
696 | /chokidar/3.5.3:
697 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
698 | engines: {node: '>= 8.10.0'}
699 | dependencies:
700 | anymatch: 3.1.3
701 | braces: 3.0.2
702 | glob-parent: 5.1.2
703 | is-binary-path: 2.1.0
704 | is-glob: 4.0.3
705 | normalize-path: 3.0.0
706 | readdirp: 3.6.0
707 | optionalDependencies:
708 | fsevents: 2.3.2
709 | dev: true
710 |
711 | /color-convert/2.0.1:
712 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
713 | engines: {node: '>=7.0.0'}
714 | dependencies:
715 | color-name: 1.1.4
716 | dev: true
717 |
718 | /color-name/1.1.4:
719 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
720 | dev: true
721 |
722 | /concat-map/0.0.1:
723 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
724 | dev: true
725 |
726 | /cookie/0.5.0:
727 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
728 | engines: {node: '>= 0.6'}
729 | dev: true
730 |
731 | /cross-spawn/7.0.3:
732 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
733 | engines: {node: '>= 8'}
734 | dependencies:
735 | path-key: 3.1.1
736 | shebang-command: 2.0.0
737 | which: 2.0.2
738 | dev: true
739 |
740 | /debug/4.3.4:
741 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
742 | engines: {node: '>=6.0'}
743 | peerDependencies:
744 | supports-color: '*'
745 | peerDependenciesMeta:
746 | supports-color:
747 | optional: true
748 | dependencies:
749 | ms: 2.1.2
750 | dev: true
751 |
752 | /dedent-js/1.0.1:
753 | resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==}
754 | dev: true
755 |
756 | /deep-eql/4.1.3:
757 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
758 | engines: {node: '>=6'}
759 | dependencies:
760 | type-detect: 4.0.8
761 | dev: true
762 |
763 | /deep-is/0.1.4:
764 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
765 | dev: true
766 |
767 | /deepmerge/4.3.0:
768 | resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==}
769 | engines: {node: '>=0.10.0'}
770 | dev: true
771 |
772 | /detect-indent/6.1.0:
773 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
774 | engines: {node: '>=8'}
775 | dev: true
776 |
777 | /devalue/4.2.3:
778 | resolution: {integrity: sha512-JG6Q248aN0pgFL57e3zqTVeFraBe+5W2ugvv1mLXsJP6YYIYJhRZhAl7QP8haJrqob6X10F9NEkuCvNILZTPeQ==}
779 |
780 | /dir-glob/3.0.1:
781 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
782 | engines: {node: '>=8'}
783 | dependencies:
784 | path-type: 4.0.0
785 | dev: true
786 |
787 | /doctrine/3.0.0:
788 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
789 | engines: {node: '>=6.0.0'}
790 | dependencies:
791 | esutils: 2.0.3
792 | dev: true
793 |
794 | /es6-promise/3.3.1:
795 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
796 | dev: true
797 |
798 | /esbuild/0.16.17:
799 | resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
800 | engines: {node: '>=12'}
801 | hasBin: true
802 | requiresBuild: true
803 | optionalDependencies:
804 | '@esbuild/android-arm': 0.16.17
805 | '@esbuild/android-arm64': 0.16.17
806 | '@esbuild/android-x64': 0.16.17
807 | '@esbuild/darwin-arm64': 0.16.17
808 | '@esbuild/darwin-x64': 0.16.17
809 | '@esbuild/freebsd-arm64': 0.16.17
810 | '@esbuild/freebsd-x64': 0.16.17
811 | '@esbuild/linux-arm': 0.16.17
812 | '@esbuild/linux-arm64': 0.16.17
813 | '@esbuild/linux-ia32': 0.16.17
814 | '@esbuild/linux-loong64': 0.16.17
815 | '@esbuild/linux-mips64el': 0.16.17
816 | '@esbuild/linux-ppc64': 0.16.17
817 | '@esbuild/linux-riscv64': 0.16.17
818 | '@esbuild/linux-s390x': 0.16.17
819 | '@esbuild/linux-x64': 0.16.17
820 | '@esbuild/netbsd-x64': 0.16.17
821 | '@esbuild/openbsd-x64': 0.16.17
822 | '@esbuild/sunos-x64': 0.16.17
823 | '@esbuild/win32-arm64': 0.16.17
824 | '@esbuild/win32-ia32': 0.16.17
825 | '@esbuild/win32-x64': 0.16.17
826 | dev: true
827 |
828 | /escape-string-regexp/4.0.0:
829 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
830 | engines: {node: '>=10'}
831 | dev: true
832 |
833 | /eslint-config-prettier/8.6.0_eslint@8.33.0:
834 | resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==}
835 | hasBin: true
836 | peerDependencies:
837 | eslint: '>=7.0.0'
838 | dependencies:
839 | eslint: 8.33.0
840 | dev: true
841 |
842 | /eslint-plugin-svelte3/4.0.0_4omm2ewoudhgnmf7aocafatnc4:
843 | resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==}
844 | peerDependencies:
845 | eslint: '>=8.0.0'
846 | svelte: ^3.2.0
847 | dependencies:
848 | eslint: 8.33.0
849 | svelte: 3.55.1
850 | dev: true
851 |
852 | /eslint-scope/5.1.1:
853 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
854 | engines: {node: '>=8.0.0'}
855 | dependencies:
856 | esrecurse: 4.3.0
857 | estraverse: 4.3.0
858 | dev: true
859 |
860 | /eslint-scope/7.1.1:
861 | resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
862 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
863 | dependencies:
864 | esrecurse: 4.3.0
865 | estraverse: 5.3.0
866 | dev: true
867 |
868 | /eslint-utils/3.0.0_eslint@8.33.0:
869 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
870 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
871 | peerDependencies:
872 | eslint: '>=5'
873 | dependencies:
874 | eslint: 8.33.0
875 | eslint-visitor-keys: 2.1.0
876 | dev: true
877 |
878 | /eslint-visitor-keys/2.1.0:
879 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
880 | engines: {node: '>=10'}
881 | dev: true
882 |
883 | /eslint-visitor-keys/3.3.0:
884 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
885 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
886 | dev: true
887 |
888 | /eslint/8.33.0:
889 | resolution: {integrity: sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==}
890 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
891 | hasBin: true
892 | dependencies:
893 | '@eslint/eslintrc': 1.4.1
894 | '@humanwhocodes/config-array': 0.11.8
895 | '@humanwhocodes/module-importer': 1.0.1
896 | '@nodelib/fs.walk': 1.2.8
897 | ajv: 6.12.6
898 | chalk: 4.1.2
899 | cross-spawn: 7.0.3
900 | debug: 4.3.4
901 | doctrine: 3.0.0
902 | escape-string-regexp: 4.0.0
903 | eslint-scope: 7.1.1
904 | eslint-utils: 3.0.0_eslint@8.33.0
905 | eslint-visitor-keys: 3.3.0
906 | espree: 9.4.1
907 | esquery: 1.4.0
908 | esutils: 2.0.3
909 | fast-deep-equal: 3.1.3
910 | file-entry-cache: 6.0.1
911 | find-up: 5.0.0
912 | glob-parent: 6.0.2
913 | globals: 13.20.0
914 | grapheme-splitter: 1.0.4
915 | ignore: 5.2.4
916 | import-fresh: 3.3.0
917 | imurmurhash: 0.1.4
918 | is-glob: 4.0.3
919 | is-path-inside: 3.0.3
920 | js-sdsl: 4.3.0
921 | js-yaml: 4.1.0
922 | json-stable-stringify-without-jsonify: 1.0.1
923 | levn: 0.4.1
924 | lodash.merge: 4.6.2
925 | minimatch: 3.1.2
926 | natural-compare: 1.4.0
927 | optionator: 0.9.1
928 | regexpp: 3.2.0
929 | strip-ansi: 6.0.1
930 | strip-json-comments: 3.1.1
931 | text-table: 0.2.0
932 | transitivePeerDependencies:
933 | - supports-color
934 | dev: true
935 |
936 | /esm-env/1.0.0:
937 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==}
938 | dev: true
939 |
940 | /espree/9.4.1:
941 | resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==}
942 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
943 | dependencies:
944 | acorn: 8.8.2
945 | acorn-jsx: 5.3.2_acorn@8.8.2
946 | eslint-visitor-keys: 3.3.0
947 | dev: true
948 |
949 | /esquery/1.4.0:
950 | resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==}
951 | engines: {node: '>=0.10'}
952 | dependencies:
953 | estraverse: 5.3.0
954 | dev: true
955 |
956 | /esrecurse/4.3.0:
957 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
958 | engines: {node: '>=4.0'}
959 | dependencies:
960 | estraverse: 5.3.0
961 | dev: true
962 |
963 | /estraverse/4.3.0:
964 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
965 | engines: {node: '>=4.0'}
966 | dev: true
967 |
968 | /estraverse/5.3.0:
969 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
970 | engines: {node: '>=4.0'}
971 | dev: true
972 |
973 | /esutils/2.0.3:
974 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
975 | engines: {node: '>=0.10.0'}
976 | dev: true
977 |
978 | /fast-deep-equal/3.1.3:
979 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
980 | dev: true
981 |
982 | /fast-glob/3.2.12:
983 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
984 | engines: {node: '>=8.6.0'}
985 | dependencies:
986 | '@nodelib/fs.stat': 2.0.5
987 | '@nodelib/fs.walk': 1.2.8
988 | glob-parent: 5.1.2
989 | merge2: 1.4.1
990 | micromatch: 4.0.5
991 | dev: true
992 |
993 | /fast-json-stable-stringify/2.1.0:
994 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
995 | dev: true
996 |
997 | /fast-levenshtein/2.0.6:
998 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
999 | dev: true
1000 |
1001 | /fastq/1.15.0:
1002 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
1003 | dependencies:
1004 | reusify: 1.0.4
1005 | dev: true
1006 |
1007 | /file-entry-cache/6.0.1:
1008 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1009 | engines: {node: ^10.12.0 || >=12.0.0}
1010 | dependencies:
1011 | flat-cache: 3.0.4
1012 | dev: true
1013 |
1014 | /fill-range/7.0.1:
1015 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1016 | engines: {node: '>=8'}
1017 | dependencies:
1018 | to-regex-range: 5.0.1
1019 | dev: true
1020 |
1021 | /find-up/5.0.0:
1022 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1023 | engines: {node: '>=10'}
1024 | dependencies:
1025 | locate-path: 6.0.0
1026 | path-exists: 4.0.0
1027 | dev: true
1028 |
1029 | /flat-cache/3.0.4:
1030 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
1031 | engines: {node: ^10.12.0 || >=12.0.0}
1032 | dependencies:
1033 | flatted: 3.2.7
1034 | rimraf: 3.0.2
1035 | dev: true
1036 |
1037 | /flatted/3.2.7:
1038 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
1039 | dev: true
1040 |
1041 | /fs.realpath/1.0.0:
1042 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1043 | dev: true
1044 |
1045 | /fsevents/2.3.2:
1046 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1047 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1048 | os: [darwin]
1049 | requiresBuild: true
1050 | dev: true
1051 | optional: true
1052 |
1053 | /function-bind/1.1.1:
1054 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1055 | dev: true
1056 |
1057 | /get-func-name/2.0.0:
1058 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
1059 | dev: true
1060 |
1061 | /glob-parent/5.1.2:
1062 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1063 | engines: {node: '>= 6'}
1064 | dependencies:
1065 | is-glob: 4.0.3
1066 | dev: true
1067 |
1068 | /glob-parent/6.0.2:
1069 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1070 | engines: {node: '>=10.13.0'}
1071 | dependencies:
1072 | is-glob: 4.0.3
1073 | dev: true
1074 |
1075 | /glob/7.2.3:
1076 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1077 | dependencies:
1078 | fs.realpath: 1.0.0
1079 | inflight: 1.0.6
1080 | inherits: 2.0.4
1081 | minimatch: 3.1.2
1082 | once: 1.4.0
1083 | path-is-absolute: 1.0.1
1084 | dev: true
1085 |
1086 | /globals/13.20.0:
1087 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
1088 | engines: {node: '>=8'}
1089 | dependencies:
1090 | type-fest: 0.20.2
1091 | dev: true
1092 |
1093 | /globalyzer/0.1.0:
1094 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
1095 | dev: true
1096 |
1097 | /globby/11.1.0:
1098 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1099 | engines: {node: '>=10'}
1100 | dependencies:
1101 | array-union: 2.1.0
1102 | dir-glob: 3.0.1
1103 | fast-glob: 3.2.12
1104 | ignore: 5.2.4
1105 | merge2: 1.4.1
1106 | slash: 3.0.0
1107 | dev: true
1108 |
1109 | /globrex/0.1.2:
1110 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
1111 | dev: true
1112 |
1113 | /graceful-fs/4.2.10:
1114 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
1115 | dev: true
1116 |
1117 | /grapheme-splitter/1.0.4:
1118 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
1119 | dev: true
1120 |
1121 | /has-flag/4.0.0:
1122 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1123 | engines: {node: '>=8'}
1124 | dev: true
1125 |
1126 | /has/1.0.3:
1127 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1128 | engines: {node: '>= 0.4.0'}
1129 | dependencies:
1130 | function-bind: 1.1.1
1131 | dev: true
1132 |
1133 | /ignore/5.2.4:
1134 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
1135 | engines: {node: '>= 4'}
1136 | dev: true
1137 |
1138 | /import-fresh/3.3.0:
1139 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1140 | engines: {node: '>=6'}
1141 | dependencies:
1142 | parent-module: 1.0.1
1143 | resolve-from: 4.0.0
1144 | dev: true
1145 |
1146 | /import-meta-resolve/2.2.1:
1147 | resolution: {integrity: sha512-C6lLL7EJPY44kBvA80gq4uMsVFw5x3oSKfuMl1cuZ2RkI5+UJqQXgn+6hlUew0y4ig7Ypt4CObAAIzU53Nfpuw==}
1148 | dev: true
1149 |
1150 | /imurmurhash/0.1.4:
1151 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1152 | engines: {node: '>=0.8.19'}
1153 | dev: true
1154 |
1155 | /inflight/1.0.6:
1156 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1157 | dependencies:
1158 | once: 1.4.0
1159 | wrappy: 1.0.2
1160 | dev: true
1161 |
1162 | /inherits/2.0.4:
1163 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1164 | dev: true
1165 |
1166 | /is-binary-path/2.1.0:
1167 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1168 | engines: {node: '>=8'}
1169 | dependencies:
1170 | binary-extensions: 2.2.0
1171 | dev: true
1172 |
1173 | /is-core-module/2.11.0:
1174 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
1175 | dependencies:
1176 | has: 1.0.3
1177 | dev: true
1178 |
1179 | /is-extglob/2.1.1:
1180 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1181 | engines: {node: '>=0.10.0'}
1182 | dev: true
1183 |
1184 | /is-glob/4.0.3:
1185 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1186 | engines: {node: '>=0.10.0'}
1187 | dependencies:
1188 | is-extglob: 2.1.1
1189 | dev: true
1190 |
1191 | /is-number/7.0.0:
1192 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1193 | engines: {node: '>=0.12.0'}
1194 | dev: true
1195 |
1196 | /is-path-inside/3.0.3:
1197 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
1198 | engines: {node: '>=8'}
1199 | dev: true
1200 |
1201 | /isexe/2.0.0:
1202 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1203 | dev: true
1204 |
1205 | /js-sdsl/4.3.0:
1206 | resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==}
1207 | dev: true
1208 |
1209 | /js-yaml/4.1.0:
1210 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1211 | hasBin: true
1212 | dependencies:
1213 | argparse: 2.0.1
1214 | dev: true
1215 |
1216 | /json-schema-traverse/0.4.1:
1217 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1218 | dev: true
1219 |
1220 | /json-stable-stringify-without-jsonify/1.0.1:
1221 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1222 | dev: true
1223 |
1224 | /kleur/4.1.5:
1225 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
1226 | engines: {node: '>=6'}
1227 | dev: true
1228 |
1229 | /levn/0.4.1:
1230 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1231 | engines: {node: '>= 0.8.0'}
1232 | dependencies:
1233 | prelude-ls: 1.2.1
1234 | type-check: 0.4.0
1235 | dev: true
1236 |
1237 | /local-pkg/0.4.3:
1238 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
1239 | engines: {node: '>=14'}
1240 | dev: true
1241 |
1242 | /locate-path/6.0.0:
1243 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1244 | engines: {node: '>=10'}
1245 | dependencies:
1246 | p-locate: 5.0.0
1247 | dev: true
1248 |
1249 | /lodash.merge/4.6.2:
1250 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1251 | dev: true
1252 |
1253 | /loupe/2.3.6:
1254 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
1255 | dependencies:
1256 | get-func-name: 2.0.0
1257 | dev: true
1258 |
1259 | /lower-case/2.0.2:
1260 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
1261 | dependencies:
1262 | tslib: 2.5.0
1263 | dev: true
1264 |
1265 | /lru-cache/6.0.0:
1266 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1267 | engines: {node: '>=10'}
1268 | dependencies:
1269 | yallist: 4.0.0
1270 | dev: true
1271 |
1272 | /magic-string/0.27.0:
1273 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
1274 | engines: {node: '>=12'}
1275 | dependencies:
1276 | '@jridgewell/sourcemap-codec': 1.4.14
1277 |
1278 | /merge2/1.4.1:
1279 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1280 | engines: {node: '>= 8'}
1281 | dev: true
1282 |
1283 | /micromatch/4.0.5:
1284 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1285 | engines: {node: '>=8.6'}
1286 | dependencies:
1287 | braces: 3.0.2
1288 | picomatch: 2.3.1
1289 | dev: true
1290 |
1291 | /mime/3.0.0:
1292 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
1293 | engines: {node: '>=10.0.0'}
1294 | hasBin: true
1295 | dev: true
1296 |
1297 | /min-indent/1.0.1:
1298 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
1299 | engines: {node: '>=4'}
1300 | dev: true
1301 |
1302 | /minimatch/3.1.2:
1303 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1304 | dependencies:
1305 | brace-expansion: 1.1.11
1306 | dev: true
1307 |
1308 | /minimist/1.2.7:
1309 | resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
1310 | dev: true
1311 |
1312 | /mkdirp/0.5.6:
1313 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
1314 | hasBin: true
1315 | dependencies:
1316 | minimist: 1.2.7
1317 | dev: true
1318 |
1319 | /mri/1.2.0:
1320 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1321 | engines: {node: '>=4'}
1322 | dev: true
1323 |
1324 | /mrmime/1.0.1:
1325 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
1326 | engines: {node: '>=10'}
1327 | dev: true
1328 |
1329 | /ms/2.1.2:
1330 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1331 | dev: true
1332 |
1333 | /nanoid/3.3.4:
1334 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
1335 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1336 | hasBin: true
1337 | dev: true
1338 |
1339 | /natural-compare-lite/1.4.0:
1340 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
1341 | dev: true
1342 |
1343 | /natural-compare/1.4.0:
1344 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1345 | dev: true
1346 |
1347 | /no-case/3.0.4:
1348 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
1349 | dependencies:
1350 | lower-case: 2.0.2
1351 | tslib: 2.5.0
1352 | dev: true
1353 |
1354 | /normalize-path/3.0.0:
1355 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1356 | engines: {node: '>=0.10.0'}
1357 | dev: true
1358 |
1359 | /once/1.4.0:
1360 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1361 | dependencies:
1362 | wrappy: 1.0.2
1363 | dev: true
1364 |
1365 | /optionator/0.9.1:
1366 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
1367 | engines: {node: '>= 0.8.0'}
1368 | dependencies:
1369 | deep-is: 0.1.4
1370 | fast-levenshtein: 2.0.6
1371 | levn: 0.4.1
1372 | prelude-ls: 1.2.1
1373 | type-check: 0.4.0
1374 | word-wrap: 1.2.3
1375 | dev: true
1376 |
1377 | /p-limit/3.1.0:
1378 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1379 | engines: {node: '>=10'}
1380 | dependencies:
1381 | yocto-queue: 0.1.0
1382 | dev: true
1383 |
1384 | /p-locate/5.0.0:
1385 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1386 | engines: {node: '>=10'}
1387 | dependencies:
1388 | p-limit: 3.1.0
1389 | dev: true
1390 |
1391 | /parent-module/1.0.1:
1392 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1393 | engines: {node: '>=6'}
1394 | dependencies:
1395 | callsites: 3.1.0
1396 | dev: true
1397 |
1398 | /pascal-case/3.1.2:
1399 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
1400 | dependencies:
1401 | no-case: 3.0.4
1402 | tslib: 2.5.0
1403 | dev: true
1404 |
1405 | /path-exists/4.0.0:
1406 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1407 | engines: {node: '>=8'}
1408 | dev: true
1409 |
1410 | /path-is-absolute/1.0.1:
1411 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1412 | engines: {node: '>=0.10.0'}
1413 | dev: true
1414 |
1415 | /path-key/3.1.1:
1416 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1417 | engines: {node: '>=8'}
1418 | dev: true
1419 |
1420 | /path-parse/1.0.7:
1421 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1422 | dev: true
1423 |
1424 | /path-type/4.0.0:
1425 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1426 | engines: {node: '>=8'}
1427 | dev: true
1428 |
1429 | /pathval/1.1.1:
1430 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
1431 | dev: true
1432 |
1433 | /picocolors/1.0.0:
1434 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1435 | dev: true
1436 |
1437 | /picomatch/2.3.1:
1438 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1439 | engines: {node: '>=8.6'}
1440 | dev: true
1441 |
1442 | /playwright-core/1.30.0:
1443 | resolution: {integrity: sha512-7AnRmTCf+GVYhHbLJsGUtskWTE33SwMZkybJ0v6rqR1boxq2x36U7p1vDRV7HO2IwTZgmycracLxPEJI49wu4g==}
1444 | engines: {node: '>=14'}
1445 | hasBin: true
1446 | dev: true
1447 |
1448 | /postcss/8.4.21:
1449 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
1450 | engines: {node: ^10 || ^12 || >=14}
1451 | dependencies:
1452 | nanoid: 3.3.4
1453 | picocolors: 1.0.0
1454 | source-map-js: 1.0.2
1455 | dev: true
1456 |
1457 | /prelude-ls/1.2.1:
1458 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1459 | engines: {node: '>= 0.8.0'}
1460 | dev: true
1461 |
1462 | /prettier-plugin-svelte/2.9.0_kdmmghgdi3ngrsq6otxkjilbry:
1463 | resolution: {integrity: sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw==}
1464 | peerDependencies:
1465 | prettier: ^1.16.4 || ^2.0.0
1466 | svelte: ^3.2.0
1467 | dependencies:
1468 | prettier: 2.8.3
1469 | svelte: 3.55.1
1470 | dev: true
1471 |
1472 | /prettier/2.8.3:
1473 | resolution: {integrity: sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==}
1474 | engines: {node: '>=10.13.0'}
1475 | hasBin: true
1476 | dev: true
1477 |
1478 | /punycode/2.3.0:
1479 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
1480 | engines: {node: '>=6'}
1481 | dev: true
1482 |
1483 | /queue-microtask/1.2.3:
1484 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1485 | dev: true
1486 |
1487 | /readdirp/3.6.0:
1488 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1489 | engines: {node: '>=8.10.0'}
1490 | dependencies:
1491 | picomatch: 2.3.1
1492 | dev: true
1493 |
1494 | /regexpp/3.2.0:
1495 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
1496 | engines: {node: '>=8'}
1497 | dev: true
1498 |
1499 | /resolve-from/4.0.0:
1500 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1501 | engines: {node: '>=4'}
1502 | dev: true
1503 |
1504 | /resolve/1.22.1:
1505 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
1506 | hasBin: true
1507 | dependencies:
1508 | is-core-module: 2.11.0
1509 | path-parse: 1.0.7
1510 | supports-preserve-symlinks-flag: 1.0.0
1511 | dev: true
1512 |
1513 | /reusify/1.0.4:
1514 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1515 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1516 | dev: true
1517 |
1518 | /rimraf/2.7.1:
1519 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
1520 | hasBin: true
1521 | dependencies:
1522 | glob: 7.2.3
1523 | dev: true
1524 |
1525 | /rimraf/3.0.2:
1526 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
1527 | hasBin: true
1528 | dependencies:
1529 | glob: 7.2.3
1530 | dev: true
1531 |
1532 | /rollup/3.13.0:
1533 | resolution: {integrity: sha512-HJwQtrXAc0AmyDohTJ/2c+Bx/sWPScJLlAUJ1kuD7rAkCro8Cr2SnVB2gVYBiSLxpgD2kZ24jbyXtG++GumrYQ==}
1534 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
1535 | hasBin: true
1536 | optionalDependencies:
1537 | fsevents: 2.3.2
1538 | dev: true
1539 |
1540 | /run-parallel/1.2.0:
1541 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1542 | dependencies:
1543 | queue-microtask: 1.2.3
1544 | dev: true
1545 |
1546 | /sade/1.8.1:
1547 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1548 | engines: {node: '>=6'}
1549 | dependencies:
1550 | mri: 1.2.0
1551 | dev: true
1552 |
1553 | /sander/0.5.1:
1554 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
1555 | dependencies:
1556 | es6-promise: 3.3.1
1557 | graceful-fs: 4.2.10
1558 | mkdirp: 0.5.6
1559 | rimraf: 2.7.1
1560 | dev: true
1561 |
1562 | /semver/7.3.8:
1563 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
1564 | engines: {node: '>=10'}
1565 | hasBin: true
1566 | dependencies:
1567 | lru-cache: 6.0.0
1568 | dev: true
1569 |
1570 | /set-cookie-parser/2.5.1:
1571 | resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==}
1572 | dev: true
1573 |
1574 | /shebang-command/2.0.0:
1575 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1576 | engines: {node: '>=8'}
1577 | dependencies:
1578 | shebang-regex: 3.0.0
1579 | dev: true
1580 |
1581 | /shebang-regex/3.0.0:
1582 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1583 | engines: {node: '>=8'}
1584 | dev: true
1585 |
1586 | /sirv/2.0.2:
1587 | resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==}
1588 | engines: {node: '>= 10'}
1589 | dependencies:
1590 | '@polka/url': 1.0.0-next.21
1591 | mrmime: 1.0.1
1592 | totalist: 3.0.0
1593 | dev: true
1594 |
1595 | /slash/3.0.0:
1596 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1597 | engines: {node: '>=8'}
1598 | dev: true
1599 |
1600 | /sorcery/0.11.0:
1601 | resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==}
1602 | hasBin: true
1603 | dependencies:
1604 | '@jridgewell/sourcemap-codec': 1.4.14
1605 | buffer-crc32: 0.2.13
1606 | minimist: 1.2.7
1607 | sander: 0.5.1
1608 | dev: true
1609 |
1610 | /source-map-js/1.0.2:
1611 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1612 | engines: {node: '>=0.10.0'}
1613 | dev: true
1614 |
1615 | /source-map/0.6.1:
1616 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1617 | engines: {node: '>=0.10.0'}
1618 | dev: true
1619 |
1620 | /streamsearch/1.1.0:
1621 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
1622 | engines: {node: '>=10.0.0'}
1623 | dev: true
1624 |
1625 | /strip-ansi/6.0.1:
1626 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1627 | engines: {node: '>=8'}
1628 | dependencies:
1629 | ansi-regex: 5.0.1
1630 | dev: true
1631 |
1632 | /strip-indent/3.0.0:
1633 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
1634 | engines: {node: '>=8'}
1635 | dependencies:
1636 | min-indent: 1.0.1
1637 | dev: true
1638 |
1639 | /strip-json-comments/3.1.1:
1640 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1641 | engines: {node: '>=8'}
1642 | dev: true
1643 |
1644 | /strip-literal/1.0.1:
1645 | resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==}
1646 | dependencies:
1647 | acorn: 8.8.2
1648 | dev: true
1649 |
1650 | /supports-color/7.2.0:
1651 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1652 | engines: {node: '>=8'}
1653 | dependencies:
1654 | has-flag: 4.0.0
1655 | dev: true
1656 |
1657 | /supports-preserve-symlinks-flag/1.0.0:
1658 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1659 | engines: {node: '>= 0.4'}
1660 | dev: true
1661 |
1662 | /svelte-check/3.0.3_svelte@3.55.1:
1663 | resolution: {integrity: sha512-ByBFXo3bfHRGIsYEasHkdMhLkNleVfszX/Ns1oip58tPJlKdo5Ssr8kgVIuo5oq00hss8AIcdesuy0Xt0BcTvg==}
1664 | hasBin: true
1665 | peerDependencies:
1666 | svelte: ^3.55.0
1667 | dependencies:
1668 | '@jridgewell/trace-mapping': 0.3.17
1669 | chokidar: 3.5.3
1670 | fast-glob: 3.2.12
1671 | import-fresh: 3.3.0
1672 | picocolors: 1.0.0
1673 | sade: 1.8.1
1674 | svelte: 3.55.1
1675 | svelte-preprocess: 5.0.1_4x7phaipmicbaooxtnresslofa
1676 | typescript: 4.9.5
1677 | transitivePeerDependencies:
1678 | - '@babel/core'
1679 | - coffeescript
1680 | - less
1681 | - postcss
1682 | - postcss-load-config
1683 | - pug
1684 | - sass
1685 | - stylus
1686 | - sugarss
1687 | dev: true
1688 |
1689 | /svelte-hmr/0.15.1_svelte@3.55.1:
1690 | resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==}
1691 | engines: {node: ^12.20 || ^14.13.1 || >= 16}
1692 | peerDependencies:
1693 | svelte: '>=3.19.0'
1694 | dependencies:
1695 | svelte: 3.55.1
1696 | dev: true
1697 |
1698 | /svelte-preprocess/5.0.1_4x7phaipmicbaooxtnresslofa:
1699 | resolution: {integrity: sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ==}
1700 | engines: {node: '>= 14.10.0'}
1701 | requiresBuild: true
1702 | peerDependencies:
1703 | '@babel/core': ^7.10.2
1704 | coffeescript: ^2.5.1
1705 | less: ^3.11.3 || ^4.0.0
1706 | postcss: ^7 || ^8
1707 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0
1708 | pug: ^3.0.0
1709 | sass: ^1.26.8
1710 | stylus: ^0.55.0
1711 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0
1712 | svelte: ^3.23.0
1713 | typescript: ^3.9.5 || ^4.0.0
1714 | peerDependenciesMeta:
1715 | '@babel/core':
1716 | optional: true
1717 | coffeescript:
1718 | optional: true
1719 | less:
1720 | optional: true
1721 | postcss:
1722 | optional: true
1723 | postcss-load-config:
1724 | optional: true
1725 | pug:
1726 | optional: true
1727 | sass:
1728 | optional: true
1729 | stylus:
1730 | optional: true
1731 | sugarss:
1732 | optional: true
1733 | typescript:
1734 | optional: true
1735 | dependencies:
1736 | '@types/pug': 2.0.6
1737 | '@types/sass': 1.43.1
1738 | detect-indent: 6.1.0
1739 | magic-string: 0.27.0
1740 | sorcery: 0.11.0
1741 | strip-indent: 3.0.0
1742 | svelte: 3.55.1
1743 | typescript: 4.9.5
1744 | dev: true
1745 |
1746 | /svelte/3.55.1:
1747 | resolution: {integrity: sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==}
1748 | engines: {node: '>= 8'}
1749 | dev: true
1750 |
1751 | /svelte2tsx/0.6.1_4x7phaipmicbaooxtnresslofa:
1752 | resolution: {integrity: sha512-O/1+5UyChfmhp1/GUv8b8iveTrn6eZwHxEXc+rw7LMKRidr9KHk5w/EiliLjDUwHa2VA6CoEty+CQylROVU4Sw==}
1753 | peerDependencies:
1754 | svelte: ^3.55
1755 | typescript: ^4.9.4
1756 | dependencies:
1757 | dedent-js: 1.0.1
1758 | pascal-case: 3.1.2
1759 | svelte: 3.55.1
1760 | typescript: 4.9.5
1761 | dev: true
1762 |
1763 | /text-table/0.2.0:
1764 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
1765 | dev: true
1766 |
1767 | /tiny-glob/0.2.9:
1768 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
1769 | dependencies:
1770 | globalyzer: 0.1.0
1771 | globrex: 0.1.2
1772 | dev: true
1773 |
1774 | /tinybench/2.3.1:
1775 | resolution: {integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==}
1776 | dev: true
1777 |
1778 | /tinypool/0.3.1:
1779 | resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==}
1780 | engines: {node: '>=14.0.0'}
1781 | dev: true
1782 |
1783 | /tinyspy/1.0.2:
1784 | resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==}
1785 | engines: {node: '>=14.0.0'}
1786 | dev: true
1787 |
1788 | /to-regex-range/5.0.1:
1789 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1790 | engines: {node: '>=8.0'}
1791 | dependencies:
1792 | is-number: 7.0.0
1793 | dev: true
1794 |
1795 | /totalist/3.0.0:
1796 | resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==}
1797 | engines: {node: '>=6'}
1798 | dev: true
1799 |
1800 | /tslib/1.14.1:
1801 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
1802 | dev: true
1803 |
1804 | /tslib/2.5.0:
1805 | resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
1806 | dev: true
1807 |
1808 | /tsutils/3.21.0_typescript@4.9.5:
1809 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
1810 | engines: {node: '>= 6'}
1811 | peerDependencies:
1812 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
1813 | dependencies:
1814 | tslib: 1.14.1
1815 | typescript: 4.9.5
1816 | dev: true
1817 |
1818 | /type-check/0.4.0:
1819 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1820 | engines: {node: '>= 0.8.0'}
1821 | dependencies:
1822 | prelude-ls: 1.2.1
1823 | dev: true
1824 |
1825 | /type-detect/4.0.8:
1826 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
1827 | engines: {node: '>=4'}
1828 | dev: true
1829 |
1830 | /type-fest/0.20.2:
1831 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
1832 | engines: {node: '>=10'}
1833 | dev: true
1834 |
1835 | /typescript/4.9.5:
1836 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
1837 | engines: {node: '>=4.2.0'}
1838 | hasBin: true
1839 | dev: true
1840 |
1841 | /undici/5.16.0:
1842 | resolution: {integrity: sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==}
1843 | engines: {node: '>=12.18'}
1844 | dependencies:
1845 | busboy: 1.6.0
1846 | dev: true
1847 |
1848 | /uri-js/4.4.1:
1849 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1850 | dependencies:
1851 | punycode: 2.3.0
1852 | dev: true
1853 |
1854 | /vite/4.1.1:
1855 | resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==}
1856 | engines: {node: ^14.18.0 || >=16.0.0}
1857 | hasBin: true
1858 | peerDependencies:
1859 | '@types/node': '>= 14'
1860 | less: '*'
1861 | sass: '*'
1862 | stylus: '*'
1863 | sugarss: '*'
1864 | terser: ^5.4.0
1865 | peerDependenciesMeta:
1866 | '@types/node':
1867 | optional: true
1868 | less:
1869 | optional: true
1870 | sass:
1871 | optional: true
1872 | stylus:
1873 | optional: true
1874 | sugarss:
1875 | optional: true
1876 | terser:
1877 | optional: true
1878 | dependencies:
1879 | esbuild: 0.16.17
1880 | postcss: 8.4.21
1881 | resolve: 1.22.1
1882 | rollup: 3.13.0
1883 | optionalDependencies:
1884 | fsevents: 2.3.2
1885 | dev: true
1886 |
1887 | /vite/4.1.1_@types+node@18.11.18:
1888 | resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==}
1889 | engines: {node: ^14.18.0 || >=16.0.0}
1890 | hasBin: true
1891 | peerDependencies:
1892 | '@types/node': '>= 14'
1893 | less: '*'
1894 | sass: '*'
1895 | stylus: '*'
1896 | sugarss: '*'
1897 | terser: ^5.4.0
1898 | peerDependenciesMeta:
1899 | '@types/node':
1900 | optional: true
1901 | less:
1902 | optional: true
1903 | sass:
1904 | optional: true
1905 | stylus:
1906 | optional: true
1907 | sugarss:
1908 | optional: true
1909 | terser:
1910 | optional: true
1911 | dependencies:
1912 | '@types/node': 18.11.18
1913 | esbuild: 0.16.17
1914 | postcss: 8.4.21
1915 | resolve: 1.22.1
1916 | rollup: 3.13.0
1917 | optionalDependencies:
1918 | fsevents: 2.3.2
1919 | dev: true
1920 |
1921 | /vitefu/0.2.4_vite@4.1.1:
1922 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==}
1923 | peerDependencies:
1924 | vite: ^3.0.0 || ^4.0.0
1925 | peerDependenciesMeta:
1926 | vite:
1927 | optional: true
1928 | dependencies:
1929 | vite: 4.1.1
1930 | dev: true
1931 |
1932 | /vitest/0.25.8:
1933 | resolution: {integrity: sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==}
1934 | engines: {node: '>=v14.16.0'}
1935 | hasBin: true
1936 | peerDependencies:
1937 | '@edge-runtime/vm': '*'
1938 | '@vitest/browser': '*'
1939 | '@vitest/ui': '*'
1940 | happy-dom: '*'
1941 | jsdom: '*'
1942 | peerDependenciesMeta:
1943 | '@edge-runtime/vm':
1944 | optional: true
1945 | '@vitest/browser':
1946 | optional: true
1947 | '@vitest/ui':
1948 | optional: true
1949 | happy-dom:
1950 | optional: true
1951 | jsdom:
1952 | optional: true
1953 | dependencies:
1954 | '@types/chai': 4.3.4
1955 | '@types/chai-subset': 1.3.3
1956 | '@types/node': 18.11.18
1957 | acorn: 8.8.2
1958 | acorn-walk: 8.2.0
1959 | chai: 4.3.7
1960 | debug: 4.3.4
1961 | local-pkg: 0.4.3
1962 | source-map: 0.6.1
1963 | strip-literal: 1.0.1
1964 | tinybench: 2.3.1
1965 | tinypool: 0.3.1
1966 | tinyspy: 1.0.2
1967 | vite: 4.1.1_@types+node@18.11.18
1968 | transitivePeerDependencies:
1969 | - less
1970 | - sass
1971 | - stylus
1972 | - sugarss
1973 | - supports-color
1974 | - terser
1975 | dev: true
1976 |
1977 | /which/2.0.2:
1978 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1979 | engines: {node: '>= 8'}
1980 | hasBin: true
1981 | dependencies:
1982 | isexe: 2.0.0
1983 | dev: true
1984 |
1985 | /word-wrap/1.2.3:
1986 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
1987 | engines: {node: '>=0.10.0'}
1988 | dev: true
1989 |
1990 | /wrappy/1.0.2:
1991 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1992 | dev: true
1993 |
1994 | /yallist/4.0.0:
1995 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
1996 | dev: true
1997 |
1998 | /yocto-queue/0.1.0:
1999 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
2000 | engines: {node: '>=10'}
2001 | dev: true
2002 |
--------------------------------------------------------------------------------
/src/app.d.ts:
--------------------------------------------------------------------------------
1 | // See https://kit.svelte.dev/docs/types#app
2 | // for information about these interfaces
3 | declare global {
4 | namespace App {
5 | // interface Error {}
6 | // interface Locals {}
7 | // interface PageData {}
8 | // interface Platform {}
9 | }
10 | }
11 |
12 | export {};
13 |
--------------------------------------------------------------------------------
/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %sveltekit.head%
8 |
9 |
10 | %sveltekit.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/index.test.ts:
--------------------------------------------------------------------------------
1 | import { describe, it, expect } from 'vitest';
2 |
3 | describe('sum test', () => {
4 | it('adds 1 + 2 to equal 3', () => {
5 | expect(1 + 2).toBe(3);
6 | });
7 | });
8 |
--------------------------------------------------------------------------------
/src/lib/constants.ts:
--------------------------------------------------------------------------------
1 | /// @sveltekit-defer-constants
2 | export const env = {
3 | cookie_name: 'sveltekit-defer-user',
4 | stream_pathname: '/__sveltekit-defer-events',
5 | stream_event: 'sveltekit-defer-resolved',
6 | promise_field: '__sveltekit-defer-promises'
7 | } as const;
8 |
9 | export type Env = typeof env;
10 |
11 | export type SveltekitDeferOptions = {
12 | -readonly [K in keyof Env]?: LiteralToPrimitive;
13 | };
14 |
15 | export type PromisesField = Env['promise_field'];
16 |
17 | /*
18 | MIT License
19 |
20 | Copyright (c) Sindre Sorhus (https://sindresorhus.com)
21 |
22 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
23 |
24 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
25 |
26 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 | */
28 | type LiteralToPrimitive = T extends number
29 | ? number
30 | : T extends bigint
31 | ? bigint
32 | : T extends string
33 | ? string
34 | : T extends boolean
35 | ? boolean
36 | : T extends symbol
37 | ? symbol
38 | : T extends null
39 | ? null
40 | : T extends undefined
41 | ? undefined
42 | : T extends any[]
43 | ? LiteralToPrimitive[]
44 | : T extends object
45 | ? {
46 | [K in keyof T]: LiteralToPrimitive;
47 | }
48 | : never;
49 |
--------------------------------------------------------------------------------
/src/lib/defer.ts:
--------------------------------------------------------------------------------
1 | import type { ServerLoadEvent } from '@sveltejs/kit';
2 | import { env, type PromisesField } from './constants';
3 | import * as devalue from 'devalue';
4 |
5 | function pushEvent(event: ServerLoadEvent, data: any) {
6 | event.fetch(`${env.stream_pathname}?load=${event.url}`, {
7 | method: 'POST',
8 | body: JSON.stringify(data)
9 | });
10 | }
11 |
12 | type GetPromises = {
13 | [Key in keyof T]: T[Key] extends Promise ? Key : never;
14 | }[keyof T];
15 |
16 | type Transform = {
17 | [Key in keyof T]: T[Key];
18 | } & {
19 | [K in PromisesField]: GetPromises[];
20 | };
21 |
22 | function get_promise_or_throw(promise: Promise) {
23 | return Promise.race([promise, Promise.reject()]);
24 | }
25 |
26 | function stringify(value: any) {
27 | let ret;
28 | try {
29 | ret = devalue.stringify(value);
30 | } catch (e) {
31 | ret = JSON.stringify(value);
32 | }
33 | return ret;
34 | }
35 |
36 | export function defer any>(
37 | func: T
38 | ): (event: ServerLoadEvent) => Promise>>> {
39 | return async (event: ServerLoadEvent) => {
40 | if (!event.cookies.get(env.cookie_name)) {
41 | event.cookies.set(env.cookie_name, crypto.randomUUID(), {
42 | path: '/',
43 | httpOnly: true,
44 | secure: true
45 | });
46 | }
47 | const returnVal = await func(event);
48 | const keys = Object.keys(returnVal as any);
49 | for (const _key of keys) {
50 | const key = _key as keyof typeof returnVal;
51 | if ((returnVal as any)[key] instanceof Promise) {
52 | try {
53 | const actualValue = await get_promise_or_throw(returnVal[key]);
54 | returnVal[key] = actualValue;
55 | } catch (e) {
56 | if (!returnVal[env.promise_field]) {
57 | returnVal[env.promise_field] = [];
58 | }
59 | returnVal[env.promise_field].push(key);
60 | returnVal[key]
61 | .then((res: any) => {
62 | pushEvent(event, { value: stringify(res), key, kind: 'resolve' });
63 | })
64 | .catch((error: any) => {
65 | pushEvent(event, { value: stringify(error), key, kind: 'reject' });
66 | });
67 | returnVal[key] = '__PROMISE_TO_DEFER__';
68 | }
69 | }
70 | }
71 | return returnVal;
72 | };
73 | }
74 |
--------------------------------------------------------------------------------
/src/lib/handle.ts:
--------------------------------------------------------------------------------
1 | import type { Handle } from '@sveltejs/kit';
2 | import { env } from './constants';
3 |
4 | const controllers = new Map>();
5 | const queued = new Map) => void)[]>();
6 |
7 | async function enqueue(request: Request, key: string) {
8 | const controller = controllers.get(key);
9 | const data = await request.clone().text();
10 | const to_write = `event: ${env.stream_event}\ndata: ${data}\n\n`;
11 | const flush = (controller: ReadableStreamController) => {
12 | const encoder = new TextEncoder();
13 | controller.enqueue(encoder.encode(to_write));
14 | };
15 | if (!controller) {
16 | let queue = queued.get(key);
17 | if (!queue) {
18 | queue = [];
19 | queued.set(key, queue);
20 | }
21 | queue.push(flush);
22 | return new Response(null, {
23 | status: 401
24 | });
25 | }
26 | flush(controller);
27 | return new Response(null, {
28 | status: 200
29 | });
30 | }
31 |
32 | export const defer_handle: Handle = async ({ event, resolve }) => {
33 | const { searchParams, pathname } = new URL(event.request.url);
34 | if (pathname === env.stream_pathname) {
35 | const defer_user = event.cookies.get(env.cookie_name);
36 | const load = searchParams.get('load') ?? '';
37 | const key = [defer_user, load].toString();
38 | if (!defer_user) {
39 | return new Response(null, {
40 | status: 401
41 | });
42 | }
43 | if (event.request.method === 'GET') {
44 | let controller: ReadableStreamController;
45 | return new Response(
46 | new ReadableStream({
47 | start: (_) => {
48 | controller = _;
49 | const to_flush = queued.get(key) ?? [];
50 | let flush = to_flush.pop();
51 | while (flush) {
52 | flush(controller);
53 | flush = to_flush.pop();
54 | }
55 | controllers.set(key, controller);
56 | },
57 | cancel: () => {
58 | controllers.delete(key);
59 | }
60 | }),
61 | {
62 | headers: {
63 | 'Cache-Control': 'no-store',
64 | 'Content-Type': 'text/event-stream',
65 | Connection: 'keep-alive'
66 | },
67 | status: 200
68 | }
69 | );
70 | } else if (event.request.method === 'POST') {
71 | return enqueue(event.request, key);
72 | }
73 | }
74 | const response = await resolve(event);
75 | return response;
76 | };
77 |
--------------------------------------------------------------------------------
/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | export { defer_handle } from './handle.js';
2 | export { defer } from './defer.js';
3 | export { get_data } from './store.js';
4 |
5 | // Reexport your entry components here
6 |
--------------------------------------------------------------------------------
/src/lib/store.ts:
--------------------------------------------------------------------------------
1 | import { page } from '$app/stores';
2 | import { onDestroy, onMount } from 'svelte';
3 | import { derived, get } from 'svelte/store';
4 | import { env, type PromisesField } from './constants';
5 | import * as devalue from 'devalue';
6 |
7 | function parse(value: any) {
8 | let ret;
9 | try {
10 | ret = devalue.parse(value);
11 | } catch (e) {
12 | ret = JSON.parse(value);
13 | }
14 | return ret;
15 | }
16 |
17 | type TransformBack = Omit<
18 | {
19 | [Key in keyof T]: [Key] extends T[PromisesField] ? Promise : T[Key];
20 | },
21 | PromisesField
22 | >;
23 |
24 | export function get_data() {
25 | const resolvers: Map void; reject: (arg: any) => void }> =
26 | new Map();
27 | let eventSource: EventSource;
28 | onMount(() => {
29 | const $page = get(page);
30 | eventSource = new EventSource(`${env.stream_pathname}?load=${$page.url.href}`, {
31 | withCredentials: true
32 | });
33 | eventSource?.addEventListener(env.stream_event, (evt) => {
34 | const resolved = JSON.parse(evt.data);
35 | const resolver = resolvers.get(resolved.key);
36 | if (resolved.kind === 'resolve') {
37 | resolver?.resolve(parse(resolved.value));
38 | } else {
39 | resolver?.reject(parse(resolved.value));
40 | }
41 | });
42 | });
43 | onDestroy(() => {
44 | eventSource?.close();
45 | });
46 | const retval = derived>(page, ($page) => {
47 | const data = $page.data;
48 | const { [env.promise_field]: promises = [] } = data;
49 | resolvers.clear();
50 | Object.keys(data).forEach((_key) => {
51 | const key = _key as keyof typeof data;
52 | if (promises.includes(key)) {
53 | data[key] = new Promise((resolve, reject) => {
54 | resolvers.set(key, { resolve, reject });
55 | });
56 | }
57 | });
58 | delete data[env.promise_field];
59 | return data as TransformBack;
60 | });
61 |
62 | return retval;
63 | }
64 |
--------------------------------------------------------------------------------
/src/lib/vite/index.ts:
--------------------------------------------------------------------------------
1 | import type { SveltekitDeferOptions } from '$lib/constants';
2 | import type { Plugin } from 'vite';
3 | import MagicString from 'magic-string';
4 | import fs from 'fs';
5 |
6 | export const env_parser: {
7 | [K in keyof SveltekitDeferOptions]?: (
8 | to_parse: SveltekitDeferOptions[K]
9 | ) => SveltekitDeferOptions[K];
10 | } = {
11 | stream_pathname(to_parse) {
12 | if (!to_parse || to_parse.startsWith('/')) return to_parse;
13 | return `/${to_parse}`;
14 | }
15 | };
16 |
17 | function fix_code(code: string, options: SveltekitDeferOptions) {
18 | if (code.startsWith('/// @sveltekit-defer-constants')) {
19 | const magicCode = new MagicString(code);
20 | Object.keys(options).forEach((_key) => {
21 | const key = _key as keyof typeof options;
22 | const to_replace = env_parser[key]?.(options[key]) ?? options[key];
23 | if (to_replace) {
24 | magicCode.replace(
25 | new RegExp(`${key}:\\s\\'.*\\',?\\r?\\n`),
26 | `${key}: '${to_replace}',\r\n`
27 | );
28 | }
29 | });
30 | return {
31 | code: magicCode.toString(),
32 | map: magicCode.generateMap()
33 | };
34 | }
35 | }
36 |
37 | export function sveltekit_defer(options: SveltekitDeferOptions): Plugin {
38 | return {
39 | name: 'vite-plugin-sveltekit-defer',
40 | config() {
41 | return {
42 | optimizeDeps: {
43 | force: true,
44 | esbuildOptions: {
45 | plugins: [
46 | {
47 | name: 'esbuild-plugin-fix-constants',
48 | setup(build) {
49 | build.onLoad(
50 | {
51 | filter: /constants/
52 | },
53 | ({ path }) => {
54 | if (!path.includes('sveltekit-defer')) return;
55 | const code = fs.readFileSync(path, 'utf-8');
56 | const contents = fix_code(code, options)?.code;
57 | return contents
58 | ? {
59 | contents
60 | }
61 | : undefined;
62 | }
63 | );
64 | }
65 | }
66 | ]
67 | }
68 | }
69 | };
70 | },
71 | transform(code, id) {
72 | if (id.endsWith('node_modules/sveltekit-defer/constants.js')) {
73 | return fix_code(code, options);
74 | }
75 | }
76 | };
77 | }
78 |
--------------------------------------------------------------------------------
/src/routes/+page.svelte:
--------------------------------------------------------------------------------
1 | Welcome to your library project
2 | Create your package using @sveltejs/package and preview/showcase your work with SvelteKit
3 | Visit kit.svelte.dev to read the documentation
4 |
--------------------------------------------------------------------------------
/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paoloricciuti/sveltekit-defer/661ec5aecc2202d551231ce898e9cad6bd0015db/static/favicon.png
--------------------------------------------------------------------------------
/svelte.config.js:
--------------------------------------------------------------------------------
1 | import adapter from '@sveltejs/adapter-auto';
2 | import { vitePreprocess } from '@sveltejs/kit/vite';
3 |
4 | /** @type {import('@sveltejs/kit').Config} */
5 | const config = {
6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors
7 | // for more information about preprocessors
8 | preprocess: vitePreprocess(),
9 |
10 | kit: {
11 | adapter: adapter()
12 | }
13 | };
14 |
15 | export default config;
16 |
--------------------------------------------------------------------------------
/tests/test.ts:
--------------------------------------------------------------------------------
1 | import { expect, test } from '@playwright/test';
2 |
3 | test('index page has expected h1', async ({ page }) => {
4 | await page.goto('/');
5 | expect(await page.textContent('h1')).toBe('Welcome to SvelteKit');
6 | });
7 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./.svelte-kit/tsconfig.json",
3 | "compilerOptions": {
4 | "allowJs": true,
5 | "checkJs": true,
6 | "esModuleInterop": true,
7 | "forceConsistentCasingInFileNames": true,
8 | "resolveJsonModule": true,
9 | "skipLibCheck": true,
10 | "sourceMap": true,
11 | "strict": true
12 | }
13 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
14 | //
15 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
16 | // from the referenced tsconfig.json - TypeScript does not merge them in
17 | }
18 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite';
2 | import type { UserConfig } from 'vite';
3 |
4 | const config: UserConfig = {
5 | plugins: [sveltekit()],
6 | test: {
7 | include: ['src/**/*.{test,spec}.{js,ts}']
8 | }
9 | };
10 |
11 | export default config;
12 |
--------------------------------------------------------------------------------