├── .eslintignore
├── .eslintrc.cjs
├── .gitignore
├── .npmrc
├── .prettierignore
├── .prettierrc
├── Caddyfile
├── README.md
├── env.example
├── package.json
├── playwright.config.ts
├── pnpm-lock.yaml
├── postcss.config.cjs
├── src
├── app.css
├── app.d.ts
├── app.html
├── content
│ ├── first-list-item.md
│ ├── full-list.md
│ ├── list.md
│ ├── record.md
│ └── user.md
├── hooks.server.ts
├── index.test.ts
├── lib
│ ├── FirstListItem.svelte
│ ├── FullList.svelte
│ ├── List.svelte
│ ├── Pagination.svelte
│ ├── Record.svelte
│ ├── User.svelte
│ ├── index.ts
│ └── stores.ts
└── routes
│ ├── +layout.svelte
│ ├── +page.svelte
│ ├── +page.ts
│ ├── [slug]
│ ├── +page.svelte
│ └── +page.ts
│ ├── intro.md
│ ├── login
│ ├── +page.server.ts
│ └── +page.svelte
│ ├── logout
│ └── +page.server.ts
│ └── secret
│ ├── +page.md
│ └── +page.server.ts
├── static
└── favicon.png
├── svelte.config.js
├── tailwind.config.cjs
├── tests
└── test.ts
├── tsconfig.json
└── vite.config.js
/.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 | };
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 |
--------------------------------------------------------------------------------
/Caddyfile:
--------------------------------------------------------------------------------
1 | svelte.localhost {
2 | reverse_proxy localhost:5173
3 | }
4 |
5 | # pb.localhost {
6 | # reverse_proxy localhost:8090
7 | # }
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # svelte-pocketbase
2 |
3 | > Hold up! This library is currently experimental, and in early
4 | > development. Be careful if you intend on using this in production.
5 |
6 | **Supercharge your Sveltekit + PocketBase project!**
7 |
8 | **Svelte-Pocketbase** is the perfect companion to your next Sveltekit + PocketBase project. This library provides declarative components that effortlessly query data from your PocketBase database.
9 |
10 | ## Getting Started
11 |
12 | ```bash
13 | # install svelte-pocketbase with pnpm, npm or yarn
14 | pnpm i -D svelte-pocketbase
15 | ```
16 |
17 | ## PocketBase Store
18 |
19 | To get started, instantiate a new `pbStore` in a `+page.svelte` or `+layout.svelte`.
20 |
21 | ```typescript
22 | // src/+layout.svelte OR src/+page.svelte
23 |
24 |
31 |
32 |
33 | ```
34 |
35 | The `pbStore` is the ultimate marriage of PocketBase and Svelte `Writable` magic! Simply create an instance of `pbStore` and you've got a PocketBase instance wrapped up in a shiny svelte store. Need to use it in your app? No problem! Just subscribe to `$pbStore` and you're good to go.
36 |
37 | ```typescript
38 | // src/+page.svelte
39 |
45 |
46 | {#await record}
47 | Loading...
48 | {:then data}
49 |
{JSON.stringify(data, null, 2)}
50 | {:catch error}
51 | {error.message}
52 | {/await}
53 | ```
54 |
55 | This is a fair amount of boilerplate for simply retrieving a bit of data from your database. Instead, maybe try out one of the data retrieval components, like `Record`. These components handle all the tedious bits of querying and data retrieval, leaving you free to focus on more important things (like obsessively fine-tuning your Tailwind CSS config).
56 |
57 | ### Components
58 |
59 | - `Record`
60 | - `List`
61 | - `FullList`
62 | - `FirstListItem`
63 |
64 | Every data retrieval component receives a `collection` prop, and an optional `query` prop that can be used to sort and filter the results. Each component also contains an `error` slot that can be used to notify the user.
65 |
66 | ## Retrieving Data
67 |
68 | ### Individual Records by ID
69 |
70 | ```typescript
71 |
74 |
75 |
76 | Loading...
77 | {JSON.stringify(record, null, 2)}
78 | {error}
79 |
80 | ```
81 |
82 | The `Record` component is intended to retrieve single records from your database by their `RECORD_ID`.
83 |
84 | Simply pass in the name of the collection to the `collection` prop and a `RECORD_ID` to the `id` prop and let the component do the heavy lifting.
85 |
86 | You can also pass an `HTMLElement` into the `loading` slot in the event that your server is being naughty, and you need to keep your audience captivated with a fancy loading element.
87 |
88 | Want to access the data? No problem, just use the handy `let:record` directive.
89 |
90 | As an extra sprinkle of magic, there is no need to fuss about with `{ #await }` blocks. The `Record` component, along with all other data components handle the async action for you!
91 |
92 | ### Paginated Lists
93 |
94 | ```typescript
95 |
104 |
105 |
106 | {#each items as item}
107 | {item.title}
108 | {/each}
109 | {#each pages as pageNumber}
110 | setPage(pageNumber)}>{pageNumber}
111 | {/each}
112 | {JSON.stringify(items, null, 2)}
113 | {error}
114 |
115 | ```
116 |
117 | Need to retrieve a list of records from your PocketBase database? Check out the `List` component! You can easily paginate through your data just like you would with the `getList` function in the PocketBase JavaScript SDK.
118 |
119 | The component defaults to displaying 50 records per page, starting at page 1, but you can customize the current page and results per page to fit your needs using the `page` and `perPage` props.
120 |
121 | #### Declarative Pagination
122 |
123 | You can even break the `List` down even further using the `Pagination` helper to cut down on the { #each } blocks within your markup. Simply pass your items array into the `items`. The component will loop over any items in the array, and expose the individual item data via the `let:item` directive.
124 |
125 | You can also pass content to the `pages slot` provided that you also include a pages array to the `pages` prop. This is helpful if you want to have a list of pagination buttons. The `pages slot` is optional, since you may want to provide your own pagination navigation.
126 |
127 | ```typescript
128 |
138 |
139 |
140 |
141 | {item.title}
142 | setPage(pageNumber)}>{pageNumber}
143 |
144 | {error}
145 |
146 | ```
147 |
148 | ### Full List
149 |
150 | ```typescript
151 |
154 |
155 |
156 | {#each records as record}
157 | {record.title}
158 | {/each}
159 | {error}
160 |
161 | ```
162 |
163 | If you want to retrieve all records from a collection as you would using the `getFullList` function, you can use the `FullList` component.
164 |
165 | By default, the component will return a `batch` of 100 records, but you are free to increase or decrease this to fit your specific needs.
166 |
167 | ### First Item Within a List
168 |
169 | ```typescript
170 |
173 |
174 |
178 | {record.title}
179 | {error}
180 |
181 | ```
182 |
183 | If you are looking to find that one specific record that matches a certain parameter, the `FirstListItem` component has got your back! Set the `collection` prop and provide a `filter`, and it will return the first record that fits the bill. It's like the `firstListItem` function, but without all the chaining.
184 |
185 | ## Conditional User Rendering
186 |
187 | ```typescript
188 |
191 |
192 |
193 |
194 |
Name: {user?.name}
195 |
Email: {user?.email}
196 |
197 |
201 |
202 |
203 | ```
204 |
205 | Need to show (or hide) certain parts of your UI based on a user's authentication status? Simply wrap any content you want to conditionally render with the `User` component, and it will only appear if there is a valid user object in the `authStore`.
206 |
207 | If you want a fallback element for signed-out users? Just assign it to the `signedout` slot.
208 |
209 | Also, if you want to render a placeholder during the loading phase, assign an element to the `loading slot` as we do for all other components.
210 |
211 | To access the user's data, just use the `let:user` directive to pass it down to any child elements.
212 |
213 | ### Protecting Specific Routes
214 |
215 | The User component is pretty sweet, but it is not a sufficient method for protecting critical areas of your application. If you need to protect specific routes, you should consider using a `hooks.server.(ts|js)` alongside `load` functions inside your `+page.server.(ts|js)`.
216 |
217 | To save you the hassle of looking it up yourself, I've included a few examples below that can help get you started.
218 |
219 | #### hooks.server.ts
220 |
221 | ```typescript
222 | // src/hooks.server.ts
223 |
224 | import { env } from '$env/dynamic/public';
225 | import type { Handle } from '@sveltejs/kit';
226 | import PocketBase from 'pocketbase';
227 |
228 | export const handle: Handle = async ({ event, resolve }) => {
229 | event.locals.pb = new PocketBase(env.PUBLIC_POCKETBASE_URL);
230 |
231 | // Grab the cookie from request headers
232 | const cookie = event.request.headers.get('cookie');
233 |
234 | // load the store data from the request cookie string
235 | event.locals.pb.authStore.loadFromCookie(cookie || '');
236 |
237 | try {
238 | // get an up-to-date auth store state by verifying and refreshing
239 | // the loaded auth model (if any)
240 | event.locals.pb.authStore.isValid && (await event.locals.pb.collection('users').authRefresh());
241 | } catch (_) {
242 | // clear the auth store on failed refresh
243 | event.locals.pb.authStore.clear();
244 | }
245 |
246 | const response = await resolve(event);
247 |
248 | // send back the default 'pb_auth' cookie to the client with the
249 | // latest store state
250 | response.headers.set('set-cookie', event.locals.pb.authStore.exportToCookie());
251 |
252 | return response;
253 | };
254 | ```
255 |
256 | #### +page.server.ts
257 |
258 | ```typescript
259 | // src/routes/protected-route/+page.server.ts
260 |
261 | import { redirect } from '@sveltejs/kit';
262 | import type { PageServerLoad } from './$types';
263 |
264 | export const load = (({ locals }) => {
265 | // check to see if the user is authenticated
266 | if (!locals.pb.authStore.isValid) {
267 | // if not, redirect them to "/login"
268 | throw redirect(303, '/login');
269 | }
270 | }) satisfies PageServerLoad;
271 | ```
272 |
273 | ## Contribute
274 |
275 | This library is still very much work-in-progress. As mentioned before, you may want to avoid using this in a production setting until things are a bit more polished. I hope to add additional features such as realtime features and CRUD helpers in the near future.
276 |
277 | Feel free to contribute to this project if you have ideas or suggestions for improvements.
278 |
--------------------------------------------------------------------------------
/env.example:
--------------------------------------------------------------------------------
1 | PUBLIC_POCKETBASE_URL=http://127.0.0.1:8090
2 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte-pocketbase",
3 | "version": "0.0.4",
4 | "author": "CREEK",
5 | "license": "MIT",
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/creekdrops/svelte-pocketbase"
9 | },
10 | "scripts": {
11 | "dev": "vite dev",
12 | "build": "svelte-kit sync && svelte-package",
13 | "prepublishOnly": "echo 'Did you mean to publish `./package/`, instead of `./`?' && exit 1",
14 | "test": "playwright test",
15 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
16 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
17 | "test:unit": "vitest",
18 | "lint": "prettier --plugin-search-dir . --check . && eslint .",
19 | "format": "prettier --plugin-search-dir . --write ."
20 | },
21 | "devDependencies": {
22 | "@playwright/test": "^1.28.1",
23 | "@sveltejs/adapter-auto": "^1.0.0",
24 | "@sveltejs/kit": "^1.0.0",
25 | "@sveltejs/package": "^1.0.0",
26 | "@types/prismjs": "^1.26.0",
27 | "@typescript-eslint/eslint-plugin": "^5.45.0",
28 | "@typescript-eslint/parser": "^5.45.0",
29 | "autoprefixer": "^10.4.13",
30 | "daisyui": "^2.46.1",
31 | "eslint": "^8.28.0",
32 | "eslint-config-prettier": "^8.5.0",
33 | "eslint-plugin-svelte3": "^4.0.0",
34 | "mdsvex": "^0.9.8",
35 | "postcss": "^8.4.21",
36 | "prettier": "^2.8.0",
37 | "prettier-plugin-svelte": "^2.8.1",
38 | "prismjs": "^1.29.0",
39 | "svelte": "^3.54.0",
40 | "svelte-check": "^2.9.2",
41 | "tailwindcss": "^3.2.4",
42 | "tslib": "^2.4.1",
43 | "typescript": "^4.9.3",
44 | "vite": "^4.0.0",
45 | "vitest": "^0.25.3"
46 | },
47 | "type": "module",
48 | "dependencies": {
49 | "pocketbase": "^0.9.1"
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/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 | '@types/prismjs': ^1.26.0
9 | '@typescript-eslint/eslint-plugin': ^5.45.0
10 | '@typescript-eslint/parser': ^5.45.0
11 | autoprefixer: ^10.4.13
12 | daisyui: ^2.46.1
13 | eslint: ^8.28.0
14 | eslint-config-prettier: ^8.5.0
15 | eslint-plugin-svelte3: ^4.0.0
16 | mdsvex: ^0.9.8
17 | pocketbase: ^0.9.1
18 | postcss: ^8.4.21
19 | prettier: ^2.8.0
20 | prettier-plugin-svelte: ^2.8.1
21 | prismjs: ^1.29.0
22 | svelte: ^3.54.0
23 | svelte-check: ^2.9.2
24 | tailwindcss: ^3.2.4
25 | tslib: ^2.4.1
26 | typescript: ^4.9.3
27 | vite: ^4.0.0
28 | vitest: ^0.25.3
29 |
30 | dependencies:
31 | pocketbase: 0.9.1
32 |
33 | devDependencies:
34 | '@playwright/test': 1.29.1
35 | '@sveltejs/adapter-auto': 1.0.0_@sveltejs+kit@1.0.1
36 | '@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.0.4
37 | '@sveltejs/package': 1.0.1_niwyv7xychq2ag6arq5eqxbomm
38 | '@types/prismjs': 1.26.0
39 | '@typescript-eslint/eslint-plugin': 5.48.0_k73wpmdolxikpyqun3p36akaaq
40 | '@typescript-eslint/parser': 5.48.0_iukboom6ndih5an6iafl45j2fe
41 | autoprefixer: 10.4.13_postcss@8.4.21
42 | daisyui: 2.46.1_gbtt6ss3tbiz4yjtvdr6fbrj44
43 | eslint: 8.31.0
44 | eslint-config-prettier: 8.6.0_eslint@8.31.0
45 | eslint-plugin-svelte3: 4.0.0_6go7qzsvzihesfwmyvq3tnl5qq
46 | mdsvex: 0.9.8_svelte@3.55.0
47 | postcss: 8.4.21
48 | prettier: 2.8.1
49 | prettier-plugin-svelte: 2.9.0_ajxj753sv7dbwexjherrch25ta
50 | prismjs: 1.29.0
51 | svelte: 3.55.0
52 | svelte-check: 2.10.3_77wbasr76lhjripnylrva3hecy
53 | tailwindcss: 3.2.4_postcss@8.4.21
54 | tslib: 2.4.1
55 | typescript: 4.9.4
56 | vite: 4.0.4
57 | vitest: 0.25.8
58 |
59 | packages:
60 |
61 | /@esbuild/android-arm/0.16.14:
62 | resolution: {integrity: sha512-u0rITLxFIeYAvtJXBQNhNuV4YZe+MD1YvIWT7Nicj8hZAtRVZk2PgNH6KclcKDVHz1ChLKXRfX7d7tkbQBUfrg==}
63 | engines: {node: '>=12'}
64 | cpu: [arm]
65 | os: [android]
66 | requiresBuild: true
67 | dev: true
68 | optional: true
69 |
70 | /@esbuild/android-arm64/0.16.14:
71 | resolution: {integrity: sha512-hTqB6Iq13pW4xaydeqQrs8vPntUnMjbkq+PgGiBMi69eYk74naG2ftHWqKnxn874kNrt5Or3rQ0PJutx2doJuQ==}
72 | engines: {node: '>=12'}
73 | cpu: [arm64]
74 | os: [android]
75 | requiresBuild: true
76 | dev: true
77 | optional: true
78 |
79 | /@esbuild/android-x64/0.16.14:
80 | resolution: {integrity: sha512-jir51K4J0K5Rt0KOcippjSNdOl7akKDVz5I6yrqdk4/m9y+rldGptQUF7qU4YpX8U61LtR+w2Tu2Ph+K/UaJOw==}
81 | engines: {node: '>=12'}
82 | cpu: [x64]
83 | os: [android]
84 | requiresBuild: true
85 | dev: true
86 | optional: true
87 |
88 | /@esbuild/darwin-arm64/0.16.14:
89 | resolution: {integrity: sha512-vrlaP81IuwPaw1fyX8fHCmivP3Gr73ojVEZy+oWJLAiZVcG8o8Phwun/XDnYIFUHxIoUnMFEpg9o38MIvlw8zw==}
90 | engines: {node: '>=12'}
91 | cpu: [arm64]
92 | os: [darwin]
93 | requiresBuild: true
94 | dev: true
95 | optional: true
96 |
97 | /@esbuild/darwin-x64/0.16.14:
98 | resolution: {integrity: sha512-KV1E01eC2hGYA2qzFDRCK4wdZCRUvMwCNcobgpiiOzp5QXpJBqFPdxI69j8vvzuU7oxFXDgANwEkXvpeQqyOyg==}
99 | engines: {node: '>=12'}
100 | cpu: [x64]
101 | os: [darwin]
102 | requiresBuild: true
103 | dev: true
104 | optional: true
105 |
106 | /@esbuild/freebsd-arm64/0.16.14:
107 | resolution: {integrity: sha512-xRM1RQsazSvL42BNa5XC7ytD4ZDp0ZyJcH7aB0SlYUcHexJUKiDNKR7dlRVlpt6W0DvoRPU2nWK/9/QWS4u2fw==}
108 | engines: {node: '>=12'}
109 | cpu: [arm64]
110 | os: [freebsd]
111 | requiresBuild: true
112 | dev: true
113 | optional: true
114 |
115 | /@esbuild/freebsd-x64/0.16.14:
116 | resolution: {integrity: sha512-7ALTAn6YRRf1O6fw9jmn0rWmOx3XfwDo7njGtjy1LXhDGUjTY/vohEPM3ii5MQ411vJv1r498EEx2aBQTJcrEw==}
117 | engines: {node: '>=12'}
118 | cpu: [x64]
119 | os: [freebsd]
120 | requiresBuild: true
121 | dev: true
122 | optional: true
123 |
124 | /@esbuild/linux-arm/0.16.14:
125 | resolution: {integrity: sha512-X6xULug66ulrr4IzrW7qq+eq9n4MtEyagdWvj4o4cmWr+JXOT47atjpDF9j5M2zHY0UQBmqnHhwl+tXpkpIb2w==}
126 | engines: {node: '>=12'}
127 | cpu: [arm]
128 | os: [linux]
129 | requiresBuild: true
130 | dev: true
131 | optional: true
132 |
133 | /@esbuild/linux-arm64/0.16.14:
134 | resolution: {integrity: sha512-TLh2OcbBUQcMYRH4GbiDkDZfZ4t1A3GgmeXY27dHSI6xrU7IkO00MGBiJySmEV6sH3Wa6pAN6UtaVL0DwkGW4Q==}
135 | engines: {node: '>=12'}
136 | cpu: [arm64]
137 | os: [linux]
138 | requiresBuild: true
139 | dev: true
140 | optional: true
141 |
142 | /@esbuild/linux-ia32/0.16.14:
143 | resolution: {integrity: sha512-oBZkcZ56UZDFCAfE3Fd/Jgy10EoS7Td77NzNGenM+HSY8BkdQAcI9VF9qgwdOLZ+tuftWD7UqZ26SAhtvA3XhA==}
144 | engines: {node: '>=12'}
145 | cpu: [ia32]
146 | os: [linux]
147 | requiresBuild: true
148 | dev: true
149 | optional: true
150 |
151 | /@esbuild/linux-loong64/0.16.14:
152 | resolution: {integrity: sha512-udz/aEHTcuHP+xdWOJmZ5C9RQXHfZd/EhCnTi1Hfay37zH3lBxn/fNs85LA9HlsniFw2zccgcbrrTMKk7Cn1Qg==}
153 | engines: {node: '>=12'}
154 | cpu: [loong64]
155 | os: [linux]
156 | requiresBuild: true
157 | dev: true
158 | optional: true
159 |
160 | /@esbuild/linux-mips64el/0.16.14:
161 | resolution: {integrity: sha512-kJ2iEnikUOdC1SiTGbH0fJUgpZwa0ITDTvj9EHf9lm3I0hZ4Yugsb3M6XSl696jVxrEocLe519/8CbSpQWFSrg==}
162 | engines: {node: '>=12'}
163 | cpu: [mips64el]
164 | os: [linux]
165 | requiresBuild: true
166 | dev: true
167 | optional: true
168 |
169 | /@esbuild/linux-ppc64/0.16.14:
170 | resolution: {integrity: sha512-kclKxvZvX5YhykwlJ/K9ljiY4THe5vXubXpWmr7q3Zu3WxKnUe1VOZmhkEZlqtnJx31GHPEV4SIG95IqTdfgfg==}
171 | engines: {node: '>=12'}
172 | cpu: [ppc64]
173 | os: [linux]
174 | requiresBuild: true
175 | dev: true
176 | optional: true
177 |
178 | /@esbuild/linux-riscv64/0.16.14:
179 | resolution: {integrity: sha512-fdwP9Dc+Kx/cZwp9T9kNqjAE/PQjfrxbio4rZ3XnC3cVvZBjuxpkiyu/tuCwt6SbAK5th6AYNjFdEV9kGC020A==}
180 | engines: {node: '>=12'}
181 | cpu: [riscv64]
182 | os: [linux]
183 | requiresBuild: true
184 | dev: true
185 | optional: true
186 |
187 | /@esbuild/linux-s390x/0.16.14:
188 | resolution: {integrity: sha512-++fw3P4fQk9nqvdzbANRqimKspL8pDCnSpXomyhV7V/ISha/BZIYvZwLBWVKp9CVWKwWPJ4ktsezuLIvlJRHqA==}
189 | engines: {node: '>=12'}
190 | cpu: [s390x]
191 | os: [linux]
192 | requiresBuild: true
193 | dev: true
194 | optional: true
195 |
196 | /@esbuild/linux-x64/0.16.14:
197 | resolution: {integrity: sha512-TomtswAuzBf2NnddlrS4W01Tv85RM9YtATB3OugY6On0PLM4Ksz5qvQKVAjtzPKoLgL1FiZtfc8mkZc4IgoMEA==}
198 | engines: {node: '>=12'}
199 | cpu: [x64]
200 | os: [linux]
201 | requiresBuild: true
202 | dev: true
203 | optional: true
204 |
205 | /@esbuild/netbsd-x64/0.16.14:
206 | resolution: {integrity: sha512-U06pfx8P5CqyoPNfqIJmnf+5/r4mJ1S62G4zE6eOjS59naQcxi6GnscUCPH3b+hRG0qdKoGX49RAyiqW+M9aSw==}
207 | engines: {node: '>=12'}
208 | cpu: [x64]
209 | os: [netbsd]
210 | requiresBuild: true
211 | dev: true
212 | optional: true
213 |
214 | /@esbuild/openbsd-x64/0.16.14:
215 | resolution: {integrity: sha512-/Jl8XVaWEZNu9rZw+n792GIBupQwHo6GDoapHSb/2xp/Ku28eK6QpR2O9cPBkzHH4OOoMH0LB6zg/qczJ5TTGg==}
216 | engines: {node: '>=12'}
217 | cpu: [x64]
218 | os: [openbsd]
219 | requiresBuild: true
220 | dev: true
221 | optional: true
222 |
223 | /@esbuild/sunos-x64/0.16.14:
224 | resolution: {integrity: sha512-2iI7D34uTbDn/TaSiUbEHz+fUa8KbN90vX5yYqo12QGpu6T8Jl+kxODsWuMCwoTVlqUpwfPV22nBbFPME9OPtw==}
225 | engines: {node: '>=12'}
226 | cpu: [x64]
227 | os: [sunos]
228 | requiresBuild: true
229 | dev: true
230 | optional: true
231 |
232 | /@esbuild/win32-arm64/0.16.14:
233 | resolution: {integrity: sha512-SjlM7AHmQVTiGBJE/nqauY1aDh80UBsXZ94g4g60CDkrDMseatiqALVcIuElg4ZSYzJs8hsg5W6zS2zLpZTVgg==}
234 | engines: {node: '>=12'}
235 | cpu: [arm64]
236 | os: [win32]
237 | requiresBuild: true
238 | dev: true
239 | optional: true
240 |
241 | /@esbuild/win32-ia32/0.16.14:
242 | resolution: {integrity: sha512-z06t5zqk8ak0Xom5HG81z2iOQ1hNWYsFQp3sczVLVx+dctWdgl80tNRyTbwjaFfui2vFO12dfE3trCTvA+HO4g==}
243 | engines: {node: '>=12'}
244 | cpu: [ia32]
245 | os: [win32]
246 | requiresBuild: true
247 | dev: true
248 | optional: true
249 |
250 | /@esbuild/win32-x64/0.16.14:
251 | resolution: {integrity: sha512-ED1UpWcM6lAbalbbQ9TrGqJh4Y9TaASUvu8bI/0mgJcxhSByJ6rbpgqRhxYMaQ682WfA71nxUreaTO7L275zrw==}
252 | engines: {node: '>=12'}
253 | cpu: [x64]
254 | os: [win32]
255 | requiresBuild: true
256 | dev: true
257 | optional: true
258 |
259 | /@eslint/eslintrc/1.4.1:
260 | resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==}
261 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
262 | dependencies:
263 | ajv: 6.12.6
264 | debug: 4.3.4
265 | espree: 9.4.1
266 | globals: 13.19.0
267 | ignore: 5.2.4
268 | import-fresh: 3.3.0
269 | js-yaml: 4.1.0
270 | minimatch: 3.1.2
271 | strip-json-comments: 3.1.1
272 | transitivePeerDependencies:
273 | - supports-color
274 | dev: true
275 |
276 | /@humanwhocodes/config-array/0.11.8:
277 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
278 | engines: {node: '>=10.10.0'}
279 | dependencies:
280 | '@humanwhocodes/object-schema': 1.2.1
281 | debug: 4.3.4
282 | minimatch: 3.1.2
283 | transitivePeerDependencies:
284 | - supports-color
285 | dev: true
286 |
287 | /@humanwhocodes/module-importer/1.0.1:
288 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
289 | engines: {node: '>=12.22'}
290 | dev: true
291 |
292 | /@humanwhocodes/object-schema/1.2.1:
293 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
294 | dev: true
295 |
296 | /@jridgewell/resolve-uri/3.1.0:
297 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
298 | engines: {node: '>=6.0.0'}
299 | dev: true
300 |
301 | /@jridgewell/sourcemap-codec/1.4.14:
302 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
303 | dev: true
304 |
305 | /@jridgewell/trace-mapping/0.3.17:
306 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
307 | dependencies:
308 | '@jridgewell/resolve-uri': 3.1.0
309 | '@jridgewell/sourcemap-codec': 1.4.14
310 | dev: true
311 |
312 | /@nodelib/fs.scandir/2.1.5:
313 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
314 | engines: {node: '>= 8'}
315 | dependencies:
316 | '@nodelib/fs.stat': 2.0.5
317 | run-parallel: 1.2.0
318 | dev: true
319 |
320 | /@nodelib/fs.stat/2.0.5:
321 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
322 | engines: {node: '>= 8'}
323 | dev: true
324 |
325 | /@nodelib/fs.walk/1.2.8:
326 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
327 | engines: {node: '>= 8'}
328 | dependencies:
329 | '@nodelib/fs.scandir': 2.1.5
330 | fastq: 1.15.0
331 | dev: true
332 |
333 | /@playwright/test/1.29.1:
334 | resolution: {integrity: sha512-iQxk2DX5U9wOGV3+/Jh9OHPsw5H3mleUL2S4BgQuwtlAfK3PnKvn38m4Rg9zIViGHVW24opSm99HQm/UFLEy6w==}
335 | engines: {node: '>=14'}
336 | hasBin: true
337 | dependencies:
338 | '@types/node': 18.11.18
339 | playwright-core: 1.29.1
340 | dev: true
341 |
342 | /@polka/url/1.0.0-next.21:
343 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
344 | dev: true
345 |
346 | /@sveltejs/adapter-auto/1.0.0_@sveltejs+kit@1.0.1:
347 | resolution: {integrity: sha512-yKyPvlLVua1bJ/42FrR3X041mFGdB4GzTZOAEoHUcNBRE5Mhx94+eqHpC3hNvAOiLEDcKfVO0ObyKSu7qldU+w==}
348 | peerDependencies:
349 | '@sveltejs/kit': ^1.0.0
350 | dependencies:
351 | '@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.0.4
352 | import-meta-resolve: 2.2.0
353 | dev: true
354 |
355 | /@sveltejs/kit/1.0.1_svelte@3.55.0+vite@4.0.4:
356 | resolution: {integrity: sha512-C41aCaDjA7xoUdsrc/lSdU1059UdLPIRE1vEIRRynzpMujNgp82bTMHkDosb6vykH6LrLf3tT2w2/5NYQhKYGQ==}
357 | engines: {node: ^16.14 || >=18}
358 | hasBin: true
359 | requiresBuild: true
360 | peerDependencies:
361 | svelte: ^3.54.0
362 | vite: ^4.0.0
363 | dependencies:
364 | '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.0+vite@4.0.4
365 | '@types/cookie': 0.5.1
366 | cookie: 0.5.0
367 | devalue: 4.2.0
368 | esm-env: 1.0.0
369 | kleur: 4.1.5
370 | magic-string: 0.27.0
371 | mime: 3.0.0
372 | sade: 1.8.1
373 | set-cookie-parser: 2.5.1
374 | sirv: 2.0.2
375 | svelte: 3.55.0
376 | tiny-glob: 0.2.9
377 | undici: 5.14.0
378 | vite: 4.0.4
379 | transitivePeerDependencies:
380 | - supports-color
381 | dev: true
382 |
383 | /@sveltejs/package/1.0.1_niwyv7xychq2ag6arq5eqxbomm:
384 | resolution: {integrity: sha512-iYoDz4AEJQUfdKUfBcwtYEGYkf4NMByQL3Sl2ESnu+IXsLNsHvhH0zUDhAmUmAgcrH8fVjiR7FuJeyh+7EQtiw==}
385 | engines: {node: ^16.14 || >=18}
386 | hasBin: true
387 | peerDependencies:
388 | svelte: ^3.44.0
389 | dependencies:
390 | chokidar: 3.5.3
391 | kleur: 4.1.5
392 | sade: 1.8.1
393 | svelte: 3.55.0
394 | svelte2tsx: 0.5.23_niwyv7xychq2ag6arq5eqxbomm
395 | transitivePeerDependencies:
396 | - typescript
397 | dev: true
398 |
399 | /@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.0+vite@4.0.4:
400 | resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==}
401 | engines: {node: ^14.18.0 || >= 16}
402 | peerDependencies:
403 | svelte: ^3.54.0
404 | vite: ^4.0.0
405 | dependencies:
406 | debug: 4.3.4
407 | deepmerge: 4.2.2
408 | kleur: 4.1.5
409 | magic-string: 0.27.0
410 | svelte: 3.55.0
411 | svelte-hmr: 0.15.1_svelte@3.55.0
412 | vite: 4.0.4
413 | vitefu: 0.2.4_vite@4.0.4
414 | transitivePeerDependencies:
415 | - supports-color
416 | dev: true
417 |
418 | /@types/chai-subset/1.3.3:
419 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
420 | dependencies:
421 | '@types/chai': 4.3.4
422 | dev: true
423 |
424 | /@types/chai/4.3.4:
425 | resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==}
426 | dev: true
427 |
428 | /@types/cookie/0.5.1:
429 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==}
430 | dev: true
431 |
432 | /@types/json-schema/7.0.11:
433 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
434 | dev: true
435 |
436 | /@types/node/18.11.18:
437 | resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
438 | dev: true
439 |
440 | /@types/prismjs/1.26.0:
441 | resolution: {integrity: sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ==}
442 | dev: true
443 |
444 | /@types/pug/2.0.6:
445 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
446 | dev: true
447 |
448 | /@types/sass/1.43.1:
449 | resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==}
450 | dependencies:
451 | '@types/node': 18.11.18
452 | dev: true
453 |
454 | /@types/semver/7.3.13:
455 | resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
456 | dev: true
457 |
458 | /@types/unist/2.0.6:
459 | resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
460 | dev: true
461 |
462 | /@typescript-eslint/eslint-plugin/5.48.0_k73wpmdolxikpyqun3p36akaaq:
463 | resolution: {integrity: sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==}
464 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
465 | peerDependencies:
466 | '@typescript-eslint/parser': ^5.0.0
467 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
468 | typescript: '*'
469 | peerDependenciesMeta:
470 | typescript:
471 | optional: true
472 | dependencies:
473 | '@typescript-eslint/parser': 5.48.0_iukboom6ndih5an6iafl45j2fe
474 | '@typescript-eslint/scope-manager': 5.48.0
475 | '@typescript-eslint/type-utils': 5.48.0_iukboom6ndih5an6iafl45j2fe
476 | '@typescript-eslint/utils': 5.48.0_iukboom6ndih5an6iafl45j2fe
477 | debug: 4.3.4
478 | eslint: 8.31.0
479 | ignore: 5.2.4
480 | natural-compare-lite: 1.4.0
481 | regexpp: 3.2.0
482 | semver: 7.3.8
483 | tsutils: 3.21.0_typescript@4.9.4
484 | typescript: 4.9.4
485 | transitivePeerDependencies:
486 | - supports-color
487 | dev: true
488 |
489 | /@typescript-eslint/parser/5.48.0_iukboom6ndih5an6iafl45j2fe:
490 | resolution: {integrity: sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==}
491 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
492 | peerDependencies:
493 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
494 | typescript: '*'
495 | peerDependenciesMeta:
496 | typescript:
497 | optional: true
498 | dependencies:
499 | '@typescript-eslint/scope-manager': 5.48.0
500 | '@typescript-eslint/types': 5.48.0
501 | '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
502 | debug: 4.3.4
503 | eslint: 8.31.0
504 | typescript: 4.9.4
505 | transitivePeerDependencies:
506 | - supports-color
507 | dev: true
508 |
509 | /@typescript-eslint/scope-manager/5.48.0:
510 | resolution: {integrity: sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==}
511 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
512 | dependencies:
513 | '@typescript-eslint/types': 5.48.0
514 | '@typescript-eslint/visitor-keys': 5.48.0
515 | dev: true
516 |
517 | /@typescript-eslint/type-utils/5.48.0_iukboom6ndih5an6iafl45j2fe:
518 | resolution: {integrity: sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==}
519 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
520 | peerDependencies:
521 | eslint: '*'
522 | typescript: '*'
523 | peerDependenciesMeta:
524 | typescript:
525 | optional: true
526 | dependencies:
527 | '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
528 | '@typescript-eslint/utils': 5.48.0_iukboom6ndih5an6iafl45j2fe
529 | debug: 4.3.4
530 | eslint: 8.31.0
531 | tsutils: 3.21.0_typescript@4.9.4
532 | typescript: 4.9.4
533 | transitivePeerDependencies:
534 | - supports-color
535 | dev: true
536 |
537 | /@typescript-eslint/types/5.48.0:
538 | resolution: {integrity: sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==}
539 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
540 | dev: true
541 |
542 | /@typescript-eslint/typescript-estree/5.48.0_typescript@4.9.4:
543 | resolution: {integrity: sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==}
544 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
545 | peerDependencies:
546 | typescript: '*'
547 | peerDependenciesMeta:
548 | typescript:
549 | optional: true
550 | dependencies:
551 | '@typescript-eslint/types': 5.48.0
552 | '@typescript-eslint/visitor-keys': 5.48.0
553 | debug: 4.3.4
554 | globby: 11.1.0
555 | is-glob: 4.0.3
556 | semver: 7.3.8
557 | tsutils: 3.21.0_typescript@4.9.4
558 | typescript: 4.9.4
559 | transitivePeerDependencies:
560 | - supports-color
561 | dev: true
562 |
563 | /@typescript-eslint/utils/5.48.0_iukboom6ndih5an6iafl45j2fe:
564 | resolution: {integrity: sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==}
565 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
566 | peerDependencies:
567 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
568 | dependencies:
569 | '@types/json-schema': 7.0.11
570 | '@types/semver': 7.3.13
571 | '@typescript-eslint/scope-manager': 5.48.0
572 | '@typescript-eslint/types': 5.48.0
573 | '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
574 | eslint: 8.31.0
575 | eslint-scope: 5.1.1
576 | eslint-utils: 3.0.0_eslint@8.31.0
577 | semver: 7.3.8
578 | transitivePeerDependencies:
579 | - supports-color
580 | - typescript
581 | dev: true
582 |
583 | /@typescript-eslint/visitor-keys/5.48.0:
584 | resolution: {integrity: sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==}
585 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
586 | dependencies:
587 | '@typescript-eslint/types': 5.48.0
588 | eslint-visitor-keys: 3.3.0
589 | dev: true
590 |
591 | /acorn-jsx/5.3.2_acorn@8.8.1:
592 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
593 | peerDependencies:
594 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
595 | dependencies:
596 | acorn: 8.8.1
597 | dev: true
598 |
599 | /acorn-node/1.8.2:
600 | resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
601 | dependencies:
602 | acorn: 7.4.1
603 | acorn-walk: 7.2.0
604 | xtend: 4.0.2
605 | dev: true
606 |
607 | /acorn-walk/7.2.0:
608 | resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
609 | engines: {node: '>=0.4.0'}
610 | dev: true
611 |
612 | /acorn-walk/8.2.0:
613 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
614 | engines: {node: '>=0.4.0'}
615 | dev: true
616 |
617 | /acorn/7.4.1:
618 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
619 | engines: {node: '>=0.4.0'}
620 | hasBin: true
621 | dev: true
622 |
623 | /acorn/8.8.1:
624 | resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
625 | engines: {node: '>=0.4.0'}
626 | hasBin: true
627 | dev: true
628 |
629 | /ajv/6.12.6:
630 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
631 | dependencies:
632 | fast-deep-equal: 3.1.3
633 | fast-json-stable-stringify: 2.1.0
634 | json-schema-traverse: 0.4.1
635 | uri-js: 4.4.1
636 | dev: true
637 |
638 | /ansi-regex/5.0.1:
639 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
640 | engines: {node: '>=8'}
641 | dev: true
642 |
643 | /ansi-styles/4.3.0:
644 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
645 | engines: {node: '>=8'}
646 | dependencies:
647 | color-convert: 2.0.1
648 | dev: true
649 |
650 | /anymatch/3.1.3:
651 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
652 | engines: {node: '>= 8'}
653 | dependencies:
654 | normalize-path: 3.0.0
655 | picomatch: 2.3.1
656 | dev: true
657 |
658 | /arg/5.0.2:
659 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
660 | dev: true
661 |
662 | /argparse/2.0.1:
663 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
664 | dev: true
665 |
666 | /array-union/2.1.0:
667 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
668 | engines: {node: '>=8'}
669 | dev: true
670 |
671 | /assertion-error/1.1.0:
672 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
673 | dev: true
674 |
675 | /autoprefixer/10.4.13_postcss@8.4.21:
676 | resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==}
677 | engines: {node: ^10 || ^12 || >=14}
678 | hasBin: true
679 | peerDependencies:
680 | postcss: ^8.1.0
681 | dependencies:
682 | browserslist: 4.21.4
683 | caniuse-lite: 1.0.30001442
684 | fraction.js: 4.2.0
685 | normalize-range: 0.1.2
686 | picocolors: 1.0.0
687 | postcss: 8.4.21
688 | postcss-value-parser: 4.2.0
689 | dev: true
690 |
691 | /balanced-match/1.0.2:
692 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
693 | dev: true
694 |
695 | /binary-extensions/2.2.0:
696 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
697 | engines: {node: '>=8'}
698 | dev: true
699 |
700 | /brace-expansion/1.1.11:
701 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
702 | dependencies:
703 | balanced-match: 1.0.2
704 | concat-map: 0.0.1
705 | dev: true
706 |
707 | /braces/3.0.2:
708 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
709 | engines: {node: '>=8'}
710 | dependencies:
711 | fill-range: 7.0.1
712 | dev: true
713 |
714 | /browserslist/4.21.4:
715 | resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==}
716 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
717 | hasBin: true
718 | dependencies:
719 | caniuse-lite: 1.0.30001442
720 | electron-to-chromium: 1.4.284
721 | node-releases: 2.0.8
722 | update-browserslist-db: 1.0.10_browserslist@4.21.4
723 | dev: true
724 |
725 | /buffer-crc32/0.2.13:
726 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
727 | dev: true
728 |
729 | /busboy/1.6.0:
730 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
731 | engines: {node: '>=10.16.0'}
732 | dependencies:
733 | streamsearch: 1.1.0
734 | dev: true
735 |
736 | /callsites/3.1.0:
737 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
738 | engines: {node: '>=6'}
739 | dev: true
740 |
741 | /camelcase-css/2.0.1:
742 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
743 | engines: {node: '>= 6'}
744 | dev: true
745 |
746 | /caniuse-lite/1.0.30001442:
747 | resolution: {integrity: sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==}
748 | dev: true
749 |
750 | /chai/4.3.7:
751 | resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==}
752 | engines: {node: '>=4'}
753 | dependencies:
754 | assertion-error: 1.1.0
755 | check-error: 1.0.2
756 | deep-eql: 4.1.3
757 | get-func-name: 2.0.0
758 | loupe: 2.3.6
759 | pathval: 1.1.1
760 | type-detect: 4.0.8
761 | dev: true
762 |
763 | /chalk/4.1.2:
764 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
765 | engines: {node: '>=10'}
766 | dependencies:
767 | ansi-styles: 4.3.0
768 | supports-color: 7.2.0
769 | dev: true
770 |
771 | /check-error/1.0.2:
772 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
773 | dev: true
774 |
775 | /chokidar/3.5.3:
776 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
777 | engines: {node: '>= 8.10.0'}
778 | dependencies:
779 | anymatch: 3.1.3
780 | braces: 3.0.2
781 | glob-parent: 5.1.2
782 | is-binary-path: 2.1.0
783 | is-glob: 4.0.3
784 | normalize-path: 3.0.0
785 | readdirp: 3.6.0
786 | optionalDependencies:
787 | fsevents: 2.3.2
788 | dev: true
789 |
790 | /color-convert/2.0.1:
791 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
792 | engines: {node: '>=7.0.0'}
793 | dependencies:
794 | color-name: 1.1.4
795 | dev: true
796 |
797 | /color-name/1.1.4:
798 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
799 | dev: true
800 |
801 | /color-string/1.9.1:
802 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
803 | dependencies:
804 | color-name: 1.1.4
805 | simple-swizzle: 0.2.2
806 | dev: true
807 |
808 | /color/4.2.3:
809 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
810 | engines: {node: '>=12.5.0'}
811 | dependencies:
812 | color-convert: 2.0.1
813 | color-string: 1.9.1
814 | dev: true
815 |
816 | /concat-map/0.0.1:
817 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
818 | dev: true
819 |
820 | /cookie/0.5.0:
821 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
822 | engines: {node: '>= 0.6'}
823 | dev: true
824 |
825 | /cross-spawn/7.0.3:
826 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
827 | engines: {node: '>= 8'}
828 | dependencies:
829 | path-key: 3.1.1
830 | shebang-command: 2.0.0
831 | which: 2.0.2
832 | dev: true
833 |
834 | /css-selector-tokenizer/0.8.0:
835 | resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==}
836 | dependencies:
837 | cssesc: 3.0.0
838 | fastparse: 1.1.2
839 | dev: true
840 |
841 | /cssesc/3.0.0:
842 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
843 | engines: {node: '>=4'}
844 | hasBin: true
845 | dev: true
846 |
847 | /daisyui/2.46.1_gbtt6ss3tbiz4yjtvdr6fbrj44:
848 | resolution: {integrity: sha512-i59+nLuzzPAVOhNhot3KLtt6stfYeCIPXs9uiLcpXjykpqxHfBA3W6hQWOUWPMwfqhyQd0WKub3sydtPGjzLtA==}
849 | peerDependencies:
850 | autoprefixer: ^10.0.2
851 | postcss: ^8.1.6
852 | dependencies:
853 | autoprefixer: 10.4.13_postcss@8.4.21
854 | color: 4.2.3
855 | css-selector-tokenizer: 0.8.0
856 | postcss: 8.4.21
857 | postcss-js: 4.0.0_postcss@8.4.21
858 | tailwindcss: 3.2.4_postcss@8.4.21
859 | transitivePeerDependencies:
860 | - ts-node
861 | dev: true
862 |
863 | /debug/4.3.4:
864 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
865 | engines: {node: '>=6.0'}
866 | peerDependencies:
867 | supports-color: '*'
868 | peerDependenciesMeta:
869 | supports-color:
870 | optional: true
871 | dependencies:
872 | ms: 2.1.2
873 | dev: true
874 |
875 | /dedent-js/1.0.1:
876 | resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==}
877 | dev: true
878 |
879 | /deep-eql/4.1.3:
880 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
881 | engines: {node: '>=6'}
882 | dependencies:
883 | type-detect: 4.0.8
884 | dev: true
885 |
886 | /deep-is/0.1.4:
887 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
888 | dev: true
889 |
890 | /deepmerge/4.2.2:
891 | resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
892 | engines: {node: '>=0.10.0'}
893 | dev: true
894 |
895 | /defined/1.0.1:
896 | resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
897 | dev: true
898 |
899 | /detect-indent/6.1.0:
900 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
901 | engines: {node: '>=8'}
902 | dev: true
903 |
904 | /detective/5.2.1:
905 | resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==}
906 | engines: {node: '>=0.8.0'}
907 | hasBin: true
908 | dependencies:
909 | acorn-node: 1.8.2
910 | defined: 1.0.1
911 | minimist: 1.2.7
912 | dev: true
913 |
914 | /devalue/4.2.0:
915 | resolution: {integrity: sha512-mbjoAaCL2qogBKgeFxFPOXAUsZchircF+B/79LD4sHH0+NHfYm8gZpQrskKDn5gENGt35+5OI1GUF7hLVnkPDw==}
916 | dev: true
917 |
918 | /didyoumean/1.2.2:
919 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
920 | dev: true
921 |
922 | /dir-glob/3.0.1:
923 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
924 | engines: {node: '>=8'}
925 | dependencies:
926 | path-type: 4.0.0
927 | dev: true
928 |
929 | /dlv/1.1.3:
930 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
931 | dev: true
932 |
933 | /doctrine/3.0.0:
934 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
935 | engines: {node: '>=6.0.0'}
936 | dependencies:
937 | esutils: 2.0.3
938 | dev: true
939 |
940 | /electron-to-chromium/1.4.284:
941 | resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
942 | dev: true
943 |
944 | /es6-promise/3.3.1:
945 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
946 | dev: true
947 |
948 | /esbuild/0.16.14:
949 | resolution: {integrity: sha512-6xAn3O6ZZyoxZAEkwfI9hw4cEqSr/o1ViJtnkvImVkblmUN65Md04o0S/7H1WNu1XGf1Cjij/on7VO4psIYjkw==}
950 | engines: {node: '>=12'}
951 | hasBin: true
952 | requiresBuild: true
953 | optionalDependencies:
954 | '@esbuild/android-arm': 0.16.14
955 | '@esbuild/android-arm64': 0.16.14
956 | '@esbuild/android-x64': 0.16.14
957 | '@esbuild/darwin-arm64': 0.16.14
958 | '@esbuild/darwin-x64': 0.16.14
959 | '@esbuild/freebsd-arm64': 0.16.14
960 | '@esbuild/freebsd-x64': 0.16.14
961 | '@esbuild/linux-arm': 0.16.14
962 | '@esbuild/linux-arm64': 0.16.14
963 | '@esbuild/linux-ia32': 0.16.14
964 | '@esbuild/linux-loong64': 0.16.14
965 | '@esbuild/linux-mips64el': 0.16.14
966 | '@esbuild/linux-ppc64': 0.16.14
967 | '@esbuild/linux-riscv64': 0.16.14
968 | '@esbuild/linux-s390x': 0.16.14
969 | '@esbuild/linux-x64': 0.16.14
970 | '@esbuild/netbsd-x64': 0.16.14
971 | '@esbuild/openbsd-x64': 0.16.14
972 | '@esbuild/sunos-x64': 0.16.14
973 | '@esbuild/win32-arm64': 0.16.14
974 | '@esbuild/win32-ia32': 0.16.14
975 | '@esbuild/win32-x64': 0.16.14
976 | dev: true
977 |
978 | /escalade/3.1.1:
979 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
980 | engines: {node: '>=6'}
981 | dev: true
982 |
983 | /escape-string-regexp/4.0.0:
984 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
985 | engines: {node: '>=10'}
986 | dev: true
987 |
988 | /eslint-config-prettier/8.6.0_eslint@8.31.0:
989 | resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==}
990 | hasBin: true
991 | peerDependencies:
992 | eslint: '>=7.0.0'
993 | dependencies:
994 | eslint: 8.31.0
995 | dev: true
996 |
997 | /eslint-plugin-svelte3/4.0.0_6go7qzsvzihesfwmyvq3tnl5qq:
998 | resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==}
999 | peerDependencies:
1000 | eslint: '>=8.0.0'
1001 | svelte: ^3.2.0
1002 | dependencies:
1003 | eslint: 8.31.0
1004 | svelte: 3.55.0
1005 | dev: true
1006 |
1007 | /eslint-scope/5.1.1:
1008 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
1009 | engines: {node: '>=8.0.0'}
1010 | dependencies:
1011 | esrecurse: 4.3.0
1012 | estraverse: 4.3.0
1013 | dev: true
1014 |
1015 | /eslint-scope/7.1.1:
1016 | resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
1017 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1018 | dependencies:
1019 | esrecurse: 4.3.0
1020 | estraverse: 5.3.0
1021 | dev: true
1022 |
1023 | /eslint-utils/3.0.0_eslint@8.31.0:
1024 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
1025 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
1026 | peerDependencies:
1027 | eslint: '>=5'
1028 | dependencies:
1029 | eslint: 8.31.0
1030 | eslint-visitor-keys: 2.1.0
1031 | dev: true
1032 |
1033 | /eslint-visitor-keys/2.1.0:
1034 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
1035 | engines: {node: '>=10'}
1036 | dev: true
1037 |
1038 | /eslint-visitor-keys/3.3.0:
1039 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
1040 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1041 | dev: true
1042 |
1043 | /eslint/8.31.0:
1044 | resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==}
1045 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1046 | hasBin: true
1047 | dependencies:
1048 | '@eslint/eslintrc': 1.4.1
1049 | '@humanwhocodes/config-array': 0.11.8
1050 | '@humanwhocodes/module-importer': 1.0.1
1051 | '@nodelib/fs.walk': 1.2.8
1052 | ajv: 6.12.6
1053 | chalk: 4.1.2
1054 | cross-spawn: 7.0.3
1055 | debug: 4.3.4
1056 | doctrine: 3.0.0
1057 | escape-string-regexp: 4.0.0
1058 | eslint-scope: 7.1.1
1059 | eslint-utils: 3.0.0_eslint@8.31.0
1060 | eslint-visitor-keys: 3.3.0
1061 | espree: 9.4.1
1062 | esquery: 1.4.0
1063 | esutils: 2.0.3
1064 | fast-deep-equal: 3.1.3
1065 | file-entry-cache: 6.0.1
1066 | find-up: 5.0.0
1067 | glob-parent: 6.0.2
1068 | globals: 13.19.0
1069 | grapheme-splitter: 1.0.4
1070 | ignore: 5.2.4
1071 | import-fresh: 3.3.0
1072 | imurmurhash: 0.1.4
1073 | is-glob: 4.0.3
1074 | is-path-inside: 3.0.3
1075 | js-sdsl: 4.2.0
1076 | js-yaml: 4.1.0
1077 | json-stable-stringify-without-jsonify: 1.0.1
1078 | levn: 0.4.1
1079 | lodash.merge: 4.6.2
1080 | minimatch: 3.1.2
1081 | natural-compare: 1.4.0
1082 | optionator: 0.9.1
1083 | regexpp: 3.2.0
1084 | strip-ansi: 6.0.1
1085 | strip-json-comments: 3.1.1
1086 | text-table: 0.2.0
1087 | transitivePeerDependencies:
1088 | - supports-color
1089 | dev: true
1090 |
1091 | /esm-env/1.0.0:
1092 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==}
1093 | dev: true
1094 |
1095 | /espree/9.4.1:
1096 | resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==}
1097 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1098 | dependencies:
1099 | acorn: 8.8.1
1100 | acorn-jsx: 5.3.2_acorn@8.8.1
1101 | eslint-visitor-keys: 3.3.0
1102 | dev: true
1103 |
1104 | /esquery/1.4.0:
1105 | resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==}
1106 | engines: {node: '>=0.10'}
1107 | dependencies:
1108 | estraverse: 5.3.0
1109 | dev: true
1110 |
1111 | /esrecurse/4.3.0:
1112 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1113 | engines: {node: '>=4.0'}
1114 | dependencies:
1115 | estraverse: 5.3.0
1116 | dev: true
1117 |
1118 | /estraverse/4.3.0:
1119 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
1120 | engines: {node: '>=4.0'}
1121 | dev: true
1122 |
1123 | /estraverse/5.3.0:
1124 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1125 | engines: {node: '>=4.0'}
1126 | dev: true
1127 |
1128 | /esutils/2.0.3:
1129 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1130 | engines: {node: '>=0.10.0'}
1131 | dev: true
1132 |
1133 | /fast-deep-equal/3.1.3:
1134 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1135 | dev: true
1136 |
1137 | /fast-glob/3.2.12:
1138 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
1139 | engines: {node: '>=8.6.0'}
1140 | dependencies:
1141 | '@nodelib/fs.stat': 2.0.5
1142 | '@nodelib/fs.walk': 1.2.8
1143 | glob-parent: 5.1.2
1144 | merge2: 1.4.1
1145 | micromatch: 4.0.5
1146 | dev: true
1147 |
1148 | /fast-json-stable-stringify/2.1.0:
1149 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1150 | dev: true
1151 |
1152 | /fast-levenshtein/2.0.6:
1153 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1154 | dev: true
1155 |
1156 | /fastparse/1.1.2:
1157 | resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==}
1158 | dev: true
1159 |
1160 | /fastq/1.15.0:
1161 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
1162 | dependencies:
1163 | reusify: 1.0.4
1164 | dev: true
1165 |
1166 | /file-entry-cache/6.0.1:
1167 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1168 | engines: {node: ^10.12.0 || >=12.0.0}
1169 | dependencies:
1170 | flat-cache: 3.0.4
1171 | dev: true
1172 |
1173 | /fill-range/7.0.1:
1174 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1175 | engines: {node: '>=8'}
1176 | dependencies:
1177 | to-regex-range: 5.0.1
1178 | dev: true
1179 |
1180 | /find-up/5.0.0:
1181 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1182 | engines: {node: '>=10'}
1183 | dependencies:
1184 | locate-path: 6.0.0
1185 | path-exists: 4.0.0
1186 | dev: true
1187 |
1188 | /flat-cache/3.0.4:
1189 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
1190 | engines: {node: ^10.12.0 || >=12.0.0}
1191 | dependencies:
1192 | flatted: 3.2.7
1193 | rimraf: 3.0.2
1194 | dev: true
1195 |
1196 | /flatted/3.2.7:
1197 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
1198 | dev: true
1199 |
1200 | /fraction.js/4.2.0:
1201 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
1202 | dev: true
1203 |
1204 | /fs.realpath/1.0.0:
1205 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1206 | dev: true
1207 |
1208 | /fsevents/2.3.2:
1209 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1210 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1211 | os: [darwin]
1212 | requiresBuild: true
1213 | dev: true
1214 | optional: true
1215 |
1216 | /function-bind/1.1.1:
1217 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1218 | dev: true
1219 |
1220 | /get-func-name/2.0.0:
1221 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
1222 | dev: true
1223 |
1224 | /glob-parent/5.1.2:
1225 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1226 | engines: {node: '>= 6'}
1227 | dependencies:
1228 | is-glob: 4.0.3
1229 | dev: true
1230 |
1231 | /glob-parent/6.0.2:
1232 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1233 | engines: {node: '>=10.13.0'}
1234 | dependencies:
1235 | is-glob: 4.0.3
1236 | dev: true
1237 |
1238 | /glob/7.2.3:
1239 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1240 | dependencies:
1241 | fs.realpath: 1.0.0
1242 | inflight: 1.0.6
1243 | inherits: 2.0.4
1244 | minimatch: 3.1.2
1245 | once: 1.4.0
1246 | path-is-absolute: 1.0.1
1247 | dev: true
1248 |
1249 | /globals/13.19.0:
1250 | resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==}
1251 | engines: {node: '>=8'}
1252 | dependencies:
1253 | type-fest: 0.20.2
1254 | dev: true
1255 |
1256 | /globalyzer/0.1.0:
1257 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
1258 | dev: true
1259 |
1260 | /globby/11.1.0:
1261 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1262 | engines: {node: '>=10'}
1263 | dependencies:
1264 | array-union: 2.1.0
1265 | dir-glob: 3.0.1
1266 | fast-glob: 3.2.12
1267 | ignore: 5.2.4
1268 | merge2: 1.4.1
1269 | slash: 3.0.0
1270 | dev: true
1271 |
1272 | /globrex/0.1.2:
1273 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
1274 | dev: true
1275 |
1276 | /graceful-fs/4.2.10:
1277 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
1278 | dev: true
1279 |
1280 | /grapheme-splitter/1.0.4:
1281 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
1282 | dev: true
1283 |
1284 | /has-flag/4.0.0:
1285 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1286 | engines: {node: '>=8'}
1287 | dev: true
1288 |
1289 | /has/1.0.3:
1290 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1291 | engines: {node: '>= 0.4.0'}
1292 | dependencies:
1293 | function-bind: 1.1.1
1294 | dev: true
1295 |
1296 | /ignore/5.2.4:
1297 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
1298 | engines: {node: '>= 4'}
1299 | dev: true
1300 |
1301 | /import-fresh/3.3.0:
1302 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1303 | engines: {node: '>=6'}
1304 | dependencies:
1305 | parent-module: 1.0.1
1306 | resolve-from: 4.0.0
1307 | dev: true
1308 |
1309 | /import-meta-resolve/2.2.0:
1310 | resolution: {integrity: sha512-CpPOtiCHxP9HdtDM5F45tNiAe66Cqlv3f5uHoJjt+KlaLrUh9/Wz9vepADZ78SlqEo62aDWZtj9ydMGXV+CPnw==}
1311 | dev: true
1312 |
1313 | /imurmurhash/0.1.4:
1314 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1315 | engines: {node: '>=0.8.19'}
1316 | dev: true
1317 |
1318 | /inflight/1.0.6:
1319 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1320 | dependencies:
1321 | once: 1.4.0
1322 | wrappy: 1.0.2
1323 | dev: true
1324 |
1325 | /inherits/2.0.4:
1326 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1327 | dev: true
1328 |
1329 | /is-arrayish/0.3.2:
1330 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
1331 | dev: true
1332 |
1333 | /is-binary-path/2.1.0:
1334 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1335 | engines: {node: '>=8'}
1336 | dependencies:
1337 | binary-extensions: 2.2.0
1338 | dev: true
1339 |
1340 | /is-core-module/2.11.0:
1341 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
1342 | dependencies:
1343 | has: 1.0.3
1344 | dev: true
1345 |
1346 | /is-extglob/2.1.1:
1347 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1348 | engines: {node: '>=0.10.0'}
1349 | dev: true
1350 |
1351 | /is-glob/4.0.3:
1352 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1353 | engines: {node: '>=0.10.0'}
1354 | dependencies:
1355 | is-extglob: 2.1.1
1356 | dev: true
1357 |
1358 | /is-number/7.0.0:
1359 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1360 | engines: {node: '>=0.12.0'}
1361 | dev: true
1362 |
1363 | /is-path-inside/3.0.3:
1364 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
1365 | engines: {node: '>=8'}
1366 | dev: true
1367 |
1368 | /isexe/2.0.0:
1369 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1370 | dev: true
1371 |
1372 | /js-sdsl/4.2.0:
1373 | resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==}
1374 | dev: true
1375 |
1376 | /js-yaml/4.1.0:
1377 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1378 | hasBin: true
1379 | dependencies:
1380 | argparse: 2.0.1
1381 | dev: true
1382 |
1383 | /json-schema-traverse/0.4.1:
1384 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1385 | dev: true
1386 |
1387 | /json-stable-stringify-without-jsonify/1.0.1:
1388 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1389 | dev: true
1390 |
1391 | /kleur/4.1.5:
1392 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
1393 | engines: {node: '>=6'}
1394 | dev: true
1395 |
1396 | /levn/0.4.1:
1397 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1398 | engines: {node: '>= 0.8.0'}
1399 | dependencies:
1400 | prelude-ls: 1.2.1
1401 | type-check: 0.4.0
1402 | dev: true
1403 |
1404 | /lilconfig/2.0.6:
1405 | resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==}
1406 | engines: {node: '>=10'}
1407 | dev: true
1408 |
1409 | /local-pkg/0.4.2:
1410 | resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==}
1411 | engines: {node: '>=14'}
1412 | dev: true
1413 |
1414 | /locate-path/6.0.0:
1415 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1416 | engines: {node: '>=10'}
1417 | dependencies:
1418 | p-locate: 5.0.0
1419 | dev: true
1420 |
1421 | /lodash.merge/4.6.2:
1422 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1423 | dev: true
1424 |
1425 | /loupe/2.3.6:
1426 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
1427 | dependencies:
1428 | get-func-name: 2.0.0
1429 | dev: true
1430 |
1431 | /lower-case/2.0.2:
1432 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
1433 | dependencies:
1434 | tslib: 2.4.1
1435 | dev: true
1436 |
1437 | /lru-cache/6.0.0:
1438 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1439 | engines: {node: '>=10'}
1440 | dependencies:
1441 | yallist: 4.0.0
1442 | dev: true
1443 |
1444 | /magic-string/0.25.9:
1445 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
1446 | dependencies:
1447 | sourcemap-codec: 1.4.8
1448 | dev: true
1449 |
1450 | /magic-string/0.27.0:
1451 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
1452 | engines: {node: '>=12'}
1453 | dependencies:
1454 | '@jridgewell/sourcemap-codec': 1.4.14
1455 | dev: true
1456 |
1457 | /mdsvex/0.9.8_svelte@3.55.0:
1458 | resolution: {integrity: sha512-5QvThjRKoKkGH00qdHxLZ5ROd80RgGiJvM2B9opeFreaiGFTLoKKFUgEBCslLrwM24cVGJLmIM3rR83OFDf3tQ==}
1459 | peerDependencies:
1460 | svelte: 3.x
1461 | dependencies:
1462 | '@types/unist': 2.0.6
1463 | prism-svelte: 0.4.7
1464 | prismjs: 1.29.0
1465 | svelte: 3.55.0
1466 | vfile-message: 2.0.4
1467 | dev: true
1468 |
1469 | /merge2/1.4.1:
1470 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1471 | engines: {node: '>= 8'}
1472 | dev: true
1473 |
1474 | /micromatch/4.0.5:
1475 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1476 | engines: {node: '>=8.6'}
1477 | dependencies:
1478 | braces: 3.0.2
1479 | picomatch: 2.3.1
1480 | dev: true
1481 |
1482 | /mime/3.0.0:
1483 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
1484 | engines: {node: '>=10.0.0'}
1485 | hasBin: true
1486 | dev: true
1487 |
1488 | /min-indent/1.0.1:
1489 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
1490 | engines: {node: '>=4'}
1491 | dev: true
1492 |
1493 | /minimatch/3.1.2:
1494 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1495 | dependencies:
1496 | brace-expansion: 1.1.11
1497 | dev: true
1498 |
1499 | /minimist/1.2.7:
1500 | resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
1501 | dev: true
1502 |
1503 | /mkdirp/0.5.6:
1504 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
1505 | hasBin: true
1506 | dependencies:
1507 | minimist: 1.2.7
1508 | dev: true
1509 |
1510 | /mri/1.2.0:
1511 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1512 | engines: {node: '>=4'}
1513 | dev: true
1514 |
1515 | /mrmime/1.0.1:
1516 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
1517 | engines: {node: '>=10'}
1518 | dev: true
1519 |
1520 | /ms/2.1.2:
1521 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1522 | dev: true
1523 |
1524 | /nanoid/3.3.4:
1525 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
1526 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1527 | hasBin: true
1528 | dev: true
1529 |
1530 | /natural-compare-lite/1.4.0:
1531 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
1532 | dev: true
1533 |
1534 | /natural-compare/1.4.0:
1535 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1536 | dev: true
1537 |
1538 | /no-case/3.0.4:
1539 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
1540 | dependencies:
1541 | lower-case: 2.0.2
1542 | tslib: 2.4.1
1543 | dev: true
1544 |
1545 | /node-releases/2.0.8:
1546 | resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==}
1547 | dev: true
1548 |
1549 | /normalize-path/3.0.0:
1550 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1551 | engines: {node: '>=0.10.0'}
1552 | dev: true
1553 |
1554 | /normalize-range/0.1.2:
1555 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
1556 | engines: {node: '>=0.10.0'}
1557 | dev: true
1558 |
1559 | /object-hash/3.0.0:
1560 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
1561 | engines: {node: '>= 6'}
1562 | dev: true
1563 |
1564 | /once/1.4.0:
1565 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1566 | dependencies:
1567 | wrappy: 1.0.2
1568 | dev: true
1569 |
1570 | /optionator/0.9.1:
1571 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
1572 | engines: {node: '>= 0.8.0'}
1573 | dependencies:
1574 | deep-is: 0.1.4
1575 | fast-levenshtein: 2.0.6
1576 | levn: 0.4.1
1577 | prelude-ls: 1.2.1
1578 | type-check: 0.4.0
1579 | word-wrap: 1.2.3
1580 | dev: true
1581 |
1582 | /p-limit/3.1.0:
1583 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1584 | engines: {node: '>=10'}
1585 | dependencies:
1586 | yocto-queue: 0.1.0
1587 | dev: true
1588 |
1589 | /p-locate/5.0.0:
1590 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1591 | engines: {node: '>=10'}
1592 | dependencies:
1593 | p-limit: 3.1.0
1594 | dev: true
1595 |
1596 | /parent-module/1.0.1:
1597 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1598 | engines: {node: '>=6'}
1599 | dependencies:
1600 | callsites: 3.1.0
1601 | dev: true
1602 |
1603 | /pascal-case/3.1.2:
1604 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
1605 | dependencies:
1606 | no-case: 3.0.4
1607 | tslib: 2.4.1
1608 | dev: true
1609 |
1610 | /path-exists/4.0.0:
1611 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1612 | engines: {node: '>=8'}
1613 | dev: true
1614 |
1615 | /path-is-absolute/1.0.1:
1616 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1617 | engines: {node: '>=0.10.0'}
1618 | dev: true
1619 |
1620 | /path-key/3.1.1:
1621 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1622 | engines: {node: '>=8'}
1623 | dev: true
1624 |
1625 | /path-parse/1.0.7:
1626 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1627 | dev: true
1628 |
1629 | /path-type/4.0.0:
1630 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1631 | engines: {node: '>=8'}
1632 | dev: true
1633 |
1634 | /pathval/1.1.1:
1635 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
1636 | dev: true
1637 |
1638 | /picocolors/1.0.0:
1639 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1640 | dev: true
1641 |
1642 | /picomatch/2.3.1:
1643 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1644 | engines: {node: '>=8.6'}
1645 | dev: true
1646 |
1647 | /pify/2.3.0:
1648 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
1649 | engines: {node: '>=0.10.0'}
1650 | dev: true
1651 |
1652 | /playwright-core/1.29.1:
1653 | resolution: {integrity: sha512-20Ai3d+lMkWpI9YZYlxk8gxatfgax5STW8GaMozAHwigLiyiKQrdkt7gaoT9UQR8FIVDg6qVXs9IoZUQrDjIIg==}
1654 | engines: {node: '>=14'}
1655 | hasBin: true
1656 | dev: true
1657 |
1658 | /pocketbase/0.9.1:
1659 | resolution: {integrity: sha512-a9S/WHak+mgr3WI8bD2tz3lFVFzoy6ZgKTBlUXwIH4VLTKVU3JKeAKxqIFBF7av4qblmB+52tX8sWLS08Ftm/w==}
1660 | dev: false
1661 |
1662 | /postcss-import/14.1.0_postcss@8.4.21:
1663 | resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==}
1664 | engines: {node: '>=10.0.0'}
1665 | peerDependencies:
1666 | postcss: ^8.0.0
1667 | dependencies:
1668 | postcss: 8.4.21
1669 | postcss-value-parser: 4.2.0
1670 | read-cache: 1.0.0
1671 | resolve: 1.22.1
1672 | dev: true
1673 |
1674 | /postcss-js/4.0.0_postcss@8.4.21:
1675 | resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==}
1676 | engines: {node: ^12 || ^14 || >= 16}
1677 | peerDependencies:
1678 | postcss: ^8.3.3
1679 | dependencies:
1680 | camelcase-css: 2.0.1
1681 | postcss: 8.4.21
1682 | dev: true
1683 |
1684 | /postcss-load-config/3.1.4_postcss@8.4.21:
1685 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
1686 | engines: {node: '>= 10'}
1687 | peerDependencies:
1688 | postcss: '>=8.0.9'
1689 | ts-node: '>=9.0.0'
1690 | peerDependenciesMeta:
1691 | postcss:
1692 | optional: true
1693 | ts-node:
1694 | optional: true
1695 | dependencies:
1696 | lilconfig: 2.0.6
1697 | postcss: 8.4.21
1698 | yaml: 1.10.2
1699 | dev: true
1700 |
1701 | /postcss-nested/6.0.0_postcss@8.4.21:
1702 | resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==}
1703 | engines: {node: '>=12.0'}
1704 | peerDependencies:
1705 | postcss: ^8.2.14
1706 | dependencies:
1707 | postcss: 8.4.21
1708 | postcss-selector-parser: 6.0.11
1709 | dev: true
1710 |
1711 | /postcss-selector-parser/6.0.11:
1712 | resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
1713 | engines: {node: '>=4'}
1714 | dependencies:
1715 | cssesc: 3.0.0
1716 | util-deprecate: 1.0.2
1717 | dev: true
1718 |
1719 | /postcss-value-parser/4.2.0:
1720 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1721 | dev: true
1722 |
1723 | /postcss/8.4.21:
1724 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
1725 | engines: {node: ^10 || ^12 || >=14}
1726 | dependencies:
1727 | nanoid: 3.3.4
1728 | picocolors: 1.0.0
1729 | source-map-js: 1.0.2
1730 | dev: true
1731 |
1732 | /prelude-ls/1.2.1:
1733 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1734 | engines: {node: '>= 0.8.0'}
1735 | dev: true
1736 |
1737 | /prettier-plugin-svelte/2.9.0_ajxj753sv7dbwexjherrch25ta:
1738 | resolution: {integrity: sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw==}
1739 | peerDependencies:
1740 | prettier: ^1.16.4 || ^2.0.0
1741 | svelte: ^3.2.0
1742 | dependencies:
1743 | prettier: 2.8.1
1744 | svelte: 3.55.0
1745 | dev: true
1746 |
1747 | /prettier/2.8.1:
1748 | resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==}
1749 | engines: {node: '>=10.13.0'}
1750 | hasBin: true
1751 | dev: true
1752 |
1753 | /prism-svelte/0.4.7:
1754 | resolution: {integrity: sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==}
1755 | dev: true
1756 |
1757 | /prismjs/1.29.0:
1758 | resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
1759 | engines: {node: '>=6'}
1760 | dev: true
1761 |
1762 | /punycode/2.1.1:
1763 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
1764 | engines: {node: '>=6'}
1765 | dev: true
1766 |
1767 | /queue-microtask/1.2.3:
1768 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1769 | dev: true
1770 |
1771 | /quick-lru/5.1.1:
1772 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
1773 | engines: {node: '>=10'}
1774 | dev: true
1775 |
1776 | /read-cache/1.0.0:
1777 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
1778 | dependencies:
1779 | pify: 2.3.0
1780 | dev: true
1781 |
1782 | /readdirp/3.6.0:
1783 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1784 | engines: {node: '>=8.10.0'}
1785 | dependencies:
1786 | picomatch: 2.3.1
1787 | dev: true
1788 |
1789 | /regexpp/3.2.0:
1790 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
1791 | engines: {node: '>=8'}
1792 | dev: true
1793 |
1794 | /resolve-from/4.0.0:
1795 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1796 | engines: {node: '>=4'}
1797 | dev: true
1798 |
1799 | /resolve/1.22.1:
1800 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
1801 | hasBin: true
1802 | dependencies:
1803 | is-core-module: 2.11.0
1804 | path-parse: 1.0.7
1805 | supports-preserve-symlinks-flag: 1.0.0
1806 | dev: true
1807 |
1808 | /reusify/1.0.4:
1809 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1810 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1811 | dev: true
1812 |
1813 | /rimraf/2.7.1:
1814 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
1815 | hasBin: true
1816 | dependencies:
1817 | glob: 7.2.3
1818 | dev: true
1819 |
1820 | /rimraf/3.0.2:
1821 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
1822 | hasBin: true
1823 | dependencies:
1824 | glob: 7.2.3
1825 | dev: true
1826 |
1827 | /rollup/3.9.1:
1828 | resolution: {integrity: sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==}
1829 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
1830 | hasBin: true
1831 | optionalDependencies:
1832 | fsevents: 2.3.2
1833 | dev: true
1834 |
1835 | /run-parallel/1.2.0:
1836 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1837 | dependencies:
1838 | queue-microtask: 1.2.3
1839 | dev: true
1840 |
1841 | /sade/1.8.1:
1842 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1843 | engines: {node: '>=6'}
1844 | dependencies:
1845 | mri: 1.2.0
1846 | dev: true
1847 |
1848 | /sander/0.5.1:
1849 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
1850 | dependencies:
1851 | es6-promise: 3.3.1
1852 | graceful-fs: 4.2.10
1853 | mkdirp: 0.5.6
1854 | rimraf: 2.7.1
1855 | dev: true
1856 |
1857 | /semver/7.3.8:
1858 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
1859 | engines: {node: '>=10'}
1860 | hasBin: true
1861 | dependencies:
1862 | lru-cache: 6.0.0
1863 | dev: true
1864 |
1865 | /set-cookie-parser/2.5.1:
1866 | resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==}
1867 | dev: true
1868 |
1869 | /shebang-command/2.0.0:
1870 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1871 | engines: {node: '>=8'}
1872 | dependencies:
1873 | shebang-regex: 3.0.0
1874 | dev: true
1875 |
1876 | /shebang-regex/3.0.0:
1877 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1878 | engines: {node: '>=8'}
1879 | dev: true
1880 |
1881 | /simple-swizzle/0.2.2:
1882 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
1883 | dependencies:
1884 | is-arrayish: 0.3.2
1885 | dev: true
1886 |
1887 | /sirv/2.0.2:
1888 | resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==}
1889 | engines: {node: '>= 10'}
1890 | dependencies:
1891 | '@polka/url': 1.0.0-next.21
1892 | mrmime: 1.0.1
1893 | totalist: 3.0.0
1894 | dev: true
1895 |
1896 | /slash/3.0.0:
1897 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1898 | engines: {node: '>=8'}
1899 | dev: true
1900 |
1901 | /sorcery/0.10.0:
1902 | resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==}
1903 | hasBin: true
1904 | dependencies:
1905 | buffer-crc32: 0.2.13
1906 | minimist: 1.2.7
1907 | sander: 0.5.1
1908 | sourcemap-codec: 1.4.8
1909 | dev: true
1910 |
1911 | /source-map-js/1.0.2:
1912 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1913 | engines: {node: '>=0.10.0'}
1914 | dev: true
1915 |
1916 | /source-map/0.6.1:
1917 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1918 | engines: {node: '>=0.10.0'}
1919 | dev: true
1920 |
1921 | /sourcemap-codec/1.4.8:
1922 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
1923 | deprecated: Please use @jridgewell/sourcemap-codec instead
1924 | dev: true
1925 |
1926 | /streamsearch/1.1.0:
1927 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
1928 | engines: {node: '>=10.0.0'}
1929 | dev: true
1930 |
1931 | /strip-ansi/6.0.1:
1932 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1933 | engines: {node: '>=8'}
1934 | dependencies:
1935 | ansi-regex: 5.0.1
1936 | dev: true
1937 |
1938 | /strip-indent/3.0.0:
1939 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
1940 | engines: {node: '>=8'}
1941 | dependencies:
1942 | min-indent: 1.0.1
1943 | dev: true
1944 |
1945 | /strip-json-comments/3.1.1:
1946 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1947 | engines: {node: '>=8'}
1948 | dev: true
1949 |
1950 | /strip-literal/1.0.0:
1951 | resolution: {integrity: sha512-5o4LsH1lzBzO9UFH63AJ2ad2/S2AVx6NtjOcaz+VTT2h1RiRvbipW72z8M/lxEhcPHDBQwpDrnTF7sXy/7OwCQ==}
1952 | dependencies:
1953 | acorn: 8.8.1
1954 | dev: true
1955 |
1956 | /supports-color/7.2.0:
1957 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1958 | engines: {node: '>=8'}
1959 | dependencies:
1960 | has-flag: 4.0.0
1961 | dev: true
1962 |
1963 | /supports-preserve-symlinks-flag/1.0.0:
1964 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1965 | engines: {node: '>= 0.4'}
1966 | dev: true
1967 |
1968 | /svelte-check/2.10.3_77wbasr76lhjripnylrva3hecy:
1969 | resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==}
1970 | hasBin: true
1971 | peerDependencies:
1972 | svelte: ^3.24.0
1973 | dependencies:
1974 | '@jridgewell/trace-mapping': 0.3.17
1975 | chokidar: 3.5.3
1976 | fast-glob: 3.2.12
1977 | import-fresh: 3.3.0
1978 | picocolors: 1.0.0
1979 | sade: 1.8.1
1980 | svelte: 3.55.0
1981 | svelte-preprocess: 4.10.7_xue3rdxu6mzlha4hp67wl3d5yu
1982 | typescript: 4.9.4
1983 | transitivePeerDependencies:
1984 | - '@babel/core'
1985 | - coffeescript
1986 | - less
1987 | - node-sass
1988 | - postcss
1989 | - postcss-load-config
1990 | - pug
1991 | - sass
1992 | - stylus
1993 | - sugarss
1994 | dev: true
1995 |
1996 | /svelte-hmr/0.15.1_svelte@3.55.0:
1997 | resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==}
1998 | engines: {node: ^12.20 || ^14.13.1 || >= 16}
1999 | peerDependencies:
2000 | svelte: '>=3.19.0'
2001 | dependencies:
2002 | svelte: 3.55.0
2003 | dev: true
2004 |
2005 | /svelte-preprocess/4.10.7_xue3rdxu6mzlha4hp67wl3d5yu:
2006 | resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==}
2007 | engines: {node: '>= 9.11.2'}
2008 | requiresBuild: true
2009 | peerDependencies:
2010 | '@babel/core': ^7.10.2
2011 | coffeescript: ^2.5.1
2012 | less: ^3.11.3 || ^4.0.0
2013 | node-sass: '*'
2014 | postcss: ^7 || ^8
2015 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0
2016 | pug: ^3.0.0
2017 | sass: ^1.26.8
2018 | stylus: ^0.55.0
2019 | sugarss: ^2.0.0
2020 | svelte: ^3.23.0
2021 | typescript: ^3.9.5 || ^4.0.0
2022 | peerDependenciesMeta:
2023 | '@babel/core':
2024 | optional: true
2025 | coffeescript:
2026 | optional: true
2027 | less:
2028 | optional: true
2029 | node-sass:
2030 | optional: true
2031 | postcss:
2032 | optional: true
2033 | postcss-load-config:
2034 | optional: true
2035 | pug:
2036 | optional: true
2037 | sass:
2038 | optional: true
2039 | stylus:
2040 | optional: true
2041 | sugarss:
2042 | optional: true
2043 | typescript:
2044 | optional: true
2045 | dependencies:
2046 | '@types/pug': 2.0.6
2047 | '@types/sass': 1.43.1
2048 | detect-indent: 6.1.0
2049 | magic-string: 0.25.9
2050 | postcss: 8.4.21
2051 | sorcery: 0.10.0
2052 | strip-indent: 3.0.0
2053 | svelte: 3.55.0
2054 | typescript: 4.9.4
2055 | dev: true
2056 |
2057 | /svelte/3.55.0:
2058 | resolution: {integrity: sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==}
2059 | engines: {node: '>= 8'}
2060 | dev: true
2061 |
2062 | /svelte2tsx/0.5.23_niwyv7xychq2ag6arq5eqxbomm:
2063 | resolution: {integrity: sha512-jYFnugTQRFmUpvLXPQrKzVYcW5ErT+0QCxg027Zx9BuvYefMZFuoBSTDYe7viPEFGrPPiLgT2m7f5n9khE7f7Q==}
2064 | peerDependencies:
2065 | svelte: ^3.24
2066 | typescript: ^4.1.2
2067 | dependencies:
2068 | dedent-js: 1.0.1
2069 | pascal-case: 3.1.2
2070 | svelte: 3.55.0
2071 | typescript: 4.9.4
2072 | dev: true
2073 |
2074 | /tailwindcss/3.2.4_postcss@8.4.21:
2075 | resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==}
2076 | engines: {node: '>=12.13.0'}
2077 | hasBin: true
2078 | peerDependencies:
2079 | postcss: ^8.0.9
2080 | dependencies:
2081 | arg: 5.0.2
2082 | chokidar: 3.5.3
2083 | color-name: 1.1.4
2084 | detective: 5.2.1
2085 | didyoumean: 1.2.2
2086 | dlv: 1.1.3
2087 | fast-glob: 3.2.12
2088 | glob-parent: 6.0.2
2089 | is-glob: 4.0.3
2090 | lilconfig: 2.0.6
2091 | micromatch: 4.0.5
2092 | normalize-path: 3.0.0
2093 | object-hash: 3.0.0
2094 | picocolors: 1.0.0
2095 | postcss: 8.4.21
2096 | postcss-import: 14.1.0_postcss@8.4.21
2097 | postcss-js: 4.0.0_postcss@8.4.21
2098 | postcss-load-config: 3.1.4_postcss@8.4.21
2099 | postcss-nested: 6.0.0_postcss@8.4.21
2100 | postcss-selector-parser: 6.0.11
2101 | postcss-value-parser: 4.2.0
2102 | quick-lru: 5.1.1
2103 | resolve: 1.22.1
2104 | transitivePeerDependencies:
2105 | - ts-node
2106 | dev: true
2107 |
2108 | /text-table/0.2.0:
2109 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
2110 | dev: true
2111 |
2112 | /tiny-glob/0.2.9:
2113 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
2114 | dependencies:
2115 | globalyzer: 0.1.0
2116 | globrex: 0.1.2
2117 | dev: true
2118 |
2119 | /tinybench/2.3.1:
2120 | resolution: {integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==}
2121 | dev: true
2122 |
2123 | /tinypool/0.3.0:
2124 | resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==}
2125 | engines: {node: '>=14.0.0'}
2126 | dev: true
2127 |
2128 | /tinyspy/1.0.2:
2129 | resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==}
2130 | engines: {node: '>=14.0.0'}
2131 | dev: true
2132 |
2133 | /to-regex-range/5.0.1:
2134 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2135 | engines: {node: '>=8.0'}
2136 | dependencies:
2137 | is-number: 7.0.0
2138 | dev: true
2139 |
2140 | /totalist/3.0.0:
2141 | resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==}
2142 | engines: {node: '>=6'}
2143 | dev: true
2144 |
2145 | /tslib/1.14.1:
2146 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
2147 | dev: true
2148 |
2149 | /tslib/2.4.1:
2150 | resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
2151 | dev: true
2152 |
2153 | /tsutils/3.21.0_typescript@4.9.4:
2154 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
2155 | engines: {node: '>= 6'}
2156 | peerDependencies:
2157 | 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'
2158 | dependencies:
2159 | tslib: 1.14.1
2160 | typescript: 4.9.4
2161 | dev: true
2162 |
2163 | /type-check/0.4.0:
2164 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
2165 | engines: {node: '>= 0.8.0'}
2166 | dependencies:
2167 | prelude-ls: 1.2.1
2168 | dev: true
2169 |
2170 | /type-detect/4.0.8:
2171 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
2172 | engines: {node: '>=4'}
2173 | dev: true
2174 |
2175 | /type-fest/0.20.2:
2176 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
2177 | engines: {node: '>=10'}
2178 | dev: true
2179 |
2180 | /typescript/4.9.4:
2181 | resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==}
2182 | engines: {node: '>=4.2.0'}
2183 | hasBin: true
2184 | dev: true
2185 |
2186 | /undici/5.14.0:
2187 | resolution: {integrity: sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==}
2188 | engines: {node: '>=12.18'}
2189 | dependencies:
2190 | busboy: 1.6.0
2191 | dev: true
2192 |
2193 | /unist-util-stringify-position/2.0.3:
2194 | resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
2195 | dependencies:
2196 | '@types/unist': 2.0.6
2197 | dev: true
2198 |
2199 | /update-browserslist-db/1.0.10_browserslist@4.21.4:
2200 | resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
2201 | hasBin: true
2202 | peerDependencies:
2203 | browserslist: '>= 4.21.0'
2204 | dependencies:
2205 | browserslist: 4.21.4
2206 | escalade: 3.1.1
2207 | picocolors: 1.0.0
2208 | dev: true
2209 |
2210 | /uri-js/4.4.1:
2211 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
2212 | dependencies:
2213 | punycode: 2.1.1
2214 | dev: true
2215 |
2216 | /util-deprecate/1.0.2:
2217 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
2218 | dev: true
2219 |
2220 | /vfile-message/2.0.4:
2221 | resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==}
2222 | dependencies:
2223 | '@types/unist': 2.0.6
2224 | unist-util-stringify-position: 2.0.3
2225 | dev: true
2226 |
2227 | /vite/4.0.4:
2228 | resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==}
2229 | engines: {node: ^14.18.0 || >=16.0.0}
2230 | hasBin: true
2231 | peerDependencies:
2232 | '@types/node': '>= 14'
2233 | less: '*'
2234 | sass: '*'
2235 | stylus: '*'
2236 | sugarss: '*'
2237 | terser: ^5.4.0
2238 | peerDependenciesMeta:
2239 | '@types/node':
2240 | optional: true
2241 | less:
2242 | optional: true
2243 | sass:
2244 | optional: true
2245 | stylus:
2246 | optional: true
2247 | sugarss:
2248 | optional: true
2249 | terser:
2250 | optional: true
2251 | dependencies:
2252 | esbuild: 0.16.14
2253 | postcss: 8.4.21
2254 | resolve: 1.22.1
2255 | rollup: 3.9.1
2256 | optionalDependencies:
2257 | fsevents: 2.3.2
2258 | dev: true
2259 |
2260 | /vite/4.0.4_@types+node@18.11.18:
2261 | resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==}
2262 | engines: {node: ^14.18.0 || >=16.0.0}
2263 | hasBin: true
2264 | peerDependencies:
2265 | '@types/node': '>= 14'
2266 | less: '*'
2267 | sass: '*'
2268 | stylus: '*'
2269 | sugarss: '*'
2270 | terser: ^5.4.0
2271 | peerDependenciesMeta:
2272 | '@types/node':
2273 | optional: true
2274 | less:
2275 | optional: true
2276 | sass:
2277 | optional: true
2278 | stylus:
2279 | optional: true
2280 | sugarss:
2281 | optional: true
2282 | terser:
2283 | optional: true
2284 | dependencies:
2285 | '@types/node': 18.11.18
2286 | esbuild: 0.16.14
2287 | postcss: 8.4.21
2288 | resolve: 1.22.1
2289 | rollup: 3.9.1
2290 | optionalDependencies:
2291 | fsevents: 2.3.2
2292 | dev: true
2293 |
2294 | /vitefu/0.2.4_vite@4.0.4:
2295 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==}
2296 | peerDependencies:
2297 | vite: ^3.0.0 || ^4.0.0
2298 | peerDependenciesMeta:
2299 | vite:
2300 | optional: true
2301 | dependencies:
2302 | vite: 4.0.4
2303 | dev: true
2304 |
2305 | /vitest/0.25.8:
2306 | resolution: {integrity: sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==}
2307 | engines: {node: '>=v14.16.0'}
2308 | hasBin: true
2309 | peerDependencies:
2310 | '@edge-runtime/vm': '*'
2311 | '@vitest/browser': '*'
2312 | '@vitest/ui': '*'
2313 | happy-dom: '*'
2314 | jsdom: '*'
2315 | peerDependenciesMeta:
2316 | '@edge-runtime/vm':
2317 | optional: true
2318 | '@vitest/browser':
2319 | optional: true
2320 | '@vitest/ui':
2321 | optional: true
2322 | happy-dom:
2323 | optional: true
2324 | jsdom:
2325 | optional: true
2326 | dependencies:
2327 | '@types/chai': 4.3.4
2328 | '@types/chai-subset': 1.3.3
2329 | '@types/node': 18.11.18
2330 | acorn: 8.8.1
2331 | acorn-walk: 8.2.0
2332 | chai: 4.3.7
2333 | debug: 4.3.4
2334 | local-pkg: 0.4.2
2335 | source-map: 0.6.1
2336 | strip-literal: 1.0.0
2337 | tinybench: 2.3.1
2338 | tinypool: 0.3.0
2339 | tinyspy: 1.0.2
2340 | vite: 4.0.4_@types+node@18.11.18
2341 | transitivePeerDependencies:
2342 | - less
2343 | - sass
2344 | - stylus
2345 | - sugarss
2346 | - supports-color
2347 | - terser
2348 | dev: true
2349 |
2350 | /which/2.0.2:
2351 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2352 | engines: {node: '>= 8'}
2353 | hasBin: true
2354 | dependencies:
2355 | isexe: 2.0.0
2356 | dev: true
2357 |
2358 | /word-wrap/1.2.3:
2359 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
2360 | engines: {node: '>=0.10.0'}
2361 | dev: true
2362 |
2363 | /wrappy/1.0.2:
2364 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2365 | dev: true
2366 |
2367 | /xtend/4.0.2:
2368 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
2369 | engines: {node: '>=0.4'}
2370 | dev: true
2371 |
2372 | /yallist/4.0.0:
2373 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
2374 | dev: true
2375 |
2376 | /yaml/1.10.2:
2377 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
2378 | engines: {node: '>= 6'}
2379 | dev: true
2380 |
2381 | /yocto-queue/0.1.0:
2382 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
2383 | engines: {node: '>=10'}
2384 | dev: true
2385 |
--------------------------------------------------------------------------------
/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: [require('tailwindcss'), require('autoprefixer')]
3 | };
4 |
--------------------------------------------------------------------------------
/src/app.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | h1 {
6 | @apply text-4xl font-bold my-8;
7 | }
8 | h2 {
9 | @apply text-3xl font-bold my-8;
10 | }
11 | h3 {
12 | @apply text-2xl font-bold my-8;
13 | }
14 | p {
15 | @apply text-xl my-8 leading-10;
16 | }
17 | blockquote {
18 | @apply bg-base-300 rounded-md py-1 px-8 my-8;
19 | }
20 | pre {
21 | @apply bg-base-300 rounded-md p-12 my-8;
22 | }
23 | code {
24 | @apply bg-base-300 rounded-sm p-2 text-sm;
25 | }
26 | pre > code {
27 | @apply bg-transparent;
28 | }
29 |
30 | ul {
31 | @apply bg-base-300 rounded-md px-8 py-4;
32 | }
33 |
34 | a {
35 | @apply text-primary text-xl font-semibold hover:text-secondary-focus transition-all duration-300;
36 | }
37 |
38 | /**
39 | * General
40 | */
41 | pre[class*='language-'],
42 | code[class*='language-'] {
43 | color: #e0e0e0;
44 | font-size: 13px;
45 | text-shadow: none;
46 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
47 | direction: ltr;
48 | text-align: left;
49 | white-space: pre;
50 | word-spacing: normal;
51 | word-break: normal;
52 | line-height: 2;
53 | -moz-tab-size: 4;
54 | -o-tab-size: 4;
55 | tab-size: 4;
56 | -webkit-hyphens: none;
57 | -moz-hyphens: none;
58 | -ms-hyphens: none;
59 | hyphens: none;
60 | }
61 | pre[class*='language-']::selection,
62 | code[class*='language-']::selection,
63 | pre[class*='language-']::mozselection,
64 | code[class*='language-']::mozselection {
65 | text-shadow: none;
66 | background: #b3d4fc;
67 | }
68 | @media print {
69 | pre[class*='language-'],
70 | code[class*='language-'] {
71 | text-shadow: none;
72 | }
73 | }
74 | pre[class*='language-'] {
75 | padding: 1em;
76 | margin: 0.5em 0;
77 | overflow: auto;
78 | background: #1f242d;
79 | }
80 | :not(pre) > code[class*='language-'] {
81 | padding: 0.1em 0.3em;
82 | border-radius: 0.3em;
83 | color: #ffffff;
84 | background: #1f242d;
85 | }
86 | /**
87 | * Tokens
88 | */
89 | .namespace {
90 | opacity: 0.7;
91 | }
92 | .token.comment,
93 | .token.prolog,
94 | .token.doctype,
95 | .token.cdata {
96 | color: #93a1a1;
97 | }
98 | .token.punctuation {
99 | color: #999999;
100 | }
101 | .token.property,
102 | .token.tag,
103 | .token.boolean,
104 | .token.number,
105 | .token.constant,
106 | .token.symbol,
107 | .token.deleted {
108 | color: #eb0f88;
109 | }
110 | .token.selector,
111 | .token.attr-name,
112 | .token.string,
113 | .token.char,
114 | .token.builtin,
115 | .token.inserted {
116 | color: #31aaa8;
117 | }
118 | .token.operator,
119 | .token.entity,
120 | .token.url,
121 | .language-css .token.string,
122 | .style .token.string {
123 | color: #b2d4fc;
124 | background: #1f242d;
125 | }
126 | .token.atrule,
127 | .token.attr-value,
128 | .token.keyword {
129 | color: #b2d4fc;
130 | }
131 | .token.function {
132 | color: #dd4a68;
133 | }
134 | .token.regex,
135 | .token.important,
136 | .token.variable {
137 | color: #ee9900;
138 | }
139 | .token.important,
140 | .token.bold {
141 | font-weight: bold;
142 | }
143 | .token.italic {
144 | font-style: italic;
145 | }
146 | .token.entity {
147 | cursor: help;
148 | }
149 | /*********************************************************
150 | * Line highlighting
151 | */
152 | pre[data-line] {
153 | position: relative;
154 | }
155 | pre[class*='language-'] > code[class*='language-'] {
156 | position: relative;
157 | z-index: 1;
158 | }
159 | .line-highlight {
160 | position: absolute;
161 | left: 0;
162 | right: 0;
163 | padding: inherit 0;
164 | margin-top: 1em;
165 | background: #3c4558;
166 | box-shadow: inset 5px 0 0 #b2d4fc;
167 | z-index: 0;
168 | pointer-events: none;
169 | line-height: inherit;
170 | white-space: pre;
171 | }
172 |
--------------------------------------------------------------------------------
/src/app.d.ts:
--------------------------------------------------------------------------------
1 | // See https://kit.svelte.dev/docs/types#app
2 | // for information about these interfaces
3 | // and what to do when importing types
4 | import PocketBase, { Admin } from 'pocketbase';
5 |
6 | declare global {
7 | declare namespace App {
8 | // interface Error {}
9 | interface Locals {
10 | pb: PocketBase;
11 | user: Record | Admin | null;
12 | }
13 | // interface PageData {}
14 | // interface Platform {}
15 | }
16 | declare module '*.md' {
17 | export const metadata: {
18 | title?: string;
19 | prevUrl?: string;
20 | prevButton?: string;
21 | nextUrl?: string;
22 | nextButton?: string;
23 | };
24 | const content: ConstructorOfATypedSvelteComponent;
25 | export default content
26 | };
27 | }
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %sveltekit.head%
8 |
9 |
10 | %sveltekit.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/content/first-list-item.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: First List Item
3 | prevUrl: '/full-list'
4 | prevButton: 'Full List'
5 | nextUrl: '/user'
6 | nextButton: 'User'
7 | ---
8 |
9 | # { title }
10 |
11 | If you are looking to find that one specific record that matches a certain parameter, the `FirstListItem` component has got your back! Set the `collection` prop and provide a `filter`, and it will return the first record that fits the bill. It's like the `firstListItem` function, but without all the chaining.
12 |
13 | ```typescript
14 |
17 |
18 |
22 | {record.title}
23 | {error}
24 |
25 | ```
26 |
--------------------------------------------------------------------------------
/src/content/full-list.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Full List
3 | prevUrl: '/list'
4 | prevButton: 'List'
5 | nextUrl: '/first-list-item'
6 | nextButton: 'First List Item'
7 | ---
8 |
9 | # { title }
10 |
11 | If you want to retrieve all records from a collection as you would using the `getFullList` function, you can use the `FullList` component.
12 |
13 | By default, the component will return a `batch` of 100 records, but you are free to increase or decrease this to fit your specific needs.
14 |
15 | ```typescript
16 |
19 |
20 |
21 | {#each records as record}
22 | {record.title}
23 | {/each}
24 | {error}
25 |
26 | ```
27 |
--------------------------------------------------------------------------------
/src/content/list.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: List
3 | prevUrl: '/record'
4 | prevButton: 'Record'
5 | nextUrl: '/full-list'
6 | nextButton: 'Full List'
7 | ---
8 |
9 | # { title }
10 |
11 | Need to retrieve a list of records from your PocketBase database? Check out the `List` component! You can easily paginate through your data just like you would with the `getList` function in the PocketBase JavaScript SDK.
12 |
13 | The component defaults to displaying 50 records per page, starting at page 1, but you can customize the current page and results per page to fit your needs using the `page` and `perPage` props.
14 |
15 | **Example**
16 |
17 | ```typescript
18 |
27 |
28 |
29 | {#each items as item}
30 | {item.title}
31 | {/each}
32 | {#each pages as pageNumber}
33 | setPage(pageNumber)}>{pageNumber}
34 | {/each}
35 | {JSON.stringify(items, null, 2)}
36 | {error}
37 |
38 |
39 | ```
40 |
41 | ## Declarative Pagination
42 |
43 | You can even break the `List` down even further using the `Pagination` helper to cut down on the `{#each}` blocks within your markup. Simply pass your items array into the `items`. The component will loop over any items in the array, and expose the individual item data via the `let:item` directive.
44 |
45 | You can also pass content to the `pages slot` provided that you also include a pages array to the `pages` prop. This is helpful if you want to have a list of pagination buttons. The `pages slot` is optional, since you may want to provide your own pagination navigation.
46 |
47 | **Example**
48 |
49 | ```typescript
50 |
60 |
61 |
62 |
63 | {item.title}
64 | setPage(pageNumber)}>{pageNumber}
65 |
66 | {error}
67 |
68 | ```
69 |
--------------------------------------------------------------------------------
/src/content/record.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Record
3 | prevUrl: '/'
4 | prevButton: 'Intro'
5 | nextUrl: '/list'
6 | nextButton: 'List'
7 | ---
8 |
9 | # Record
10 |
11 | ```typescript
12 |
15 |
16 |
17 | Loading...
18 | {JSON.stringify(record, null, 2)}
19 | {error}
20 |
21 | ```
22 |
23 | The `Record` component is intended to retrieve single records from your database by their `RECORD_ID`.
24 |
25 | Simply pass in the name of the collection to the `collection` prop and a `RECORD_ID` to the `id` prop and let the component do the heavy lifting.
26 |
27 | You can also pass an `HTMLElement` into the `loading` slot in the event that your server is being naughty, and you need to keep your audience captivated with a fancy loading element.
28 |
29 | Want to access the data? No problem, just use the handy `let:record` directive.
30 |
31 | As an extra sprinkle of magic, there is no need to fuss about with `{ #await }` blocks. The `Record` component, along with all other data components handle the async action for you!
32 |
--------------------------------------------------------------------------------
/src/content/user.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: User
3 | prevUrl: '/first-list-item'
4 | prevButton: 'First List Item'
5 | ---
6 |
7 | # { title }
8 |
9 | Need to show (or hide) certain parts of your UI based on a user's authentication status? Simply wrap any content you want to conditionally render with the `User` component, and it will only appear if there is a valid user object in the `authStore`.
10 |
11 | If you want a fallback element for signed-out users? Just assign it to the `signedout` slot.
12 |
13 | Also, if you want to render a placeholder during the loading phase, assign an element to the `loading` slot as we do for all other components.
14 |
15 | To access the user's data, just use the `let:user` directive to pass it down to any child elements.
16 |
17 | ```typescript
18 |
21 |
22 |
23 |
24 |
Name: {user?.name}
25 |
Email: {user?.email}
26 |
27 |
31 |
32 |
33 | ```
34 |
35 | ## Protecting Specific Routes
36 |
37 | The User component is pretty sweet, but it is not a sufficient method for protecting critical areas of your application. If you need to protect specific routes, you should consider using a `hooks.server.(ts|js)` alongside `load` functions inside your `+page.server.(ts|js)`.
38 |
39 | To save you the hassle of looking it up yourself, I've included a few examples below that can help get you started.
40 |
41 | ### hooks.server.ts
42 |
43 | ```typescript
44 | // src/hooks.server.ts
45 |
46 | import { env } from '$env/dynamic/public';
47 | import type { Handle } from '@sveltejs/kit';
48 | import PocketBase from 'pocketbase';
49 |
50 | export const handle: Handle = async ({ event, resolve }) => {
51 | event.locals.pb = new PocketBase(env.PUBLIC_POCKETBASE_URL);
52 |
53 | // Grab the cookie from request headers
54 | const cookie = event.request.headers.get('cookie');
55 |
56 | // load the store data from the request cookie string
57 | event.locals.pb.authStore.loadFromCookie(cookie || '');
58 |
59 | try {
60 | // get an up-to-date auth store state by verifying and refreshing the loaded auth model (if any)
61 | event.locals.pb.authStore.isValid && (await event.locals.pb.collection('users').authRefresh());
62 | } catch (_) {
63 | // clear the auth store on failed refresh
64 | event.locals.pb.authStore.clear();
65 | }
66 |
67 | const response = await resolve(event);
68 |
69 | // send back the default 'pb_auth' cookie to the client with the latest store state
70 | response.headers.set('set-cookie', event.locals.pb.authStore.exportToCookie());
71 |
72 | return response;
73 | };
74 | ```
75 |
76 | ### +page.server.ts
77 |
78 | ```typescript
79 | // src/routes/protected-route/+page.server.ts
80 |
81 | import { redirect } from '@sveltejs/kit';
82 | import type { PageServerLoad } from './$types';
83 |
84 | export const load = (({ locals }) => {
85 | // check to see if the user is authenticated
86 | if (!locals.pb.authStore.isValid) {
87 | // if not, redirect them to "/login"
88 | throw redirect(303, '/login');
89 | }
90 | }) satisfies PageServerLoad;
91 | ```
92 |
--------------------------------------------------------------------------------
/src/hooks.server.ts:
--------------------------------------------------------------------------------
1 | import { env } from "$env/dynamic/public";
2 | import type { Handle } from '@sveltejs/kit';
3 | import PocketBase from "pocketbase";
4 |
5 | export const handle: Handle = async ({ event, resolve }) => {
6 | event.locals.pb = new PocketBase(env.PUBLIC_POCKETBASE_URL)
7 |
8 | // Grab the cookie from request headers
9 | const cookie = event.request.headers.get('cookie')
10 |
11 | // load the store data from the request cookie string
12 | event.locals.pb.authStore.loadFromCookie(cookie || '');
13 |
14 | try {
15 | // get an up-to-date auth store state by verifying and refreshing the loaded auth model (if any)
16 | event.locals.pb.authStore.isValid && (await event.locals.pb.collection('users').authRefresh());
17 | } catch (_) {
18 | // clear the auth store on failed refresh
19 | event.locals.pb.authStore.clear();
20 | }
21 |
22 | const response = await resolve(event);
23 |
24 | // send back the default 'pb_auth' cookie to the client with the latest store state
25 | response.headers.set('set-cookie', event.locals.pb.authStore.exportToCookie({httpOnly: false, secure: false}));
26 |
27 | return response;
28 | };
29 |
--------------------------------------------------------------------------------
/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/FirstListItem.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 | {#await record then data}
13 | {#if !data}
14 |
15 | {/if}
16 |
17 | {:catch error}
18 |
19 | {/await}
20 |
--------------------------------------------------------------------------------
/src/lib/FullList.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 | {#await records then data}
13 | {#if !data}
14 |
15 | {/if}
16 |
17 | {:catch error}
18 |
19 | {/await}
20 |
--------------------------------------------------------------------------------
/src/lib/List.svelte:
--------------------------------------------------------------------------------
1 |
20 |
21 | {#await resultList then data}
22 | {#if !data}
23 |
24 | {/if}
25 |
26 | {:catch error}
27 |
28 | {/await}
29 |
--------------------------------------------------------------------------------
/src/lib/Pagination.svelte:
--------------------------------------------------------------------------------
1 |
7 |
8 | {#each items as item}
9 |
10 | {/each}
11 | {#if pages && $$slots.pages}
12 | {#each pages as pageNumber}
13 |
14 | {/each}
15 | {/if}
16 |
--------------------------------------------------------------------------------
/src/lib/Record.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 | {#await record then data}
13 | {#if !data}
14 |
15 | {/if}
16 |
17 | {:catch error}
18 |
19 | {/await}
20 |
--------------------------------------------------------------------------------
/src/lib/User.svelte:
--------------------------------------------------------------------------------
1 |
24 |
25 | {#if mounted}
26 | {#if $pbStore.authStore.isValid && $user}
27 |
28 | {:else}
29 |
30 | {/if}
31 | {:else}
32 |
33 | {/if}
34 |
--------------------------------------------------------------------------------
/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | import FirstListItem from './FirstListItem.svelte';
2 | import FullList from './FullList.svelte';
3 | import List from './List.svelte';
4 | import Pagination from './Pagination.svelte';
5 | import Record from './Record.svelte';
6 | import { pbStore } from './stores';
7 | import User from './User.svelte';
8 |
9 | export { FirstListItem, FullList, List, Pagination, Record, User, pbStore };
10 |
--------------------------------------------------------------------------------
/src/lib/stores.ts:
--------------------------------------------------------------------------------
1 | import { browser } from '$app/environment';
2 | import PocketBase, { BaseAuthStore } from 'pocketbase';
3 | import { writable } from 'svelte/store';
4 |
5 | function createPbStore(
6 | baseUrl?: string | undefined,
7 | authStore?: BaseAuthStore | null | undefined,
8 | lang?: string | undefined
9 | ) {
10 | const store = writable();
11 |
12 | function set(
13 | baseUrl?: string | undefined,
14 | authStore?: BaseAuthStore | null | undefined,
15 | lang?: string | undefined
16 | ) {
17 | const pb = new PocketBase(baseUrl, authStore, lang);
18 |
19 | if (browser) {
20 | pb.authStore.loadFromCookie(document.cookie);
21 | }
22 | store.set(pb);
23 | }
24 |
25 | set(baseUrl, authStore, lang);
26 |
27 | return {
28 | subscribe: store.subscribe,
29 | set
30 | };
31 | }
32 |
33 | export const pbStore = createPbStore();
34 |
--------------------------------------------------------------------------------
/src/routes/+layout.svelte:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
46 |
47 | Protected
48 |
49 |
50 |
62 |
63 |
64 |
65 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/src/routes/+page.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 | {data.metadata?.title || 'Component'}
8 |
9 |
10 |
11 |
12 | This library is in early development. Be careful if you intend on using it in a production
13 | environment.
14 |
15 |
16 |
19 |
20 |
--------------------------------------------------------------------------------
/src/routes/+page.ts:
--------------------------------------------------------------------------------
1 | import type { PageData } from "./$types";
2 |
3 |
4 | export const load = (async () => {
5 | const post = await import(`./intro.md`);
6 | const { metadata } = post;
7 | const content = post.default;
8 |
9 | return {
10 | content,
11 | metadata
12 | };
13 | }) satisfies PageData;
14 |
--------------------------------------------------------------------------------
/src/routes/[slug]/+page.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 | {data.metadata?.title || 'Component'}
8 |
9 |
10 |
11 |
12 |
13 |
21 |
--------------------------------------------------------------------------------
/src/routes/[slug]/+page.ts:
--------------------------------------------------------------------------------
1 | import type { PageLoad } from './$types';
2 |
3 | export const load = (async ({params}) => {
4 | const post = await import(`../../content/${params.slug}.md`);
5 | const { metadata } = post;
6 | const content = post.default;
7 |
8 | return {
9 | content,
10 | metadata
11 | };
12 | }) satisfies PageLoad;
13 |
--------------------------------------------------------------------------------
/src/routes/intro.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Svelte-PocketBase
3 | nextUrl: '/record'
4 | nextButton: 'Record'
5 | ---
6 |
7 | # {title}
8 |
9 | **Supercharge your Sveltekit + PocketBase project!**
10 |
11 | **Svelte-Pocketbase** is the perfect companion to your next Sveltekit + PocketBase project. This library provides declarative components that effortlessly query data from your PocketBase database.
12 |
13 | ## Getting Started
14 |
15 | ```bash
16 | # install svelte-pocketbase with pnpm, npm or yarn
17 |
18 | pnpm i -D svelte-pocketbase
19 | ```
20 |
21 | ## PocketBase Store
22 |
23 | To get started, instantiate a new `pbStore` in a `+page.svelte` or `+layout.svelte`.
24 |
25 | ```javascript
26 | // src/+layout.svelte OR src/+page.svelte
27 |
34 |
35 |
36 | ```
37 |
38 | The `pbStore` is the ultimate marriage of PocketBase and Svelte `Writable` magic! Simply create an instance of `pbStore` and you've got a PocketBase instance wrapped up in a shiny svelte store. Need to use it in your app? No problem! Just subscribe to `$pbStore` and you're good to go.
39 |
40 | ```typescript
41 | // src/+page.svelte
42 |
48 |
49 | {#await record}
50 | Loading...
51 | {:then data}
52 | {JSON.stringify(data, null, 2)}
53 | {:catch error}
54 | {error.message}
55 | {/await}
56 | ```
57 |
58 | This is a fair amount of boilerplate for simply retrieving a bit of data from your database. Instead, maybe try out one of the data retrieval components, like `Record`. These components handle all the tedious bits of querying and data retrieval, leaving you free to focus on more important things (like obsessively fine-tuning your Tailwind CSS config).
59 |
60 | ### Data Retrieval Components
61 |
62 | - [Record](/record)
63 | - [List](/list)
64 | - [FullList](/full-list)
65 | - [FirstListItem](/first-list-item)
66 |
67 | Every data retrieval component receives a `collection` prop, and an optional `query` prop that can be used to sort and filter the results. Each component also contains an `error` slot that can be used to notify the user.
68 |
--------------------------------------------------------------------------------
/src/routes/login/+page.server.ts:
--------------------------------------------------------------------------------
1 | import { redirect } from '@sveltejs/kit';
2 | import type { Actions, PageServerLoad } from './$types';
3 |
4 | export const load = (({ locals }) => {
5 | if (locals.pb.authStore.isValid) {
6 | throw redirect(303, '/');
7 | }
8 | }) satisfies PageServerLoad;
9 |
10 | export const actions: Actions = {
11 | default: async ({ locals, request }) => {
12 | const data = Object.fromEntries(await request.formData()) as {
13 | email: string;
14 | password: string;
15 | };
16 |
17 | try {
18 | await locals.pb.collection('users').authWithPassword(data.email, data.password);
19 | } catch (e) {
20 | console.error(e);
21 | throw e;
22 | }
23 |
24 | throw redirect(303, request.url.replace(/.+\?origin=(.+)/g, '/$1'));
25 | }
26 | };
27 |
--------------------------------------------------------------------------------
/src/routes/login/+page.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 |
37 |
--------------------------------------------------------------------------------
/src/routes/logout/+page.server.ts:
--------------------------------------------------------------------------------
1 | import { redirect } from '@sveltejs/kit';
2 | import type { Actions } from './$types';
3 |
4 | export const actions: Actions = {
5 | default: async ({ locals }) => {
6 | locals.pb.authStore.clear();
7 | locals.user = null;
8 | throw redirect(303, '/');
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/src/routes/secret/+page.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'Protected Route'
3 | ---
4 |
5 | # Protected Route
6 |
7 | This route uses a combination of `hooks` and `+page.server.(t|s)`. Here is an example of how you can implement this in your app.
8 |
9 | ### hooks.server.ts
10 |
11 | ```typescript
12 | // src/hooks.server.ts
13 |
14 | import { env } from '$env/dynamic/public';
15 | import type { Handle } from '@sveltejs/kit';
16 | import PocketBase from 'pocketbase';
17 |
18 | export const handle: Handle = async ({ event, resolve }) => {
19 | event.locals.pb = new PocketBase(env.PUBLIC_POCKETBASE_URL);
20 |
21 | // Grab the cookie from request headers
22 | const cookie = event.request.headers.get('cookie');
23 |
24 | // load the store data from the request cookie string
25 | event.locals.pb.authStore.loadFromCookie(cookie || '');
26 |
27 | try {
28 | // get an up-to-date auth store state by verifying and refreshing the loaded auth model (if any)
29 | event.locals.pb.authStore.isValid && (await event.locals.pb.collection('users').authRefresh());
30 | } catch (_) {
31 | // clear the auth store on failed refresh
32 | event.locals.pb.authStore.clear();
33 | }
34 |
35 | const response = await resolve(event);
36 |
37 | // send back the default 'pb_auth' cookie to the client with the latest store state
38 | response.headers.set('set-cookie', event.locals.pb.authStore.exportToCookie());
39 |
40 | return response;
41 | };
42 | ```
43 |
44 | ### +page.server.ts
45 |
46 | ```typescript
47 | // src/routes/protected-route/+page.server.ts
48 |
49 | import { redirect } from '@sveltejs/kit';
50 | import type { PageServerLoad } from './$types';
51 |
52 | export const load = (({ locals }) => {
53 | // check to see if the user is authenticated
54 | if (!locals.pb.authStore.isValid) {
55 | // if not, redirect them to "/login"
56 | throw redirect(303, '/login');
57 | }
58 | }) satisfies PageServerLoad;
59 | ```
60 |
--------------------------------------------------------------------------------
/src/routes/secret/+page.server.ts:
--------------------------------------------------------------------------------
1 | import { redirect } from '@sveltejs/kit';
2 | import type { PageServerLoad } from './$types';
3 |
4 | export const load = (({ locals }) => {
5 |
6 | if (!locals.pb.authStore.isValid) {
7 | throw redirect(303, '/login?origin=secret');
8 | }
9 | }) satisfies PageServerLoad;
10 |
--------------------------------------------------------------------------------
/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/creekdrops/svelte-pocketbase/3f309a960d17609f059e32fcb2b1ebb6874692e1/static/favicon.png
--------------------------------------------------------------------------------
/svelte.config.js:
--------------------------------------------------------------------------------
1 | import { mdsvex } from 'mdsvex';
2 | import adapter from '@sveltejs/adapter-auto';
3 | import { vitePreprocess } from '@sveltejs/kit/vite';
4 |
5 | /** @type {import('@sveltejs/kit').Config} */
6 | const config = {
7 | extensions: ['.svelte', '.md'],
8 | preprocess: [vitePreprocess(), mdsvex({ extensions: ['.md'] })],
9 | kit: {
10 | adapter: adapter()
11 | }
12 | };
13 |
14 | export default config;
15 |
--------------------------------------------------------------------------------
/tailwind.config.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | content: ['./src/routes/**/*.{svelte,js,ts,md}'],
3 | plugins: [require('daisyui')]
4 | };
5 |
--------------------------------------------------------------------------------
/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.js:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite';
2 |
3 | /** @type {import('vite').UserConfig} */
4 | const config = {
5 | plugins: [sveltekit()],
6 | test: {
7 | include: ['src/**/*.{test,spec}.{js,ts}']
8 | }
9 | };
10 |
11 | export default config;
12 |
--------------------------------------------------------------------------------