├── .github ├── release-drafter.yml └── workflows │ ├── pr.yml │ ├── publish.yml │ └── version-check.yml ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── __tests__ ├── client.test.ts └── server.test.ts ├── example ├── client.ts ├── pages │ └── api │ │ ├── sample.ts │ │ ├── sample │ │ └── [id].ts │ │ ├── sample2.ts │ │ └── sample3 │ │ └── index.ts └── tsconfig.json ├── package.json ├── screenshot.png ├── src ├── client.ts ├── error.ts ├── index.ts ├── react-query.ts ├── router.ts ├── swr.ts ├── type.ts └── validation.ts ├── tools ├── index.js ├── src │ ├── command.ts │ ├── config.ts │ ├── createModuleShim │ │ ├── createImportDeclarations.ts │ │ └── createShim.ts │ ├── createProgram │ │ ├── createConfigFileHost.ts │ │ └── index.ts │ ├── emitFile.ts │ ├── emitModulesShim.ts │ ├── index.ts │ ├── mapFileInfo.ts │ ├── printList.ts │ └── types.ts └── tsconfig.json ├── tsconfig.json ├── utility └── version-check.js ├── vitest.config.ts └── yarn.lock /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name-template: 'v$RESOLVED_VERSION 🌈' 2 | tag-template: 'v$RESOLVED_VERSION' 3 | exclude-labels: 4 | - 'release' 5 | - 'auto' 6 | categories: 7 | - title: '🚀 Features' 8 | labels: 9 | - 'feature' 10 | - 'enhancement' 11 | - title: '🐛 Bug Fixes' 12 | labels: 13 | - 'fix' 14 | - 'bugfix' 15 | - 'bug' 16 | - title: '🧰 Maintenance' 17 | label: 'chore' 18 | change-template: '- $TITLE @$AUTHOR (#$NUMBER)' 19 | change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks. 20 | template: | 21 | ## Changes 22 | 23 | $CHANGES -------------------------------------------------------------------------------- /.github/workflows/pr.yml: -------------------------------------------------------------------------------- 1 | name: PR 2 | env: 3 | CI: true 4 | # preview環境更新および、stage環境やproduction環境の更新を行うworkflow 5 | on: 6 | push: 7 | branches: 8 | - main 9 | - develop 10 | pull_request: 11 | branches: 12 | - main 13 | - develop 14 | types: 15 | - opened 16 | - synchronize 17 | - closed 18 | - labeled 19 | - unlabeled 20 | tags: 21 | - "!*" 22 | jobs: 23 | release: 24 | name: Setup 25 | runs-on: ubuntu-latest 26 | steps: 27 | - name: check label 28 | if: | 29 | github.event_name == 'pull_request' && 30 | !contains(github.event.pull_request.labels.*.name, 'fix') && 31 | !contains(github.event.pull_request.labels.*.name, 'bugfix') && 32 | !contains(github.event.pull_request.labels.*.name, 'enhancement') && 33 | !contains(github.event.pull_request.labels.*.name, 'chore') && 34 | !contains(github.event.pull_request.labels.*.name, 'feature') && 35 | !contains(github.event.pull_request.labels.*.name, 'release') && 36 | !contains(github.event.pull_request.labels.*.name, 'auto') 37 | env: 38 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 39 | URL: ${{ github.event.pull_request.comments_url }} 40 | run: | 41 | echo "Please add one of the following labels: fix, bugfix, enhancement, chore, feature, release" >> comments 42 | sed -i -z 's/\n/\\n/g' comments 43 | curl -X POST \ 44 | -H "Authorization: token ${GITHUB_TOKEN}" \ 45 | -d "{\"body\": \"$(cat comments)\"}" \ 46 | ${URL} 47 | exit 1 -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | env: 3 | CI: true 4 | # masterブランチにpushした時のみ実行するワークフロー 5 | on: 6 | push: 7 | branches: 8 | - main 9 | tags: 10 | - "!*" 11 | 12 | jobs: 13 | release: 14 | name: Setup 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: checkout 18 | uses: actions/checkout@v1 19 | - name: setup Node 20 | uses: actions/setup-node@v2 21 | with: 22 | node-version: 16.x 23 | registry-url: 'https://registry.npmjs.org' 24 | - name: install 25 | run: yarn 26 | # まだtagがないバージョンなら、Git Tagをpushする 27 | - name: package-version 28 | run: node -p -e '`PACKAGE_VERSION=${require("./package.json").version}`' >> $GITHUB_ENV 29 | - name: package-version-to-git-tag 30 | uses: pkgdeps/git-tag-action@v2 31 | with: 32 | github_token: ${{ secrets.GITHUB_TOKEN }} 33 | github_repo: ${{ github.repository }} 34 | git_commit_sha: ${{ github.sha }} 35 | git_tag_prefix: "" 36 | version: ${{ env.PACKAGE_VERSION }} 37 | - name: get-npm-version 38 | id: package-version 39 | uses: martinbeentjes/npm-get-version-action@master 40 | - name: create draft 41 | uses: release-drafter/release-drafter@v5 42 | with: 43 | version: ${{ steps.package-version.outputs.current-version }} 44 | name: ${{ steps.package-version.outputs.current-version }} 45 | tag: ${{ steps.package-version.outputs.current-version }} 46 | env: 47 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 48 | - name: test 49 | run: yarn test 50 | - name: build lib 51 | run: yarn build && yarn build:tool 52 | - name: publish to npm 53 | run: npm publish 54 | env: 55 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} -------------------------------------------------------------------------------- /.github/workflows/version-check.yml: -------------------------------------------------------------------------------- 1 | name: Version Check 2 | on: 3 | pull_request: 4 | branches: 5 | - main 6 | types: 7 | - opened 8 | - synchronize 9 | 10 | jobs: 11 | auto-bumping: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: checkout 15 | uses: actions/checkout@v1 16 | - name: setup Node 17 | uses: actions/setup-node@v2 18 | with: 19 | node-version: 16.x 20 | registry-url: 'https://npm.pkg.github.com' 21 | - name: install 22 | run: yarn 23 | - name: version check 24 | run: BRANCH_NAME=$HEAD_BRANCH node ./utility/version-check.js 25 | env: 26 | HEAD_BRANCH: ${{ github.head_ref }} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/* 2 | .yarn/* 3 | types/pages/**/*.d.ts 4 | lib/* 5 | tools/lib/* -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .yarn/* 2 | node_modules/* 3 | pages/* -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 steelydylan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # next-zod-router 2 | 3 | A library for simple API routing in Next.js 4 | while leveraging Zod and Typescript to create typesafe routes and middlewares with built in validation. 5 | 6 | ![](./screenshot.png) 7 | 8 | ## Motivation 9 | 10 | I wanted to create type-safe APIs in Next.js using zod and also wanted to generate type definition files for client-side use so that I could use intuitive API calls. 11 | But I couldn't find a library that met my needs, so I created this library. 12 | 13 | ## Features 14 | 15 | - Type-safe API routing 16 | - Type-safe API call 17 | - Validation using zod 18 | - Error handling 19 | - Type definition file generation for client-side use 20 | - Middleware support 21 | 22 | ## Demo 23 | 24 | https://stackblitz.com/edit/next-typescript-32qrbx?embed=1&file=pages/index.tsx&file=pages/api/sample/[id].ts&hideNavigation=1&view=editor 25 | 26 | ## Usage 27 | 28 | ### Installation 29 | 30 | 31 | ```bash 32 | ## npm 33 | npm install next-zod-router 34 | 35 | ## yarn 36 | yarn add next-zod-router 37 | ``` 38 | 39 | ### Server-side 40 | 41 | 1. Use zod to define the types for body, query, and res. 42 | 2. Create routing handling with createRouter. 43 | 3. Assign types to the created routing handling with validate. 44 | 4. Export the types as GetHandler and PostHandler. 45 | 46 | ```ts 47 | // pages/api/sample.ts 48 | import { ApiHandler, createRouter, validate } from "next-zod-router"; 49 | import { z } from "zod"; 50 | 51 | /* Schema definition using zod */ 52 | const postValidation = { 53 | body: z.object({ 54 | foo: z.string(), 55 | }), 56 | query: z.object({ 57 | bar: z.string().optional(), 58 | }), 59 | res: z.object({ 60 | message: z.string(), 61 | }), 62 | } 63 | 64 | const getValidation = { 65 | query: z.object({ 66 | bar: z.string().optional(), 67 | }), 68 | res: z.object({ 69 | message: z.string(), 70 | }), 71 | } 72 | 73 | /* Routing */ 74 | const router = createRouter() 75 | 76 | router 77 | .use((req, res, next) => { 78 | console.log("middleware"); 79 | return next() 80 | }) 81 | .post( 82 | validate(postValidation), 83 | (req, res) => { 84 | req.body.foo; 85 | req.query.bar; 86 | res.status(200).json({ message: "ok" }); 87 | }) 88 | .get( 89 | validate(getValidation), 90 | (req, res) => { 91 | req.query.bar; 92 | res.status(200).json({ message: "ok" }); 93 | }) 94 | 95 | /* Type export */ 96 | // the export type name should be as follows 97 | // so that the type definition file can be generated correctly via the command. 98 | export type PostHandler = ApiHandler 99 | export type GetHandler = ApiHandler 100 | 101 | /* Routing handling export */ 102 | export default router.run() 103 | ``` 104 | 105 | ### Type generation 106 | 107 | 108 | ```bash 109 | ## npm 110 | npx next-zod-router 111 | 112 | ## yarn 113 | yarn next-zod-router 114 | ``` 115 | 116 | Adding a script to your package.json is convenient. 117 | 118 | ```json 119 | { 120 | "scripts": { 121 | "apigen": "next-zod-router" 122 | } 123 | } 124 | ``` 125 | 126 | ```bash 127 | npm run apigen 128 | ``` 129 | 130 | ### Client-side 131 | 132 | ```ts 133 | import { client } from "next-zod-router"; 134 | 135 | // Type-safe API call 136 | const { data, error } = await client.post("/api/sample", { 137 | query: { 138 | bar: "baz", 139 | }, 140 | body: { 141 | foo: "bar", 142 | }, 143 | }) 144 | ``` 145 | 146 | 147 | ### dynamic routing 148 | 149 | #### Server-side 150 | 151 | ```ts 152 | // pages/api/[id].ts 153 | 154 | const getValidation = { 155 | // 👇 for server side validation 156 | // 👇 also necessary for client side url construction 157 | query: z.object({ 158 | id: z.string().optional(), 159 | }), 160 | } 161 | 162 | router 163 | .get( 164 | validate(getValidation), 165 | (req, res) => { 166 | req.query.id; 167 | res.status(200).json({ message: "ok" }); 168 | }) 169 | ``` 170 | 171 | #### Client-side 172 | 173 | ```ts 174 | // client.ts 175 | import { client } from "next-zod-router"; 176 | 177 | client.get("/api/[id]", { 178 | query: { 179 | id: "1", 180 | }, 181 | }) 182 | 183 | // url will be /api/1 184 | ``` 185 | 186 | 187 | 188 | ### Error handling 189 | 190 | 191 | #### throw error 192 | 193 | ```ts 194 | // pages/api/sample.ts 195 | router 196 | .post( 197 | validate(postValidation), 198 | (req, res) => { 199 | const session = getSession(req) 200 | if (!session) { 201 | throw createError(401, "Unauthorized") 202 | } 203 | res.status(200).json({ message: "ok" }); 204 | }) 205 | ``` 206 | 207 | #### custom error handling 208 | 209 | ```ts 210 | // pages/api/sample.ts 211 | 212 | router 213 | .onError((err, req, res) => { 214 | // custom error handling 215 | res.status(err.statusCode).json({ message: err.message }); 216 | }) 217 | ``` 218 | 219 | ### Middleware 220 | 221 | express-like middleware is supported. 222 | 223 | ```ts 224 | // pages/api/sample.ts 225 | import cors from "cors"; 226 | import { createRouter, validate } from "next-zod-router"; 227 | import { z } from "zod"; 228 | 229 | const postValidation = { 230 | res: z.object({ 231 | message: z.string(), 232 | }), 233 | } 234 | 235 | router 236 | .use(cors()) 237 | .post( 238 | validate(postValidation), 239 | (req, res) => { 240 | res.status(200).json({ message: "ok" }); 241 | }) 242 | ``` 243 | 244 | 245 | ## Command options 246 | 247 | The default pages directory is `pages`, so if you want to change it, you can use the `--pagesDir` option. 248 | 249 | ```bash 250 | next-zod-router --pagesDir=src/pages 251 | ``` 252 | 253 | | Option | Description | Default value | 254 | | --- | --- | --- | 255 | | --pagesDir | Pages directory | pages | 256 | | --baseDir | Project directory | . | 257 | | --distDir | Type definition file output destination | node_modules/.next-zod-router | 258 | | --moduleNameSpace | Type definition file module name | .next-zod-router | 259 | | --watch | Watch mode | false | 260 | 261 | ## Tips 262 | 263 | ### Add session property to Request type 264 | 265 | If you want to add session property to Request type, you can use the following code. 266 | 267 | ```ts 268 | // global.d.ts 269 | import { IncomingMessage } from "http"; 270 | 271 | declare module 'next' { 272 | export interface NextApiRequest extends IncomingMessage { 273 | session: Session 274 | } 275 | } 276 | ``` 277 | 278 | ### Next.js development 279 | 280 | When developing with Next.js, you can use the following code to generate type definition files automatically. 281 | 282 | ```json 283 | { 284 | "scripts": { 285 | "dev": "npm-run-all -p dev:*", 286 | "dev:next": "next dev", 287 | "dev:apigen": "next-zod-router -w" 288 | } 289 | } 290 | ``` -------------------------------------------------------------------------------- /__tests__/client.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test, describe, vi } from 'vitest' 2 | import { client } from '../src' 3 | 4 | // @ts-ignore 5 | global.fetch = vi.fn((url, options) => { 6 | if (url.toString().startsWith('/api/sample')) { 7 | return Promise.resolve({ 8 | ok: true, 9 | json: () => Promise.resolve({ message: "hello" }), 10 | }) 11 | } 12 | return Promise.resolve({ 13 | json: () => Promise.reject(new Error('not found')), 14 | }) 15 | }) 16 | 17 | describe('client', () => { 18 | test('get', async () => { 19 | client.get('/api/sample/[id]', { 20 | query: { id: '1' }, 21 | }) 22 | expect(fetch).toBeCalledWith('/api/sample/1', { 23 | method: 'GET', 24 | headers: { 25 | 'Content-Type': 'application/json', 26 | }, 27 | }) 28 | }) 29 | test('get without brackets', async () => { 30 | client.get('/api/sample', { 31 | query: { id: '1', foo: 'bar' }, 32 | }) 33 | expect(fetch).toBeCalledWith('/api/sample?id=1&foo=bar', { 34 | method: 'GET', 35 | headers: { 36 | 'Content-Type': 'application/json', 37 | }, 38 | }) 39 | }) 40 | test('get response body', async () => { 41 | const { data } = await client.get('/api/sample/[id]', { 42 | query: { id: '1' }, 43 | }) 44 | expect(data).toEqual({ message: 'hello' }) 45 | }) 46 | test('get response body error', async () => { 47 | const { error } = await client.get('/api/bad/[id]', { 48 | query: { id: '1' }, 49 | }) 50 | expect(error).toEqual(new Error('not found')) 51 | }) 52 | test('post', async () => { 53 | client.post('/api/sample', { 54 | body: { 55 | fuga: 'fuga', 56 | foo: 'aaa', 57 | }, 58 | }) 59 | expect(fetch).toBeCalledWith('/api/sample', { 60 | method: 'POST', 61 | headers: { 62 | 'Content-Type': 'application/json', 63 | }, 64 | body: JSON.stringify({ 65 | fuga: 'fuga', 66 | foo: 'aaa', 67 | }), 68 | }) 69 | }) 70 | test('put', async () => { 71 | client.put('/api/sample/[id]', { 72 | query: { id: '1' }, 73 | body: { 74 | fuga: 'fuga', 75 | foo: 'aaa', 76 | }, 77 | }) 78 | expect(fetch).toBeCalledWith('/api/sample/1', { 79 | method: 'PUT', 80 | headers: { 81 | 'Content-Type': 'application/json', 82 | }, 83 | body: JSON.stringify({ 84 | fuga: 'fuga', 85 | foo: 'aaa', 86 | }), 87 | }) 88 | }) 89 | test('delete', async () => { 90 | client.delete('/api/sample/[id]', { 91 | query: { id: '1' }, 92 | }) 93 | expect(fetch).toBeCalledWith('/api/sample/1', { 94 | method: 'DELETE', 95 | headers: { 96 | 'Content-Type': 'application/json', 97 | }, 98 | }) 99 | }) 100 | }) 101 | -------------------------------------------------------------------------------- /__tests__/server.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test, describe } from 'vitest' 2 | import httpMocks from 'node-mocks-http' 3 | import cors from 'cors' 4 | import { z } from 'zod' 5 | import { createRouter, validate, createError } from '../src' 6 | 7 | describe('router', () => { 8 | test('get', async () => { 9 | const router = createRouter() 10 | const handler = router 11 | .get((req, res) => { 12 | res.status(200).json({ message: 'ok' }) 13 | }) 14 | .run() 15 | const req = httpMocks.createRequest({ 16 | method: 'GET', 17 | url: '/api/sample', 18 | }) 19 | const res = httpMocks.createResponse() 20 | await handler(req, res) 21 | expect(res._getStatusCode()).toBe(200) 22 | expect(res._getJSONData()).toEqual({ message: 'ok' }) 23 | }) 24 | test('post', async () => { 25 | const router = createRouter() 26 | const handler = router 27 | .post((req, res) => { 28 | res.status(200).json({ message: 'ok' }) 29 | }) 30 | .run() 31 | const req = httpMocks.createRequest({ 32 | method: 'POST', 33 | url: '/api/sample', 34 | }) 35 | const res = httpMocks.createResponse() 36 | await handler(req, res) 37 | expect(res._getStatusCode()).toBe(200) 38 | expect(res._getJSONData()).toEqual({ message: 'ok' }) 39 | }) 40 | test('put', async () => { 41 | const router = createRouter() 42 | const handler = router 43 | .put((req, res) => { 44 | res.status(200).json({ message: 'ok' }) 45 | }) 46 | .run() 47 | const req = httpMocks.createRequest({ 48 | method: 'PUT', 49 | url: '/api/sample', 50 | }) 51 | const res = httpMocks.createResponse() 52 | await handler(req, res) 53 | expect(res._getStatusCode()).toBe(200) 54 | expect(res._getJSONData()).toEqual({ message: 'ok' }) 55 | }) 56 | test('delete', async () => { 57 | const router = createRouter() 58 | const handler = router 59 | .delete((req, res) => { 60 | res.status(200).json({ message: 'ok' }) 61 | }) 62 | .run() 63 | const req = httpMocks.createRequest({ 64 | method: 'DELETE', 65 | url: '/api/sample', 66 | }) 67 | const res = httpMocks.createResponse() 68 | await handler(req, res) 69 | expect(res._getStatusCode()).toBe(200) 70 | expect(res._getJSONData()).toEqual({ message: 'ok' }) 71 | }) 72 | test('patch', async () => { 73 | const router = createRouter() 74 | const handler = router 75 | .patch((req, res) => { 76 | res.status(200).json({ message: 'ok' }) 77 | }) 78 | .run() 79 | const req = httpMocks.createRequest({ 80 | method: 'PATCH', 81 | url: '/api/sample', 82 | }) 83 | const res = httpMocks.createResponse() 84 | await handler(req, res) 85 | expect(res._getStatusCode()).toBe(200) 86 | expect(res._getJSONData()).toEqual({ message: 'ok' }) 87 | }) 88 | }); 89 | 90 | describe('validation', () => { 91 | test('validate query', async () => { 92 | const router = createRouter() 93 | const handler = router 94 | .get( 95 | validate({ 96 | query: z.object({ 97 | name: z.string(), 98 | }), 99 | }), 100 | (req, res) => { 101 | res.status(200).json({ message: 'ok' }) 102 | }, 103 | ) 104 | .run() 105 | const req = httpMocks.createRequest({ 106 | method: 'GET', 107 | url: '/api/sample', 108 | query: { 109 | name: 'foo', 110 | }, 111 | }) 112 | const res = httpMocks.createResponse() 113 | await handler(req, res) 114 | expect(res._getStatusCode()).toBe(200) 115 | expect(res._getJSONData()).toEqual({ message: 'ok' }) 116 | }) 117 | test('validate query error', async () => { 118 | const router = createRouter() 119 | const handler = router 120 | .get( 121 | validate({ 122 | query: z.object({ 123 | name: z.string(), 124 | }), 125 | }), 126 | (req, res) => { 127 | res.status(200).json({ message: 'ok' }) 128 | }, 129 | ) 130 | .run() 131 | const req = httpMocks.createRequest({ 132 | method: 'GET', 133 | url: '/api/sample', 134 | query: {}, 135 | }) 136 | const res = httpMocks.createResponse() 137 | await handler(req, res) 138 | expect(res._getStatusCode()).toBe(400) 139 | }) 140 | test('validate body', async () => { 141 | const router = createRouter() 142 | const handler = router 143 | .post( 144 | validate({ 145 | body: z.object({ 146 | name: z.string(), 147 | }), 148 | }), 149 | (req, res) => { 150 | res.status(200).json({ message: 'ok' }) 151 | }, 152 | ) 153 | .run() 154 | const req = httpMocks.createRequest({ 155 | method: 'POST', 156 | url: '/api/sample', 157 | body: { 158 | name: 'foo', 159 | }, 160 | }) 161 | const res = httpMocks.createResponse() 162 | await handler(req, res) 163 | expect(res._getStatusCode()).toBe(200) 164 | expect(res._getJSONData()).toEqual({ message: 'ok' }) 165 | }) 166 | test('validate body error', async () => { 167 | const router = createRouter() 168 | const handler = router 169 | .post( 170 | validate({ 171 | body: z.object({ 172 | name: z.string(), 173 | }), 174 | }), 175 | (req, res) => { 176 | res.status(200).json({ message: 'ok' }) 177 | }, 178 | ) 179 | .run() 180 | const req = httpMocks.createRequest({ 181 | method: 'POST', 182 | url: '/api/sample', 183 | body: {}, 184 | }) 185 | const res = httpMocks.createResponse() 186 | await handler(req, res) 187 | expect(res._getStatusCode()).toBe(400) 188 | }) 189 | 190 | test('not implemented methods', async () => { 191 | const router = createRouter() 192 | const handler = router.run() 193 | const req = httpMocks.createRequest({ 194 | method: 'POST', 195 | url: '/api/sample', 196 | }) 197 | const res = httpMocks.createResponse() 198 | await handler(req, res) 199 | expect(res._getStatusCode()).toBe(405) 200 | }); 201 | }) 202 | 203 | describe('middleware', () => { 204 | test('cors', async () => { 205 | const router = createRouter() 206 | const handler = router 207 | .use(cors()) 208 | .get((req, res) => { 209 | res.status(200).json({ message: 'ok' }) 210 | }) 211 | .run() 212 | const req = httpMocks.createRequest({ 213 | method: 'GET', 214 | url: '/api/sample', 215 | }) 216 | const res = httpMocks.createResponse() 217 | await handler(req, res) 218 | expect(res._getStatusCode()).toBe(200) 219 | expect(res._getJSONData()).toEqual({ message: 'ok' }) 220 | expect(res._getHeaders()).toMatchObject({ 221 | 'access-control-allow-origin': '*', 222 | }) 223 | }) 224 | 225 | test('async middleware test', async () => { 226 | const router = createRouter() 227 | const arr: string[] = [] 228 | const handler = router 229 | .use(async (req, res, next) => { 230 | arr.push('start') 231 | if (next) { 232 | await next() 233 | } 234 | arr.push('end') 235 | }) 236 | .get((req, res) => { 237 | arr.push('get') 238 | res.status(200).json({ message: 'ok' }) 239 | }) 240 | .run() 241 | const req = httpMocks.createRequest({ 242 | method: 'GET', 243 | url: '/api/sample', 244 | }) 245 | const res = httpMocks.createResponse() 246 | await handler(req, res) 247 | arr.push('handler') 248 | expect(res._getStatusCode()).toBe(200) 249 | expect(arr).toEqual(['start', 'get', 'end', 'handler']) 250 | }) 251 | 252 | test('sync middleware test', async () => { 253 | const router = createRouter() 254 | const arr: string[] = [] 255 | const handler = router 256 | .use((req, res, next) => { 257 | arr.push('use') 258 | if (next) { 259 | next() 260 | } 261 | }) 262 | .get((req, res) => { 263 | arr.push('get') 264 | res.status(200).json({ message: 'ok' }) 265 | }) 266 | .run() 267 | const req = httpMocks.createRequest({ 268 | method: 'GET', 269 | url: '/api/sample', 270 | }) 271 | const res = httpMocks.createResponse() 272 | await handler(req, res) 273 | arr.push('end') 274 | 275 | expect(res._getStatusCode()).toBe(200) 276 | expect(arr).toEqual(['use', 'get', 'end']) 277 | }) 278 | }) 279 | 280 | 281 | 282 | describe('error', () => { 283 | test('error', async () => { 284 | const router = createRouter() 285 | const handler = router 286 | .get(() => { 287 | throw new Error('error') 288 | }) 289 | .run() 290 | const req = httpMocks.createRequest({ 291 | method: 'GET', 292 | url: '/api/sample', 293 | }) 294 | const res = httpMocks.createResponse() 295 | await handler(req, res) 296 | expect(res._getStatusCode()).toBe(500) 297 | }) 298 | test('error with status', async () => { 299 | const router = createRouter() 300 | const handler = router 301 | .get(() => { 302 | throw createError(400, 'error') 303 | }) 304 | .run() 305 | const req = httpMocks.createRequest({ 306 | method: 'GET', 307 | url: '/api/sample', 308 | }) 309 | const res = httpMocks.createResponse() 310 | await handler(req, res) 311 | expect(res._getStatusCode()).toBe(400) 312 | expect(res._getJSONData()).toEqual({ message: 'error' }) 313 | }) 314 | }) 315 | -------------------------------------------------------------------------------- /example/client.ts: -------------------------------------------------------------------------------- 1 | import { client } from '../src' 2 | 3 | 4 | async function main() { 5 | client 6 | .get("/api/sample/[id]", { 7 | query: { id: "1" }, 8 | }) 9 | 10 | const { data: result } = await client.post("/api/sample", { 11 | body: { 12 | fuga: "fuga", 13 | foo: "aaa" 14 | } 15 | }) 16 | }; 17 | -------------------------------------------------------------------------------- /example/pages/api/sample.ts: -------------------------------------------------------------------------------- 1 | import { ApiHandler, createRouter, validate } from "../../../src"; 2 | import { z } from "zod"; 3 | 4 | /* zodによるschema定義 */ 5 | const postValidation = { 6 | body: z.object({ 7 | foo: z.string(), 8 | fuga: z.string().optional(), 9 | bar: z.string().optional(), 10 | }), 11 | query: z.object({ 12 | bar: z.string().optional(), 13 | }), 14 | res: z.object({ 15 | message: z.string(), 16 | }), 17 | } 18 | 19 | /* ルーティング処理 */ 20 | const router = createRouter() 21 | 22 | router 23 | .use((req, res) => { 24 | console.log("middleware"); 25 | }) 26 | .post( 27 | validate(postValidation), 28 | (req, res) => { 29 | req.body.foo; 30 | req.query.bar; 31 | res.status(200).json({ message: "ok" }); 32 | }) 33 | 34 | 35 | /* 型のexport */ 36 | export type PostHandler = ApiHandler 37 | 38 | /* ルーティング処理のexport */ 39 | export default router.run() 40 | -------------------------------------------------------------------------------- /example/pages/api/sample/[id].ts: -------------------------------------------------------------------------------- 1 | import { ApiHandler, createRouter, validate } from "../../../../src"; 2 | import { z } from "zod"; 3 | 4 | const getValidation = { 5 | query: z.object({ 6 | id: z.string(), 7 | }), 8 | res: z.object({ 9 | message: z.string(), 10 | }), 11 | } 12 | 13 | /* ルーティング処理 */ 14 | const router = createRouter() 15 | 16 | router 17 | .use((req, res) => { 18 | console.log("middleware"); 19 | }) 20 | .get( 21 | validate(getValidation), 22 | (req, res) => { 23 | req.query.id; 24 | res.status(200).json({ message: "ok" }); 25 | }) 26 | 27 | /* 型のexport */ 28 | export type GetHandler = ApiHandler 29 | 30 | /* ルーティング処理のexport */ 31 | export default router.run() 32 | -------------------------------------------------------------------------------- /example/pages/api/sample2.ts: -------------------------------------------------------------------------------- 1 | import { ApiHandler, createRouter, validate } from "../../../src"; 2 | import { z } from "zod"; 3 | 4 | const getValidation = { 5 | query: z.object({ 6 | bar: z.string().optional(), 7 | }), 8 | res: z.object({ 9 | message: z.string(), 10 | }), 11 | } 12 | 13 | const deleteValidation = { 14 | query: z.object({ 15 | bar: z.string().optional(), 16 | }), 17 | } 18 | 19 | /* ルーティング処理 */ 20 | const router = createRouter() 21 | 22 | router 23 | .use((req, res) => { 24 | console.log("middleware"); 25 | }) 26 | .get( 27 | validate(getValidation), 28 | (req, res) => { 29 | req.query.bar; 30 | res.status(200).json({ message: "ok" }); 31 | }) 32 | 33 | router 34 | .delete( 35 | validate(deleteValidation), 36 | (req, res) => { 37 | req.query.bar; 38 | res.status(200).json({ message: "ok" }); 39 | }) 40 | 41 | /* 型のexport */ 42 | export type GetHandler = ApiHandler 43 | export type DeleteHandler = ApiHandler 44 | 45 | /* ルーティング処理のexport */ 46 | export default router.run() 47 | -------------------------------------------------------------------------------- /example/pages/api/sample3/index.ts: -------------------------------------------------------------------------------- 1 | import { ApiHandler, createRouter, validate } from "../../../../src"; 2 | import { z } from "zod"; 3 | 4 | const getValidation = { 5 | query: z.object({ 6 | bar: z.string().optional(), 7 | }), 8 | res: z.object({ 9 | message: z.string(), 10 | }), 11 | } 12 | 13 | /* ルーティング処理 */ 14 | const router = createRouter() 15 | 16 | router 17 | .use((req, res) => { 18 | console.log("middleware"); 19 | }) 20 | .get( 21 | validate(getValidation), 22 | (req, res) => { 23 | req.query.bar; 24 | res.status(200).json({ message: "ok" }); 25 | }) 26 | 27 | /* 型のexport */ 28 | export type GetHandler = ApiHandler 29 | 30 | /* ルーティング処理のexport */ 31 | export default router.run() 32 | -------------------------------------------------------------------------------- /example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2017", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "typeRoots": [ 10 | "node_modules/@types", 11 | ], 12 | "allowJs": true, 13 | "skipLibCheck": true, 14 | "strict": true, 15 | "strictNullChecks": true, 16 | "forceConsistentCasingInFileNames": true, 17 | "outDir": "./lib", 18 | "declaration": true, 19 | "declarationDir": "./lib", 20 | "incremental": true, 21 | "esModuleInterop": true, 22 | "module": "CommonJS", 23 | // "moduleResolution": "node", 24 | "resolveJsonModule": true, 25 | "isolatedModules": true, 26 | "jsx": "preserve", 27 | "baseUrl": "." 28 | }, 29 | "exclude": [ 30 | "node_modules" 31 | ] 32 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.0.42", 3 | "name": "next-zod-router", 4 | "packageManager": "yarn@3.4.1", 5 | "bin": "./tools/index.js", 6 | "scripts": { 7 | "test": "vitest run", 8 | "build": "rimraf ./lib && yarn gen:apitype && tsc", 9 | "build:tool": "tsc -p ./tools/tsconfig.json", 10 | "gen:apitype": "ts-node ./tools/src/command.ts --pagesDir=example/pages --baseDir=example" 11 | }, 12 | "types": "lib/index.d.ts", 13 | "main": "lib/index.js", 14 | "exports": { 15 | ".": { 16 | "import": "./lib/index.js", 17 | "require": "./lib/index.js", 18 | "types": "./lib/index.d.ts", 19 | "default": "./lib/index.js" 20 | }, 21 | "./swr": { 22 | "import": "./lib/swr.js", 23 | "require": "./lib/swr.js", 24 | "types": "./lib/swr.d.ts", 25 | "default": "./lib/swr.js" 26 | }, 27 | "./react-query": { 28 | "import": "./lib/react-query.js", 29 | "require": "./lib/react-query.js", 30 | "types": "./lib/react-query.d.ts", 31 | "default": "./lib/react-query.js" 32 | } 33 | }, 34 | "typesVersions": { 35 | "*": { 36 | "swr": [ 37 | "./lib/swr.d.ts" 38 | ], 39 | "react-query": [ 40 | "./lib/react-query.d.ts" 41 | ] 42 | } 43 | }, 44 | "devDependencies": { 45 | "@types/node": "^18.15.11", 46 | "cors": "^2.8.5", 47 | "next": "^13.3.0", 48 | "react-query": "^3.39.3", 49 | "swr": "^2.1.3", 50 | "vitest": "^0.30.1", 51 | "zod": "^3.21.4" 52 | }, 53 | "dependencies": { 54 | "@types/fs-extra": "^11.0.1", 55 | "@types/qs": "^6.9.7", 56 | "chokidar": "^3.5.3", 57 | "commander": "^10.0.0", 58 | "fs-extra": "^11.1.1", 59 | "node-mocks-http": "^1.12.2", 60 | "qs": "^6.11.1", 61 | "rimraf": "^5.0.0", 62 | "ts-node": "^10.9.1", 63 | "typescript": "^5.0.4" 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steelydylan/next-zod-router/26e3696b43ab6b2e5e7b1bf394782aca455a9d09/screenshot.png -------------------------------------------------------------------------------- /src/client.ts: -------------------------------------------------------------------------------- 1 | import { DeleteQuery, PatchQuery, GetQuery, PostQuery, PutQuery } from ".next-zod-router"; 2 | import qs from "qs"; 3 | 4 | const defaultHeaders = { 5 | "Content-Type": "application/json", 6 | }; 7 | 8 | function buildParams(url: string, params?: Record) { 9 | if (!params) { 10 | return { url, usedKeys: [] }; 11 | } 12 | // find [vars] in url 13 | const usedKeys: string[] = []; 14 | const matches = url.match(/\[([^\]]+)\]/g); 15 | const replacedUrl = matches 16 | ? matches.reduce((acc, match) => { 17 | const key = match.slice(1, -1); 18 | const value = params[key]; 19 | if (!value) { 20 | return acc; 21 | } 22 | usedKeys.push(key); 23 | return acc.replace(match, value); 24 | } 25 | , url) 26 | : url; 27 | return { 28 | url: replacedUrl, 29 | usedKeys, 30 | }; 31 | } 32 | 33 | function buildQuery(url: string, query?: Record) { 34 | if (!query) { 35 | return url; 36 | } 37 | if (Object.keys(query).length === 0) { 38 | return url; 39 | } 40 | const queryString = qs.stringify(query); 41 | return `${url}?${queryString}`; 42 | } 43 | 44 | function buildUrl(url: string, query?: Record) { 45 | if (!query) { 46 | return url; 47 | } 48 | const { url: replacedUrl, usedKeys } = buildParams(url, query) 49 | const unUsedKeys = Object.keys(query || {}).filter((key) => !usedKeys.includes(key)); 50 | const unUsedQuery = unUsedKeys.reduce((acc, key) => { 51 | acc[key] = query[key]; 52 | return acc; 53 | }, {} as Record); 54 | const finalUrl = buildQuery(replacedUrl, unUsedQuery); 55 | return finalUrl; 56 | } 57 | 58 | async function handleResponse(url: string, requestInit?: RequestInit) { 59 | try { 60 | const res = await fetch(url, requestInit) 61 | const data = await res.json() 62 | if (res.ok) { 63 | return { 64 | data, 65 | error: null, 66 | } 67 | } else { 68 | throw new Error(data); 69 | } 70 | } catch (err) { 71 | return { 72 | data: null, 73 | error: err, 74 | } 75 | } 76 | } 77 | 78 | export async function postApiData( 79 | key: T, 80 | { 81 | query, 82 | body, 83 | requestInit, 84 | }: { 85 | query?: PostQuery[T]["query"]; 86 | body?: PostQuery[T]["body"]; 87 | requestInit?: Omit & { body?: PostQuery[T]["body"] }; 88 | } = {} 89 | ): Promise<{ data: PostQuery[T]["res"] | null, error: unknown | null }> { 90 | if (typeof key !== "string") { 91 | return { 92 | data: null, 93 | error: new Error("url key must be string"), 94 | } 95 | } 96 | const url = buildUrl(key, query); 97 | const requestBody = body || requestInit?.body; 98 | return handleResponse(url, { 99 | ...requestInit, 100 | method: "POST", 101 | headers: { ...defaultHeaders, ...requestInit?.headers }, 102 | body: requestBody ? JSON.stringify(requestBody) : undefined 103 | }); 104 | } 105 | 106 | export async function putApiData( 107 | key: T, 108 | { 109 | query, 110 | body, 111 | requestInit, 112 | }: { 113 | query?: PutQuery[T]["query"]; 114 | body?: PutQuery[T]["body"]; 115 | requestInit?: Omit & { body?: PutQuery[T]["body"] }; 116 | } = {} 117 | ): Promise<{ data: PutQuery[T]["res"] | null, error: unknown | null }> { 118 | if (typeof key !== "string") { 119 | return { 120 | data: null, 121 | error: new Error("url key must be string"), 122 | } 123 | } 124 | const url = buildUrl(key, query); 125 | const requestBody = body || requestInit?.body; 126 | return handleResponse(url, { 127 | ...requestInit, 128 | method: "PUT", 129 | headers: { ...defaultHeaders, ...requestInit?.headers }, 130 | body: requestBody ? JSON.stringify(requestBody) : undefined 131 | }) 132 | } 133 | 134 | export async function patchApiData( 135 | key: T, 136 | { 137 | query, 138 | body, 139 | requestInit, 140 | }: { 141 | query?: PatchQuery[T]["query"]; 142 | body?: PatchQuery[T]["body"]; 143 | requestInit?: Omit & { body?: PatchQuery[T]["body"] }; 144 | } = {} 145 | ): Promise<{ data: PatchQuery[T]["res"] | null, error: unknown | null }> { 146 | if (typeof key !== "string") { 147 | return { 148 | data: null, 149 | error: new Error("url key must be string"), 150 | } 151 | } 152 | const url = buildUrl(key, query); 153 | const requestBody = body || requestInit?.body; 154 | return handleResponse(url, { 155 | ...requestInit, 156 | method: "PATCH", 157 | headers: { ...defaultHeaders, ...requestInit?.headers }, 158 | body: requestBody ? JSON.stringify(requestBody) : undefined 159 | }) 160 | } 161 | 162 | export async function deleteApiData( 163 | key: T, 164 | { 165 | query, 166 | body, 167 | requestInit, 168 | }: { 169 | query?: DeleteQuery[T]["query"]; 170 | body?: DeleteQuery[T]["body"]; 171 | requestInit?: Omit & { body?: DeleteQuery[T]["body"] }; 172 | } = {} 173 | ): Promise<{ data: DeleteQuery[T]["res"] | null, error: unknown | null }> { 174 | if (typeof key !== "string") { 175 | return { 176 | data: null, 177 | error: new Error("url key must be string"), 178 | } 179 | } 180 | const url = buildUrl(key, query); 181 | const requestBody = body || requestInit?.body; 182 | return handleResponse(url, { 183 | ...requestInit, 184 | method: "DELETE", 185 | headers: { ...defaultHeaders, ...requestInit?.headers }, 186 | body: requestBody ? JSON.stringify(requestBody) : undefined 187 | }) 188 | } 189 | 190 | export async function getApiData( 191 | key: T, 192 | { 193 | query, 194 | requestInit, 195 | }: { 196 | query?: GetQuery[T]["query"]; 197 | requestInit?: Omit; 198 | } = {} 199 | ): Promise<{ data: GetQuery[T]["res"] | null, error: unknown | null }> { 200 | if (typeof key !== "string") { 201 | return { 202 | data: null, 203 | error: new Error("url key must be string"), 204 | } 205 | } 206 | const url = buildUrl(key, query); 207 | return handleResponse(url, { 208 | ...requestInit, 209 | method: "GET", 210 | headers: { ...defaultHeaders, ...requestInit?.headers }, 211 | }) 212 | } 213 | 214 | export const client = { 215 | post: postApiData, 216 | put: putApiData, 217 | patch: patchApiData, 218 | delete: deleteApiData, 219 | get: getApiData, 220 | }; 221 | -------------------------------------------------------------------------------- /src/error.ts: -------------------------------------------------------------------------------- 1 | export class ApiError extends Error { 2 | statusCode: number; 3 | constructor(message: string, statusCode: number) { 4 | super(message); 5 | this.statusCode = statusCode; 6 | } 7 | } 8 | 9 | export function createError(statusCode: number, message: string) { 10 | const error = new ApiError(message, statusCode); 11 | return error; 12 | } 13 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './router' 2 | export * from './validation' 3 | export * from './client' 4 | export * from './error' -------------------------------------------------------------------------------- /src/react-query.ts: -------------------------------------------------------------------------------- 1 | import { useQuery } from 'react-query' 2 | import { client } from './client'; 3 | import { GetQuery } from ".next-zod-router"; 4 | 5 | type GetOptions = { 6 | query?: GetQuery[T]["query"]; 7 | requestInit?: Omit; 8 | defaultValue?: GetQuery[T]["res"]; 9 | } 10 | 11 | export function useClientQuery(key: T, options?: GetOptions) { 12 | const queryKey = [key, options?.query]; 13 | const { data, ...rest } = useQuery(queryKey, () => client.get(key, options)); 14 | return { 15 | ...rest, 16 | queryKey, 17 | data: data?.data ?? options?.defaultValue ?? null, 18 | error: data?.error, 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/router.ts: -------------------------------------------------------------------------------- 1 | import { NextApiRequest, NextApiResponse } from "next"; 2 | import { z } from 'zod' ; 3 | import { ApiError, createError } from "./error"; 4 | import { HandlerWithNext, NextApiRequestFix } from "./type"; 5 | 6 | type HandlerObject = { 7 | handler: HandlerWithNext; 8 | middleware?: boolean; 9 | method?: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | "HEAD"; 10 | }; 11 | 12 | type ErrorHandler = (err: ApiError, req: NextApiRequestFix, res: NextApiResponse) => void; 13 | 14 | type ApiZodSchema = { 15 | body?: z.ZodSchema 16 | query?: z.ZodSchema 17 | res?: z.ZodSchema 18 | params?: z.ZodSchema 19 | } 20 | 21 | export type ApiHandler = { 22 | body: T["body"] extends z.ZodSchema ? z.infer : never; 23 | query: T["query"] extends z.ZodSchema ? z.infer : never; 24 | res: T["res"] extends z.ZodSchema ? z.infer: never; 25 | } 26 | 27 | class Router { 28 | handlers: { 29 | method: HandlerObject[] 30 | error: ErrorHandler 31 | }; 32 | 33 | constructor() { 34 | this.handlers = { 35 | method: [], 36 | error: (e, req, res) => { 37 | res.status(e.statusCode).json({ message: e.message }); 38 | }, 39 | }; 40 | } 41 | 42 | use(...handlers: T[]) { 43 | this.handlers.method.push(...handlers.map((handler) => ({ handler, middleware: true }))); 44 | return this; 45 | } 46 | 47 | get(...handlers: T[]) { 48 | this.handlers.method.push(...handlers.map((handler) => ({ handler, method: "GET" as "GET" }))); 49 | return this; 50 | } 51 | 52 | post(...handlers: T[]) { 53 | this.handlers.method.push(...handlers.map((handler) => ({ handler, method: "POST" as "POST" }))); 54 | return this; 55 | } 56 | 57 | put(...handlers: T[]) { 58 | this.handlers.method.push(...handlers.map((handler) => ({ handler, method: "PUT" as "PUT" }))); 59 | return this; 60 | } 61 | 62 | delete(...handlers: T[]) { 63 | this.handlers.method.push(...handlers.map((handler) => ({ handler, method: "DELETE" as "DELETE" }))); 64 | return this; 65 | } 66 | 67 | patch(...handlers: T[]) { 68 | this.handlers.method.push(...handlers.map((handler) => ({ handler, method: "PATCH" as "PATCH" }))); 69 | return this; 70 | } 71 | 72 | onError(handler: T) { 73 | this.handlers.error = handler; 74 | return this; 75 | } 76 | 77 | private async execute(req: NextApiRequestFix, res: NextApiResponse, method: HandlerObject["method"]) { 78 | const handlers = this.handlers.method.filter((h) => h.method === method || h.middleware); 79 | let i = 0; 80 | const next = async () => { 81 | const handler = handlers[i++]; 82 | if (handler) { 83 | await handler.handler(req, res, next); 84 | } else { 85 | throw createError(405, "method Not Found"); 86 | } 87 | }; 88 | await next(); 89 | } 90 | 91 | public run() { 92 | return async (req: NextApiRequestFix, res: NextApiResponse) => { 93 | try { 94 | await this.execute(req, res, req.method as HandlerObject["method"]); 95 | } catch (e) { 96 | if (e instanceof ApiError) { 97 | this.handlers.error(e, req, res); 98 | } else { 99 | const error = createError(500, "Internal Server Error"); 100 | this.handlers.error(error, req, res); 101 | } 102 | } 103 | }; 104 | } 105 | } 106 | 107 | export function createRouter() { 108 | const router = new Router(); 109 | return router; 110 | } 111 | -------------------------------------------------------------------------------- /src/swr.ts: -------------------------------------------------------------------------------- 1 | import { client } from './client'; 2 | import { GetQuery } from ".next-zod-router"; 3 | import useSWR from 'swr'; 4 | 5 | type GetOptions = { 6 | query?: GetQuery[T]["query"]; 7 | requestInit?: Omit; 8 | defaultValue?: GetQuery[T]["res"]; 9 | } 10 | 11 | export function useClientSWR(key: T, options?: GetOptions) { 12 | const queryKey = [key, options?.query]; 13 | const { data, ...rest } = useSWR(queryKey, () => client.get(key, options)); 14 | return { 15 | ...rest, 16 | queryKey, 17 | data: data?.data ?? options?.defaultValue ?? null, 18 | error: data?.error, 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/type.ts: -------------------------------------------------------------------------------- 1 | import { NextApiRequest, NextApiResponse } from "next"; 2 | 3 | export type NextApiRequestFix = Omit & { body: any; query: any; }; 4 | 5 | export type RequestHandler = (req: NextApiRequestFix, res: NextApiResponse) => void; 6 | 7 | export type HandlerWithNext = (req: NextApiRequestFix, res: NextApiResponse, next?: () => Promise) => void; 8 | -------------------------------------------------------------------------------- /src/validation.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod' ; 2 | import { NextApiRequest, NextApiResponse } from "next"; 3 | import { createError } from './error'; 4 | type Override = Omit & T2; 5 | 6 | type NextApiRequestExtended = Override; 7 | type NextApiResponseExtended = NextApiResponse; 8 | 9 | type ZodSchema = z.ZodSchema 10 | type Options = { 11 | "body" ?: T1; 12 | "query"?: T2; 13 | "res"?: T3; 14 | } 15 | 16 | export const validate = (options: Options) => (req: NextApiRequestExtended, z.infer>, res: NextApiResponseExtended>, next?: () => Promise) => { 17 | Object.entries(options).forEach(([type, schema]) => { 18 | if (type === 'body') { 19 | const isSafe = schema.safeParse(req.body); 20 | if (!isSafe.success) { 21 | throw createError(400, JSON.stringify(isSafe.error)) 22 | } 23 | } else if (type === 'query') { 24 | const isSafe = schema.safeParse(req.query); 25 | if (!isSafe.success) { 26 | throw createError(400, JSON.stringify(isSafe.error.message)) 27 | } 28 | } 29 | }); 30 | if (next) return next(); 31 | } 32 | -------------------------------------------------------------------------------- /tools/index.js: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | require('./lib/command.js'); 3 | -------------------------------------------------------------------------------- /tools/src/command.ts: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | const { program } = require('commander'); 3 | const { main } = require('./index'); 4 | const path = require('path'); 5 | 6 | program 7 | .option('-p, --pagesDir ', '--pagesDir ', "pages") 8 | .option('-b, --baseDir ', '--baseDir ', ".") 9 | .option('-d, --distDir ', '--distDir ', "node_modules/.next-zod-router") 10 | .option('-m, --moduleNameSpace ', '--moduleNameSpace ', ".next-zod-router") 11 | .option('-w, --watch', 'watch mode'); 12 | program.parse(process.argv); 13 | const options = program.opts(); 14 | const config = { 15 | pagesDir: path.resolve(options.pagesDir), 16 | baseDir: path.resolve(options.baseDir), 17 | distDir: path.resolve(options.distDir), 18 | moduleNameSpace: options.moduleNameSpace, 19 | } 20 | 21 | if (options.watch) { 22 | const chokidar = require('chokidar'); 23 | const watcher = chokidar.watch(options.pagesDir, { 24 | ignored: /(^|[\/\\])\../, 25 | persistent: true 26 | }); 27 | watcher.on('change', async (path: string) => { 28 | console.log(`File ${path} has been changed`); 29 | watcher.unwatch(options.pagesDir); 30 | await main(config); 31 | watcher.add(options.pagesDir); 32 | }); 33 | } else { 34 | main(config); 35 | } 36 | -------------------------------------------------------------------------------- /tools/src/config.ts: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | 3 | export default { 4 | moduleNameSpace: ".next-zod-router", 5 | baseDir: path.resolve("."), 6 | pagesDir: path.resolve("pages"), 7 | distDir: path.resolve("node_modules/.next-zod-router"), 8 | }; 9 | -------------------------------------------------------------------------------- /tools/src/createModuleShim/createImportDeclarations.ts: -------------------------------------------------------------------------------- 1 | import { factory } from "typescript"; 2 | 3 | // OUTPUT: 4 | // import type { ${method[0]}Handler, ${method[1]}Handler } from "${importPath}"; 5 | // 6 | export const createImportDeclarations = ( 7 | methods: string[], 8 | importPath: string, 9 | variableName: string, 10 | ) => 11 | factory.createImportDeclaration( 12 | undefined, 13 | // undefined, 14 | factory.createImportClause( 15 | true, 16 | undefined, 17 | factory.createNamedImports( 18 | methods.map((method) => 19 | factory.createImportSpecifier( 20 | false, 21 | factory.createIdentifier(method + "Handler"), 22 | factory.createIdentifier(variableName + method + "Handler") 23 | ) 24 | ) 25 | ) 26 | ), 27 | factory.createStringLiteral(importPath), 28 | undefined 29 | ); 30 | -------------------------------------------------------------------------------- /tools/src/createModuleShim/createShim.ts: -------------------------------------------------------------------------------- 1 | import { factory } from "typescript"; 2 | 3 | // OUTPUT: 4 | // interface ${method}${shimName} { 5 | // "${apiPath}": ${method}Handler; 6 | // } 7 | // 8 | export const createShim = (method: string, apiPath: string, shimName: string, variableName: string) => 9 | factory.createInterfaceDeclaration( 10 | undefined, 11 | // undefined, 12 | factory.createIdentifier(method + shimName), 13 | undefined, 14 | undefined, 15 | [ 16 | factory.createPropertySignature( 17 | undefined, 18 | factory.createStringLiteral(apiPath), 19 | undefined, 20 | factory.createTypeReferenceNode( 21 | factory.createIdentifier(variableName + method + "Handler"), 22 | undefined 23 | ), 24 | ), 25 | ] 26 | ); 27 | 28 | export const createEmptyShim = (method: string, shimName: string) => 29 | factory.createInterfaceDeclaration( 30 | undefined, 31 | // undefined, 32 | factory.createIdentifier(method + shimName), 33 | undefined, 34 | undefined, 35 | [] 36 | ); 37 | -------------------------------------------------------------------------------- /tools/src/createProgram/createConfigFileHost.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | 3 | export const createConfigFileHost = (): ts.ParseConfigFileHost => ({ 4 | useCaseSensitiveFileNames: false, 5 | readDirectory: ts.sys.readDirectory, 6 | fileExists: ts.sys.fileExists, 7 | readFile: ts.sys.readFile, 8 | getCurrentDirectory: ts.sys.getCurrentDirectory, 9 | onUnRecoverableConfigFileDiagnostic(diagnostic: ts.Diagnostic) { 10 | throw new Error( 11 | ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n") 12 | ); 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /tools/src/createProgram/index.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | import { createConfigFileHost } from "./createConfigFileHost"; 3 | 4 | export const createProgram = ( 5 | searchPath: string, 6 | configName = "tsconfig.json" 7 | ): ts.Program => { 8 | const configPath = ts.findConfigFile( 9 | searchPath, 10 | ts.sys.fileExists, 11 | configName 12 | ); 13 | if (!configPath) { 14 | throw new Error("Could not find a valid 'tsconfig.json'."); 15 | } 16 | const parsedCommandLine = ts.getParsedCommandLineOfConfigFile( 17 | configPath, 18 | {}, 19 | createConfigFileHost() 20 | ); 21 | if (!parsedCommandLine) { 22 | throw new Error("invalid parsedCommandLine."); 23 | } 24 | if (parsedCommandLine.errors.length) { 25 | throw new Error("parsedCommandLine has errors."); 26 | } 27 | return ts.createProgram({ 28 | rootNames: parsedCommandLine.fileNames, 29 | options: parsedCommandLine.options, 30 | }); 31 | }; 32 | -------------------------------------------------------------------------------- /tools/src/emitFile.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs-extra"; 2 | 3 | export const emitFile = ( 4 | distDir: string, 5 | fileName: string, 6 | fileBody: string 7 | ) => { 8 | if (!fs.existsSync(distDir)) { 9 | fs.mkdirsSync(distDir); 10 | } 11 | fs.writeFileSync(fileName, fileBody); 12 | }; 13 | -------------------------------------------------------------------------------- /tools/src/emitModulesShim.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | import { emitFile } from "./emitFile"; 3 | import { printList } from "./printList"; 4 | import type { FileInfo } from "./types"; 5 | import { factory } from "typescript"; 6 | import path from "path"; 7 | import { createEmptyShim, createShim } from "./createModuleShim/createShim"; 8 | import { createImportDeclarations } from "./createModuleShim/createImportDeclarations"; 9 | 10 | export function emitModulesShim( 11 | fileInfos: FileInfo[], 12 | moduleNameSpace: string, 13 | distDir: string 14 | ) { 15 | const methods = ["Get", "Post", "Put", "Delete", "Patch"]; 16 | emitFile( 17 | distDir, 18 | path.resolve(distDir, 'index.d.ts'), 19 | printList([ 20 | ...fileInfos.map((info) => { 21 | return createImportDeclarations( 22 | info.methodTypes, 23 | info.importPath, 24 | info.variableName, 25 | ) 26 | }), 27 | factory.createModuleDeclaration( 28 | [factory.createModifier(ts.SyntaxKind.DeclareKeyword)], 29 | factory.createStringLiteral(moduleNameSpace), 30 | factory.createModuleBlock([ 31 | ...methods.map((method) => createEmptyShim(method, "Query")) 32 | ]) 33 | ), 34 | ...fileInfos.map((info) => { 35 | return factory.createModuleDeclaration( 36 | [factory.createModifier(ts.SyntaxKind.DeclareKeyword)], 37 | factory.createStringLiteral(moduleNameSpace), 38 | factory.createModuleBlock([ 39 | ...info.methodTypes.map((method) => createShim(method, info.apiPath, "Query", info.variableName)) 40 | ]) 41 | ) 42 | }), 43 | ]) 44 | ) 45 | } -------------------------------------------------------------------------------- /tools/src/index.ts: -------------------------------------------------------------------------------- 1 | import defaltConfig from "./config"; 2 | import { createProgram } from "./createProgram"; 3 | import { emitModulesShim } from "./emitModulesShim"; 4 | import { mapFileInfo } from "./mapFileInfo"; 5 | import * as rimraf from 'rimraf'; 6 | import fs from 'fs'; 7 | import type { Config } from "./types"; 8 | 9 | export async function main(config?: Config) { 10 | const { pagesDir, baseDir, distDir, moduleNameSpace } = Object.assign({}, defaltConfig, config); 11 | const pkg = { 12 | name: ".next-zod-router", 13 | version: "1.0.0", 14 | types: "index.d.ts" 15 | } 16 | if (!fs.existsSync(distDir)) { 17 | fs.mkdirSync(distDir); 18 | } 19 | if (!fs.existsSync(distDir + "/package.json")) { 20 | fs.writeFileSync(`${distDir}/package.json`, JSON.stringify(pkg, null, 2)); 21 | } 22 | const apiDir = pagesDir + "/api"; 23 | const program = createProgram(baseDir); 24 | const fileInfos = program 25 | .getRootFileNames() 26 | .filter((fileName) => fileName.match(apiDir)) 27 | .map(mapFileInfo(distDir, pagesDir, program)); 28 | emitModulesShim(fileInfos, moduleNameSpace, distDir); 29 | } 30 | -------------------------------------------------------------------------------- /tools/src/mapFileInfo.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | import path from "path"; 3 | import type { FileInfo } from "./types"; 4 | 5 | const targetAliases = [ 6 | "GetHandler", 7 | "PostHandler", 8 | "PutHandler", 9 | "PatchHandler", 10 | "DeleteHandler", 11 | ]; 12 | 13 | function getMethodTypes(sourceFile?: ts.SourceFile) { 14 | const buf: string[] = []; 15 | if (sourceFile) { 16 | sourceFile.forEachChild((node) => { 17 | if (ts.isTypeAliasDeclaration(node)) { 18 | const name = node.name.escapedText.toString(); 19 | if (targetAliases.includes(name)) { 20 | buf.push(name.replace("Handler", "")); 21 | } 22 | } 23 | }); 24 | } 25 | return buf; 26 | } 27 | 28 | function convertToValidVariableName(input: string): string { 29 | // 不適切な文字を削除するための正規表現パターン 30 | const invalidCharacters = /[^a-zA-Z0-9_]/g; 31 | 32 | // input文字列から不適切な文字を削除 33 | let validVariableName = input.replace(invalidCharacters, '_'); 34 | 35 | // 先頭文字が数字の場合、アンダースコアを追加 36 | if (validVariableName.match(/^[0-9]/)) { 37 | validVariableName = '_' + validVariableName; 38 | } 39 | 40 | // アンダースコアを削除し、その次の文字を大文字にする 41 | validVariableName = validVariableName.replace(/_([a-zA-Z0-9])/g, (match, p1) => { 42 | return p1.toUpperCase(); 43 | }); 44 | 45 | // 最初の文字を大文字に 46 | validVariableName = validVariableName.charAt(0).toUpperCase() + validVariableName.slice(1); 47 | 48 | return validVariableName; 49 | } 50 | 51 | export function mapFileInfo( 52 | dist: string, 53 | pagesDir: string, 54 | program: ts.Program 55 | ) { 56 | return (filePath: string): FileInfo => { 57 | const srcPath = filePath; 58 | const sourceFile = program.getSourceFile(srcPath); 59 | const importPath = path.relative(dist, filePath) 60 | .replace(".ts", "") 61 | .replace(".tsx", ""); 62 | const apiPath = filePath 63 | .replace(pagesDir, "") 64 | .replace("/index", "") 65 | .slice(0, -3); 66 | 67 | const methodTypes = getMethodTypes(sourceFile); 68 | const variableName = convertToValidVariableName(apiPath); 69 | 70 | return { 71 | srcPath, 72 | filePath, 73 | methodTypes, 74 | importPath, 75 | apiPath, 76 | variableName, 77 | }; 78 | }; 79 | } 80 | -------------------------------------------------------------------------------- /tools/src/printList.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | 3 | const printer = ts.createPrinter(); 4 | 5 | export const printList = (elements?: readonly ts.Node[]) => 6 | printer.printList( 7 | ts.ListFormat.MultiLine, 8 | ts.factory.createNodeArray(elements), 9 | ts.createSourceFile("", "", ts.ScriptTarget.ES2015) 10 | ); 11 | -------------------------------------------------------------------------------- /tools/src/types.ts: -------------------------------------------------------------------------------- 1 | export type FileInfo = { 2 | srcPath: string; 3 | filePath: string; 4 | methodTypes: string[]; 5 | importPath: string; 6 | apiPath: string; 7 | variableName: string; 8 | }; 9 | 10 | export type Config = { 11 | baseDir: string; 12 | distDir: string; 13 | pagesDir: string; 14 | moduleNameSpace: string; 15 | }; 16 | -------------------------------------------------------------------------------- /tools/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "ts-node": { 3 | // these options are overrides used only by ts-node 4 | "compilerOptions": { 5 | "module": "commonjs" 6 | } 7 | }, 8 | "compilerOptions": { 9 | "target": "ES2015", 10 | "module": "commonjs", 11 | "moduleResolution": "node", 12 | "allowJs": true, 13 | "strict": true, 14 | "esModuleInterop": true, 15 | "rootDir": "src", 16 | "outDir": "./lib" 17 | }, 18 | "include": ["./src/**/*"] 19 | } 20 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2017", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "typeRoots": [ 10 | "node_modules/@types" 11 | ], 12 | "allowJs": true, 13 | "skipLibCheck": true, 14 | "strict": true, 15 | "strictNullChecks": true, 16 | "forceConsistentCasingInFileNames": true, 17 | "outDir": "./lib", 18 | "declaration": true, 19 | "declarationDir": "./lib", 20 | "incremental": true, 21 | "esModuleInterop": true, 22 | "module": "CommonJS", 23 | // "moduleResolution": "node", 24 | "resolveJsonModule": true, 25 | "isolatedModules": true, 26 | "jsx": "preserve", 27 | "baseUrl": "." 28 | }, 29 | "include": [ 30 | "src/**/*.ts" 31 | ], 32 | "exclude": [ 33 | "node_modules" 34 | ] 35 | } -------------------------------------------------------------------------------- /utility/version-check.js: -------------------------------------------------------------------------------- 1 | const pkg = require("../package.json"); 2 | 3 | const branch = process.env.BRANCH_NAME; 4 | const [type, version] = branch.split("/"); 5 | 6 | console.log(pkg.version, version); 7 | 8 | if (pkg.version !== version) { 9 | throw new Error("version not matched"); 10 | } 11 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config' 2 | 3 | // https://vitejs.dev/config/ 4 | export default defineConfig({ 5 | test: { 6 | globals: true, 7 | }, 8 | }) -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 6 6 | cacheKey: 8 7 | 8 | "@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2": 9 | version: 7.21.0 10 | resolution: "@babel/runtime@npm:7.21.0" 11 | dependencies: 12 | regenerator-runtime: ^0.13.11 13 | checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab 14 | languageName: node 15 | linkType: hard 16 | 17 | "@cspotcode/source-map-support@npm:^0.8.0": 18 | version: 0.8.1 19 | resolution: "@cspotcode/source-map-support@npm:0.8.1" 20 | dependencies: 21 | "@jridgewell/trace-mapping": 0.3.9 22 | checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa 23 | languageName: node 24 | linkType: hard 25 | 26 | "@esbuild/android-arm64@npm:0.17.16": 27 | version: 0.17.16 28 | resolution: "@esbuild/android-arm64@npm:0.17.16" 29 | conditions: os=android & cpu=arm64 30 | languageName: node 31 | linkType: hard 32 | 33 | "@esbuild/android-arm@npm:0.17.16": 34 | version: 0.17.16 35 | resolution: "@esbuild/android-arm@npm:0.17.16" 36 | conditions: os=android & cpu=arm 37 | languageName: node 38 | linkType: hard 39 | 40 | "@esbuild/android-x64@npm:0.17.16": 41 | version: 0.17.16 42 | resolution: "@esbuild/android-x64@npm:0.17.16" 43 | conditions: os=android & cpu=x64 44 | languageName: node 45 | linkType: hard 46 | 47 | "@esbuild/darwin-arm64@npm:0.17.16": 48 | version: 0.17.16 49 | resolution: "@esbuild/darwin-arm64@npm:0.17.16" 50 | conditions: os=darwin & cpu=arm64 51 | languageName: node 52 | linkType: hard 53 | 54 | "@esbuild/darwin-x64@npm:0.17.16": 55 | version: 0.17.16 56 | resolution: "@esbuild/darwin-x64@npm:0.17.16" 57 | conditions: os=darwin & cpu=x64 58 | languageName: node 59 | linkType: hard 60 | 61 | "@esbuild/freebsd-arm64@npm:0.17.16": 62 | version: 0.17.16 63 | resolution: "@esbuild/freebsd-arm64@npm:0.17.16" 64 | conditions: os=freebsd & cpu=arm64 65 | languageName: node 66 | linkType: hard 67 | 68 | "@esbuild/freebsd-x64@npm:0.17.16": 69 | version: 0.17.16 70 | resolution: "@esbuild/freebsd-x64@npm:0.17.16" 71 | conditions: os=freebsd & cpu=x64 72 | languageName: node 73 | linkType: hard 74 | 75 | "@esbuild/linux-arm64@npm:0.17.16": 76 | version: 0.17.16 77 | resolution: "@esbuild/linux-arm64@npm:0.17.16" 78 | conditions: os=linux & cpu=arm64 79 | languageName: node 80 | linkType: hard 81 | 82 | "@esbuild/linux-arm@npm:0.17.16": 83 | version: 0.17.16 84 | resolution: "@esbuild/linux-arm@npm:0.17.16" 85 | conditions: os=linux & cpu=arm 86 | languageName: node 87 | linkType: hard 88 | 89 | "@esbuild/linux-ia32@npm:0.17.16": 90 | version: 0.17.16 91 | resolution: "@esbuild/linux-ia32@npm:0.17.16" 92 | conditions: os=linux & cpu=ia32 93 | languageName: node 94 | linkType: hard 95 | 96 | "@esbuild/linux-loong64@npm:0.17.16": 97 | version: 0.17.16 98 | resolution: "@esbuild/linux-loong64@npm:0.17.16" 99 | conditions: os=linux & cpu=loong64 100 | languageName: node 101 | linkType: hard 102 | 103 | "@esbuild/linux-mips64el@npm:0.17.16": 104 | version: 0.17.16 105 | resolution: "@esbuild/linux-mips64el@npm:0.17.16" 106 | conditions: os=linux & cpu=mips64el 107 | languageName: node 108 | linkType: hard 109 | 110 | "@esbuild/linux-ppc64@npm:0.17.16": 111 | version: 0.17.16 112 | resolution: "@esbuild/linux-ppc64@npm:0.17.16" 113 | conditions: os=linux & cpu=ppc64 114 | languageName: node 115 | linkType: hard 116 | 117 | "@esbuild/linux-riscv64@npm:0.17.16": 118 | version: 0.17.16 119 | resolution: "@esbuild/linux-riscv64@npm:0.17.16" 120 | conditions: os=linux & cpu=riscv64 121 | languageName: node 122 | linkType: hard 123 | 124 | "@esbuild/linux-s390x@npm:0.17.16": 125 | version: 0.17.16 126 | resolution: "@esbuild/linux-s390x@npm:0.17.16" 127 | conditions: os=linux & cpu=s390x 128 | languageName: node 129 | linkType: hard 130 | 131 | "@esbuild/linux-x64@npm:0.17.16": 132 | version: 0.17.16 133 | resolution: "@esbuild/linux-x64@npm:0.17.16" 134 | conditions: os=linux & cpu=x64 135 | languageName: node 136 | linkType: hard 137 | 138 | "@esbuild/netbsd-x64@npm:0.17.16": 139 | version: 0.17.16 140 | resolution: "@esbuild/netbsd-x64@npm:0.17.16" 141 | conditions: os=netbsd & cpu=x64 142 | languageName: node 143 | linkType: hard 144 | 145 | "@esbuild/openbsd-x64@npm:0.17.16": 146 | version: 0.17.16 147 | resolution: "@esbuild/openbsd-x64@npm:0.17.16" 148 | conditions: os=openbsd & cpu=x64 149 | languageName: node 150 | linkType: hard 151 | 152 | "@esbuild/sunos-x64@npm:0.17.16": 153 | version: 0.17.16 154 | resolution: "@esbuild/sunos-x64@npm:0.17.16" 155 | conditions: os=sunos & cpu=x64 156 | languageName: node 157 | linkType: hard 158 | 159 | "@esbuild/win32-arm64@npm:0.17.16": 160 | version: 0.17.16 161 | resolution: "@esbuild/win32-arm64@npm:0.17.16" 162 | conditions: os=win32 & cpu=arm64 163 | languageName: node 164 | linkType: hard 165 | 166 | "@esbuild/win32-ia32@npm:0.17.16": 167 | version: 0.17.16 168 | resolution: "@esbuild/win32-ia32@npm:0.17.16" 169 | conditions: os=win32 & cpu=ia32 170 | languageName: node 171 | linkType: hard 172 | 173 | "@esbuild/win32-x64@npm:0.17.16": 174 | version: 0.17.16 175 | resolution: "@esbuild/win32-x64@npm:0.17.16" 176 | conditions: os=win32 & cpu=x64 177 | languageName: node 178 | linkType: hard 179 | 180 | "@gar/promisify@npm:^1.1.3": 181 | version: 1.1.3 182 | resolution: "@gar/promisify@npm:1.1.3" 183 | checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 184 | languageName: node 185 | linkType: hard 186 | 187 | "@jridgewell/resolve-uri@npm:^3.0.3": 188 | version: 3.1.1 189 | resolution: "@jridgewell/resolve-uri@npm:3.1.1" 190 | checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 191 | languageName: node 192 | linkType: hard 193 | 194 | "@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13": 195 | version: 1.4.15 196 | resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" 197 | checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 198 | languageName: node 199 | linkType: hard 200 | 201 | "@jridgewell/trace-mapping@npm:0.3.9": 202 | version: 0.3.9 203 | resolution: "@jridgewell/trace-mapping@npm:0.3.9" 204 | dependencies: 205 | "@jridgewell/resolve-uri": ^3.0.3 206 | "@jridgewell/sourcemap-codec": ^1.4.10 207 | checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef 208 | languageName: node 209 | linkType: hard 210 | 211 | "@next/env@npm:13.3.0": 212 | version: 13.3.0 213 | resolution: "@next/env@npm:13.3.0" 214 | checksum: 17dbea6d019df98f8abebadcaed635d792c69368389c7869ca023acfba240294368a58eda761fb8047403b84e82edf25ea2af45afe06cc1807a25de42e256dd3 215 | languageName: node 216 | linkType: hard 217 | 218 | "@next/swc-darwin-arm64@npm:13.3.0": 219 | version: 13.3.0 220 | resolution: "@next/swc-darwin-arm64@npm:13.3.0" 221 | conditions: os=darwin & cpu=arm64 222 | languageName: node 223 | linkType: hard 224 | 225 | "@next/swc-darwin-x64@npm:13.3.0": 226 | version: 13.3.0 227 | resolution: "@next/swc-darwin-x64@npm:13.3.0" 228 | conditions: os=darwin & cpu=x64 229 | languageName: node 230 | linkType: hard 231 | 232 | "@next/swc-linux-arm64-gnu@npm:13.3.0": 233 | version: 13.3.0 234 | resolution: "@next/swc-linux-arm64-gnu@npm:13.3.0" 235 | conditions: os=linux & cpu=arm64 & libc=glibc 236 | languageName: node 237 | linkType: hard 238 | 239 | "@next/swc-linux-arm64-musl@npm:13.3.0": 240 | version: 13.3.0 241 | resolution: "@next/swc-linux-arm64-musl@npm:13.3.0" 242 | conditions: os=linux & cpu=arm64 & libc=musl 243 | languageName: node 244 | linkType: hard 245 | 246 | "@next/swc-linux-x64-gnu@npm:13.3.0": 247 | version: 13.3.0 248 | resolution: "@next/swc-linux-x64-gnu@npm:13.3.0" 249 | conditions: os=linux & cpu=x64 & libc=glibc 250 | languageName: node 251 | linkType: hard 252 | 253 | "@next/swc-linux-x64-musl@npm:13.3.0": 254 | version: 13.3.0 255 | resolution: "@next/swc-linux-x64-musl@npm:13.3.0" 256 | conditions: os=linux & cpu=x64 & libc=musl 257 | languageName: node 258 | linkType: hard 259 | 260 | "@next/swc-win32-arm64-msvc@npm:13.3.0": 261 | version: 13.3.0 262 | resolution: "@next/swc-win32-arm64-msvc@npm:13.3.0" 263 | conditions: os=win32 & cpu=arm64 264 | languageName: node 265 | linkType: hard 266 | 267 | "@next/swc-win32-ia32-msvc@npm:13.3.0": 268 | version: 13.3.0 269 | resolution: "@next/swc-win32-ia32-msvc@npm:13.3.0" 270 | conditions: os=win32 & cpu=ia32 271 | languageName: node 272 | linkType: hard 273 | 274 | "@next/swc-win32-x64-msvc@npm:13.3.0": 275 | version: 13.3.0 276 | resolution: "@next/swc-win32-x64-msvc@npm:13.3.0" 277 | conditions: os=win32 & cpu=x64 278 | languageName: node 279 | linkType: hard 280 | 281 | "@npmcli/fs@npm:^2.1.0": 282 | version: 2.1.2 283 | resolution: "@npmcli/fs@npm:2.1.2" 284 | dependencies: 285 | "@gar/promisify": ^1.1.3 286 | semver: ^7.3.5 287 | checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 288 | languageName: node 289 | linkType: hard 290 | 291 | "@npmcli/move-file@npm:^2.0.0": 292 | version: 2.0.1 293 | resolution: "@npmcli/move-file@npm:2.0.1" 294 | dependencies: 295 | mkdirp: ^1.0.4 296 | rimraf: ^3.0.2 297 | checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 298 | languageName: node 299 | linkType: hard 300 | 301 | "@swc/helpers@npm:0.4.14": 302 | version: 0.4.14 303 | resolution: "@swc/helpers@npm:0.4.14" 304 | dependencies: 305 | tslib: ^2.4.0 306 | checksum: 273fd3f3fc461a92f3790cc551ea054745c6d6959afbe1232e6d7aa1c722bbc114d308aab96bef5c78fc0303c85c7b472ef00e2253251cc89737f3b1af56e5a5 307 | languageName: node 308 | linkType: hard 309 | 310 | "@tootallnate/once@npm:2": 311 | version: 2.0.0 312 | resolution: "@tootallnate/once@npm:2.0.0" 313 | checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 314 | languageName: node 315 | linkType: hard 316 | 317 | "@tsconfig/node10@npm:^1.0.7": 318 | version: 1.0.9 319 | resolution: "@tsconfig/node10@npm:1.0.9" 320 | checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df 321 | languageName: node 322 | linkType: hard 323 | 324 | "@tsconfig/node12@npm:^1.0.7": 325 | version: 1.0.11 326 | resolution: "@tsconfig/node12@npm:1.0.11" 327 | checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a 328 | languageName: node 329 | linkType: hard 330 | 331 | "@tsconfig/node14@npm:^1.0.0": 332 | version: 1.0.3 333 | resolution: "@tsconfig/node14@npm:1.0.3" 334 | checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d 335 | languageName: node 336 | linkType: hard 337 | 338 | "@tsconfig/node16@npm:^1.0.2": 339 | version: 1.0.3 340 | resolution: "@tsconfig/node16@npm:1.0.3" 341 | checksum: 3a8b657dd047495b7ad23437d6afd20297ce90380ff0bdee93fc7d39a900dbd8d9e26e53ff6b465e7967ce2adf0b218782590ce9013285121e6a5928fbd6819f 342 | languageName: node 343 | linkType: hard 344 | 345 | "@types/chai-subset@npm:^1.3.3": 346 | version: 1.3.3 347 | resolution: "@types/chai-subset@npm:1.3.3" 348 | dependencies: 349 | "@types/chai": "*" 350 | checksum: 4481da7345022995f5a105e6683744f7203d2c3d19cfe88d8e17274d045722948abf55e0adfd97709e0f043dade37a4d4e98cd4c660e2e8a14f23e6ecf79418f 351 | languageName: node 352 | linkType: hard 353 | 354 | "@types/chai@npm:*, @types/chai@npm:^4.3.4": 355 | version: 4.3.4 356 | resolution: "@types/chai@npm:4.3.4" 357 | checksum: 571184967beb03bf64c4392a13a7d44e72da9af5a1e83077ff81c39cf59c0fda2a5c78d2005084601cf8f3d11726608574d8b5b4a0e3e9736792807afd926cd0 358 | languageName: node 359 | linkType: hard 360 | 361 | "@types/fs-extra@npm:^11.0.1": 362 | version: 11.0.1 363 | resolution: "@types/fs-extra@npm:11.0.1" 364 | dependencies: 365 | "@types/jsonfile": "*" 366 | "@types/node": "*" 367 | checksum: 3e930346e5d84f419deb8ced1c582beef8cb20d0bd8a0eb145a37d75bab0572a1895f0e48a0d681d386b3a58b9a992b2d2acecc464bcaec2548f53ea00718651 368 | languageName: node 369 | linkType: hard 370 | 371 | "@types/jsonfile@npm:*": 372 | version: 6.1.1 373 | resolution: "@types/jsonfile@npm:6.1.1" 374 | dependencies: 375 | "@types/node": "*" 376 | checksum: 0f8fe0a9221a00e8413cffba723dfe16553868724b830237256fb0052ecd5cac96498189d1235a001cfa815f352008261c9ceb373f0aa58227f891e0c7a12c4d 377 | languageName: node 378 | linkType: hard 379 | 380 | "@types/node@npm:*, @types/node@npm:^18.15.11": 381 | version: 18.15.11 382 | resolution: "@types/node@npm:18.15.11" 383 | checksum: 977b4ad04708897ff0eb049ecf82246d210939c82461922d20f7d2dcfd81bbc661582ba3af28869210f7e8b1934529dcd46bff7d448551400f9d48b9d3bddec3 384 | languageName: node 385 | linkType: hard 386 | 387 | "@types/qs@npm:^6.9.7": 388 | version: 6.9.7 389 | resolution: "@types/qs@npm:6.9.7" 390 | checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba 391 | languageName: node 392 | linkType: hard 393 | 394 | "@vitest/expect@npm:0.30.1": 395 | version: 0.30.1 396 | resolution: "@vitest/expect@npm:0.30.1" 397 | dependencies: 398 | "@vitest/spy": 0.30.1 399 | "@vitest/utils": 0.30.1 400 | chai: ^4.3.7 401 | checksum: cd7728d1532fd9b9d9ca52f76be14af72f7cf28686e91f99b1537a30d46a4207021410163b1c460076d4ada7246f7f3bdc14989c44aff0814ef83e1cdf5e4ecf 402 | languageName: node 403 | linkType: hard 404 | 405 | "@vitest/runner@npm:0.30.1": 406 | version: 0.30.1 407 | resolution: "@vitest/runner@npm:0.30.1" 408 | dependencies: 409 | "@vitest/utils": 0.30.1 410 | concordance: ^5.0.4 411 | p-limit: ^4.0.0 412 | pathe: ^1.1.0 413 | checksum: b8f9faa63f3e98671804ab403a1dc466a48548fa5ee5e276855f0bcc1fae528ca65476584fb5528dd62ba9865c54d147b1ae78fb0cafe337c043669dcb93e67d 414 | languageName: node 415 | linkType: hard 416 | 417 | "@vitest/snapshot@npm:0.30.1": 418 | version: 0.30.1 419 | resolution: "@vitest/snapshot@npm:0.30.1" 420 | dependencies: 421 | magic-string: ^0.30.0 422 | pathe: ^1.1.0 423 | pretty-format: ^27.5.1 424 | checksum: 9e0b89ca6c2cb08f2061c3d6bf5f2a1a9481c0229b8772b8be1db515552f07ea184f4248ceb11ad976ee89e2402c14e48a5700bab6ea859167fe5d10920e939c 425 | languageName: node 426 | linkType: hard 427 | 428 | "@vitest/spy@npm:0.30.1": 429 | version: 0.30.1 430 | resolution: "@vitest/spy@npm:0.30.1" 431 | dependencies: 432 | tinyspy: ^2.1.0 433 | checksum: af2e0a3910dfaa6b5759acd4913ca3c21ac9ad543c0d1095c23bdbca1a7d4e5dab43d8bfc4b08025d24e84965d65ae83f2cdc6aad080eaf5faf06daf06af3271 434 | languageName: node 435 | linkType: hard 436 | 437 | "@vitest/utils@npm:0.30.1": 438 | version: 0.30.1 439 | resolution: "@vitest/utils@npm:0.30.1" 440 | dependencies: 441 | concordance: ^5.0.4 442 | loupe: ^2.3.6 443 | pretty-format: ^27.5.1 444 | checksum: a685b6ba34b0173e4da388055dc2a22ba335a74cf99679f7036cea1d183e0ee804a01984148eaad0e0f48bfb786d33800ff6dd549b94f3d064e14caa0857ee62 445 | languageName: node 446 | linkType: hard 447 | 448 | "abbrev@npm:^1.0.0": 449 | version: 1.1.1 450 | resolution: "abbrev@npm:1.1.1" 451 | checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 452 | languageName: node 453 | linkType: hard 454 | 455 | "accepts@npm:^1.3.7": 456 | version: 1.3.8 457 | resolution: "accepts@npm:1.3.8" 458 | dependencies: 459 | mime-types: ~2.1.34 460 | negotiator: 0.6.3 461 | checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 462 | languageName: node 463 | linkType: hard 464 | 465 | "acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": 466 | version: 8.2.0 467 | resolution: "acorn-walk@npm:8.2.0" 468 | checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 469 | languageName: node 470 | linkType: hard 471 | 472 | "acorn@npm:^8.4.1, acorn@npm:^8.8.2": 473 | version: 8.8.2 474 | resolution: "acorn@npm:8.8.2" 475 | bin: 476 | acorn: bin/acorn 477 | checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 478 | languageName: node 479 | linkType: hard 480 | 481 | "agent-base@npm:6, agent-base@npm:^6.0.2": 482 | version: 6.0.2 483 | resolution: "agent-base@npm:6.0.2" 484 | dependencies: 485 | debug: 4 486 | checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d 487 | languageName: node 488 | linkType: hard 489 | 490 | "agentkeepalive@npm:^4.2.1": 491 | version: 4.3.0 492 | resolution: "agentkeepalive@npm:4.3.0" 493 | dependencies: 494 | debug: ^4.1.0 495 | depd: ^2.0.0 496 | humanize-ms: ^1.2.1 497 | checksum: 982453aa44c11a06826c836025e5162c846e1200adb56f2d075400da7d32d87021b3b0a58768d949d824811f5654223d5a8a3dad120921a2439625eb847c6260 498 | languageName: node 499 | linkType: hard 500 | 501 | "aggregate-error@npm:^3.0.0": 502 | version: 3.1.0 503 | resolution: "aggregate-error@npm:3.1.0" 504 | dependencies: 505 | clean-stack: ^2.0.0 506 | indent-string: ^4.0.0 507 | checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 508 | languageName: node 509 | linkType: hard 510 | 511 | "ansi-regex@npm:^5.0.1": 512 | version: 5.0.1 513 | resolution: "ansi-regex@npm:5.0.1" 514 | checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b 515 | languageName: node 516 | linkType: hard 517 | 518 | "ansi-styles@npm:^5.0.0": 519 | version: 5.2.0 520 | resolution: "ansi-styles@npm:5.2.0" 521 | checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 522 | languageName: node 523 | linkType: hard 524 | 525 | "anymatch@npm:~3.1.2": 526 | version: 3.1.3 527 | resolution: "anymatch@npm:3.1.3" 528 | dependencies: 529 | normalize-path: ^3.0.0 530 | picomatch: ^2.0.4 531 | checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 532 | languageName: node 533 | linkType: hard 534 | 535 | "aproba@npm:^1.0.3 || ^2.0.0": 536 | version: 2.0.0 537 | resolution: "aproba@npm:2.0.0" 538 | checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 539 | languageName: node 540 | linkType: hard 541 | 542 | "are-we-there-yet@npm:^3.0.0": 543 | version: 3.0.1 544 | resolution: "are-we-there-yet@npm:3.0.1" 545 | dependencies: 546 | delegates: ^1.0.0 547 | readable-stream: ^3.6.0 548 | checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 549 | languageName: node 550 | linkType: hard 551 | 552 | "arg@npm:^4.1.0": 553 | version: 4.1.3 554 | resolution: "arg@npm:4.1.3" 555 | checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 556 | languageName: node 557 | linkType: hard 558 | 559 | "assertion-error@npm:^1.1.0": 560 | version: 1.1.0 561 | resolution: "assertion-error@npm:1.1.0" 562 | checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf 563 | languageName: node 564 | linkType: hard 565 | 566 | "balanced-match@npm:^1.0.0": 567 | version: 1.0.2 568 | resolution: "balanced-match@npm:1.0.2" 569 | checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 570 | languageName: node 571 | linkType: hard 572 | 573 | "big-integer@npm:^1.6.16": 574 | version: 1.6.51 575 | resolution: "big-integer@npm:1.6.51" 576 | checksum: 3d444173d1b2e20747e2c175568bedeebd8315b0637ea95d75fd27830d3b8e8ba36c6af40374f36bdaea7b5de376dcada1b07587cb2a79a928fccdb6e6e3c518 577 | languageName: node 578 | linkType: hard 579 | 580 | "binary-extensions@npm:^2.0.0": 581 | version: 2.2.0 582 | resolution: "binary-extensions@npm:2.2.0" 583 | checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 584 | languageName: node 585 | linkType: hard 586 | 587 | "blueimp-md5@npm:^2.10.0": 588 | version: 2.19.0 589 | resolution: "blueimp-md5@npm:2.19.0" 590 | checksum: 28095dcbd2c67152a2938006e8d7c74c3406ba6556071298f872505432feb2c13241b0476644160ee0a5220383ba94cb8ccdac0053b51f68d168728f9c382530 591 | languageName: node 592 | linkType: hard 593 | 594 | "brace-expansion@npm:^1.1.7": 595 | version: 1.1.11 596 | resolution: "brace-expansion@npm:1.1.11" 597 | dependencies: 598 | balanced-match: ^1.0.0 599 | concat-map: 0.0.1 600 | checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 601 | languageName: node 602 | linkType: hard 603 | 604 | "brace-expansion@npm:^2.0.1": 605 | version: 2.0.1 606 | resolution: "brace-expansion@npm:2.0.1" 607 | dependencies: 608 | balanced-match: ^1.0.0 609 | checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 610 | languageName: node 611 | linkType: hard 612 | 613 | "braces@npm:~3.0.2": 614 | version: 3.0.2 615 | resolution: "braces@npm:3.0.2" 616 | dependencies: 617 | fill-range: ^7.0.1 618 | checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 619 | languageName: node 620 | linkType: hard 621 | 622 | "broadcast-channel@npm:^3.4.1": 623 | version: 3.7.0 624 | resolution: "broadcast-channel@npm:3.7.0" 625 | dependencies: 626 | "@babel/runtime": ^7.7.2 627 | detect-node: ^2.1.0 628 | js-sha3: 0.8.0 629 | microseconds: 0.2.0 630 | nano-time: 1.0.0 631 | oblivious-set: 1.0.0 632 | rimraf: 3.0.2 633 | unload: 2.2.0 634 | checksum: 803794c48dcce7f03aca69797430bd8b1c4cfd70b7de22079cd89567eeffaa126a1db98c7c2d86af8131d9bb41ed367c0fef96dfb446151c927b831572c621fc 635 | languageName: node 636 | linkType: hard 637 | 638 | "busboy@npm:1.6.0": 639 | version: 1.6.0 640 | resolution: "busboy@npm:1.6.0" 641 | dependencies: 642 | streamsearch: ^1.1.0 643 | checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e 644 | languageName: node 645 | linkType: hard 646 | 647 | "cac@npm:^6.7.14": 648 | version: 6.7.14 649 | resolution: "cac@npm:6.7.14" 650 | checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a 651 | languageName: node 652 | linkType: hard 653 | 654 | "cacache@npm:^16.1.0": 655 | version: 16.1.3 656 | resolution: "cacache@npm:16.1.3" 657 | dependencies: 658 | "@npmcli/fs": ^2.1.0 659 | "@npmcli/move-file": ^2.0.0 660 | chownr: ^2.0.0 661 | fs-minipass: ^2.1.0 662 | glob: ^8.0.1 663 | infer-owner: ^1.0.4 664 | lru-cache: ^7.7.1 665 | minipass: ^3.1.6 666 | minipass-collect: ^1.0.2 667 | minipass-flush: ^1.0.5 668 | minipass-pipeline: ^1.2.4 669 | mkdirp: ^1.0.4 670 | p-map: ^4.0.0 671 | promise-inflight: ^1.0.1 672 | rimraf: ^3.0.2 673 | ssri: ^9.0.0 674 | tar: ^6.1.11 675 | unique-filename: ^2.0.0 676 | checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 677 | languageName: node 678 | linkType: hard 679 | 680 | "call-bind@npm:^1.0.0": 681 | version: 1.0.2 682 | resolution: "call-bind@npm:1.0.2" 683 | dependencies: 684 | function-bind: ^1.1.1 685 | get-intrinsic: ^1.0.2 686 | checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 687 | languageName: node 688 | linkType: hard 689 | 690 | "caniuse-lite@npm:^1.0.30001406": 691 | version: 1.0.30001476 692 | resolution: "caniuse-lite@npm:1.0.30001476" 693 | checksum: 4e8b233b349330598ac8e4b77515901011ed687b0d0042b78b06cd520ba31953dbacca62348662e912f3b67892fb12406b928caed4233ab53b1603235802bc7c 694 | languageName: node 695 | linkType: hard 696 | 697 | "chai@npm:^4.3.7": 698 | version: 4.3.7 699 | resolution: "chai@npm:4.3.7" 700 | dependencies: 701 | assertion-error: ^1.1.0 702 | check-error: ^1.0.2 703 | deep-eql: ^4.1.2 704 | get-func-name: ^2.0.0 705 | loupe: ^2.3.1 706 | pathval: ^1.1.1 707 | type-detect: ^4.0.5 708 | checksum: 0bba7d267848015246a66995f044ce3f0ebc35e530da3cbdf171db744e14cbe301ab913a8d07caf7952b430257ccbb1a4a983c570a7c5748dc537897e5131f7c 709 | languageName: node 710 | linkType: hard 711 | 712 | "check-error@npm:^1.0.2": 713 | version: 1.0.2 714 | resolution: "check-error@npm:1.0.2" 715 | checksum: d9d106504404b8addd1ee3f63f8c0eaa7cd962a1a28eb9c519b1c4a1dc7098be38007fc0060f045ee00f075fbb7a2a4f42abcf61d68323677e11ab98dc16042e 716 | languageName: node 717 | linkType: hard 718 | 719 | "chokidar@npm:^3.5.3": 720 | version: 3.5.3 721 | resolution: "chokidar@npm:3.5.3" 722 | dependencies: 723 | anymatch: ~3.1.2 724 | braces: ~3.0.2 725 | fsevents: ~2.3.2 726 | glob-parent: ~5.1.2 727 | is-binary-path: ~2.1.0 728 | is-glob: ~4.0.1 729 | normalize-path: ~3.0.0 730 | readdirp: ~3.6.0 731 | dependenciesMeta: 732 | fsevents: 733 | optional: true 734 | checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c 735 | languageName: node 736 | linkType: hard 737 | 738 | "chownr@npm:^2.0.0": 739 | version: 2.0.0 740 | resolution: "chownr@npm:2.0.0" 741 | checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f 742 | languageName: node 743 | linkType: hard 744 | 745 | "clean-stack@npm:^2.0.0": 746 | version: 2.2.0 747 | resolution: "clean-stack@npm:2.2.0" 748 | checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 749 | languageName: node 750 | linkType: hard 751 | 752 | "client-only@npm:0.0.1": 753 | version: 0.0.1 754 | resolution: "client-only@npm:0.0.1" 755 | checksum: 0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8 756 | languageName: node 757 | linkType: hard 758 | 759 | "color-support@npm:^1.1.3": 760 | version: 1.1.3 761 | resolution: "color-support@npm:1.1.3" 762 | bin: 763 | color-support: bin.js 764 | checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b 765 | languageName: node 766 | linkType: hard 767 | 768 | "commander@npm:^10.0.0": 769 | version: 10.0.0 770 | resolution: "commander@npm:10.0.0" 771 | checksum: 9f6495651f878213005ac744dd87a85fa3d9f2b8b90d1c19d0866d666bda7f735adfd7c2f10dfff345782e2f80ea258f98bb4efcef58e4e502f25f883940acfd 772 | languageName: node 773 | linkType: hard 774 | 775 | "concat-map@npm:0.0.1": 776 | version: 0.0.1 777 | resolution: "concat-map@npm:0.0.1" 778 | checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af 779 | languageName: node 780 | linkType: hard 781 | 782 | "concordance@npm:^5.0.4": 783 | version: 5.0.4 784 | resolution: "concordance@npm:5.0.4" 785 | dependencies: 786 | date-time: ^3.1.0 787 | esutils: ^2.0.3 788 | fast-diff: ^1.2.0 789 | js-string-escape: ^1.0.1 790 | lodash: ^4.17.15 791 | md5-hex: ^3.0.1 792 | semver: ^7.3.2 793 | well-known-symbols: ^2.0.0 794 | checksum: 749153ba711492feb7c3d2f5bb04c107157440b3e39509bd5dd19ee7b3ac751d1e4cd75796d9f702e0a713312dbc661421c68aa4a2c34d5f6d91f47e3a1c64a6 795 | languageName: node 796 | linkType: hard 797 | 798 | "console-control-strings@npm:^1.1.0": 799 | version: 1.1.0 800 | resolution: "console-control-strings@npm:1.1.0" 801 | checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed 802 | languageName: node 803 | linkType: hard 804 | 805 | "content-disposition@npm:^0.5.3": 806 | version: 0.5.4 807 | resolution: "content-disposition@npm:0.5.4" 808 | dependencies: 809 | safe-buffer: 5.2.1 810 | checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 811 | languageName: node 812 | linkType: hard 813 | 814 | "cors@npm:^2.8.5": 815 | version: 2.8.5 816 | resolution: "cors@npm:2.8.5" 817 | dependencies: 818 | object-assign: ^4 819 | vary: ^1 820 | checksum: ced838404ccd184f61ab4fdc5847035b681c90db7ac17e428f3d81d69e2989d2b680cc254da0e2554f5ed4f8a341820a1ce3d1c16b499f6e2f47a1b9b07b5006 821 | languageName: node 822 | linkType: hard 823 | 824 | "create-require@npm:^1.1.0": 825 | version: 1.1.1 826 | resolution: "create-require@npm:1.1.1" 827 | checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff 828 | languageName: node 829 | linkType: hard 830 | 831 | "date-time@npm:^3.1.0": 832 | version: 3.1.0 833 | resolution: "date-time@npm:3.1.0" 834 | dependencies: 835 | time-zone: ^1.0.0 836 | checksum: f9cfcd1b15dfeabab15c0b9d18eb9e4e2d9d4371713564178d46a8f91ad577a290b5178b80050718d02d9c0cf646f8a875011e12d1ed05871e9f72c72c8a8fe6 837 | languageName: node 838 | linkType: hard 839 | 840 | "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.3, debug@npm:^4.3.4": 841 | version: 4.3.4 842 | resolution: "debug@npm:4.3.4" 843 | dependencies: 844 | ms: 2.1.2 845 | peerDependenciesMeta: 846 | supports-color: 847 | optional: true 848 | checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 849 | languageName: node 850 | linkType: hard 851 | 852 | "deep-eql@npm:^4.1.2": 853 | version: 4.1.3 854 | resolution: "deep-eql@npm:4.1.3" 855 | dependencies: 856 | type-detect: ^4.0.0 857 | checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f 858 | languageName: node 859 | linkType: hard 860 | 861 | "delegates@npm:^1.0.0": 862 | version: 1.0.0 863 | resolution: "delegates@npm:1.0.0" 864 | checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd 865 | languageName: node 866 | linkType: hard 867 | 868 | "depd@npm:^1.1.0": 869 | version: 1.1.2 870 | resolution: "depd@npm:1.1.2" 871 | checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 872 | languageName: node 873 | linkType: hard 874 | 875 | "depd@npm:^2.0.0": 876 | version: 2.0.0 877 | resolution: "depd@npm:2.0.0" 878 | checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a 879 | languageName: node 880 | linkType: hard 881 | 882 | "detect-node@npm:^2.0.4, detect-node@npm:^2.1.0": 883 | version: 2.1.0 884 | resolution: "detect-node@npm:2.1.0" 885 | checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e 886 | languageName: node 887 | linkType: hard 888 | 889 | "diff@npm:^4.0.1": 890 | version: 4.0.2 891 | resolution: "diff@npm:4.0.2" 892 | checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d 893 | languageName: node 894 | linkType: hard 895 | 896 | "emoji-regex@npm:^8.0.0": 897 | version: 8.0.0 898 | resolution: "emoji-regex@npm:8.0.0" 899 | checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 900 | languageName: node 901 | linkType: hard 902 | 903 | "encoding@npm:^0.1.13": 904 | version: 0.1.13 905 | resolution: "encoding@npm:0.1.13" 906 | dependencies: 907 | iconv-lite: ^0.6.2 908 | checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f 909 | languageName: node 910 | linkType: hard 911 | 912 | "env-paths@npm:^2.2.0": 913 | version: 2.2.1 914 | resolution: "env-paths@npm:2.2.1" 915 | checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e 916 | languageName: node 917 | linkType: hard 918 | 919 | "err-code@npm:^2.0.2": 920 | version: 2.0.3 921 | resolution: "err-code@npm:2.0.3" 922 | checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 923 | languageName: node 924 | linkType: hard 925 | 926 | "esbuild@npm:^0.17.5": 927 | version: 0.17.16 928 | resolution: "esbuild@npm:0.17.16" 929 | dependencies: 930 | "@esbuild/android-arm": 0.17.16 931 | "@esbuild/android-arm64": 0.17.16 932 | "@esbuild/android-x64": 0.17.16 933 | "@esbuild/darwin-arm64": 0.17.16 934 | "@esbuild/darwin-x64": 0.17.16 935 | "@esbuild/freebsd-arm64": 0.17.16 936 | "@esbuild/freebsd-x64": 0.17.16 937 | "@esbuild/linux-arm": 0.17.16 938 | "@esbuild/linux-arm64": 0.17.16 939 | "@esbuild/linux-ia32": 0.17.16 940 | "@esbuild/linux-loong64": 0.17.16 941 | "@esbuild/linux-mips64el": 0.17.16 942 | "@esbuild/linux-ppc64": 0.17.16 943 | "@esbuild/linux-riscv64": 0.17.16 944 | "@esbuild/linux-s390x": 0.17.16 945 | "@esbuild/linux-x64": 0.17.16 946 | "@esbuild/netbsd-x64": 0.17.16 947 | "@esbuild/openbsd-x64": 0.17.16 948 | "@esbuild/sunos-x64": 0.17.16 949 | "@esbuild/win32-arm64": 0.17.16 950 | "@esbuild/win32-ia32": 0.17.16 951 | "@esbuild/win32-x64": 0.17.16 952 | dependenciesMeta: 953 | "@esbuild/android-arm": 954 | optional: true 955 | "@esbuild/android-arm64": 956 | optional: true 957 | "@esbuild/android-x64": 958 | optional: true 959 | "@esbuild/darwin-arm64": 960 | optional: true 961 | "@esbuild/darwin-x64": 962 | optional: true 963 | "@esbuild/freebsd-arm64": 964 | optional: true 965 | "@esbuild/freebsd-x64": 966 | optional: true 967 | "@esbuild/linux-arm": 968 | optional: true 969 | "@esbuild/linux-arm64": 970 | optional: true 971 | "@esbuild/linux-ia32": 972 | optional: true 973 | "@esbuild/linux-loong64": 974 | optional: true 975 | "@esbuild/linux-mips64el": 976 | optional: true 977 | "@esbuild/linux-ppc64": 978 | optional: true 979 | "@esbuild/linux-riscv64": 980 | optional: true 981 | "@esbuild/linux-s390x": 982 | optional: true 983 | "@esbuild/linux-x64": 984 | optional: true 985 | "@esbuild/netbsd-x64": 986 | optional: true 987 | "@esbuild/openbsd-x64": 988 | optional: true 989 | "@esbuild/sunos-x64": 990 | optional: true 991 | "@esbuild/win32-arm64": 992 | optional: true 993 | "@esbuild/win32-ia32": 994 | optional: true 995 | "@esbuild/win32-x64": 996 | optional: true 997 | bin: 998 | esbuild: bin/esbuild 999 | checksum: c9787d8e05b9c4f762761be31a7847b5b4492b9b997808b7098479fef9a3260f1b8ca01e9b38376b6698f4394bfe088acb4f797a697b45b965cd664e103aafa7 1000 | languageName: node 1001 | linkType: hard 1002 | 1003 | "esutils@npm:^2.0.3": 1004 | version: 2.0.3 1005 | resolution: "esutils@npm:2.0.3" 1006 | checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 1007 | languageName: node 1008 | linkType: hard 1009 | 1010 | "fast-diff@npm:^1.2.0": 1011 | version: 1.2.0 1012 | resolution: "fast-diff@npm:1.2.0" 1013 | checksum: 1b5306eaa9e826564d9e5ffcd6ebd881eb5f770b3f977fcbf38f05c824e42172b53c79920e8429c54eb742ce15a0caf268b0fdd5b38f6de52234c4a8368131ae 1014 | languageName: node 1015 | linkType: hard 1016 | 1017 | "fill-range@npm:^7.0.1": 1018 | version: 7.0.1 1019 | resolution: "fill-range@npm:7.0.1" 1020 | dependencies: 1021 | to-regex-range: ^5.0.1 1022 | checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 1023 | languageName: node 1024 | linkType: hard 1025 | 1026 | "fresh@npm:^0.5.2": 1027 | version: 0.5.2 1028 | resolution: "fresh@npm:0.5.2" 1029 | checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 1030 | languageName: node 1031 | linkType: hard 1032 | 1033 | "fs-extra@npm:^11.1.1": 1034 | version: 11.1.1 1035 | resolution: "fs-extra@npm:11.1.1" 1036 | dependencies: 1037 | graceful-fs: ^4.2.0 1038 | jsonfile: ^6.0.1 1039 | universalify: ^2.0.0 1040 | checksum: fb883c68245b2d777fbc1f2082c9efb084eaa2bbf9fddaa366130d196c03608eebef7fb490541276429ee1ca99f317e2d73e96f5ca0999eefedf5a624ae1edfd 1041 | languageName: node 1042 | linkType: hard 1043 | 1044 | "fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": 1045 | version: 2.1.0 1046 | resolution: "fs-minipass@npm:2.1.0" 1047 | dependencies: 1048 | minipass: ^3.0.0 1049 | checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 1050 | languageName: node 1051 | linkType: hard 1052 | 1053 | "fs.realpath@npm:^1.0.0": 1054 | version: 1.0.0 1055 | resolution: "fs.realpath@npm:1.0.0" 1056 | checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 1057 | languageName: node 1058 | linkType: hard 1059 | 1060 | "fsevents@npm:~2.3.2": 1061 | version: 2.3.2 1062 | resolution: "fsevents@npm:2.3.2" 1063 | dependencies: 1064 | node-gyp: latest 1065 | checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f 1066 | conditions: os=darwin 1067 | languageName: node 1068 | linkType: hard 1069 | 1070 | "fsevents@patch:fsevents@~2.3.2#~builtin": 1071 | version: 2.3.2 1072 | resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" 1073 | dependencies: 1074 | node-gyp: latest 1075 | conditions: os=darwin 1076 | languageName: node 1077 | linkType: hard 1078 | 1079 | "function-bind@npm:^1.1.1": 1080 | version: 1.1.1 1081 | resolution: "function-bind@npm:1.1.1" 1082 | checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a 1083 | languageName: node 1084 | linkType: hard 1085 | 1086 | "gauge@npm:^4.0.3": 1087 | version: 4.0.4 1088 | resolution: "gauge@npm:4.0.4" 1089 | dependencies: 1090 | aproba: ^1.0.3 || ^2.0.0 1091 | color-support: ^1.1.3 1092 | console-control-strings: ^1.1.0 1093 | has-unicode: ^2.0.1 1094 | signal-exit: ^3.0.7 1095 | string-width: ^4.2.3 1096 | strip-ansi: ^6.0.1 1097 | wide-align: ^1.1.5 1098 | checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d 1099 | languageName: node 1100 | linkType: hard 1101 | 1102 | "get-func-name@npm:^2.0.0": 1103 | version: 2.0.0 1104 | resolution: "get-func-name@npm:2.0.0" 1105 | checksum: 8d82e69f3e7fab9e27c547945dfe5cc0c57fc0adf08ce135dddb01081d75684a03e7a0487466f478872b341d52ac763ae49e660d01ab83741f74932085f693c3 1106 | languageName: node 1107 | linkType: hard 1108 | 1109 | "get-intrinsic@npm:^1.0.2": 1110 | version: 1.2.0 1111 | resolution: "get-intrinsic@npm:1.2.0" 1112 | dependencies: 1113 | function-bind: ^1.1.1 1114 | has: ^1.0.3 1115 | has-symbols: ^1.0.3 1116 | checksum: 78fc0487b783f5c58cf2dccafc3ae656ee8d2d8062a8831ce4a95e7057af4587a1d4882246c033aca0a7b4965276f4802b45cc300338d1b77a73d3e3e3f4877d 1117 | languageName: node 1118 | linkType: hard 1119 | 1120 | "glob-parent@npm:~5.1.2": 1121 | version: 5.1.2 1122 | resolution: "glob-parent@npm:5.1.2" 1123 | dependencies: 1124 | is-glob: ^4.0.1 1125 | checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e 1126 | languageName: node 1127 | linkType: hard 1128 | 1129 | "glob@npm:^10.0.0": 1130 | version: 10.0.0 1131 | resolution: "glob@npm:10.0.0" 1132 | dependencies: 1133 | fs.realpath: ^1.0.0 1134 | minimatch: ^9.0.0 1135 | minipass: ^5.0.0 1136 | path-scurry: ^1.6.4 1137 | checksum: 3852a6b847106c431d87fb3e8cccb6cfc4449de3ab5d0216c44d4e2da2616df220058050d16811c42f0c2148ad8981da828227ae5c5ab798091ef27c903429f6 1138 | languageName: node 1139 | linkType: hard 1140 | 1141 | "glob@npm:^7.1.3, glob@npm:^7.1.4": 1142 | version: 7.2.3 1143 | resolution: "glob@npm:7.2.3" 1144 | dependencies: 1145 | fs.realpath: ^1.0.0 1146 | inflight: ^1.0.4 1147 | inherits: 2 1148 | minimatch: ^3.1.1 1149 | once: ^1.3.0 1150 | path-is-absolute: ^1.0.0 1151 | checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 1152 | languageName: node 1153 | linkType: hard 1154 | 1155 | "glob@npm:^8.0.1": 1156 | version: 8.1.0 1157 | resolution: "glob@npm:8.1.0" 1158 | dependencies: 1159 | fs.realpath: ^1.0.0 1160 | inflight: ^1.0.4 1161 | inherits: 2 1162 | minimatch: ^5.0.1 1163 | once: ^1.3.0 1164 | checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 1165 | languageName: node 1166 | linkType: hard 1167 | 1168 | "graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": 1169 | version: 4.2.11 1170 | resolution: "graceful-fs@npm:4.2.11" 1171 | checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 1172 | languageName: node 1173 | linkType: hard 1174 | 1175 | "has-symbols@npm:^1.0.3": 1176 | version: 1.0.3 1177 | resolution: "has-symbols@npm:1.0.3" 1178 | checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 1179 | languageName: node 1180 | linkType: hard 1181 | 1182 | "has-unicode@npm:^2.0.1": 1183 | version: 2.0.1 1184 | resolution: "has-unicode@npm:2.0.1" 1185 | checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 1186 | languageName: node 1187 | linkType: hard 1188 | 1189 | "has@npm:^1.0.3": 1190 | version: 1.0.3 1191 | resolution: "has@npm:1.0.3" 1192 | dependencies: 1193 | function-bind: ^1.1.1 1194 | checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 1195 | languageName: node 1196 | linkType: hard 1197 | 1198 | "http-cache-semantics@npm:^4.1.0": 1199 | version: 4.1.1 1200 | resolution: "http-cache-semantics@npm:4.1.1" 1201 | checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 1202 | languageName: node 1203 | linkType: hard 1204 | 1205 | "http-proxy-agent@npm:^5.0.0": 1206 | version: 5.0.0 1207 | resolution: "http-proxy-agent@npm:5.0.0" 1208 | dependencies: 1209 | "@tootallnate/once": 2 1210 | agent-base: 6 1211 | debug: 4 1212 | checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 1213 | languageName: node 1214 | linkType: hard 1215 | 1216 | "https-proxy-agent@npm:^5.0.0": 1217 | version: 5.0.1 1218 | resolution: "https-proxy-agent@npm:5.0.1" 1219 | dependencies: 1220 | agent-base: 6 1221 | debug: 4 1222 | checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 1223 | languageName: node 1224 | linkType: hard 1225 | 1226 | "humanize-ms@npm:^1.2.1": 1227 | version: 1.2.1 1228 | resolution: "humanize-ms@npm:1.2.1" 1229 | dependencies: 1230 | ms: ^2.0.0 1231 | checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 1232 | languageName: node 1233 | linkType: hard 1234 | 1235 | "iconv-lite@npm:^0.6.2": 1236 | version: 0.6.3 1237 | resolution: "iconv-lite@npm:0.6.3" 1238 | dependencies: 1239 | safer-buffer: ">= 2.1.2 < 3.0.0" 1240 | checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf 1241 | languageName: node 1242 | linkType: hard 1243 | 1244 | "imurmurhash@npm:^0.1.4": 1245 | version: 0.1.4 1246 | resolution: "imurmurhash@npm:0.1.4" 1247 | checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 1248 | languageName: node 1249 | linkType: hard 1250 | 1251 | "indent-string@npm:^4.0.0": 1252 | version: 4.0.0 1253 | resolution: "indent-string@npm:4.0.0" 1254 | checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 1255 | languageName: node 1256 | linkType: hard 1257 | 1258 | "infer-owner@npm:^1.0.4": 1259 | version: 1.0.4 1260 | resolution: "infer-owner@npm:1.0.4" 1261 | checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 1262 | languageName: node 1263 | linkType: hard 1264 | 1265 | "inflight@npm:^1.0.4": 1266 | version: 1.0.6 1267 | resolution: "inflight@npm:1.0.6" 1268 | dependencies: 1269 | once: ^1.3.0 1270 | wrappy: 1 1271 | checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd 1272 | languageName: node 1273 | linkType: hard 1274 | 1275 | "inherits@npm:2, inherits@npm:^2.0.3": 1276 | version: 2.0.4 1277 | resolution: "inherits@npm:2.0.4" 1278 | checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 1279 | languageName: node 1280 | linkType: hard 1281 | 1282 | "ip@npm:^2.0.0": 1283 | version: 2.0.0 1284 | resolution: "ip@npm:2.0.0" 1285 | checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 1286 | languageName: node 1287 | linkType: hard 1288 | 1289 | "is-binary-path@npm:~2.1.0": 1290 | version: 2.1.0 1291 | resolution: "is-binary-path@npm:2.1.0" 1292 | dependencies: 1293 | binary-extensions: ^2.0.0 1294 | checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c 1295 | languageName: node 1296 | linkType: hard 1297 | 1298 | "is-core-module@npm:^2.11.0": 1299 | version: 2.12.0 1300 | resolution: "is-core-module@npm:2.12.0" 1301 | dependencies: 1302 | has: ^1.0.3 1303 | checksum: f7f7eb2ab71fd769ee9fb2385c095d503aa4b5ce0028c04557de03f1e67a87c85e5bac1f215945fc3c955867a139a415a3ec4c4234a0bffdf715232660f440a6 1304 | languageName: node 1305 | linkType: hard 1306 | 1307 | "is-extglob@npm:^2.1.1": 1308 | version: 2.1.1 1309 | resolution: "is-extglob@npm:2.1.1" 1310 | checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 1311 | languageName: node 1312 | linkType: hard 1313 | 1314 | "is-fullwidth-code-point@npm:^3.0.0": 1315 | version: 3.0.0 1316 | resolution: "is-fullwidth-code-point@npm:3.0.0" 1317 | checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 1318 | languageName: node 1319 | linkType: hard 1320 | 1321 | "is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": 1322 | version: 4.0.3 1323 | resolution: "is-glob@npm:4.0.3" 1324 | dependencies: 1325 | is-extglob: ^2.1.1 1326 | checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 1327 | languageName: node 1328 | linkType: hard 1329 | 1330 | "is-lambda@npm:^1.0.1": 1331 | version: 1.0.1 1332 | resolution: "is-lambda@npm:1.0.1" 1333 | checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 1334 | languageName: node 1335 | linkType: hard 1336 | 1337 | "is-number@npm:^7.0.0": 1338 | version: 7.0.0 1339 | resolution: "is-number@npm:7.0.0" 1340 | checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a 1341 | languageName: node 1342 | linkType: hard 1343 | 1344 | "isexe@npm:^2.0.0": 1345 | version: 2.0.0 1346 | resolution: "isexe@npm:2.0.0" 1347 | checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 1348 | languageName: node 1349 | linkType: hard 1350 | 1351 | "js-sha3@npm:0.8.0": 1352 | version: 0.8.0 1353 | resolution: "js-sha3@npm:0.8.0" 1354 | checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce 1355 | languageName: node 1356 | linkType: hard 1357 | 1358 | "js-string-escape@npm:^1.0.1": 1359 | version: 1.0.1 1360 | resolution: "js-string-escape@npm:1.0.1" 1361 | checksum: f11e0991bf57e0c183b55c547acec85bd2445f043efc9ea5aa68b41bd2a3e7d3ce94636cb233ae0d84064ba4c1a505d32e969813c5b13f81e7d4be12c59256fe 1362 | languageName: node 1363 | linkType: hard 1364 | 1365 | "jsonc-parser@npm:^3.2.0": 1366 | version: 3.2.0 1367 | resolution: "jsonc-parser@npm:3.2.0" 1368 | checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 1369 | languageName: node 1370 | linkType: hard 1371 | 1372 | "jsonfile@npm:^6.0.1": 1373 | version: 6.1.0 1374 | resolution: "jsonfile@npm:6.1.0" 1375 | dependencies: 1376 | graceful-fs: ^4.1.6 1377 | universalify: ^2.0.0 1378 | dependenciesMeta: 1379 | graceful-fs: 1380 | optional: true 1381 | checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 1382 | languageName: node 1383 | linkType: hard 1384 | 1385 | "local-pkg@npm:^0.4.3": 1386 | version: 0.4.3 1387 | resolution: "local-pkg@npm:0.4.3" 1388 | checksum: 7825aca531dd6afa3a3712a0208697aa4a5cd009065f32e3fb732aafcc42ed11f277b5ac67229222e96f4def55197171cdf3d5522d0381b489d2e5547b407d55 1389 | languageName: node 1390 | linkType: hard 1391 | 1392 | "lodash@npm:^4.17.15": 1393 | version: 4.17.21 1394 | resolution: "lodash@npm:4.17.21" 1395 | checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 1396 | languageName: node 1397 | linkType: hard 1398 | 1399 | "loupe@npm:^2.3.1, loupe@npm:^2.3.6": 1400 | version: 2.3.6 1401 | resolution: "loupe@npm:2.3.6" 1402 | dependencies: 1403 | get-func-name: ^2.0.0 1404 | checksum: cc83f1b124a1df7384601d72d8d1f5fe95fd7a8185469fec48bb2e4027e45243949e7a013e8d91051a138451ff0552310c32aa9786e60b6a30d1e801bdc2163f 1405 | languageName: node 1406 | linkType: hard 1407 | 1408 | "lru-cache@npm:^6.0.0": 1409 | version: 6.0.0 1410 | resolution: "lru-cache@npm:6.0.0" 1411 | dependencies: 1412 | yallist: ^4.0.0 1413 | checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 1414 | languageName: node 1415 | linkType: hard 1416 | 1417 | "lru-cache@npm:^7.7.1": 1418 | version: 7.18.3 1419 | resolution: "lru-cache@npm:7.18.3" 1420 | checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 1421 | languageName: node 1422 | linkType: hard 1423 | 1424 | "lru-cache@npm:^9.0.0": 1425 | version: 9.0.0 1426 | resolution: "lru-cache@npm:9.0.0" 1427 | checksum: d90173404f4f2b48d238c361eaa5ff302507b9be65beb71282147e18a50d4b521361df99d7ded199b6c2e6451078c417d64d9d649e466f2bed8b5de2795cbbb6 1428 | languageName: node 1429 | linkType: hard 1430 | 1431 | "magic-string@npm:^0.30.0": 1432 | version: 0.30.0 1433 | resolution: "magic-string@npm:0.30.0" 1434 | dependencies: 1435 | "@jridgewell/sourcemap-codec": ^1.4.13 1436 | checksum: 7bdf22e27334d8a393858a16f5f840af63a7c05848c000fd714da5aa5eefa09a1bc01d8469362f25cc5c4a14ec01b46557b7fff8751365522acddf21e57c488d 1437 | languageName: node 1438 | linkType: hard 1439 | 1440 | "make-error@npm:^1.1.1": 1441 | version: 1.3.6 1442 | resolution: "make-error@npm:1.3.6" 1443 | checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 1444 | languageName: node 1445 | linkType: hard 1446 | 1447 | "make-fetch-happen@npm:^10.0.3": 1448 | version: 10.2.1 1449 | resolution: "make-fetch-happen@npm:10.2.1" 1450 | dependencies: 1451 | agentkeepalive: ^4.2.1 1452 | cacache: ^16.1.0 1453 | http-cache-semantics: ^4.1.0 1454 | http-proxy-agent: ^5.0.0 1455 | https-proxy-agent: ^5.0.0 1456 | is-lambda: ^1.0.1 1457 | lru-cache: ^7.7.1 1458 | minipass: ^3.1.6 1459 | minipass-collect: ^1.0.2 1460 | minipass-fetch: ^2.0.3 1461 | minipass-flush: ^1.0.5 1462 | minipass-pipeline: ^1.2.4 1463 | negotiator: ^0.6.3 1464 | promise-retry: ^2.0.1 1465 | socks-proxy-agent: ^7.0.0 1466 | ssri: ^9.0.0 1467 | checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c 1468 | languageName: node 1469 | linkType: hard 1470 | 1471 | "match-sorter@npm:^6.0.2": 1472 | version: 6.3.1 1473 | resolution: "match-sorter@npm:6.3.1" 1474 | dependencies: 1475 | "@babel/runtime": ^7.12.5 1476 | remove-accents: 0.4.2 1477 | checksum: a4b02b676ac4ce64a89a091539ee4a70a802684713bcf06f2b70787927f510fe8a2adc849f9288857a90906083ad303467e530e8723b4a9756df9994fc164550 1478 | languageName: node 1479 | linkType: hard 1480 | 1481 | "md5-hex@npm:^3.0.1": 1482 | version: 3.0.1 1483 | resolution: "md5-hex@npm:3.0.1" 1484 | dependencies: 1485 | blueimp-md5: ^2.10.0 1486 | checksum: 6799a19e8bdd3e0c2861b94c1d4d858a89220488d7885c1fa236797e367d0c2e5f2b789e05309307083503f85be3603a9686a5915568a473137d6b4117419cc2 1487 | languageName: node 1488 | linkType: hard 1489 | 1490 | "media-typer@npm:0.3.0": 1491 | version: 0.3.0 1492 | resolution: "media-typer@npm:0.3.0" 1493 | checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 1494 | languageName: node 1495 | linkType: hard 1496 | 1497 | "merge-descriptors@npm:^1.0.1": 1498 | version: 1.0.1 1499 | resolution: "merge-descriptors@npm:1.0.1" 1500 | checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 1501 | languageName: node 1502 | linkType: hard 1503 | 1504 | "methods@npm:^1.1.2": 1505 | version: 1.1.2 1506 | resolution: "methods@npm:1.1.2" 1507 | checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a 1508 | languageName: node 1509 | linkType: hard 1510 | 1511 | "microseconds@npm:0.2.0": 1512 | version: 0.2.0 1513 | resolution: "microseconds@npm:0.2.0" 1514 | checksum: 22bfa8553f92c7d95afff6de0aeb2aecf750680d41b8c72b02098ccc5bbbb0a384380ff539292dbd3788f5dfc298682f9d38a2b4c101f5ee2c9471d53934c5fa 1515 | languageName: node 1516 | linkType: hard 1517 | 1518 | "mime-db@npm:1.52.0": 1519 | version: 1.52.0 1520 | resolution: "mime-db@npm:1.52.0" 1521 | checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f 1522 | languageName: node 1523 | linkType: hard 1524 | 1525 | "mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": 1526 | version: 2.1.35 1527 | resolution: "mime-types@npm:2.1.35" 1528 | dependencies: 1529 | mime-db: 1.52.0 1530 | checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 1531 | languageName: node 1532 | linkType: hard 1533 | 1534 | "mime@npm:^1.3.4": 1535 | version: 1.6.0 1536 | resolution: "mime@npm:1.6.0" 1537 | bin: 1538 | mime: cli.js 1539 | checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 1540 | languageName: node 1541 | linkType: hard 1542 | 1543 | "minimatch@npm:^3.1.1": 1544 | version: 3.1.2 1545 | resolution: "minimatch@npm:3.1.2" 1546 | dependencies: 1547 | brace-expansion: ^1.1.7 1548 | checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a 1549 | languageName: node 1550 | linkType: hard 1551 | 1552 | "minimatch@npm:^5.0.1": 1553 | version: 5.1.6 1554 | resolution: "minimatch@npm:5.1.6" 1555 | dependencies: 1556 | brace-expansion: ^2.0.1 1557 | checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 1558 | languageName: node 1559 | linkType: hard 1560 | 1561 | "minimatch@npm:^9.0.0": 1562 | version: 9.0.0 1563 | resolution: "minimatch@npm:9.0.0" 1564 | dependencies: 1565 | brace-expansion: ^2.0.1 1566 | checksum: 7bd57899edd1d1b0560f50b5b2d1ea4ad2a366c5a2c8e0a943372cf2f200b64c256bae45a87a80915adbce27fa36526264296ace0da57b600481fe5ea3e372e5 1567 | languageName: node 1568 | linkType: hard 1569 | 1570 | "minipass-collect@npm:^1.0.2": 1571 | version: 1.0.2 1572 | resolution: "minipass-collect@npm:1.0.2" 1573 | dependencies: 1574 | minipass: ^3.0.0 1575 | checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 1576 | languageName: node 1577 | linkType: hard 1578 | 1579 | "minipass-fetch@npm:^2.0.3": 1580 | version: 2.1.2 1581 | resolution: "minipass-fetch@npm:2.1.2" 1582 | dependencies: 1583 | encoding: ^0.1.13 1584 | minipass: ^3.1.6 1585 | minipass-sized: ^1.0.3 1586 | minizlib: ^2.1.2 1587 | dependenciesMeta: 1588 | encoding: 1589 | optional: true 1590 | checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 1591 | languageName: node 1592 | linkType: hard 1593 | 1594 | "minipass-flush@npm:^1.0.5": 1595 | version: 1.0.5 1596 | resolution: "minipass-flush@npm:1.0.5" 1597 | dependencies: 1598 | minipass: ^3.0.0 1599 | checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf 1600 | languageName: node 1601 | linkType: hard 1602 | 1603 | "minipass-pipeline@npm:^1.2.4": 1604 | version: 1.2.4 1605 | resolution: "minipass-pipeline@npm:1.2.4" 1606 | dependencies: 1607 | minipass: ^3.0.0 1608 | checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b 1609 | languageName: node 1610 | linkType: hard 1611 | 1612 | "minipass-sized@npm:^1.0.3": 1613 | version: 1.0.3 1614 | resolution: "minipass-sized@npm:1.0.3" 1615 | dependencies: 1616 | minipass: ^3.0.0 1617 | checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 1618 | languageName: node 1619 | linkType: hard 1620 | 1621 | "minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": 1622 | version: 3.3.6 1623 | resolution: "minipass@npm:3.3.6" 1624 | dependencies: 1625 | yallist: ^4.0.0 1626 | checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 1627 | languageName: node 1628 | linkType: hard 1629 | 1630 | "minipass@npm:^4.0.0": 1631 | version: 4.2.7 1632 | resolution: "minipass@npm:4.2.7" 1633 | checksum: 55669510e5ff681889ba30b3bebe7dc70eac687197c9fe119b4d6eee36d96755b240f11b75e81edc2b6f8ce8338154a26896fb0555ae34b4fa4c607d31557ee9 1634 | languageName: node 1635 | linkType: hard 1636 | 1637 | "minipass@npm:^5.0.0": 1638 | version: 5.0.0 1639 | resolution: "minipass@npm:5.0.0" 1640 | checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea 1641 | languageName: node 1642 | linkType: hard 1643 | 1644 | "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": 1645 | version: 2.1.2 1646 | resolution: "minizlib@npm:2.1.2" 1647 | dependencies: 1648 | minipass: ^3.0.0 1649 | yallist: ^4.0.0 1650 | checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 1651 | languageName: node 1652 | linkType: hard 1653 | 1654 | "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": 1655 | version: 1.0.4 1656 | resolution: "mkdirp@npm:1.0.4" 1657 | bin: 1658 | mkdirp: bin/cmd.js 1659 | checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f 1660 | languageName: node 1661 | linkType: hard 1662 | 1663 | "mlly@npm:^1.1.1, mlly@npm:^1.2.0": 1664 | version: 1.2.0 1665 | resolution: "mlly@npm:1.2.0" 1666 | dependencies: 1667 | acorn: ^8.8.2 1668 | pathe: ^1.1.0 1669 | pkg-types: ^1.0.2 1670 | ufo: ^1.1.1 1671 | checksum: 640b019eb20e8e556bd623141b861d47e5c05f8af00210376ce1015912695dbd93a38cfe7ba18ca04f00e75645378f0f94a48a90bfa6e1b5dee1f0ec9c14eed1 1672 | languageName: node 1673 | linkType: hard 1674 | 1675 | "ms@npm:2.1.2": 1676 | version: 2.1.2 1677 | resolution: "ms@npm:2.1.2" 1678 | checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f 1679 | languageName: node 1680 | linkType: hard 1681 | 1682 | "ms@npm:^2.0.0": 1683 | version: 2.1.3 1684 | resolution: "ms@npm:2.1.3" 1685 | checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d 1686 | languageName: node 1687 | linkType: hard 1688 | 1689 | "nano-time@npm:1.0.0": 1690 | version: 1.0.0 1691 | resolution: "nano-time@npm:1.0.0" 1692 | dependencies: 1693 | big-integer: ^1.6.16 1694 | checksum: eef8548546cc1020625f8e44751a7263e9eddf0412a6a1a6c80a8d2be2ea7973622804a977cdfe796807b85b20ff6c8ba340e8dd20effcc7078193ed5edbb5d4 1695 | languageName: node 1696 | linkType: hard 1697 | 1698 | "nanoid@npm:^3.3.4": 1699 | version: 3.3.6 1700 | resolution: "nanoid@npm:3.3.6" 1701 | bin: 1702 | nanoid: bin/nanoid.cjs 1703 | checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 1704 | languageName: node 1705 | linkType: hard 1706 | 1707 | "negotiator@npm:0.6.3, negotiator@npm:^0.6.3": 1708 | version: 0.6.3 1709 | resolution: "negotiator@npm:0.6.3" 1710 | checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 1711 | languageName: node 1712 | linkType: hard 1713 | 1714 | "next-zod-router@workspace:.": 1715 | version: 0.0.0-use.local 1716 | resolution: "next-zod-router@workspace:." 1717 | dependencies: 1718 | "@types/fs-extra": ^11.0.1 1719 | "@types/node": ^18.15.11 1720 | "@types/qs": ^6.9.7 1721 | chokidar: ^3.5.3 1722 | commander: ^10.0.0 1723 | cors: ^2.8.5 1724 | fs-extra: ^11.1.1 1725 | next: ^13.3.0 1726 | node-mocks-http: ^1.12.2 1727 | qs: ^6.11.1 1728 | react-query: ^3.39.3 1729 | rimraf: ^5.0.0 1730 | swr: ^2.1.3 1731 | ts-node: ^10.9.1 1732 | typescript: ^5.0.4 1733 | vitest: ^0.30.1 1734 | zod: ^3.21.4 1735 | bin: 1736 | next-zod-router: ./tools/index.js 1737 | languageName: unknown 1738 | linkType: soft 1739 | 1740 | "next@npm:^13.3.0": 1741 | version: 13.3.0 1742 | resolution: "next@npm:13.3.0" 1743 | dependencies: 1744 | "@next/env": 13.3.0 1745 | "@next/swc-darwin-arm64": 13.3.0 1746 | "@next/swc-darwin-x64": 13.3.0 1747 | "@next/swc-linux-arm64-gnu": 13.3.0 1748 | "@next/swc-linux-arm64-musl": 13.3.0 1749 | "@next/swc-linux-x64-gnu": 13.3.0 1750 | "@next/swc-linux-x64-musl": 13.3.0 1751 | "@next/swc-win32-arm64-msvc": 13.3.0 1752 | "@next/swc-win32-ia32-msvc": 13.3.0 1753 | "@next/swc-win32-x64-msvc": 13.3.0 1754 | "@swc/helpers": 0.4.14 1755 | busboy: 1.6.0 1756 | caniuse-lite: ^1.0.30001406 1757 | postcss: 8.4.14 1758 | styled-jsx: 5.1.1 1759 | peerDependencies: 1760 | "@opentelemetry/api": ^1.1.0 1761 | fibers: ">= 3.1.0" 1762 | node-sass: ^6.0.0 || ^7.0.0 1763 | react: ^18.2.0 1764 | react-dom: ^18.2.0 1765 | sass: ^1.3.0 1766 | dependenciesMeta: 1767 | "@next/swc-darwin-arm64": 1768 | optional: true 1769 | "@next/swc-darwin-x64": 1770 | optional: true 1771 | "@next/swc-linux-arm64-gnu": 1772 | optional: true 1773 | "@next/swc-linux-arm64-musl": 1774 | optional: true 1775 | "@next/swc-linux-x64-gnu": 1776 | optional: true 1777 | "@next/swc-linux-x64-musl": 1778 | optional: true 1779 | "@next/swc-win32-arm64-msvc": 1780 | optional: true 1781 | "@next/swc-win32-ia32-msvc": 1782 | optional: true 1783 | "@next/swc-win32-x64-msvc": 1784 | optional: true 1785 | peerDependenciesMeta: 1786 | "@opentelemetry/api": 1787 | optional: true 1788 | fibers: 1789 | optional: true 1790 | node-sass: 1791 | optional: true 1792 | sass: 1793 | optional: true 1794 | bin: 1795 | next: dist/bin/next 1796 | checksum: 24e0e013e867a825ff7d1f49587e696147ea8f9ff42946121fe0dce25f9bcc9b1d5941425fa7cef3b8c0e6f1c3daa7f09f758ac5a8aa15aa66c3b31a07465081 1797 | languageName: node 1798 | linkType: hard 1799 | 1800 | "node-gyp@npm:latest": 1801 | version: 9.3.1 1802 | resolution: "node-gyp@npm:9.3.1" 1803 | dependencies: 1804 | env-paths: ^2.2.0 1805 | glob: ^7.1.4 1806 | graceful-fs: ^4.2.6 1807 | make-fetch-happen: ^10.0.3 1808 | nopt: ^6.0.0 1809 | npmlog: ^6.0.0 1810 | rimraf: ^3.0.2 1811 | semver: ^7.3.5 1812 | tar: ^6.1.2 1813 | which: ^2.0.2 1814 | bin: 1815 | node-gyp: bin/node-gyp.js 1816 | checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 1817 | languageName: node 1818 | linkType: hard 1819 | 1820 | "node-mocks-http@npm:^1.12.2": 1821 | version: 1.12.2 1822 | resolution: "node-mocks-http@npm:1.12.2" 1823 | dependencies: 1824 | accepts: ^1.3.7 1825 | content-disposition: ^0.5.3 1826 | depd: ^1.1.0 1827 | fresh: ^0.5.2 1828 | merge-descriptors: ^1.0.1 1829 | methods: ^1.1.2 1830 | mime: ^1.3.4 1831 | parseurl: ^1.3.3 1832 | range-parser: ^1.2.0 1833 | type-is: ^1.6.18 1834 | checksum: 39e50b7146bd37fd56a0588ee3df46fd310f76395d52e9b8889545910aca6cc8e8a41de3cdd3e103903d4bbfc556e67624fcbe934c0bd3b0cca6ee1358a0f440 1835 | languageName: node 1836 | linkType: hard 1837 | 1838 | "nopt@npm:^6.0.0": 1839 | version: 6.0.0 1840 | resolution: "nopt@npm:6.0.0" 1841 | dependencies: 1842 | abbrev: ^1.0.0 1843 | bin: 1844 | nopt: bin/nopt.js 1845 | checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac 1846 | languageName: node 1847 | linkType: hard 1848 | 1849 | "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": 1850 | version: 3.0.0 1851 | resolution: "normalize-path@npm:3.0.0" 1852 | checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 1853 | languageName: node 1854 | linkType: hard 1855 | 1856 | "npmlog@npm:^6.0.0": 1857 | version: 6.0.2 1858 | resolution: "npmlog@npm:6.0.2" 1859 | dependencies: 1860 | are-we-there-yet: ^3.0.0 1861 | console-control-strings: ^1.1.0 1862 | gauge: ^4.0.3 1863 | set-blocking: ^2.0.0 1864 | checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a 1865 | languageName: node 1866 | linkType: hard 1867 | 1868 | "object-assign@npm:^4": 1869 | version: 4.1.1 1870 | resolution: "object-assign@npm:4.1.1" 1871 | checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f 1872 | languageName: node 1873 | linkType: hard 1874 | 1875 | "object-inspect@npm:^1.9.0": 1876 | version: 1.12.3 1877 | resolution: "object-inspect@npm:1.12.3" 1878 | checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db 1879 | languageName: node 1880 | linkType: hard 1881 | 1882 | "oblivious-set@npm:1.0.0": 1883 | version: 1.0.0 1884 | resolution: "oblivious-set@npm:1.0.0" 1885 | checksum: f31740ea9c3a8242ad2324e4ebb9a35359fbc2e6e7131731a0fc1c8b7b1238eb07e4c8c631a38535243a7b8e3042b7e89f7dc2a95d2989afd6f80bd5793b0aab 1886 | languageName: node 1887 | linkType: hard 1888 | 1889 | "once@npm:^1.3.0": 1890 | version: 1.4.0 1891 | resolution: "once@npm:1.4.0" 1892 | dependencies: 1893 | wrappy: 1 1894 | checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 1895 | languageName: node 1896 | linkType: hard 1897 | 1898 | "p-limit@npm:^4.0.0": 1899 | version: 4.0.0 1900 | resolution: "p-limit@npm:4.0.0" 1901 | dependencies: 1902 | yocto-queue: ^1.0.0 1903 | checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b 1904 | languageName: node 1905 | linkType: hard 1906 | 1907 | "p-map@npm:^4.0.0": 1908 | version: 4.0.0 1909 | resolution: "p-map@npm:4.0.0" 1910 | dependencies: 1911 | aggregate-error: ^3.0.0 1912 | checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c 1913 | languageName: node 1914 | linkType: hard 1915 | 1916 | "parseurl@npm:^1.3.3": 1917 | version: 1.3.3 1918 | resolution: "parseurl@npm:1.3.3" 1919 | checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 1920 | languageName: node 1921 | linkType: hard 1922 | 1923 | "path-is-absolute@npm:^1.0.0": 1924 | version: 1.0.1 1925 | resolution: "path-is-absolute@npm:1.0.1" 1926 | checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 1927 | languageName: node 1928 | linkType: hard 1929 | 1930 | "path-parse@npm:^1.0.7": 1931 | version: 1.0.7 1932 | resolution: "path-parse@npm:1.0.7" 1933 | checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a 1934 | languageName: node 1935 | linkType: hard 1936 | 1937 | "path-scurry@npm:^1.6.4": 1938 | version: 1.6.4 1939 | resolution: "path-scurry@npm:1.6.4" 1940 | dependencies: 1941 | lru-cache: ^9.0.0 1942 | minipass: ^5.0.0 1943 | checksum: bd5262b51dc35b0d6f0b1d4fa4445789839982bd649904f18fe43717ecc3021d2313a80768b56cd0428f5ca50d740a6c609e747cd6a053efaa802e07eb5b7b18 1944 | languageName: node 1945 | linkType: hard 1946 | 1947 | "pathe@npm:^1.1.0": 1948 | version: 1.1.0 1949 | resolution: "pathe@npm:1.1.0" 1950 | checksum: 6b9be9968ea08a90c0824934799707a1c6a1ad22ac1f22080f377e3f75856d5e53a331b01d327329bfce538a14590587cfb250e8e7947f64408797c84c252056 1951 | languageName: node 1952 | linkType: hard 1953 | 1954 | "pathval@npm:^1.1.1": 1955 | version: 1.1.1 1956 | resolution: "pathval@npm:1.1.1" 1957 | checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 1958 | languageName: node 1959 | linkType: hard 1960 | 1961 | "picocolors@npm:^1.0.0": 1962 | version: 1.0.0 1963 | resolution: "picocolors@npm:1.0.0" 1964 | checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 1965 | languageName: node 1966 | linkType: hard 1967 | 1968 | "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1": 1969 | version: 2.3.1 1970 | resolution: "picomatch@npm:2.3.1" 1971 | checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf 1972 | languageName: node 1973 | linkType: hard 1974 | 1975 | "pkg-types@npm:^1.0.2": 1976 | version: 1.0.2 1977 | resolution: "pkg-types@npm:1.0.2" 1978 | dependencies: 1979 | jsonc-parser: ^3.2.0 1980 | mlly: ^1.1.1 1981 | pathe: ^1.1.0 1982 | checksum: 2d0a70c1721c2ebbe075b912531a4f43136e6658fdcc59dc76c39966201ab5ddf265868d1211943183406d4b70d373c17e3b176487bc2020ea737d030b0fd080 1983 | languageName: node 1984 | linkType: hard 1985 | 1986 | "postcss@npm:8.4.14": 1987 | version: 8.4.14 1988 | resolution: "postcss@npm:8.4.14" 1989 | dependencies: 1990 | nanoid: ^3.3.4 1991 | picocolors: ^1.0.0 1992 | source-map-js: ^1.0.2 1993 | checksum: fe58766ff32e4becf65a7d57678995cfd239df6deed2fe0557f038b47c94e4132e7e5f68b5aa820c13adfec32e523b693efaeb65798efb995ce49ccd83953816 1994 | languageName: node 1995 | linkType: hard 1996 | 1997 | "postcss@npm:^8.4.21": 1998 | version: 8.4.21 1999 | resolution: "postcss@npm:8.4.21" 2000 | dependencies: 2001 | nanoid: ^3.3.4 2002 | picocolors: ^1.0.0 2003 | source-map-js: ^1.0.2 2004 | checksum: e39ac60ccd1542d4f9d93d894048aac0d686b3bb38e927d8386005718e6793dbbb46930f0a523fe382f1bbd843c6d980aaea791252bf5e176180e5a4336d9679 2005 | languageName: node 2006 | linkType: hard 2007 | 2008 | "pretty-format@npm:^27.5.1": 2009 | version: 27.5.1 2010 | resolution: "pretty-format@npm:27.5.1" 2011 | dependencies: 2012 | ansi-regex: ^5.0.1 2013 | ansi-styles: ^5.0.0 2014 | react-is: ^17.0.1 2015 | checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 2016 | languageName: node 2017 | linkType: hard 2018 | 2019 | "promise-inflight@npm:^1.0.1": 2020 | version: 1.0.1 2021 | resolution: "promise-inflight@npm:1.0.1" 2022 | checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 2023 | languageName: node 2024 | linkType: hard 2025 | 2026 | "promise-retry@npm:^2.0.1": 2027 | version: 2.0.1 2028 | resolution: "promise-retry@npm:2.0.1" 2029 | dependencies: 2030 | err-code: ^2.0.2 2031 | retry: ^0.12.0 2032 | checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 2033 | languageName: node 2034 | linkType: hard 2035 | 2036 | "qs@npm:^6.11.1": 2037 | version: 6.11.1 2038 | resolution: "qs@npm:6.11.1" 2039 | dependencies: 2040 | side-channel: ^1.0.4 2041 | checksum: 82ee78ef12a16f3372fae5b64f76f8aedecb000feea882bbff1af146c147f6eb66b08f9c3f34d7e076f28563586956318b9b2ca41141846cdd6d5ad6f241d52f 2042 | languageName: node 2043 | linkType: hard 2044 | 2045 | "range-parser@npm:^1.2.0": 2046 | version: 1.2.1 2047 | resolution: "range-parser@npm:1.2.1" 2048 | checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 2049 | languageName: node 2050 | linkType: hard 2051 | 2052 | "react-is@npm:^17.0.1": 2053 | version: 17.0.2 2054 | resolution: "react-is@npm:17.0.2" 2055 | checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 2056 | languageName: node 2057 | linkType: hard 2058 | 2059 | "react-query@npm:^3.39.3": 2060 | version: 3.39.3 2061 | resolution: "react-query@npm:3.39.3" 2062 | dependencies: 2063 | "@babel/runtime": ^7.5.5 2064 | broadcast-channel: ^3.4.1 2065 | match-sorter: ^6.0.2 2066 | peerDependencies: 2067 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 2068 | peerDependenciesMeta: 2069 | react-dom: 2070 | optional: true 2071 | react-native: 2072 | optional: true 2073 | checksum: d2de6a0992dbf039ff2de564de1ae6361f8ac7310159dae42ec16f833b79c05caedced187235c42373ac331cc5f2fe9e2b31b14ae75a815e86d86e30ca9887ad 2074 | languageName: node 2075 | linkType: hard 2076 | 2077 | "readable-stream@npm:^3.6.0": 2078 | version: 3.6.2 2079 | resolution: "readable-stream@npm:3.6.2" 2080 | dependencies: 2081 | inherits: ^2.0.3 2082 | string_decoder: ^1.1.1 2083 | util-deprecate: ^1.0.1 2084 | checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d 2085 | languageName: node 2086 | linkType: hard 2087 | 2088 | "readdirp@npm:~3.6.0": 2089 | version: 3.6.0 2090 | resolution: "readdirp@npm:3.6.0" 2091 | dependencies: 2092 | picomatch: ^2.2.1 2093 | checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 2094 | languageName: node 2095 | linkType: hard 2096 | 2097 | "regenerator-runtime@npm:^0.13.11": 2098 | version: 0.13.11 2099 | resolution: "regenerator-runtime@npm:0.13.11" 2100 | checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 2101 | languageName: node 2102 | linkType: hard 2103 | 2104 | "remove-accents@npm:0.4.2": 2105 | version: 0.4.2 2106 | resolution: "remove-accents@npm:0.4.2" 2107 | checksum: 84a6988555dea24115e2d1954db99509588d43fe55a1590f0b5894802776f7b488b3151c37ceb9e4f4b646f26b80b7325dcea2fae58bc3865df146e1fa606711 2108 | languageName: node 2109 | linkType: hard 2110 | 2111 | "resolve@npm:^1.22.1": 2112 | version: 1.22.2 2113 | resolution: "resolve@npm:1.22.2" 2114 | dependencies: 2115 | is-core-module: ^2.11.0 2116 | path-parse: ^1.0.7 2117 | supports-preserve-symlinks-flag: ^1.0.0 2118 | bin: 2119 | resolve: bin/resolve 2120 | checksum: 7e5df75796ebd429445d102d5824482ee7e567f0070b2b45897b29bb4f613dcbc262e0257b8aeedb3089330ccaea0d6a0464df1a77b2992cf331dcda0f4cb549 2121 | languageName: node 2122 | linkType: hard 2123 | 2124 | "resolve@patch:resolve@^1.22.1#~builtin": 2125 | version: 1.22.2 2126 | resolution: "resolve@patch:resolve@npm%3A1.22.2#~builtin::version=1.22.2&hash=c3c19d" 2127 | dependencies: 2128 | is-core-module: ^2.11.0 2129 | path-parse: ^1.0.7 2130 | supports-preserve-symlinks-flag: ^1.0.0 2131 | bin: 2132 | resolve: bin/resolve 2133 | checksum: 66cc788f13b8398de18eb4abb3aed90435c84bb8935953feafcf7231ba4cd191b2c10b4a87b1e9681afc34fb138c705f91f7330ff90bfa36f457e5584076a2b8 2134 | languageName: node 2135 | linkType: hard 2136 | 2137 | "retry@npm:^0.12.0": 2138 | version: 0.12.0 2139 | resolution: "retry@npm:0.12.0" 2140 | checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c 2141 | languageName: node 2142 | linkType: hard 2143 | 2144 | "rimraf@npm:3.0.2, rimraf@npm:^3.0.2": 2145 | version: 3.0.2 2146 | resolution: "rimraf@npm:3.0.2" 2147 | dependencies: 2148 | glob: ^7.1.3 2149 | bin: 2150 | rimraf: bin.js 2151 | checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 2152 | languageName: node 2153 | linkType: hard 2154 | 2155 | "rimraf@npm:^5.0.0": 2156 | version: 5.0.0 2157 | resolution: "rimraf@npm:5.0.0" 2158 | dependencies: 2159 | glob: ^10.0.0 2160 | bin: 2161 | rimraf: dist/cjs/src/bin.js 2162 | checksum: 60c5a7f152014d4f6bbf23f48e6badd145960a9be1115b719a07ba688c760b1bb8270abd6650bbd184ae2011843d8e9c775409652c89ff97550418aa5d581b27 2163 | languageName: node 2164 | linkType: hard 2165 | 2166 | "rollup@npm:^3.18.0": 2167 | version: 3.20.2 2168 | resolution: "rollup@npm:3.20.2" 2169 | dependencies: 2170 | fsevents: ~2.3.2 2171 | dependenciesMeta: 2172 | fsevents: 2173 | optional: true 2174 | bin: 2175 | rollup: dist/bin/rollup 2176 | checksum: 34b0932839b7c2a5d1742fb21ce95a47e0b49a0849f4abee2dccf25833187aa7babb898ca90d4fc761cffa4102b9ed0ac6ad7f6f6b96c8b8e2d67305abc5da65 2177 | languageName: node 2178 | linkType: hard 2179 | 2180 | "safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0": 2181 | version: 5.2.1 2182 | resolution: "safe-buffer@npm:5.2.1" 2183 | checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 2184 | languageName: node 2185 | linkType: hard 2186 | 2187 | "safer-buffer@npm:>= 2.1.2 < 3.0.0": 2188 | version: 2.1.2 2189 | resolution: "safer-buffer@npm:2.1.2" 2190 | checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 2191 | languageName: node 2192 | linkType: hard 2193 | 2194 | "semver@npm:^7.3.2": 2195 | version: 7.4.0 2196 | resolution: "semver@npm:7.4.0" 2197 | dependencies: 2198 | lru-cache: ^6.0.0 2199 | bin: 2200 | semver: bin/semver.js 2201 | checksum: debf7f4d6fa36fdc5ef82bd7fc3603b6412165c8a3963a30be0c45a587be1a49e7681e80aa109da1875765741af24edc6e021cee1ba16ae96f649d06c5df296d 2202 | languageName: node 2203 | linkType: hard 2204 | 2205 | "semver@npm:^7.3.5": 2206 | version: 7.3.8 2207 | resolution: "semver@npm:7.3.8" 2208 | dependencies: 2209 | lru-cache: ^6.0.0 2210 | bin: 2211 | semver: bin/semver.js 2212 | checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 2213 | languageName: node 2214 | linkType: hard 2215 | 2216 | "set-blocking@npm:^2.0.0": 2217 | version: 2.0.0 2218 | resolution: "set-blocking@npm:2.0.0" 2219 | checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 2220 | languageName: node 2221 | linkType: hard 2222 | 2223 | "side-channel@npm:^1.0.4": 2224 | version: 1.0.4 2225 | resolution: "side-channel@npm:1.0.4" 2226 | dependencies: 2227 | call-bind: ^1.0.0 2228 | get-intrinsic: ^1.0.2 2229 | object-inspect: ^1.9.0 2230 | checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 2231 | languageName: node 2232 | linkType: hard 2233 | 2234 | "siginfo@npm:^2.0.0": 2235 | version: 2.0.0 2236 | resolution: "siginfo@npm:2.0.0" 2237 | checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 2238 | languageName: node 2239 | linkType: hard 2240 | 2241 | "signal-exit@npm:^3.0.7": 2242 | version: 3.0.7 2243 | resolution: "signal-exit@npm:3.0.7" 2244 | checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 2245 | languageName: node 2246 | linkType: hard 2247 | 2248 | "smart-buffer@npm:^4.2.0": 2249 | version: 4.2.0 2250 | resolution: "smart-buffer@npm:4.2.0" 2251 | checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b 2252 | languageName: node 2253 | linkType: hard 2254 | 2255 | "socks-proxy-agent@npm:^7.0.0": 2256 | version: 7.0.0 2257 | resolution: "socks-proxy-agent@npm:7.0.0" 2258 | dependencies: 2259 | agent-base: ^6.0.2 2260 | debug: ^4.3.3 2261 | socks: ^2.6.2 2262 | checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 2263 | languageName: node 2264 | linkType: hard 2265 | 2266 | "socks@npm:^2.6.2": 2267 | version: 2.7.1 2268 | resolution: "socks@npm:2.7.1" 2269 | dependencies: 2270 | ip: ^2.0.0 2271 | smart-buffer: ^4.2.0 2272 | checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 2273 | languageName: node 2274 | linkType: hard 2275 | 2276 | "source-map-js@npm:^1.0.2": 2277 | version: 1.0.2 2278 | resolution: "source-map-js@npm:1.0.2" 2279 | checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c 2280 | languageName: node 2281 | linkType: hard 2282 | 2283 | "source-map@npm:^0.6.1": 2284 | version: 0.6.1 2285 | resolution: "source-map@npm:0.6.1" 2286 | checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 2287 | languageName: node 2288 | linkType: hard 2289 | 2290 | "ssri@npm:^9.0.0": 2291 | version: 9.0.1 2292 | resolution: "ssri@npm:9.0.1" 2293 | dependencies: 2294 | minipass: ^3.1.1 2295 | checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb 2296 | languageName: node 2297 | linkType: hard 2298 | 2299 | "stackback@npm:0.0.2": 2300 | version: 0.0.2 2301 | resolution: "stackback@npm:0.0.2" 2302 | checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 2303 | languageName: node 2304 | linkType: hard 2305 | 2306 | "std-env@npm:^3.3.2": 2307 | version: 3.3.2 2308 | resolution: "std-env@npm:3.3.2" 2309 | checksum: c02256bb041ba1870d23f8360bc7e47a9cf1fabcd02c8b7c4246d48f2c6bb47b4f45c70964348844e6d36521df84c4a9d09d468654b51e0eb5c600e3392b4570 2310 | languageName: node 2311 | linkType: hard 2312 | 2313 | "streamsearch@npm:^1.1.0": 2314 | version: 1.1.0 2315 | resolution: "streamsearch@npm:1.1.0" 2316 | checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942 2317 | languageName: node 2318 | linkType: hard 2319 | 2320 | "string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.2.3": 2321 | version: 4.2.3 2322 | resolution: "string-width@npm:4.2.3" 2323 | dependencies: 2324 | emoji-regex: ^8.0.0 2325 | is-fullwidth-code-point: ^3.0.0 2326 | strip-ansi: ^6.0.1 2327 | checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb 2328 | languageName: node 2329 | linkType: hard 2330 | 2331 | "string_decoder@npm:^1.1.1": 2332 | version: 1.3.0 2333 | resolution: "string_decoder@npm:1.3.0" 2334 | dependencies: 2335 | safe-buffer: ~5.2.0 2336 | checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 2337 | languageName: node 2338 | linkType: hard 2339 | 2340 | "strip-ansi@npm:^6.0.1": 2341 | version: 6.0.1 2342 | resolution: "strip-ansi@npm:6.0.1" 2343 | dependencies: 2344 | ansi-regex: ^5.0.1 2345 | checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c 2346 | languageName: node 2347 | linkType: hard 2348 | 2349 | "strip-literal@npm:^1.0.1": 2350 | version: 1.0.1 2351 | resolution: "strip-literal@npm:1.0.1" 2352 | dependencies: 2353 | acorn: ^8.8.2 2354 | checksum: ab40496820f02220390d95cdd620a997168efb69d5bd7d180bc4ef83ca562a95447843d8c7c88b8284879a29cf4eedc89d8001d1e098c1a1e23d12a9c755dff4 2355 | languageName: node 2356 | linkType: hard 2357 | 2358 | "styled-jsx@npm:5.1.1": 2359 | version: 5.1.1 2360 | resolution: "styled-jsx@npm:5.1.1" 2361 | dependencies: 2362 | client-only: 0.0.1 2363 | peerDependencies: 2364 | react: ">= 16.8.0 || 17.x.x || ^18.0.0-0" 2365 | peerDependenciesMeta: 2366 | "@babel/core": 2367 | optional: true 2368 | babel-plugin-macros: 2369 | optional: true 2370 | checksum: 523a33b38603492547e861b98e29c873939b04e15fbe5ef16132c6f1e15958126647983c7d4675325038b428a5e91183d996e90141b18bdd1bbadf6e2c45b2fa 2371 | languageName: node 2372 | linkType: hard 2373 | 2374 | "supports-preserve-symlinks-flag@npm:^1.0.0": 2375 | version: 1.0.0 2376 | resolution: "supports-preserve-symlinks-flag@npm:1.0.0" 2377 | checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae 2378 | languageName: node 2379 | linkType: hard 2380 | 2381 | "swr@npm:^2.1.3": 2382 | version: 2.1.3 2383 | resolution: "swr@npm:2.1.3" 2384 | dependencies: 2385 | use-sync-external-store: ^1.2.0 2386 | peerDependencies: 2387 | react: ^16.11.0 || ^17.0.0 || ^18.0.0 2388 | checksum: e983f5bd58d1564b86ebdf6117173b16d6e9368df06a7d1ff7c2f73900f1f90c877887b88bbb4c4ee70ff1c06cc272a4d0ca9190bbf1a328e57d13e4168e14ef 2389 | languageName: node 2390 | linkType: hard 2391 | 2392 | "tar@npm:^6.1.11, tar@npm:^6.1.2": 2393 | version: 6.1.13 2394 | resolution: "tar@npm:6.1.13" 2395 | dependencies: 2396 | chownr: ^2.0.0 2397 | fs-minipass: ^2.0.0 2398 | minipass: ^4.0.0 2399 | minizlib: ^2.1.1 2400 | mkdirp: ^1.0.3 2401 | yallist: ^4.0.0 2402 | checksum: 8a278bed123aa9f53549b256a36b719e317c8b96fe86a63406f3c62887f78267cea9b22dc6f7007009738509800d4a4dccc444abd71d762287c90f35b002eb1c 2403 | languageName: node 2404 | linkType: hard 2405 | 2406 | "time-zone@npm:^1.0.0": 2407 | version: 1.0.0 2408 | resolution: "time-zone@npm:1.0.0" 2409 | checksum: e46f5a69b8c236dcd8e91e29d40d4e7a3495ed4f59888c3f84ce1d9678e20461421a6ba41233509d47dd94bc18f1a4377764838b21b584663f942b3426dcbce8 2410 | languageName: node 2411 | linkType: hard 2412 | 2413 | "tinybench@npm:^2.4.0": 2414 | version: 2.4.0 2415 | resolution: "tinybench@npm:2.4.0" 2416 | checksum: cfbe90f75755488653dde256019cc810f65e90f63fdd962e71e8b209b49598c5fc90c2227d2087eb807944895fafe7f12fe9ecae2b5e89db5adde66415e9b836 2417 | languageName: node 2418 | linkType: hard 2419 | 2420 | "tinypool@npm:^0.4.0": 2421 | version: 0.4.0 2422 | resolution: "tinypool@npm:0.4.0" 2423 | checksum: 8abcac9e784793499f1eeeace8290c026454b9d7338c74029ce6a821643bab8dcab7caeb4051e39006baf681d6a62d57c3319e9c0f6e2317a45ab0fdbd76ee26 2424 | languageName: node 2425 | linkType: hard 2426 | 2427 | "tinyspy@npm:^2.1.0": 2428 | version: 2.1.0 2429 | resolution: "tinyspy@npm:2.1.0" 2430 | checksum: cb83c1f74a79dd5934018bad94f60a304a29d98a2d909ea45fc367f7b80b21b0a7d8135a2ce588deb2b3ba56c7c607258b2a03e6001d89e4d564f9a95cc6a81f 2431 | languageName: node 2432 | linkType: hard 2433 | 2434 | "to-regex-range@npm:^5.0.1": 2435 | version: 5.0.1 2436 | resolution: "to-regex-range@npm:5.0.1" 2437 | dependencies: 2438 | is-number: ^7.0.0 2439 | checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed 2440 | languageName: node 2441 | linkType: hard 2442 | 2443 | "ts-node@npm:^10.9.1": 2444 | version: 10.9.1 2445 | resolution: "ts-node@npm:10.9.1" 2446 | dependencies: 2447 | "@cspotcode/source-map-support": ^0.8.0 2448 | "@tsconfig/node10": ^1.0.7 2449 | "@tsconfig/node12": ^1.0.7 2450 | "@tsconfig/node14": ^1.0.0 2451 | "@tsconfig/node16": ^1.0.2 2452 | acorn: ^8.4.1 2453 | acorn-walk: ^8.1.1 2454 | arg: ^4.1.0 2455 | create-require: ^1.1.0 2456 | diff: ^4.0.1 2457 | make-error: ^1.1.1 2458 | v8-compile-cache-lib: ^3.0.1 2459 | yn: 3.1.1 2460 | peerDependencies: 2461 | "@swc/core": ">=1.2.50" 2462 | "@swc/wasm": ">=1.2.50" 2463 | "@types/node": "*" 2464 | typescript: ">=2.7" 2465 | peerDependenciesMeta: 2466 | "@swc/core": 2467 | optional: true 2468 | "@swc/wasm": 2469 | optional: true 2470 | bin: 2471 | ts-node: dist/bin.js 2472 | ts-node-cwd: dist/bin-cwd.js 2473 | ts-node-esm: dist/bin-esm.js 2474 | ts-node-script: dist/bin-script.js 2475 | ts-node-transpile-only: dist/bin-transpile.js 2476 | ts-script: dist/bin-script-deprecated.js 2477 | checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 2478 | languageName: node 2479 | linkType: hard 2480 | 2481 | "tslib@npm:^2.4.0": 2482 | version: 2.5.0 2483 | resolution: "tslib@npm:2.5.0" 2484 | checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 2485 | languageName: node 2486 | linkType: hard 2487 | 2488 | "type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": 2489 | version: 4.0.8 2490 | resolution: "type-detect@npm:4.0.8" 2491 | checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 2492 | languageName: node 2493 | linkType: hard 2494 | 2495 | "type-is@npm:^1.6.18": 2496 | version: 1.6.18 2497 | resolution: "type-is@npm:1.6.18" 2498 | dependencies: 2499 | media-typer: 0.3.0 2500 | mime-types: ~2.1.24 2501 | checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 2502 | languageName: node 2503 | linkType: hard 2504 | 2505 | "typescript@npm:^5.0.4": 2506 | version: 5.0.4 2507 | resolution: "typescript@npm:5.0.4" 2508 | bin: 2509 | tsc: bin/tsc 2510 | tsserver: bin/tsserver 2511 | checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 2512 | languageName: node 2513 | linkType: hard 2514 | 2515 | "typescript@patch:typescript@^5.0.4#~builtin": 2516 | version: 5.0.4 2517 | resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=1f5320" 2518 | bin: 2519 | tsc: bin/tsc 2520 | tsserver: bin/tsserver 2521 | checksum: 6a1fe9a77bb9c5176ead919cc4a1499ee63e46b4e05bf667079f11bf3a8f7887f135aa72460a4c3b016e6e6bb65a822cb8689a6d86cbfe92d22cc9f501f09213 2522 | languageName: node 2523 | linkType: hard 2524 | 2525 | "ufo@npm:^1.1.1": 2526 | version: 1.1.1 2527 | resolution: "ufo@npm:1.1.1" 2528 | checksum: 6bd210ed93d8c0dedd76c456b1d1dfb0e3b08c2216ee6080e61f0f545de0bac24b3d3a5530cd6a403810855f8d8fc3922583965296142e04cfc287442635e6c7 2529 | languageName: node 2530 | linkType: hard 2531 | 2532 | "unique-filename@npm:^2.0.0": 2533 | version: 2.0.1 2534 | resolution: "unique-filename@npm:2.0.1" 2535 | dependencies: 2536 | unique-slug: ^3.0.0 2537 | checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f 2538 | languageName: node 2539 | linkType: hard 2540 | 2541 | "unique-slug@npm:^3.0.0": 2542 | version: 3.0.0 2543 | resolution: "unique-slug@npm:3.0.0" 2544 | dependencies: 2545 | imurmurhash: ^0.1.4 2546 | checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c 2547 | languageName: node 2548 | linkType: hard 2549 | 2550 | "universalify@npm:^2.0.0": 2551 | version: 2.0.0 2552 | resolution: "universalify@npm:2.0.0" 2553 | checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 2554 | languageName: node 2555 | linkType: hard 2556 | 2557 | "unload@npm:2.2.0": 2558 | version: 2.2.0 2559 | resolution: "unload@npm:2.2.0" 2560 | dependencies: 2561 | "@babel/runtime": ^7.6.2 2562 | detect-node: ^2.0.4 2563 | checksum: 88ba950c5ff83ab4f9bbd8f63bbf19ba09687ed3c434efd43b7338cc595bc574df8f9b155ee6eee7a435de3d3a4a226726988428977a68ba4907045f1fac5d41 2564 | languageName: node 2565 | linkType: hard 2566 | 2567 | "use-sync-external-store@npm:^1.2.0": 2568 | version: 1.2.0 2569 | resolution: "use-sync-external-store@npm:1.2.0" 2570 | peerDependencies: 2571 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 2572 | checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a 2573 | languageName: node 2574 | linkType: hard 2575 | 2576 | "util-deprecate@npm:^1.0.1": 2577 | version: 1.0.2 2578 | resolution: "util-deprecate@npm:1.0.2" 2579 | checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 2580 | languageName: node 2581 | linkType: hard 2582 | 2583 | "v8-compile-cache-lib@npm:^3.0.1": 2584 | version: 3.0.1 2585 | resolution: "v8-compile-cache-lib@npm:3.0.1" 2586 | checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 2587 | languageName: node 2588 | linkType: hard 2589 | 2590 | "vary@npm:^1": 2591 | version: 1.1.2 2592 | resolution: "vary@npm:1.1.2" 2593 | checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b 2594 | languageName: node 2595 | linkType: hard 2596 | 2597 | "vite-node@npm:0.30.1": 2598 | version: 0.30.1 2599 | resolution: "vite-node@npm:0.30.1" 2600 | dependencies: 2601 | cac: ^6.7.14 2602 | debug: ^4.3.4 2603 | mlly: ^1.2.0 2604 | pathe: ^1.1.0 2605 | picocolors: ^1.0.0 2606 | vite: ^3.0.0 || ^4.0.0 2607 | bin: 2608 | vite-node: vite-node.mjs 2609 | checksum: 2a17cca94aaf9ea689aeff0b5e900aab9e9385e97189446a7bc9c067f094556a5fcdff4a04367811694c3dcd2001bef7f5133ac66cdf4307d90742c30aff5fea 2610 | languageName: node 2611 | linkType: hard 2612 | 2613 | "vite@npm:^3.0.0 || ^4.0.0": 2614 | version: 4.2.1 2615 | resolution: "vite@npm:4.2.1" 2616 | dependencies: 2617 | esbuild: ^0.17.5 2618 | fsevents: ~2.3.2 2619 | postcss: ^8.4.21 2620 | resolve: ^1.22.1 2621 | rollup: ^3.18.0 2622 | peerDependencies: 2623 | "@types/node": ">= 14" 2624 | less: "*" 2625 | sass: "*" 2626 | stylus: "*" 2627 | sugarss: "*" 2628 | terser: ^5.4.0 2629 | dependenciesMeta: 2630 | fsevents: 2631 | optional: true 2632 | peerDependenciesMeta: 2633 | "@types/node": 2634 | optional: true 2635 | less: 2636 | optional: true 2637 | sass: 2638 | optional: true 2639 | stylus: 2640 | optional: true 2641 | sugarss: 2642 | optional: true 2643 | terser: 2644 | optional: true 2645 | bin: 2646 | vite: bin/vite.js 2647 | checksum: 70eb162ffc299017a3c310e3adc95e9661def6b17aafd1f8e5e02e516766060435590dbe3df1e4e95acc3583c728a76e91f07c546221d1e701f1b2b021293f45 2648 | languageName: node 2649 | linkType: hard 2650 | 2651 | "vitest@npm:^0.30.1": 2652 | version: 0.30.1 2653 | resolution: "vitest@npm:0.30.1" 2654 | dependencies: 2655 | "@types/chai": ^4.3.4 2656 | "@types/chai-subset": ^1.3.3 2657 | "@types/node": "*" 2658 | "@vitest/expect": 0.30.1 2659 | "@vitest/runner": 0.30.1 2660 | "@vitest/snapshot": 0.30.1 2661 | "@vitest/spy": 0.30.1 2662 | "@vitest/utils": 0.30.1 2663 | acorn: ^8.8.2 2664 | acorn-walk: ^8.2.0 2665 | cac: ^6.7.14 2666 | chai: ^4.3.7 2667 | concordance: ^5.0.4 2668 | debug: ^4.3.4 2669 | local-pkg: ^0.4.3 2670 | magic-string: ^0.30.0 2671 | pathe: ^1.1.0 2672 | picocolors: ^1.0.0 2673 | source-map: ^0.6.1 2674 | std-env: ^3.3.2 2675 | strip-literal: ^1.0.1 2676 | tinybench: ^2.4.0 2677 | tinypool: ^0.4.0 2678 | vite: ^3.0.0 || ^4.0.0 2679 | vite-node: 0.30.1 2680 | why-is-node-running: ^2.2.2 2681 | peerDependencies: 2682 | "@edge-runtime/vm": "*" 2683 | "@vitest/browser": "*" 2684 | "@vitest/ui": "*" 2685 | happy-dom: "*" 2686 | jsdom: "*" 2687 | playwright: "*" 2688 | safaridriver: "*" 2689 | webdriverio: "*" 2690 | peerDependenciesMeta: 2691 | "@edge-runtime/vm": 2692 | optional: true 2693 | "@vitest/browser": 2694 | optional: true 2695 | "@vitest/ui": 2696 | optional: true 2697 | happy-dom: 2698 | optional: true 2699 | jsdom: 2700 | optional: true 2701 | playwright: 2702 | optional: true 2703 | safaridriver: 2704 | optional: true 2705 | webdriverio: 2706 | optional: true 2707 | bin: 2708 | vitest: vitest.mjs 2709 | checksum: 68e33226dde914600270df9834bdc1f45fd225250051c046c9bc53ca51b8e0bf76dee29a5cf1a51a4c1524f00c414f81764bb463734bdcc9c3f483f2140ec516 2710 | languageName: node 2711 | linkType: hard 2712 | 2713 | "well-known-symbols@npm:^2.0.0": 2714 | version: 2.0.0 2715 | resolution: "well-known-symbols@npm:2.0.0" 2716 | checksum: 4f54bbc3012371cb4d228f436891b8e7536d34ac61a57541890257e96788608e096231e0121ac24d08ef2f908b3eb2dc0adba35023eaeb2a7df655da91415402 2717 | languageName: node 2718 | linkType: hard 2719 | 2720 | "which@npm:^2.0.2": 2721 | version: 2.0.2 2722 | resolution: "which@npm:2.0.2" 2723 | dependencies: 2724 | isexe: ^2.0.0 2725 | bin: 2726 | node-which: ./bin/node-which 2727 | checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 2728 | languageName: node 2729 | linkType: hard 2730 | 2731 | "why-is-node-running@npm:^2.2.2": 2732 | version: 2.2.2 2733 | resolution: "why-is-node-running@npm:2.2.2" 2734 | dependencies: 2735 | siginfo: ^2.0.0 2736 | stackback: 0.0.2 2737 | bin: 2738 | why-is-node-running: cli.js 2739 | checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a 2740 | languageName: node 2741 | linkType: hard 2742 | 2743 | "wide-align@npm:^1.1.5": 2744 | version: 1.1.5 2745 | resolution: "wide-align@npm:1.1.5" 2746 | dependencies: 2747 | string-width: ^1.0.2 || 2 || 3 || 4 2748 | checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 2749 | languageName: node 2750 | linkType: hard 2751 | 2752 | "wrappy@npm:1": 2753 | version: 1.0.2 2754 | resolution: "wrappy@npm:1.0.2" 2755 | checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 2756 | languageName: node 2757 | linkType: hard 2758 | 2759 | "yallist@npm:^4.0.0": 2760 | version: 4.0.0 2761 | resolution: "yallist@npm:4.0.0" 2762 | checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 2763 | languageName: node 2764 | linkType: hard 2765 | 2766 | "yn@npm:3.1.1": 2767 | version: 3.1.1 2768 | resolution: "yn@npm:3.1.1" 2769 | checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 2770 | languageName: node 2771 | linkType: hard 2772 | 2773 | "yocto-queue@npm:^1.0.0": 2774 | version: 1.0.0 2775 | resolution: "yocto-queue@npm:1.0.0" 2776 | checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 2777 | languageName: node 2778 | linkType: hard 2779 | 2780 | "zod@npm:^3.21.4": 2781 | version: 3.21.4 2782 | resolution: "zod@npm:3.21.4" 2783 | checksum: f185ba87342ff16f7a06686767c2b2a7af41110c7edf7c1974095d8db7a73792696bcb4a00853de0d2edeb34a5b2ea6a55871bc864227dace682a0a28de33e1f 2784 | languageName: node 2785 | linkType: hard 2786 | --------------------------------------------------------------------------------