├── .github
├── dependabot.yml
└── workflows
│ ├── build.yml
│ ├── publish.yml
│ └── test.yml
├── .gitignore
├── .gitpod.yml
├── LICENSE.md
├── README.md
├── package.json
├── pnpm-lock.yaml
├── prettier.config.cjs
├── src
├── main.ts
├── transport.spec.ts
├── transport.ts
└── types
│ └── transport.ts
├── tsconfig.json
├── tsup.config.mjs
└── vitest.config.ts
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "npm"
4 | directory: "/"
5 | schedule:
6 | interval: "weekly"
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Build Package
2 | on: [push, pull_request]
3 | jobs:
4 | build:
5 | runs-on: ubuntu-latest
6 | strategy:
7 | matrix:
8 | node: [18, 20]
9 | name: Build on Node ${{ matrix.node }}
10 | steps:
11 | - uses: actions/checkout@v4
12 | - uses: pnpm/action-setup@v2
13 | name: Install pnpm
14 | with:
15 | version: 8
16 | run_install: false
17 | - name: Setup node
18 | uses: actions/setup-node@v3
19 | with:
20 | node-version: ${{ matrix.node }}
21 | registry-url: 'https://registry.npmjs.org'
22 | cache: 'pnpm'
23 | - run: pnpm install
24 | - run: pnpm build
25 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: Publish Package to npmjs
2 | on:
3 | release:
4 | types: [published]
5 | jobs:
6 | build:
7 | runs-on: ubuntu-latest
8 | steps:
9 | - uses: actions/checkout@v4
10 | - uses: pnpm/action-setup@v2
11 | name: Install pnpm
12 | with:
13 | version: 8
14 | run_install: false
15 | - uses: actions/setup-node@v3
16 | with:
17 | node-version: '20.x'
18 | registry-url: 'https://registry.npmjs.org'
19 | cache: 'pnpm'
20 | - run: pnpm install
21 | - run: pnpm build
22 | - run: pnpm publish --no-git-checks
23 | env:
24 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
25 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: Test Package
2 | on: [push, pull_request]
3 | jobs:
4 | build:
5 | runs-on: ubuntu-latest
6 | strategy:
7 | matrix:
8 | node: [18, 20]
9 | name: Test on Node ${{ matrix.node }}
10 | steps:
11 | - uses: actions/checkout@v4
12 | - uses: pnpm/action-setup@v2
13 | name: Install pnpm
14 | with:
15 | version: 8
16 | run_install: false
17 | - name: Setup node
18 | uses: actions/setup-node@v3
19 | with:
20 | node-version: ${{ matrix.node }}
21 | registry-url: 'https://registry.npmjs.org'
22 | cache: 'pnpm'
23 | - run: pnpm install
24 | - run: pnpm test:coverage
25 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 | .pnpm-debug.log*
9 | .idea
10 |
11 | # Diagnostic reports (https://nodejs.org/api/report.html)
12 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
13 |
14 | # Runtime data
15 | pids
16 | *.pid
17 | *.seed
18 | *.pid.lock
19 |
20 | # Directory for instrumented libs generated by jscoverage/JSCover
21 | lib-cov
22 |
23 | # Coverage directory used by tools like istanbul
24 | coverage
25 | *.lcov
26 |
27 | # nyc test coverage
28 | .nyc_output
29 |
30 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
31 | .grunt
32 |
33 | # Bower dependency directory (https://bower.io/)
34 | bower_components
35 |
36 | # node-waf configuration
37 | .lock-wscript
38 |
39 | # Compiled binary addons (https://nodejs.org/api/addons.html)
40 | build/Release
41 |
42 | # Dependency directories
43 | node_modules/
44 | jspm_packages/
45 |
46 | # Snowpack dependency directory (https://snowpack.dev/)
47 | web_modules/
48 |
49 | # TypeScript cache
50 | *.tsbuildinfo
51 |
52 | # Optional npm cache directory
53 | .npm
54 |
55 | # Optional eslint cache
56 | .eslintcache
57 |
58 | # Optional stylelint cache
59 | .stylelintcache
60 |
61 | # Microbundle cache
62 | .rpt2_cache/
63 | .rts2_cache_cjs/
64 | .rts2_cache_es/
65 | .rts2_cache_umd/
66 |
67 | # Optional REPL history
68 | .node_repl_history
69 |
70 | # Output of 'npm pack'
71 | *.tgz
72 |
73 | # Yarn Integrity file
74 | .yarn-integrity
75 |
76 | # dotenv environment variable files
77 | .env
78 | .dev.vars
79 | .env.development.local
80 | .env.test.local
81 | .env.production.local
82 | .env.local
83 |
84 | # parcel-bundler cache (https://parceljs.org/)
85 | .cache
86 | .parcel-cache
87 |
88 | # Next.js build output
89 | .next
90 | out
91 |
92 | # Nuxt.js build / generate output
93 | .nuxt
94 | dist
95 |
96 | # Gatsby files
97 | .cache/
98 | # Comment in the public line in if your project uses Gatsby and not Next.js
99 | # https://nextjs.org/blog/next-9-1#public-directory-support
100 | # public
101 |
102 | # vuepress build output
103 | .vuepress/dist
104 |
105 | # vuepress v2.x temp and cache directory
106 | .temp
107 | .cache
108 |
109 | # Docusaurus cache and generated files
110 | .docusaurus
111 |
112 | # Serverless directories
113 | .serverless/
114 |
115 | # FuseBox cache
116 | .fusebox/
117 |
118 | # DynamoDB Local files
119 | .dynamodb/
120 |
121 | # TernJS port file
122 | .tern-port
123 |
124 | # Stores VSCode versions used for testing VSCode extensions
125 | .vscode-test
126 |
127 | # yarn v2
128 | .yarn/cache
129 | .yarn/unplugged
130 | .yarn/build-state.yml
131 | .yarn/install-state.gz
132 | .pnp.*
133 |
134 | # MacOS
135 | .DS_Store
--------------------------------------------------------------------------------
/.gitpod.yml:
--------------------------------------------------------------------------------
1 | tasks:
2 | - init: pnpm install
3 | command: pnpm run dev
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Lucas Smith
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Nodemailer Resend
2 |
3 | > Transport for sending email via the Resend SDK
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | ### Getting Started!
12 |
13 | #### Install the package
14 |
15 | ```bash
16 | npm install @documenso/nodemailer-resend
17 | ```
18 |
19 | ### Usage
20 |
21 | #### Create Nodemailer Transport
22 |
23 | ```typescript
24 | import { ResendTransport } from '@documenso/nodemailer-resend';
25 | import { createTransport } from 'nodemailer';
26 |
27 | const mailer = createTransport(
28 | createTransport(
29 | ResendTransport.makeTransport({
30 | apiKey: process.env.NEXT_PRIVATE_RESEND_API_KEY || '',
31 | }),
32 | ),
33 | );
34 | ```
35 |
36 | #### Send an Email
37 |
38 | ```typescript
39 | mailer.sendMail({
40 | from: 'timur@documenso.com',
41 | to: 'zeno@resend.com',
42 | subject: 'Hello from Resend!',
43 | html: 'Hello world!
',
44 | });
45 | ```
46 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@documenso/nodemailer-resend",
3 | "version": "4.0.0",
4 | "description": "Transport for sending email via the Resend SDK",
5 | "author": "Lucas Smith",
6 | "license": "MIT",
7 | "main": "dist/main.js",
8 | "module": "dist/main.mjs",
9 | "types": "dist/main.d.ts",
10 | "repository": {
11 | "type": "git",
12 | "url": "git+https://github.com/documenso/nodemailer-resend.git"
13 | },
14 | "scripts": {
15 | "dev": "tsup --watch",
16 | "build": "tsup",
17 | "typecheck": "tsc --noEmit",
18 | "test": "vitest",
19 | "test:coverage": "vitest --coverage",
20 | "format": "prettier --write .",
21 | "preversion": "npm run format && npm run test:coverage"
22 | },
23 | "dependencies": {
24 | "resend": "^4.0.0"
25 | },
26 | "peerDependencies": {
27 | "nodemailer": "^6.9.3"
28 | },
29 | "devDependencies": {
30 | "@trivago/prettier-plugin-sort-imports": "^4.3.0",
31 | "@types/node": "^20.11.24",
32 | "@types/nodemailer": "^6.4.14",
33 | "@vitest/coverage-v8": "^1.3.1",
34 | "prettier": "^3.2.5",
35 | "tsup": "^8.0.2",
36 | "typescript": "^5.3.3",
37 | "vitest": "^1.3.1"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | nodemailer:
9 | specifier: ^6.9.3
10 | version: 6.9.3
11 | resend:
12 | specifier: ^4.0.0
13 | version: 4.0.0(react-dom@18.2.0)(react@18.2.0)
14 |
15 | devDependencies:
16 | '@trivago/prettier-plugin-sort-imports':
17 | specifier: ^4.3.0
18 | version: 4.3.0(prettier@3.2.5)
19 | '@types/node':
20 | specifier: ^20.11.24
21 | version: 20.11.25
22 | '@types/nodemailer':
23 | specifier: ^6.4.14
24 | version: 6.4.14
25 | '@vitest/coverage-v8':
26 | specifier: ^1.3.1
27 | version: 1.3.1(vitest@1.3.1)
28 | prettier:
29 | specifier: ^3.2.5
30 | version: 3.2.5
31 | tsup:
32 | specifier: ^8.0.2
33 | version: 8.0.2(typescript@5.4.2)
34 | typescript:
35 | specifier: ^5.3.3
36 | version: 5.4.2
37 | vitest:
38 | specifier: ^1.3.1
39 | version: 1.3.1(@types/node@20.11.25)
40 |
41 | packages:
42 |
43 | /@ampproject/remapping@2.3.0:
44 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
45 | engines: {node: '>=6.0.0'}
46 | dependencies:
47 | '@jridgewell/gen-mapping': 0.3.5
48 | '@jridgewell/trace-mapping': 0.3.25
49 | dev: true
50 |
51 | /@babel/code-frame@7.23.5:
52 | resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
53 | engines: {node: '>=6.9.0'}
54 | dependencies:
55 | '@babel/highlight': 7.23.4
56 | chalk: 2.4.2
57 | dev: true
58 |
59 | /@babel/generator@7.17.7:
60 | resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==}
61 | engines: {node: '>=6.9.0'}
62 | dependencies:
63 | '@babel/types': 7.17.0
64 | jsesc: 2.5.2
65 | source-map: 0.5.7
66 | dev: true
67 |
68 | /@babel/generator@7.23.6:
69 | resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
70 | engines: {node: '>=6.9.0'}
71 | dependencies:
72 | '@babel/types': 7.24.0
73 | '@jridgewell/gen-mapping': 0.3.5
74 | '@jridgewell/trace-mapping': 0.3.25
75 | jsesc: 2.5.2
76 | dev: true
77 |
78 | /@babel/helper-environment-visitor@7.22.20:
79 | resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
80 | engines: {node: '>=6.9.0'}
81 | dev: true
82 |
83 | /@babel/helper-function-name@7.23.0:
84 | resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
85 | engines: {node: '>=6.9.0'}
86 | dependencies:
87 | '@babel/template': 7.24.0
88 | '@babel/types': 7.24.0
89 | dev: true
90 |
91 | /@babel/helper-hoist-variables@7.22.5:
92 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
93 | engines: {node: '>=6.9.0'}
94 | dependencies:
95 | '@babel/types': 7.24.0
96 | dev: true
97 |
98 | /@babel/helper-split-export-declaration@7.22.6:
99 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
100 | engines: {node: '>=6.9.0'}
101 | dependencies:
102 | '@babel/types': 7.24.0
103 | dev: true
104 |
105 | /@babel/helper-string-parser@7.23.4:
106 | resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
107 | engines: {node: '>=6.9.0'}
108 | dev: true
109 |
110 | /@babel/helper-validator-identifier@7.22.20:
111 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
112 | engines: {node: '>=6.9.0'}
113 | dev: true
114 |
115 | /@babel/highlight@7.23.4:
116 | resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
117 | engines: {node: '>=6.9.0'}
118 | dependencies:
119 | '@babel/helper-validator-identifier': 7.22.20
120 | chalk: 2.4.2
121 | js-tokens: 4.0.0
122 | dev: true
123 |
124 | /@babel/parser@7.24.0:
125 | resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==}
126 | engines: {node: '>=6.0.0'}
127 | hasBin: true
128 | dependencies:
129 | '@babel/types': 7.17.0
130 | dev: true
131 |
132 | /@babel/template@7.24.0:
133 | resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==}
134 | engines: {node: '>=6.9.0'}
135 | dependencies:
136 | '@babel/code-frame': 7.23.5
137 | '@babel/parser': 7.24.0
138 | '@babel/types': 7.24.0
139 | dev: true
140 |
141 | /@babel/traverse@7.23.2:
142 | resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
143 | engines: {node: '>=6.9.0'}
144 | dependencies:
145 | '@babel/code-frame': 7.23.5
146 | '@babel/generator': 7.23.6
147 | '@babel/helper-environment-visitor': 7.22.20
148 | '@babel/helper-function-name': 7.23.0
149 | '@babel/helper-hoist-variables': 7.22.5
150 | '@babel/helper-split-export-declaration': 7.22.6
151 | '@babel/parser': 7.24.0
152 | '@babel/types': 7.24.0
153 | debug: 4.3.4
154 | globals: 11.12.0
155 | transitivePeerDependencies:
156 | - supports-color
157 | dev: true
158 |
159 | /@babel/types@7.17.0:
160 | resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==}
161 | engines: {node: '>=6.9.0'}
162 | dependencies:
163 | '@babel/helper-validator-identifier': 7.22.20
164 | to-fast-properties: 2.0.0
165 | dev: true
166 |
167 | /@babel/types@7.24.0:
168 | resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
169 | engines: {node: '>=6.9.0'}
170 | dependencies:
171 | '@babel/helper-string-parser': 7.23.4
172 | '@babel/helper-validator-identifier': 7.22.20
173 | to-fast-properties: 2.0.0
174 | dev: true
175 |
176 | /@bcoe/v8-coverage@0.2.3:
177 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
178 | dev: true
179 |
180 | /@esbuild/aix-ppc64@0.19.12:
181 | resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
182 | engines: {node: '>=12'}
183 | cpu: [ppc64]
184 | os: [aix]
185 | requiresBuild: true
186 | dev: true
187 | optional: true
188 |
189 | /@esbuild/android-arm64@0.19.12:
190 | resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
191 | engines: {node: '>=12'}
192 | cpu: [arm64]
193 | os: [android]
194 | requiresBuild: true
195 | dev: true
196 | optional: true
197 |
198 | /@esbuild/android-arm@0.19.12:
199 | resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
200 | engines: {node: '>=12'}
201 | cpu: [arm]
202 | os: [android]
203 | requiresBuild: true
204 | dev: true
205 | optional: true
206 |
207 | /@esbuild/android-x64@0.19.12:
208 | resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
209 | engines: {node: '>=12'}
210 | cpu: [x64]
211 | os: [android]
212 | requiresBuild: true
213 | dev: true
214 | optional: true
215 |
216 | /@esbuild/darwin-arm64@0.19.12:
217 | resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
218 | engines: {node: '>=12'}
219 | cpu: [arm64]
220 | os: [darwin]
221 | requiresBuild: true
222 | dev: true
223 | optional: true
224 |
225 | /@esbuild/darwin-x64@0.19.12:
226 | resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
227 | engines: {node: '>=12'}
228 | cpu: [x64]
229 | os: [darwin]
230 | requiresBuild: true
231 | dev: true
232 | optional: true
233 |
234 | /@esbuild/freebsd-arm64@0.19.12:
235 | resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
236 | engines: {node: '>=12'}
237 | cpu: [arm64]
238 | os: [freebsd]
239 | requiresBuild: true
240 | dev: true
241 | optional: true
242 |
243 | /@esbuild/freebsd-x64@0.19.12:
244 | resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
245 | engines: {node: '>=12'}
246 | cpu: [x64]
247 | os: [freebsd]
248 | requiresBuild: true
249 | dev: true
250 | optional: true
251 |
252 | /@esbuild/linux-arm64@0.19.12:
253 | resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
254 | engines: {node: '>=12'}
255 | cpu: [arm64]
256 | os: [linux]
257 | requiresBuild: true
258 | dev: true
259 | optional: true
260 |
261 | /@esbuild/linux-arm@0.19.12:
262 | resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
263 | engines: {node: '>=12'}
264 | cpu: [arm]
265 | os: [linux]
266 | requiresBuild: true
267 | dev: true
268 | optional: true
269 |
270 | /@esbuild/linux-ia32@0.19.12:
271 | resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
272 | engines: {node: '>=12'}
273 | cpu: [ia32]
274 | os: [linux]
275 | requiresBuild: true
276 | dev: true
277 | optional: true
278 |
279 | /@esbuild/linux-loong64@0.19.12:
280 | resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
281 | engines: {node: '>=12'}
282 | cpu: [loong64]
283 | os: [linux]
284 | requiresBuild: true
285 | dev: true
286 | optional: true
287 |
288 | /@esbuild/linux-mips64el@0.19.12:
289 | resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
290 | engines: {node: '>=12'}
291 | cpu: [mips64el]
292 | os: [linux]
293 | requiresBuild: true
294 | dev: true
295 | optional: true
296 |
297 | /@esbuild/linux-ppc64@0.19.12:
298 | resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
299 | engines: {node: '>=12'}
300 | cpu: [ppc64]
301 | os: [linux]
302 | requiresBuild: true
303 | dev: true
304 | optional: true
305 |
306 | /@esbuild/linux-riscv64@0.19.12:
307 | resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
308 | engines: {node: '>=12'}
309 | cpu: [riscv64]
310 | os: [linux]
311 | requiresBuild: true
312 | dev: true
313 | optional: true
314 |
315 | /@esbuild/linux-s390x@0.19.12:
316 | resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
317 | engines: {node: '>=12'}
318 | cpu: [s390x]
319 | os: [linux]
320 | requiresBuild: true
321 | dev: true
322 | optional: true
323 |
324 | /@esbuild/linux-x64@0.19.12:
325 | resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
326 | engines: {node: '>=12'}
327 | cpu: [x64]
328 | os: [linux]
329 | requiresBuild: true
330 | dev: true
331 | optional: true
332 |
333 | /@esbuild/netbsd-x64@0.19.12:
334 | resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
335 | engines: {node: '>=12'}
336 | cpu: [x64]
337 | os: [netbsd]
338 | requiresBuild: true
339 | dev: true
340 | optional: true
341 |
342 | /@esbuild/openbsd-x64@0.19.12:
343 | resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
344 | engines: {node: '>=12'}
345 | cpu: [x64]
346 | os: [openbsd]
347 | requiresBuild: true
348 | dev: true
349 | optional: true
350 |
351 | /@esbuild/sunos-x64@0.19.12:
352 | resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
353 | engines: {node: '>=12'}
354 | cpu: [x64]
355 | os: [sunos]
356 | requiresBuild: true
357 | dev: true
358 | optional: true
359 |
360 | /@esbuild/win32-arm64@0.19.12:
361 | resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
362 | engines: {node: '>=12'}
363 | cpu: [arm64]
364 | os: [win32]
365 | requiresBuild: true
366 | dev: true
367 | optional: true
368 |
369 | /@esbuild/win32-ia32@0.19.12:
370 | resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
371 | engines: {node: '>=12'}
372 | cpu: [ia32]
373 | os: [win32]
374 | requiresBuild: true
375 | dev: true
376 | optional: true
377 |
378 | /@esbuild/win32-x64@0.19.12:
379 | resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
380 | engines: {node: '>=12'}
381 | cpu: [x64]
382 | os: [win32]
383 | requiresBuild: true
384 | dev: true
385 | optional: true
386 |
387 | /@isaacs/cliui@8.0.2:
388 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
389 | engines: {node: '>=12'}
390 | dependencies:
391 | string-width: 5.1.2
392 | string-width-cjs: /string-width@4.2.3
393 | strip-ansi: 7.1.0
394 | strip-ansi-cjs: /strip-ansi@6.0.1
395 | wrap-ansi: 8.1.0
396 | wrap-ansi-cjs: /wrap-ansi@7.0.0
397 |
398 | /@istanbuljs/schema@0.1.3:
399 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
400 | engines: {node: '>=8'}
401 | dev: true
402 |
403 | /@jest/schemas@29.6.3:
404 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
405 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
406 | dependencies:
407 | '@sinclair/typebox': 0.27.8
408 | dev: true
409 |
410 | /@jridgewell/gen-mapping@0.3.5:
411 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
412 | engines: {node: '>=6.0.0'}
413 | dependencies:
414 | '@jridgewell/set-array': 1.2.1
415 | '@jridgewell/sourcemap-codec': 1.4.15
416 | '@jridgewell/trace-mapping': 0.3.25
417 | dev: true
418 |
419 | /@jridgewell/resolve-uri@3.1.2:
420 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
421 | engines: {node: '>=6.0.0'}
422 | dev: true
423 |
424 | /@jridgewell/set-array@1.2.1:
425 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
426 | engines: {node: '>=6.0.0'}
427 | dev: true
428 |
429 | /@jridgewell/sourcemap-codec@1.4.15:
430 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
431 | dev: true
432 |
433 | /@jridgewell/trace-mapping@0.3.25:
434 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
435 | dependencies:
436 | '@jridgewell/resolve-uri': 3.1.2
437 | '@jridgewell/sourcemap-codec': 1.4.15
438 | dev: true
439 |
440 | /@nodelib/fs.scandir@2.1.5:
441 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
442 | engines: {node: '>= 8'}
443 | dependencies:
444 | '@nodelib/fs.stat': 2.0.5
445 | run-parallel: 1.2.0
446 | dev: true
447 |
448 | /@nodelib/fs.stat@2.0.5:
449 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
450 | engines: {node: '>= 8'}
451 | dev: true
452 |
453 | /@nodelib/fs.walk@1.2.8:
454 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
455 | engines: {node: '>= 8'}
456 | dependencies:
457 | '@nodelib/fs.scandir': 2.1.5
458 | fastq: 1.17.1
459 | dev: true
460 |
461 | /@one-ini/wasm@0.1.1:
462 | resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
463 | dev: false
464 |
465 | /@pkgjs/parseargs@0.11.0:
466 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
467 | engines: {node: '>=14'}
468 | requiresBuild: true
469 | optional: true
470 |
471 | /@react-email/render@0.0.17(react-dom@18.2.0)(react@18.2.0):
472 | resolution: {integrity: sha512-xBQ+/73+WsGuXKY7r1U73zMBNV28xdV0cp9cFjhNYipBReDHhV97IpA6v7Hl0dDtDzt+yS/72dY5vYXrF1v8NA==}
473 | engines: {node: '>=18.0.0'}
474 | peerDependencies:
475 | react: ^18.2.0
476 | react-dom: ^18.2.0
477 | dependencies:
478 | html-to-text: 9.0.5
479 | js-beautify: 1.15.1
480 | react: 18.2.0
481 | react-dom: 18.2.0(react@18.2.0)
482 | react-promise-suspense: 0.3.4
483 | dev: false
484 |
485 | /@rollup/rollup-android-arm-eabi@4.12.0:
486 | resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==}
487 | cpu: [arm]
488 | os: [android]
489 | requiresBuild: true
490 | dev: true
491 | optional: true
492 |
493 | /@rollup/rollup-android-arm64@4.12.0:
494 | resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==}
495 | cpu: [arm64]
496 | os: [android]
497 | requiresBuild: true
498 | dev: true
499 | optional: true
500 |
501 | /@rollup/rollup-darwin-arm64@4.12.0:
502 | resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==}
503 | cpu: [arm64]
504 | os: [darwin]
505 | requiresBuild: true
506 | dev: true
507 | optional: true
508 |
509 | /@rollup/rollup-darwin-x64@4.12.0:
510 | resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==}
511 | cpu: [x64]
512 | os: [darwin]
513 | requiresBuild: true
514 | dev: true
515 | optional: true
516 |
517 | /@rollup/rollup-linux-arm-gnueabihf@4.12.0:
518 | resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==}
519 | cpu: [arm]
520 | os: [linux]
521 | requiresBuild: true
522 | dev: true
523 | optional: true
524 |
525 | /@rollup/rollup-linux-arm64-gnu@4.12.0:
526 | resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==}
527 | cpu: [arm64]
528 | os: [linux]
529 | requiresBuild: true
530 | dev: true
531 | optional: true
532 |
533 | /@rollup/rollup-linux-arm64-musl@4.12.0:
534 | resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==}
535 | cpu: [arm64]
536 | os: [linux]
537 | requiresBuild: true
538 | dev: true
539 | optional: true
540 |
541 | /@rollup/rollup-linux-riscv64-gnu@4.12.0:
542 | resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==}
543 | cpu: [riscv64]
544 | os: [linux]
545 | requiresBuild: true
546 | dev: true
547 | optional: true
548 |
549 | /@rollup/rollup-linux-x64-gnu@4.12.0:
550 | resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==}
551 | cpu: [x64]
552 | os: [linux]
553 | requiresBuild: true
554 | dev: true
555 | optional: true
556 |
557 | /@rollup/rollup-linux-x64-musl@4.12.0:
558 | resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==}
559 | cpu: [x64]
560 | os: [linux]
561 | requiresBuild: true
562 | dev: true
563 | optional: true
564 |
565 | /@rollup/rollup-win32-arm64-msvc@4.12.0:
566 | resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==}
567 | cpu: [arm64]
568 | os: [win32]
569 | requiresBuild: true
570 | dev: true
571 | optional: true
572 |
573 | /@rollup/rollup-win32-ia32-msvc@4.12.0:
574 | resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==}
575 | cpu: [ia32]
576 | os: [win32]
577 | requiresBuild: true
578 | dev: true
579 | optional: true
580 |
581 | /@rollup/rollup-win32-x64-msvc@4.12.0:
582 | resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==}
583 | cpu: [x64]
584 | os: [win32]
585 | requiresBuild: true
586 | dev: true
587 | optional: true
588 |
589 | /@selderee/plugin-htmlparser2@0.11.0:
590 | resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==}
591 | dependencies:
592 | domhandler: 5.0.3
593 | selderee: 0.11.0
594 | dev: false
595 |
596 | /@sinclair/typebox@0.27.8:
597 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
598 | dev: true
599 |
600 | /@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.2.5):
601 | resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==}
602 | peerDependencies:
603 | '@vue/compiler-sfc': 3.x
604 | prettier: 2.x - 3.x
605 | peerDependenciesMeta:
606 | '@vue/compiler-sfc':
607 | optional: true
608 | dependencies:
609 | '@babel/generator': 7.17.7
610 | '@babel/parser': 7.24.0
611 | '@babel/traverse': 7.23.2
612 | '@babel/types': 7.17.0
613 | javascript-natural-sort: 0.7.1
614 | lodash: 4.17.21
615 | prettier: 3.2.5
616 | transitivePeerDependencies:
617 | - supports-color
618 | dev: true
619 |
620 | /@types/estree@1.0.5:
621 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
622 | dev: true
623 |
624 | /@types/istanbul-lib-coverage@2.0.6:
625 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
626 | dev: true
627 |
628 | /@types/node@20.11.25:
629 | resolution: {integrity: sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==}
630 | dependencies:
631 | undici-types: 5.26.5
632 | dev: true
633 |
634 | /@types/nodemailer@6.4.14:
635 | resolution: {integrity: sha512-fUWthHO9k9DSdPCSPRqcu6TWhYyxTBg382vlNIttSe9M7XfsT06y0f24KHXtbnijPGGRIcVvdKHTNikOI6qiHA==}
636 | dependencies:
637 | '@types/node': 20.11.25
638 | dev: true
639 |
640 | /@vitest/coverage-v8@1.3.1(vitest@1.3.1):
641 | resolution: {integrity: sha512-UuBnkSJUNE9rdHjDCPyJ4fYuMkoMtnghes1XohYa4At0MS3OQSAo97FrbwSLRshYsXThMZy1+ybD/byK5llyIg==}
642 | peerDependencies:
643 | vitest: 1.3.1
644 | dependencies:
645 | '@ampproject/remapping': 2.3.0
646 | '@bcoe/v8-coverage': 0.2.3
647 | debug: 4.3.4
648 | istanbul-lib-coverage: 3.2.2
649 | istanbul-lib-report: 3.0.1
650 | istanbul-lib-source-maps: 4.0.1
651 | istanbul-reports: 3.1.7
652 | magic-string: 0.30.8
653 | magicast: 0.3.3
654 | picocolors: 1.0.0
655 | std-env: 3.7.0
656 | test-exclude: 6.0.0
657 | v8-to-istanbul: 9.2.0
658 | vitest: 1.3.1(@types/node@20.11.25)
659 | transitivePeerDependencies:
660 | - supports-color
661 | dev: true
662 |
663 | /@vitest/expect@1.3.1:
664 | resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==}
665 | dependencies:
666 | '@vitest/spy': 1.3.1
667 | '@vitest/utils': 1.3.1
668 | chai: 4.4.1
669 | dev: true
670 |
671 | /@vitest/runner@1.3.1:
672 | resolution: {integrity: sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==}
673 | dependencies:
674 | '@vitest/utils': 1.3.1
675 | p-limit: 5.0.0
676 | pathe: 1.1.2
677 | dev: true
678 |
679 | /@vitest/snapshot@1.3.1:
680 | resolution: {integrity: sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==}
681 | dependencies:
682 | magic-string: 0.30.8
683 | pathe: 1.1.2
684 | pretty-format: 29.7.0
685 | dev: true
686 |
687 | /@vitest/spy@1.3.1:
688 | resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==}
689 | dependencies:
690 | tinyspy: 2.2.1
691 | dev: true
692 |
693 | /@vitest/utils@1.3.1:
694 | resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==}
695 | dependencies:
696 | diff-sequences: 29.6.3
697 | estree-walker: 3.0.3
698 | loupe: 2.3.7
699 | pretty-format: 29.7.0
700 | dev: true
701 |
702 | /abbrev@2.0.0:
703 | resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
704 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
705 | dev: false
706 |
707 | /acorn-walk@8.3.2:
708 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
709 | engines: {node: '>=0.4.0'}
710 | dev: true
711 |
712 | /acorn@8.11.3:
713 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
714 | engines: {node: '>=0.4.0'}
715 | hasBin: true
716 | dev: true
717 |
718 | /ansi-regex@5.0.1:
719 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
720 | engines: {node: '>=8'}
721 |
722 | /ansi-regex@6.0.1:
723 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
724 | engines: {node: '>=12'}
725 |
726 | /ansi-styles@3.2.1:
727 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
728 | engines: {node: '>=4'}
729 | dependencies:
730 | color-convert: 1.9.3
731 | dev: true
732 |
733 | /ansi-styles@4.3.0:
734 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
735 | engines: {node: '>=8'}
736 | dependencies:
737 | color-convert: 2.0.1
738 |
739 | /ansi-styles@5.2.0:
740 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
741 | engines: {node: '>=10'}
742 | dev: true
743 |
744 | /ansi-styles@6.2.1:
745 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
746 | engines: {node: '>=12'}
747 |
748 | /any-promise@1.3.0:
749 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
750 | dev: true
751 |
752 | /anymatch@3.1.3:
753 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
754 | engines: {node: '>= 8'}
755 | dependencies:
756 | normalize-path: 3.0.0
757 | picomatch: 2.3.1
758 | dev: true
759 |
760 | /array-union@2.1.0:
761 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
762 | engines: {node: '>=8'}
763 | dev: true
764 |
765 | /assertion-error@1.1.0:
766 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
767 | dev: true
768 |
769 | /balanced-match@1.0.2:
770 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
771 |
772 | /binary-extensions@2.2.0:
773 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
774 | engines: {node: '>=8'}
775 | dev: true
776 |
777 | /brace-expansion@1.1.11:
778 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
779 | dependencies:
780 | balanced-match: 1.0.2
781 | concat-map: 0.0.1
782 | dev: true
783 |
784 | /brace-expansion@2.0.1:
785 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
786 | dependencies:
787 | balanced-match: 1.0.2
788 |
789 | /braces@3.0.2:
790 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
791 | engines: {node: '>=8'}
792 | dependencies:
793 | fill-range: 7.0.1
794 | dev: true
795 |
796 | /bundle-require@4.0.2(esbuild@0.19.12):
797 | resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==}
798 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
799 | peerDependencies:
800 | esbuild: '>=0.17'
801 | dependencies:
802 | esbuild: 0.19.12
803 | load-tsconfig: 0.2.5
804 | dev: true
805 |
806 | /cac@6.7.14:
807 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
808 | engines: {node: '>=8'}
809 | dev: true
810 |
811 | /chai@4.4.1:
812 | resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
813 | engines: {node: '>=4'}
814 | dependencies:
815 | assertion-error: 1.1.0
816 | check-error: 1.0.3
817 | deep-eql: 4.1.3
818 | get-func-name: 2.0.2
819 | loupe: 2.3.7
820 | pathval: 1.1.1
821 | type-detect: 4.0.8
822 | dev: true
823 |
824 | /chalk@2.4.2:
825 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
826 | engines: {node: '>=4'}
827 | dependencies:
828 | ansi-styles: 3.2.1
829 | escape-string-regexp: 1.0.5
830 | supports-color: 5.5.0
831 | dev: true
832 |
833 | /check-error@1.0.3:
834 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
835 | dependencies:
836 | get-func-name: 2.0.2
837 | dev: true
838 |
839 | /chokidar@3.6.0:
840 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
841 | engines: {node: '>= 8.10.0'}
842 | dependencies:
843 | anymatch: 3.1.3
844 | braces: 3.0.2
845 | glob-parent: 5.1.2
846 | is-binary-path: 2.1.0
847 | is-glob: 4.0.3
848 | normalize-path: 3.0.0
849 | readdirp: 3.6.0
850 | optionalDependencies:
851 | fsevents: 2.3.3
852 | dev: true
853 |
854 | /color-convert@1.9.3:
855 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
856 | dependencies:
857 | color-name: 1.1.3
858 | dev: true
859 |
860 | /color-convert@2.0.1:
861 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
862 | engines: {node: '>=7.0.0'}
863 | dependencies:
864 | color-name: 1.1.4
865 |
866 | /color-name@1.1.3:
867 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
868 | dev: true
869 |
870 | /color-name@1.1.4:
871 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
872 |
873 | /commander@10.0.1:
874 | resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
875 | engines: {node: '>=14'}
876 | dev: false
877 |
878 | /commander@4.1.1:
879 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
880 | engines: {node: '>= 6'}
881 | dev: true
882 |
883 | /concat-map@0.0.1:
884 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
885 | dev: true
886 |
887 | /config-chain@1.1.13:
888 | resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
889 | dependencies:
890 | ini: 1.3.8
891 | proto-list: 1.2.4
892 | dev: false
893 |
894 | /convert-source-map@2.0.0:
895 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
896 | dev: true
897 |
898 | /cross-spawn@7.0.3:
899 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
900 | engines: {node: '>= 8'}
901 | dependencies:
902 | path-key: 3.1.1
903 | shebang-command: 2.0.0
904 | which: 2.0.2
905 |
906 | /debug@4.3.4:
907 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
908 | engines: {node: '>=6.0'}
909 | peerDependencies:
910 | supports-color: '*'
911 | peerDependenciesMeta:
912 | supports-color:
913 | optional: true
914 | dependencies:
915 | ms: 2.1.2
916 | dev: true
917 |
918 | /deep-eql@4.1.3:
919 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
920 | engines: {node: '>=6'}
921 | dependencies:
922 | type-detect: 4.0.8
923 | dev: true
924 |
925 | /deepmerge@4.3.1:
926 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
927 | engines: {node: '>=0.10.0'}
928 | dev: false
929 |
930 | /diff-sequences@29.6.3:
931 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
932 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
933 | dev: true
934 |
935 | /dir-glob@3.0.1:
936 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
937 | engines: {node: '>=8'}
938 | dependencies:
939 | path-type: 4.0.0
940 | dev: true
941 |
942 | /dom-serializer@2.0.0:
943 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
944 | dependencies:
945 | domelementtype: 2.3.0
946 | domhandler: 5.0.3
947 | entities: 4.5.0
948 | dev: false
949 |
950 | /domelementtype@2.3.0:
951 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
952 | dev: false
953 |
954 | /domhandler@5.0.3:
955 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
956 | engines: {node: '>= 4'}
957 | dependencies:
958 | domelementtype: 2.3.0
959 | dev: false
960 |
961 | /domutils@3.1.0:
962 | resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
963 | dependencies:
964 | dom-serializer: 2.0.0
965 | domelementtype: 2.3.0
966 | domhandler: 5.0.3
967 | dev: false
968 |
969 | /eastasianwidth@0.2.0:
970 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
971 |
972 | /editorconfig@1.0.4:
973 | resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==}
974 | engines: {node: '>=14'}
975 | hasBin: true
976 | dependencies:
977 | '@one-ini/wasm': 0.1.1
978 | commander: 10.0.1
979 | minimatch: 9.0.1
980 | semver: 7.6.0
981 | dev: false
982 |
983 | /emoji-regex@8.0.0:
984 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
985 |
986 | /emoji-regex@9.2.2:
987 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
988 |
989 | /entities@4.5.0:
990 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
991 | engines: {node: '>=0.12'}
992 | dev: false
993 |
994 | /esbuild@0.19.12:
995 | resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
996 | engines: {node: '>=12'}
997 | hasBin: true
998 | requiresBuild: true
999 | optionalDependencies:
1000 | '@esbuild/aix-ppc64': 0.19.12
1001 | '@esbuild/android-arm': 0.19.12
1002 | '@esbuild/android-arm64': 0.19.12
1003 | '@esbuild/android-x64': 0.19.12
1004 | '@esbuild/darwin-arm64': 0.19.12
1005 | '@esbuild/darwin-x64': 0.19.12
1006 | '@esbuild/freebsd-arm64': 0.19.12
1007 | '@esbuild/freebsd-x64': 0.19.12
1008 | '@esbuild/linux-arm': 0.19.12
1009 | '@esbuild/linux-arm64': 0.19.12
1010 | '@esbuild/linux-ia32': 0.19.12
1011 | '@esbuild/linux-loong64': 0.19.12
1012 | '@esbuild/linux-mips64el': 0.19.12
1013 | '@esbuild/linux-ppc64': 0.19.12
1014 | '@esbuild/linux-riscv64': 0.19.12
1015 | '@esbuild/linux-s390x': 0.19.12
1016 | '@esbuild/linux-x64': 0.19.12
1017 | '@esbuild/netbsd-x64': 0.19.12
1018 | '@esbuild/openbsd-x64': 0.19.12
1019 | '@esbuild/sunos-x64': 0.19.12
1020 | '@esbuild/win32-arm64': 0.19.12
1021 | '@esbuild/win32-ia32': 0.19.12
1022 | '@esbuild/win32-x64': 0.19.12
1023 | dev: true
1024 |
1025 | /escape-string-regexp@1.0.5:
1026 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
1027 | engines: {node: '>=0.8.0'}
1028 | dev: true
1029 |
1030 | /estree-walker@3.0.3:
1031 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
1032 | dependencies:
1033 | '@types/estree': 1.0.5
1034 | dev: true
1035 |
1036 | /execa@5.1.1:
1037 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
1038 | engines: {node: '>=10'}
1039 | dependencies:
1040 | cross-spawn: 7.0.3
1041 | get-stream: 6.0.1
1042 | human-signals: 2.1.0
1043 | is-stream: 2.0.1
1044 | merge-stream: 2.0.0
1045 | npm-run-path: 4.0.1
1046 | onetime: 5.1.2
1047 | signal-exit: 3.0.7
1048 | strip-final-newline: 2.0.0
1049 | dev: true
1050 |
1051 | /execa@8.0.1:
1052 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
1053 | engines: {node: '>=16.17'}
1054 | dependencies:
1055 | cross-spawn: 7.0.3
1056 | get-stream: 8.0.1
1057 | human-signals: 5.0.0
1058 | is-stream: 3.0.0
1059 | merge-stream: 2.0.0
1060 | npm-run-path: 5.3.0
1061 | onetime: 6.0.0
1062 | signal-exit: 4.1.0
1063 | strip-final-newline: 3.0.0
1064 | dev: true
1065 |
1066 | /fast-deep-equal@2.0.1:
1067 | resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==}
1068 | dev: false
1069 |
1070 | /fast-glob@3.3.2:
1071 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
1072 | engines: {node: '>=8.6.0'}
1073 | dependencies:
1074 | '@nodelib/fs.stat': 2.0.5
1075 | '@nodelib/fs.walk': 1.2.8
1076 | glob-parent: 5.1.2
1077 | merge2: 1.4.1
1078 | micromatch: 4.0.5
1079 | dev: true
1080 |
1081 | /fastq@1.17.1:
1082 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
1083 | dependencies:
1084 | reusify: 1.0.4
1085 | dev: true
1086 |
1087 | /fill-range@7.0.1:
1088 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1089 | engines: {node: '>=8'}
1090 | dependencies:
1091 | to-regex-range: 5.0.1
1092 | dev: true
1093 |
1094 | /foreground-child@3.1.1:
1095 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
1096 | engines: {node: '>=14'}
1097 | dependencies:
1098 | cross-spawn: 7.0.3
1099 | signal-exit: 4.1.0
1100 |
1101 | /fs.realpath@1.0.0:
1102 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1103 | dev: true
1104 |
1105 | /fsevents@2.3.3:
1106 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1107 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1108 | os: [darwin]
1109 | requiresBuild: true
1110 | dev: true
1111 | optional: true
1112 |
1113 | /get-func-name@2.0.2:
1114 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
1115 | dev: true
1116 |
1117 | /get-stream@6.0.1:
1118 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
1119 | engines: {node: '>=10'}
1120 | dev: true
1121 |
1122 | /get-stream@8.0.1:
1123 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
1124 | engines: {node: '>=16'}
1125 | dev: true
1126 |
1127 | /glob-parent@5.1.2:
1128 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1129 | engines: {node: '>= 6'}
1130 | dependencies:
1131 | is-glob: 4.0.3
1132 | dev: true
1133 |
1134 | /glob@10.3.10:
1135 | resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
1136 | engines: {node: '>=16 || 14 >=14.17'}
1137 | hasBin: true
1138 | dependencies:
1139 | foreground-child: 3.1.1
1140 | jackspeak: 2.3.6
1141 | minimatch: 9.0.3
1142 | minipass: 7.0.4
1143 | path-scurry: 1.10.1
1144 |
1145 | /glob@7.2.3:
1146 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1147 | dependencies:
1148 | fs.realpath: 1.0.0
1149 | inflight: 1.0.6
1150 | inherits: 2.0.4
1151 | minimatch: 3.1.2
1152 | once: 1.4.0
1153 | path-is-absolute: 1.0.1
1154 | dev: true
1155 |
1156 | /globals@11.12.0:
1157 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
1158 | engines: {node: '>=4'}
1159 | dev: true
1160 |
1161 | /globby@11.1.0:
1162 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1163 | engines: {node: '>=10'}
1164 | dependencies:
1165 | array-union: 2.1.0
1166 | dir-glob: 3.0.1
1167 | fast-glob: 3.3.2
1168 | ignore: 5.3.1
1169 | merge2: 1.4.1
1170 | slash: 3.0.0
1171 | dev: true
1172 |
1173 | /has-flag@3.0.0:
1174 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
1175 | engines: {node: '>=4'}
1176 | dev: true
1177 |
1178 | /has-flag@4.0.0:
1179 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1180 | engines: {node: '>=8'}
1181 | dev: true
1182 |
1183 | /html-escaper@2.0.2:
1184 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
1185 | dev: true
1186 |
1187 | /html-to-text@9.0.5:
1188 | resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==}
1189 | engines: {node: '>=14'}
1190 | dependencies:
1191 | '@selderee/plugin-htmlparser2': 0.11.0
1192 | deepmerge: 4.3.1
1193 | dom-serializer: 2.0.0
1194 | htmlparser2: 8.0.2
1195 | selderee: 0.11.0
1196 | dev: false
1197 |
1198 | /htmlparser2@8.0.2:
1199 | resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
1200 | dependencies:
1201 | domelementtype: 2.3.0
1202 | domhandler: 5.0.3
1203 | domutils: 3.1.0
1204 | entities: 4.5.0
1205 | dev: false
1206 |
1207 | /human-signals@2.1.0:
1208 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
1209 | engines: {node: '>=10.17.0'}
1210 | dev: true
1211 |
1212 | /human-signals@5.0.0:
1213 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
1214 | engines: {node: '>=16.17.0'}
1215 | dev: true
1216 |
1217 | /ignore@5.3.1:
1218 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
1219 | engines: {node: '>= 4'}
1220 | dev: true
1221 |
1222 | /inflight@1.0.6:
1223 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1224 | dependencies:
1225 | once: 1.4.0
1226 | wrappy: 1.0.2
1227 | dev: true
1228 |
1229 | /inherits@2.0.4:
1230 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1231 | dev: true
1232 |
1233 | /ini@1.3.8:
1234 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
1235 | dev: false
1236 |
1237 | /is-binary-path@2.1.0:
1238 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1239 | engines: {node: '>=8'}
1240 | dependencies:
1241 | binary-extensions: 2.2.0
1242 | dev: true
1243 |
1244 | /is-extglob@2.1.1:
1245 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1246 | engines: {node: '>=0.10.0'}
1247 | dev: true
1248 |
1249 | /is-fullwidth-code-point@3.0.0:
1250 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1251 | engines: {node: '>=8'}
1252 |
1253 | /is-glob@4.0.3:
1254 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1255 | engines: {node: '>=0.10.0'}
1256 | dependencies:
1257 | is-extglob: 2.1.1
1258 | dev: true
1259 |
1260 | /is-number@7.0.0:
1261 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1262 | engines: {node: '>=0.12.0'}
1263 | dev: true
1264 |
1265 | /is-stream@2.0.1:
1266 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
1267 | engines: {node: '>=8'}
1268 | dev: true
1269 |
1270 | /is-stream@3.0.0:
1271 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
1272 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1273 | dev: true
1274 |
1275 | /isexe@2.0.0:
1276 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1277 |
1278 | /istanbul-lib-coverage@3.2.2:
1279 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
1280 | engines: {node: '>=8'}
1281 | dev: true
1282 |
1283 | /istanbul-lib-report@3.0.1:
1284 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
1285 | engines: {node: '>=10'}
1286 | dependencies:
1287 | istanbul-lib-coverage: 3.2.2
1288 | make-dir: 4.0.0
1289 | supports-color: 7.2.0
1290 | dev: true
1291 |
1292 | /istanbul-lib-source-maps@4.0.1:
1293 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
1294 | engines: {node: '>=10'}
1295 | dependencies:
1296 | debug: 4.3.4
1297 | istanbul-lib-coverage: 3.2.2
1298 | source-map: 0.6.1
1299 | transitivePeerDependencies:
1300 | - supports-color
1301 | dev: true
1302 |
1303 | /istanbul-reports@3.1.7:
1304 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
1305 | engines: {node: '>=8'}
1306 | dependencies:
1307 | html-escaper: 2.0.2
1308 | istanbul-lib-report: 3.0.1
1309 | dev: true
1310 |
1311 | /jackspeak@2.3.6:
1312 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
1313 | engines: {node: '>=14'}
1314 | dependencies:
1315 | '@isaacs/cliui': 8.0.2
1316 | optionalDependencies:
1317 | '@pkgjs/parseargs': 0.11.0
1318 |
1319 | /javascript-natural-sort@0.7.1:
1320 | resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==}
1321 | dev: true
1322 |
1323 | /joycon@3.1.1:
1324 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
1325 | engines: {node: '>=10'}
1326 | dev: true
1327 |
1328 | /js-beautify@1.15.1:
1329 | resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==}
1330 | engines: {node: '>=14'}
1331 | hasBin: true
1332 | dependencies:
1333 | config-chain: 1.1.13
1334 | editorconfig: 1.0.4
1335 | glob: 10.3.10
1336 | js-cookie: 3.0.5
1337 | nopt: 7.2.0
1338 | dev: false
1339 |
1340 | /js-cookie@3.0.5:
1341 | resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
1342 | engines: {node: '>=14'}
1343 | dev: false
1344 |
1345 | /js-tokens@4.0.0:
1346 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1347 |
1348 | /js-tokens@8.0.3:
1349 | resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==}
1350 | dev: true
1351 |
1352 | /jsesc@2.5.2:
1353 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
1354 | engines: {node: '>=4'}
1355 | hasBin: true
1356 | dev: true
1357 |
1358 | /jsonc-parser@3.2.1:
1359 | resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==}
1360 | dev: true
1361 |
1362 | /leac@0.6.0:
1363 | resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==}
1364 | dev: false
1365 |
1366 | /lilconfig@3.1.1:
1367 | resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==}
1368 | engines: {node: '>=14'}
1369 | dev: true
1370 |
1371 | /lines-and-columns@1.2.4:
1372 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1373 | dev: true
1374 |
1375 | /load-tsconfig@0.2.5:
1376 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
1377 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1378 | dev: true
1379 |
1380 | /local-pkg@0.5.0:
1381 | resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
1382 | engines: {node: '>=14'}
1383 | dependencies:
1384 | mlly: 1.6.1
1385 | pkg-types: 1.0.3
1386 | dev: true
1387 |
1388 | /lodash.sortby@4.7.0:
1389 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
1390 | dev: true
1391 |
1392 | /lodash@4.17.21:
1393 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
1394 | dev: true
1395 |
1396 | /loose-envify@1.4.0:
1397 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1398 | hasBin: true
1399 | dependencies:
1400 | js-tokens: 4.0.0
1401 | dev: false
1402 |
1403 | /loupe@2.3.7:
1404 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
1405 | dependencies:
1406 | get-func-name: 2.0.2
1407 | dev: true
1408 |
1409 | /lru-cache@10.2.0:
1410 | resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==}
1411 | engines: {node: 14 || >=16.14}
1412 |
1413 | /lru-cache@6.0.0:
1414 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1415 | engines: {node: '>=10'}
1416 | dependencies:
1417 | yallist: 4.0.0
1418 |
1419 | /magic-string@0.30.8:
1420 | resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==}
1421 | engines: {node: '>=12'}
1422 | dependencies:
1423 | '@jridgewell/sourcemap-codec': 1.4.15
1424 | dev: true
1425 |
1426 | /magicast@0.3.3:
1427 | resolution: {integrity: sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==}
1428 | dependencies:
1429 | '@babel/parser': 7.24.0
1430 | '@babel/types': 7.24.0
1431 | source-map-js: 1.0.2
1432 | dev: true
1433 |
1434 | /make-dir@4.0.0:
1435 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
1436 | engines: {node: '>=10'}
1437 | dependencies:
1438 | semver: 7.6.0
1439 | dev: true
1440 |
1441 | /merge-stream@2.0.0:
1442 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
1443 | dev: true
1444 |
1445 | /merge2@1.4.1:
1446 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1447 | engines: {node: '>= 8'}
1448 | dev: true
1449 |
1450 | /micromatch@4.0.5:
1451 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1452 | engines: {node: '>=8.6'}
1453 | dependencies:
1454 | braces: 3.0.2
1455 | picomatch: 2.3.1
1456 | dev: true
1457 |
1458 | /mimic-fn@2.1.0:
1459 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
1460 | engines: {node: '>=6'}
1461 | dev: true
1462 |
1463 | /mimic-fn@4.0.0:
1464 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
1465 | engines: {node: '>=12'}
1466 | dev: true
1467 |
1468 | /minimatch@3.1.2:
1469 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1470 | dependencies:
1471 | brace-expansion: 1.1.11
1472 | dev: true
1473 |
1474 | /minimatch@9.0.1:
1475 | resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
1476 | engines: {node: '>=16 || 14 >=14.17'}
1477 | dependencies:
1478 | brace-expansion: 2.0.1
1479 | dev: false
1480 |
1481 | /minimatch@9.0.3:
1482 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
1483 | engines: {node: '>=16 || 14 >=14.17'}
1484 | dependencies:
1485 | brace-expansion: 2.0.1
1486 |
1487 | /minipass@7.0.4:
1488 | resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
1489 | engines: {node: '>=16 || 14 >=14.17'}
1490 |
1491 | /mlly@1.6.1:
1492 | resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==}
1493 | dependencies:
1494 | acorn: 8.11.3
1495 | pathe: 1.1.2
1496 | pkg-types: 1.0.3
1497 | ufo: 1.4.0
1498 | dev: true
1499 |
1500 | /ms@2.1.2:
1501 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1502 | dev: true
1503 |
1504 | /mz@2.7.0:
1505 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
1506 | dependencies:
1507 | any-promise: 1.3.0
1508 | object-assign: 4.1.1
1509 | thenify-all: 1.6.0
1510 | dev: true
1511 |
1512 | /nanoid@3.3.7:
1513 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
1514 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1515 | hasBin: true
1516 | dev: true
1517 |
1518 | /nodemailer@6.9.3:
1519 | resolution: {integrity: sha512-fy9v3NgTzBngrMFkDsKEj0r02U7jm6XfC3b52eoNV+GCrGj+s8pt5OqhiJdWKuw51zCTdiNR/IUD1z33LIIGpg==}
1520 | engines: {node: '>=6.0.0'}
1521 | dev: false
1522 |
1523 | /nopt@7.2.0:
1524 | resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==}
1525 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
1526 | hasBin: true
1527 | dependencies:
1528 | abbrev: 2.0.0
1529 | dev: false
1530 |
1531 | /normalize-path@3.0.0:
1532 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1533 | engines: {node: '>=0.10.0'}
1534 | dev: true
1535 |
1536 | /npm-run-path@4.0.1:
1537 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
1538 | engines: {node: '>=8'}
1539 | dependencies:
1540 | path-key: 3.1.1
1541 | dev: true
1542 |
1543 | /npm-run-path@5.3.0:
1544 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
1545 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1546 | dependencies:
1547 | path-key: 4.0.0
1548 | dev: true
1549 |
1550 | /object-assign@4.1.1:
1551 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1552 | engines: {node: '>=0.10.0'}
1553 | dev: true
1554 |
1555 | /once@1.4.0:
1556 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1557 | dependencies:
1558 | wrappy: 1.0.2
1559 | dev: true
1560 |
1561 | /onetime@5.1.2:
1562 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
1563 | engines: {node: '>=6'}
1564 | dependencies:
1565 | mimic-fn: 2.1.0
1566 | dev: true
1567 |
1568 | /onetime@6.0.0:
1569 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
1570 | engines: {node: '>=12'}
1571 | dependencies:
1572 | mimic-fn: 4.0.0
1573 | dev: true
1574 |
1575 | /p-limit@5.0.0:
1576 | resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==}
1577 | engines: {node: '>=18'}
1578 | dependencies:
1579 | yocto-queue: 1.0.0
1580 | dev: true
1581 |
1582 | /parseley@0.12.1:
1583 | resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==}
1584 | dependencies:
1585 | leac: 0.6.0
1586 | peberminta: 0.9.0
1587 | dev: false
1588 |
1589 | /path-is-absolute@1.0.1:
1590 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1591 | engines: {node: '>=0.10.0'}
1592 | dev: true
1593 |
1594 | /path-key@3.1.1:
1595 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1596 | engines: {node: '>=8'}
1597 |
1598 | /path-key@4.0.0:
1599 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
1600 | engines: {node: '>=12'}
1601 | dev: true
1602 |
1603 | /path-scurry@1.10.1:
1604 | resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
1605 | engines: {node: '>=16 || 14 >=14.17'}
1606 | dependencies:
1607 | lru-cache: 10.2.0
1608 | minipass: 7.0.4
1609 |
1610 | /path-type@4.0.0:
1611 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1612 | engines: {node: '>=8'}
1613 | dev: true
1614 |
1615 | /pathe@1.1.2:
1616 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
1617 | dev: true
1618 |
1619 | /pathval@1.1.1:
1620 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
1621 | dev: true
1622 |
1623 | /peberminta@0.9.0:
1624 | resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==}
1625 | dev: false
1626 |
1627 | /picocolors@1.0.0:
1628 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1629 | dev: true
1630 |
1631 | /picomatch@2.3.1:
1632 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1633 | engines: {node: '>=8.6'}
1634 | dev: true
1635 |
1636 | /pirates@4.0.6:
1637 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
1638 | engines: {node: '>= 6'}
1639 | dev: true
1640 |
1641 | /pkg-types@1.0.3:
1642 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
1643 | dependencies:
1644 | jsonc-parser: 3.2.1
1645 | mlly: 1.6.1
1646 | pathe: 1.1.2
1647 | dev: true
1648 |
1649 | /postcss-load-config@4.0.2:
1650 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
1651 | engines: {node: '>= 14'}
1652 | peerDependencies:
1653 | postcss: '>=8.0.9'
1654 | ts-node: '>=9.0.0'
1655 | peerDependenciesMeta:
1656 | postcss:
1657 | optional: true
1658 | ts-node:
1659 | optional: true
1660 | dependencies:
1661 | lilconfig: 3.1.1
1662 | yaml: 2.4.0
1663 | dev: true
1664 |
1665 | /postcss@8.4.35:
1666 | resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==}
1667 | engines: {node: ^10 || ^12 || >=14}
1668 | dependencies:
1669 | nanoid: 3.3.7
1670 | picocolors: 1.0.0
1671 | source-map-js: 1.0.2
1672 | dev: true
1673 |
1674 | /prettier@3.2.5:
1675 | resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==}
1676 | engines: {node: '>=14'}
1677 | hasBin: true
1678 | dev: true
1679 |
1680 | /pretty-format@29.7.0:
1681 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
1682 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1683 | dependencies:
1684 | '@jest/schemas': 29.6.3
1685 | ansi-styles: 5.2.0
1686 | react-is: 18.2.0
1687 | dev: true
1688 |
1689 | /proto-list@1.2.4:
1690 | resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
1691 | dev: false
1692 |
1693 | /punycode@2.3.1:
1694 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1695 | engines: {node: '>=6'}
1696 | dev: true
1697 |
1698 | /queue-microtask@1.2.3:
1699 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1700 | dev: true
1701 |
1702 | /react-dom@18.2.0(react@18.2.0):
1703 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
1704 | peerDependencies:
1705 | react: ^18.2.0
1706 | dependencies:
1707 | loose-envify: 1.4.0
1708 | react: 18.2.0
1709 | scheduler: 0.23.0
1710 | dev: false
1711 |
1712 | /react-is@18.2.0:
1713 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
1714 | dev: true
1715 |
1716 | /react-promise-suspense@0.3.4:
1717 | resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==}
1718 | dependencies:
1719 | fast-deep-equal: 2.0.1
1720 | dev: false
1721 |
1722 | /react@18.2.0:
1723 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
1724 | engines: {node: '>=0.10.0'}
1725 | dependencies:
1726 | loose-envify: 1.4.0
1727 | dev: false
1728 |
1729 | /readdirp@3.6.0:
1730 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1731 | engines: {node: '>=8.10.0'}
1732 | dependencies:
1733 | picomatch: 2.3.1
1734 | dev: true
1735 |
1736 | /resend@4.0.0(react-dom@18.2.0)(react@18.2.0):
1737 | resolution: {integrity: sha512-rDX0rspl/XcmC2JV2V5obQvRX2arzxXUvNFUDMOv5ObBLR68+7kigCOysb7+dlkb0JE3erhQG0nHrbBt/ZCWIg==}
1738 | engines: {node: '>=18'}
1739 | dependencies:
1740 | '@react-email/render': 0.0.17(react-dom@18.2.0)(react@18.2.0)
1741 | transitivePeerDependencies:
1742 | - react
1743 | - react-dom
1744 | dev: false
1745 |
1746 | /resolve-from@5.0.0:
1747 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1748 | engines: {node: '>=8'}
1749 | dev: true
1750 |
1751 | /reusify@1.0.4:
1752 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1753 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1754 | dev: true
1755 |
1756 | /rollup@4.12.0:
1757 | resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==}
1758 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1759 | hasBin: true
1760 | dependencies:
1761 | '@types/estree': 1.0.5
1762 | optionalDependencies:
1763 | '@rollup/rollup-android-arm-eabi': 4.12.0
1764 | '@rollup/rollup-android-arm64': 4.12.0
1765 | '@rollup/rollup-darwin-arm64': 4.12.0
1766 | '@rollup/rollup-darwin-x64': 4.12.0
1767 | '@rollup/rollup-linux-arm-gnueabihf': 4.12.0
1768 | '@rollup/rollup-linux-arm64-gnu': 4.12.0
1769 | '@rollup/rollup-linux-arm64-musl': 4.12.0
1770 | '@rollup/rollup-linux-riscv64-gnu': 4.12.0
1771 | '@rollup/rollup-linux-x64-gnu': 4.12.0
1772 | '@rollup/rollup-linux-x64-musl': 4.12.0
1773 | '@rollup/rollup-win32-arm64-msvc': 4.12.0
1774 | '@rollup/rollup-win32-ia32-msvc': 4.12.0
1775 | '@rollup/rollup-win32-x64-msvc': 4.12.0
1776 | fsevents: 2.3.3
1777 | dev: true
1778 |
1779 | /run-parallel@1.2.0:
1780 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1781 | dependencies:
1782 | queue-microtask: 1.2.3
1783 | dev: true
1784 |
1785 | /scheduler@0.23.0:
1786 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
1787 | dependencies:
1788 | loose-envify: 1.4.0
1789 | dev: false
1790 |
1791 | /selderee@0.11.0:
1792 | resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==}
1793 | dependencies:
1794 | parseley: 0.12.1
1795 | dev: false
1796 |
1797 | /semver@7.6.0:
1798 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
1799 | engines: {node: '>=10'}
1800 | hasBin: true
1801 | dependencies:
1802 | lru-cache: 6.0.0
1803 |
1804 | /shebang-command@2.0.0:
1805 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1806 | engines: {node: '>=8'}
1807 | dependencies:
1808 | shebang-regex: 3.0.0
1809 |
1810 | /shebang-regex@3.0.0:
1811 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1812 | engines: {node: '>=8'}
1813 |
1814 | /siginfo@2.0.0:
1815 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
1816 | dev: true
1817 |
1818 | /signal-exit@3.0.7:
1819 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1820 | dev: true
1821 |
1822 | /signal-exit@4.1.0:
1823 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1824 | engines: {node: '>=14'}
1825 |
1826 | /slash@3.0.0:
1827 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1828 | engines: {node: '>=8'}
1829 | dev: true
1830 |
1831 | /source-map-js@1.0.2:
1832 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1833 | engines: {node: '>=0.10.0'}
1834 | dev: true
1835 |
1836 | /source-map@0.5.7:
1837 | resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
1838 | engines: {node: '>=0.10.0'}
1839 | dev: true
1840 |
1841 | /source-map@0.6.1:
1842 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1843 | engines: {node: '>=0.10.0'}
1844 | dev: true
1845 |
1846 | /source-map@0.8.0-beta.0:
1847 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
1848 | engines: {node: '>= 8'}
1849 | dependencies:
1850 | whatwg-url: 7.1.0
1851 | dev: true
1852 |
1853 | /stackback@0.0.2:
1854 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
1855 | dev: true
1856 |
1857 | /std-env@3.7.0:
1858 | resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
1859 | dev: true
1860 |
1861 | /string-width@4.2.3:
1862 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1863 | engines: {node: '>=8'}
1864 | dependencies:
1865 | emoji-regex: 8.0.0
1866 | is-fullwidth-code-point: 3.0.0
1867 | strip-ansi: 6.0.1
1868 |
1869 | /string-width@5.1.2:
1870 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1871 | engines: {node: '>=12'}
1872 | dependencies:
1873 | eastasianwidth: 0.2.0
1874 | emoji-regex: 9.2.2
1875 | strip-ansi: 7.1.0
1876 |
1877 | /strip-ansi@6.0.1:
1878 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1879 | engines: {node: '>=8'}
1880 | dependencies:
1881 | ansi-regex: 5.0.1
1882 |
1883 | /strip-ansi@7.1.0:
1884 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1885 | engines: {node: '>=12'}
1886 | dependencies:
1887 | ansi-regex: 6.0.1
1888 |
1889 | /strip-final-newline@2.0.0:
1890 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
1891 | engines: {node: '>=6'}
1892 | dev: true
1893 |
1894 | /strip-final-newline@3.0.0:
1895 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
1896 | engines: {node: '>=12'}
1897 | dev: true
1898 |
1899 | /strip-literal@2.0.0:
1900 | resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==}
1901 | dependencies:
1902 | js-tokens: 8.0.3
1903 | dev: true
1904 |
1905 | /sucrase@3.35.0:
1906 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
1907 | engines: {node: '>=16 || 14 >=14.17'}
1908 | hasBin: true
1909 | dependencies:
1910 | '@jridgewell/gen-mapping': 0.3.5
1911 | commander: 4.1.1
1912 | glob: 10.3.10
1913 | lines-and-columns: 1.2.4
1914 | mz: 2.7.0
1915 | pirates: 4.0.6
1916 | ts-interface-checker: 0.1.13
1917 | dev: true
1918 |
1919 | /supports-color@5.5.0:
1920 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1921 | engines: {node: '>=4'}
1922 | dependencies:
1923 | has-flag: 3.0.0
1924 | dev: true
1925 |
1926 | /supports-color@7.2.0:
1927 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1928 | engines: {node: '>=8'}
1929 | dependencies:
1930 | has-flag: 4.0.0
1931 | dev: true
1932 |
1933 | /test-exclude@6.0.0:
1934 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
1935 | engines: {node: '>=8'}
1936 | dependencies:
1937 | '@istanbuljs/schema': 0.1.3
1938 | glob: 7.2.3
1939 | minimatch: 3.1.2
1940 | dev: true
1941 |
1942 | /thenify-all@1.6.0:
1943 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1944 | engines: {node: '>=0.8'}
1945 | dependencies:
1946 | thenify: 3.3.1
1947 | dev: true
1948 |
1949 | /thenify@3.3.1:
1950 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1951 | dependencies:
1952 | any-promise: 1.3.0
1953 | dev: true
1954 |
1955 | /tinybench@2.6.0:
1956 | resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==}
1957 | dev: true
1958 |
1959 | /tinypool@0.8.2:
1960 | resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==}
1961 | engines: {node: '>=14.0.0'}
1962 | dev: true
1963 |
1964 | /tinyspy@2.2.1:
1965 | resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==}
1966 | engines: {node: '>=14.0.0'}
1967 | dev: true
1968 |
1969 | /to-fast-properties@2.0.0:
1970 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
1971 | engines: {node: '>=4'}
1972 | dev: true
1973 |
1974 | /to-regex-range@5.0.1:
1975 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1976 | engines: {node: '>=8.0'}
1977 | dependencies:
1978 | is-number: 7.0.0
1979 | dev: true
1980 |
1981 | /tr46@1.0.1:
1982 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
1983 | dependencies:
1984 | punycode: 2.3.1
1985 | dev: true
1986 |
1987 | /tree-kill@1.2.2:
1988 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
1989 | hasBin: true
1990 | dev: true
1991 |
1992 | /ts-interface-checker@0.1.13:
1993 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1994 | dev: true
1995 |
1996 | /tsup@8.0.2(typescript@5.4.2):
1997 | resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==}
1998 | engines: {node: '>=18'}
1999 | hasBin: true
2000 | peerDependencies:
2001 | '@microsoft/api-extractor': ^7.36.0
2002 | '@swc/core': ^1
2003 | postcss: ^8.4.12
2004 | typescript: '>=4.5.0'
2005 | peerDependenciesMeta:
2006 | '@microsoft/api-extractor':
2007 | optional: true
2008 | '@swc/core':
2009 | optional: true
2010 | postcss:
2011 | optional: true
2012 | typescript:
2013 | optional: true
2014 | dependencies:
2015 | bundle-require: 4.0.2(esbuild@0.19.12)
2016 | cac: 6.7.14
2017 | chokidar: 3.6.0
2018 | debug: 4.3.4
2019 | esbuild: 0.19.12
2020 | execa: 5.1.1
2021 | globby: 11.1.0
2022 | joycon: 3.1.1
2023 | postcss-load-config: 4.0.2
2024 | resolve-from: 5.0.0
2025 | rollup: 4.12.0
2026 | source-map: 0.8.0-beta.0
2027 | sucrase: 3.35.0
2028 | tree-kill: 1.2.2
2029 | typescript: 5.4.2
2030 | transitivePeerDependencies:
2031 | - supports-color
2032 | - ts-node
2033 | dev: true
2034 |
2035 | /type-detect@4.0.8:
2036 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
2037 | engines: {node: '>=4'}
2038 | dev: true
2039 |
2040 | /typescript@5.4.2:
2041 | resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==}
2042 | engines: {node: '>=14.17'}
2043 | hasBin: true
2044 | dev: true
2045 |
2046 | /ufo@1.4.0:
2047 | resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==}
2048 | dev: true
2049 |
2050 | /undici-types@5.26.5:
2051 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
2052 | dev: true
2053 |
2054 | /v8-to-istanbul@9.2.0:
2055 | resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==}
2056 | engines: {node: '>=10.12.0'}
2057 | dependencies:
2058 | '@jridgewell/trace-mapping': 0.3.25
2059 | '@types/istanbul-lib-coverage': 2.0.6
2060 | convert-source-map: 2.0.0
2061 | dev: true
2062 |
2063 | /vite-node@1.3.1(@types/node@20.11.25):
2064 | resolution: {integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==}
2065 | engines: {node: ^18.0.0 || >=20.0.0}
2066 | hasBin: true
2067 | dependencies:
2068 | cac: 6.7.14
2069 | debug: 4.3.4
2070 | pathe: 1.1.2
2071 | picocolors: 1.0.0
2072 | vite: 5.1.4(@types/node@20.11.25)
2073 | transitivePeerDependencies:
2074 | - '@types/node'
2075 | - less
2076 | - lightningcss
2077 | - sass
2078 | - stylus
2079 | - sugarss
2080 | - supports-color
2081 | - terser
2082 | dev: true
2083 |
2084 | /vite@5.1.4(@types/node@20.11.25):
2085 | resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==}
2086 | engines: {node: ^18.0.0 || >=20.0.0}
2087 | hasBin: true
2088 | peerDependencies:
2089 | '@types/node': ^18.0.0 || >=20.0.0
2090 | less: '*'
2091 | lightningcss: ^1.21.0
2092 | sass: '*'
2093 | stylus: '*'
2094 | sugarss: '*'
2095 | terser: ^5.4.0
2096 | peerDependenciesMeta:
2097 | '@types/node':
2098 | optional: true
2099 | less:
2100 | optional: true
2101 | lightningcss:
2102 | optional: true
2103 | sass:
2104 | optional: true
2105 | stylus:
2106 | optional: true
2107 | sugarss:
2108 | optional: true
2109 | terser:
2110 | optional: true
2111 | dependencies:
2112 | '@types/node': 20.11.25
2113 | esbuild: 0.19.12
2114 | postcss: 8.4.35
2115 | rollup: 4.12.0
2116 | optionalDependencies:
2117 | fsevents: 2.3.3
2118 | dev: true
2119 |
2120 | /vitest@1.3.1(@types/node@20.11.25):
2121 | resolution: {integrity: sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==}
2122 | engines: {node: ^18.0.0 || >=20.0.0}
2123 | hasBin: true
2124 | peerDependencies:
2125 | '@edge-runtime/vm': '*'
2126 | '@types/node': ^18.0.0 || >=20.0.0
2127 | '@vitest/browser': 1.3.1
2128 | '@vitest/ui': 1.3.1
2129 | happy-dom: '*'
2130 | jsdom: '*'
2131 | peerDependenciesMeta:
2132 | '@edge-runtime/vm':
2133 | optional: true
2134 | '@types/node':
2135 | optional: true
2136 | '@vitest/browser':
2137 | optional: true
2138 | '@vitest/ui':
2139 | optional: true
2140 | happy-dom:
2141 | optional: true
2142 | jsdom:
2143 | optional: true
2144 | dependencies:
2145 | '@types/node': 20.11.25
2146 | '@vitest/expect': 1.3.1
2147 | '@vitest/runner': 1.3.1
2148 | '@vitest/snapshot': 1.3.1
2149 | '@vitest/spy': 1.3.1
2150 | '@vitest/utils': 1.3.1
2151 | acorn-walk: 8.3.2
2152 | chai: 4.4.1
2153 | debug: 4.3.4
2154 | execa: 8.0.1
2155 | local-pkg: 0.5.0
2156 | magic-string: 0.30.8
2157 | pathe: 1.1.2
2158 | picocolors: 1.0.0
2159 | std-env: 3.7.0
2160 | strip-literal: 2.0.0
2161 | tinybench: 2.6.0
2162 | tinypool: 0.8.2
2163 | vite: 5.1.4(@types/node@20.11.25)
2164 | vite-node: 1.3.1(@types/node@20.11.25)
2165 | why-is-node-running: 2.2.2
2166 | transitivePeerDependencies:
2167 | - less
2168 | - lightningcss
2169 | - sass
2170 | - stylus
2171 | - sugarss
2172 | - supports-color
2173 | - terser
2174 | dev: true
2175 |
2176 | /webidl-conversions@4.0.2:
2177 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
2178 | dev: true
2179 |
2180 | /whatwg-url@7.1.0:
2181 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
2182 | dependencies:
2183 | lodash.sortby: 4.7.0
2184 | tr46: 1.0.1
2185 | webidl-conversions: 4.0.2
2186 | dev: true
2187 |
2188 | /which@2.0.2:
2189 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2190 | engines: {node: '>= 8'}
2191 | hasBin: true
2192 | dependencies:
2193 | isexe: 2.0.0
2194 |
2195 | /why-is-node-running@2.2.2:
2196 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
2197 | engines: {node: '>=8'}
2198 | hasBin: true
2199 | dependencies:
2200 | siginfo: 2.0.0
2201 | stackback: 0.0.2
2202 | dev: true
2203 |
2204 | /wrap-ansi@7.0.0:
2205 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
2206 | engines: {node: '>=10'}
2207 | dependencies:
2208 | ansi-styles: 4.3.0
2209 | string-width: 4.2.3
2210 | strip-ansi: 6.0.1
2211 |
2212 | /wrap-ansi@8.1.0:
2213 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
2214 | engines: {node: '>=12'}
2215 | dependencies:
2216 | ansi-styles: 6.2.1
2217 | string-width: 5.1.2
2218 | strip-ansi: 7.1.0
2219 |
2220 | /wrappy@1.0.2:
2221 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2222 | dev: true
2223 |
2224 | /yallist@4.0.0:
2225 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
2226 |
2227 | /yaml@2.4.0:
2228 | resolution: {integrity: sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==}
2229 | engines: {node: '>= 14'}
2230 | hasBin: true
2231 | dev: true
2232 |
2233 | /yocto-queue@1.0.0:
2234 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
2235 | engines: {node: '>=12.20'}
2236 | dev: true
2237 |
--------------------------------------------------------------------------------
/prettier.config.cjs:
--------------------------------------------------------------------------------
1 | /** @type {import('prettier').Config} */
2 | module.exports = {
3 | arrowParens: 'always',
4 | printWidth: 100,
5 | semi: true,
6 | singleQuote: true,
7 | tabWidth: 2,
8 | trailingComma: 'all',
9 |
10 | importOrder: ['', '^[./]'],
11 |
12 | importOrderSeparation: true,
13 | importOrderSortSpecifiers: true,
14 |
15 | plugins: ['@trivago/prettier-plugin-sort-imports'],
16 | };
17 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { ResendTransport } from './transport';
2 | import { ResendResponseError, ResendTransportOptions } from './types/transport';
3 |
4 | export type { ResendResponseError, ResendTransportOptions };
5 | export { ResendTransport };
6 |
--------------------------------------------------------------------------------
/src/transport.spec.ts:
--------------------------------------------------------------------------------
1 | import { Stream } from 'node:stream';
2 | import { describe, expect, it } from 'vitest';
3 |
4 | import { ResendTransport } from './transport';
5 |
6 | describe('ResendTransport', () => {
7 | describe('toResendAddresses', () => {
8 | it('should convert undefined to an array', () => {
9 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
10 |
11 | const addresses = undefined;
12 |
13 | const result = transport.toResendAddresses(addresses);
14 |
15 | expect(result).toEqual([]);
16 | });
17 |
18 | it('should convert a string to an array', () => {
19 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
20 |
21 | const addresses = 'test@example.com';
22 |
23 | const result = transport.toResendAddresses(addresses);
24 |
25 | expect(result).toEqual([addresses]);
26 | });
27 |
28 | it('should convert a address to an array', () => {
29 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
30 |
31 | const addresses = { name: 'test', address: 'test@example.com' };
32 |
33 | const result = transport.toResendAddresses(addresses);
34 |
35 | expect(result).toEqual([addresses.address]);
36 | });
37 |
38 | it('should return an array as is', () => {
39 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
40 |
41 | const addresses = ['test@example.com', 'test2@example.com'];
42 |
43 | const result = transport.toResendAddresses(addresses);
44 |
45 | expect(result).toEqual(addresses);
46 | });
47 |
48 | it('should extract addresses from an array of objects', () => {
49 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
50 |
51 | const addresses = [
52 | { name: 'test', address: 'test@example.com' },
53 | { name: 'test2', address: 'test2@example.com' },
54 | ];
55 |
56 | const result = transport.toResendAddresses(addresses);
57 |
58 | expect(result).toEqual(['test@example.com', 'test2@example.com']);
59 | });
60 | });
61 |
62 | describe('toResendFromAddress', () => {
63 | it('should return an empty string if no address is provided', () => {
64 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
65 |
66 | const address = undefined;
67 |
68 | const result = transport.toResendFromAddress(address);
69 |
70 | expect(result).toEqual('');
71 | });
72 |
73 | it('should return a string as is', () => {
74 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
75 |
76 | const address = 'test@example.com';
77 |
78 | const result = transport.toResendFromAddress(address);
79 |
80 | expect(result).toEqual(address);
81 | });
82 |
83 | it('should format an object as "name "', () => {
84 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
85 |
86 | const address = { name: 'Test User', address: 'test@example.com' };
87 |
88 | const result = transport.toResendFromAddress(address);
89 |
90 | expect(result).toEqual('Test User ');
91 | });
92 |
93 | describe('toResendAttachments', () => {
94 | it('should return an empty array if no attachments are provided', () => {
95 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
96 |
97 | const attachments = undefined;
98 |
99 | const result = transport.toResendAttachments(attachments);
100 |
101 | expect(result).toEqual([]);
102 | });
103 |
104 | it('should format an array of string attachments', () => {
105 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
106 |
107 | const attachments = [
108 | {
109 | filename: 'test.txt',
110 | content: 'Test content',
111 | },
112 | {
113 | filename: 'test2.txt',
114 | content: 'Test content 2',
115 | },
116 | ];
117 |
118 | const result = transport.toResendAttachments(attachments);
119 |
120 | expect(result).toEqual([
121 | {
122 | filename: 'test.txt',
123 | content: Buffer.from('Test content'),
124 | },
125 | {
126 | filename: 'test2.txt',
127 | content: Buffer.from('Test content 2'),
128 | },
129 | ]);
130 | });
131 |
132 | it('should format an array of buffer attachments', () => {
133 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
134 |
135 | const attachments = [
136 | {
137 | filename: 'test.txt',
138 | content: Buffer.from('Test content'),
139 | },
140 | {
141 | filename: 'test2.txt',
142 | content: Buffer.from('Test content 2'),
143 | },
144 | ];
145 |
146 | const result = transport.toResendAttachments(attachments);
147 |
148 | expect(result).toEqual([
149 | {
150 | filename: 'test.txt',
151 | content: Buffer.from('Test content'),
152 | },
153 | {
154 | filename: 'test2.txt',
155 | content: Buffer.from('Test content 2'),
156 | },
157 | ]);
158 | });
159 |
160 | it('should throw an error if an attachment is missing a filename', () => {
161 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
162 |
163 | const attachments = [
164 | {
165 | content: Buffer.from('Test content'),
166 | },
167 | ];
168 |
169 | expect(() => transport.toResendAttachments(attachments)).toThrowError(
170 | 'Attachment is missing filename or content',
171 | );
172 | });
173 |
174 | it('should throw an error if an attachment is missing contents', () => {
175 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
176 |
177 | const attachments = [
178 | {
179 | filename: 'test1.txt',
180 | },
181 | ];
182 |
183 | expect(() => transport.toResendAttachments(attachments)).toThrowError(
184 | 'Attachment is missing filename or content',
185 | );
186 | });
187 |
188 | it('should throw an error if an attachment uses a stream for contents', () => {
189 | const transport = new ResendTransport({ apiKey: 'test-api-key' });
190 |
191 | const attachments = [
192 | {
193 | filename: 'test1.txt',
194 | content: Stream.Readable.from('Test content'),
195 | },
196 | ];
197 |
198 | expect(() => transport.toResendAttachments(attachments)).toThrowError(
199 | 'Attachment content must be a string or a buffer',
200 | );
201 | });
202 | });
203 | });
204 | });
205 |
--------------------------------------------------------------------------------
/src/transport.ts:
--------------------------------------------------------------------------------
1 | // https://github.com/documenso/documenso/blob/9bdff9a61fee6e84e76fdc1bc2fb92529f6a3b79/packages/email/transports/resend.ts
2 | import { type SentMessageInfo, type Transport } from 'nodemailer';
3 | import type Mail from 'nodemailer/lib/mailer';
4 | import type MailMessage from 'nodemailer/lib/mailer/mail-message';
5 | import { Resend } from 'resend';
6 |
7 | import { version as VERSION } from '../package.json';
8 | import { ResendTransportOptions } from './types/transport';
9 |
10 | export const RESEND_ERROR_CODES_BY_KEY = {
11 | missing_required_field: 422,
12 | invalid_access: 422,
13 | invalid_parameter: 422,
14 | invalid_region: 422,
15 | rate_limit_exceeded: 429,
16 | missing_api_key: 401,
17 | invalid_api_Key: 403,
18 | invalid_from_address: 403,
19 | validation_error: 403,
20 | not_found: 404,
21 | method_not_allowed: 405,
22 | application_error: 500,
23 | internal_server_error: 500,
24 | } as const;
25 |
26 | /**
27 | * Transport for sending email via the Resend SDK.
28 | */
29 | export class ResendTransport implements Transport {
30 | public name = 'ResendMailTransport';
31 | public version = VERSION;
32 |
33 | private _client: Resend;
34 |
35 | public static makeTransport(options: Partial) {
36 | return new ResendTransport(options);
37 | }
38 |
39 | constructor(options: Partial) {
40 | const { apiKey = '' } = options;
41 |
42 | this._client = new Resend(apiKey);
43 | }
44 |
45 | public send(mail: MailMessage, callback: (_err: Error | null, _info: SentMessageInfo) => void) {
46 | if (!mail.data.to || !mail.data.from) {
47 | return callback(new Error('Missing required fields "to" or "from"'), null);
48 | }
49 |
50 | this._client.emails
51 | .send({
52 | subject: mail.data.subject ?? '',
53 | from: this.toResendFromAddress(mail.data.from),
54 | to: this.toResendAddresses(mail.data.to),
55 | cc: this.toResendAddresses(mail.data.cc),
56 | bcc: this.toResendAddresses(mail.data.bcc),
57 | html: mail.data.html?.toString() || '',
58 | text: mail.data.text?.toString() || '',
59 | attachments: this.toResendAttachments(mail.data.attachments),
60 | })
61 | .then((response) => {
62 | if (response.error) {
63 | const statusCode = RESEND_ERROR_CODES_BY_KEY[response.error.name] ?? 500;
64 |
65 | throw new Error(`[${statusCode}]: ${response.error.name} ${response.error.message}`);
66 | }
67 |
68 | callback(null, response.data);
69 | })
70 | .catch((error) => {
71 | callback(error, null);
72 | });
73 | }
74 |
75 | public toResendAddresses(addresses: Mail.Options['to']) {
76 | if (!addresses) {
77 | return [];
78 | }
79 |
80 | if (typeof addresses === 'string') {
81 | return [addresses];
82 | }
83 |
84 | if (Array.isArray(addresses)) {
85 | return addresses.map((address) => {
86 | if (typeof address === 'string') {
87 | return address;
88 | }
89 |
90 | return address.address;
91 | });
92 | }
93 |
94 | return [addresses.address];
95 | }
96 |
97 | public toResendFromAddress(address: Mail.Options['from']) {
98 | if (!address) {
99 | return '';
100 | }
101 |
102 | if (typeof address === 'string') {
103 | return address;
104 | }
105 |
106 | return `${address.name} <${address.address}>`;
107 | }
108 |
109 | public toResendAttachments(attachments: Mail.Options['attachments']) {
110 | if (!attachments) {
111 | return [];
112 | }
113 |
114 | return attachments.map((attachment) => {
115 | if (!attachment.filename || !attachment.content) {
116 | throw new Error('Attachment is missing filename or content');
117 | }
118 |
119 | if (typeof attachment.content === 'string') {
120 | return {
121 | filename: attachment.filename,
122 | content: Buffer.from(attachment.content),
123 | };
124 | }
125 |
126 | if (attachment.content instanceof Buffer) {
127 | return {
128 | filename: attachment.filename,
129 | content: attachment.content,
130 | };
131 | }
132 |
133 | throw new Error('Attachment content must be a string or a buffer');
134 | });
135 | }
136 | }
137 |
--------------------------------------------------------------------------------
/src/types/transport.ts:
--------------------------------------------------------------------------------
1 | export type ResendTransportOptions = {
2 | apiKey: string;
3 | };
4 |
5 | export type ResendResponseError = {
6 | statusCode: number;
7 | name: string;
8 | message: string;
9 | };
10 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/tsconfig",
3 | "display": "Default",
4 | "compilerOptions": {
5 | "alwaysStrict": true,
6 | "composite": false,
7 | "declaration": true,
8 | "declarationMap": true,
9 | "esModuleInterop": true,
10 | "forceConsistentCasingInFileNames": true,
11 | "inlineSources": false,
12 | "isolatedModules": true,
13 | "moduleResolution": "node",
14 | "noUnusedLocals": false,
15 | "noUnusedParameters": false,
16 | "preserveWatchOutput": true,
17 | "resolveJsonModule": true,
18 | "skipLibCheck": true,
19 | "strict": true,
20 | "target": "ES2018"
21 | },
22 | "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/.d.ts"],
23 | "exclude": ["node_modules"]
24 | }
25 |
--------------------------------------------------------------------------------
/tsup.config.mjs:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup';
2 |
3 | export default defineConfig({
4 | dts: true,
5 | treeshake: true,
6 | sourceMap: true,
7 | minify: false,
8 | format: ['esm', 'cjs'],
9 | entry: ['src/main.ts'],
10 | });
11 |
--------------------------------------------------------------------------------
/vitest.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vitest/config';
2 |
3 | export default defineConfig({
4 | test: {
5 | testTimeout: 10_000,
6 | },
7 | });
8 |
--------------------------------------------------------------------------------