├── .github └── workflows │ └── test.yml ├── .gitignore ├── LICENSE ├── README.md ├── index.js ├── package-lock.json ├── package.json └── test ├── external └── index.js ├── index.js ├── shared ├── func │ └── fun.js └── importable.js └── simple └── index.js /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Node.js Test Runner 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | 10 | strategy: 11 | matrix: 12 | node-version: [16.x, 18.x, 20.x] 13 | 14 | steps: 15 | - uses: actions/checkout@v2 16 | 17 | - name: Use Node.js ${{ matrix.node-version }} 18 | uses: actions/setup-node@v1 19 | with: 20 | node-version: ${{ matrix.node-version }} 21 | 22 | - run: npm install 23 | 24 | - run: npm test 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.built.js 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2019 Mark Wylde 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # esbuild-plugin-resolve 2 | Change where a module dependency is resolved/imported from. 3 | 4 | ## Installation 5 | ``` 6 | npm i --save-dev esbuild-plugin-resolve 7 | ``` 8 | 9 | ## Usage 10 | ```javascript 11 | import esbuild from 'esbuild'; 12 | import resolve from 'esbuild-plugin-resolve'; 13 | 14 | esbuild.build({ 15 | entryPoints: ['./src/index.js'], 16 | bundle: true, 17 | outfile: './lib/index.js', 18 | plugins: [resolve({ 19 | test: 'test-two/lib/example' 20 | })] 21 | }); 22 | 23 | // The following will be rewritten 24 | import test from 'test' 25 | import test from 'test-two/lib/example' 26 | ``` 27 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | function intercept (build, moduleName, moduleTarget) { 2 | const filter = new RegExp('^' + moduleName.replace(/[\^$\\.*+?()[\]{}|]/g, '\\$&') + '(?:\\/.*)?$'); 3 | 4 | build.onResolve({ filter, namespace: 'file' }, async (args) => { 5 | const external = Boolean(build.initialOptions.external?.includes(args.path)); 6 | 7 | if (external) { 8 | return { path: args.path, external }; 9 | } 10 | 11 | if (args.resolveDir === '') { 12 | return; 13 | } 14 | 15 | return build.resolve(args.path.replace(moduleName, moduleTarget), { kind: args.kind, resolveDir: args.resolveDir }); 16 | }); 17 | } 18 | 19 | const EsbuildPluginResolve = (options) => ({ 20 | name: 'esbuild-resolve', 21 | setup: (build) => { 22 | for (const moduleName of Object.keys(options)) { 23 | intercept(build, moduleName, options[moduleName]); 24 | } 25 | } 26 | }); 27 | 28 | export default EsbuildPluginResolve; 29 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "esbuild-plugin-resolve", 3 | "version": "2.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "esbuild-plugin-resolve", 9 | "version": "2.0.0", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "basictap": "^4.3.3", 13 | "esbuild": "^0.17.19", 14 | "routemeup": "^4.0.0" 15 | } 16 | }, 17 | "node_modules/@esbuild/android-arm": { 18 | "version": "0.17.19", 19 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 20 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 21 | "cpu": [ 22 | "arm" 23 | ], 24 | "dev": true, 25 | "optional": true, 26 | "os": [ 27 | "android" 28 | ], 29 | "engines": { 30 | "node": ">=12" 31 | } 32 | }, 33 | "node_modules/@esbuild/android-arm64": { 34 | "version": "0.17.19", 35 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 36 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 37 | "cpu": [ 38 | "arm64" 39 | ], 40 | "dev": true, 41 | "optional": true, 42 | "os": [ 43 | "android" 44 | ], 45 | "engines": { 46 | "node": ">=12" 47 | } 48 | }, 49 | "node_modules/@esbuild/android-x64": { 50 | "version": "0.17.19", 51 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 52 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 53 | "cpu": [ 54 | "x64" 55 | ], 56 | "dev": true, 57 | "optional": true, 58 | "os": [ 59 | "android" 60 | ], 61 | "engines": { 62 | "node": ">=12" 63 | } 64 | }, 65 | "node_modules/@esbuild/darwin-arm64": { 66 | "version": "0.17.19", 67 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 68 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 69 | "cpu": [ 70 | "arm64" 71 | ], 72 | "dev": true, 73 | "optional": true, 74 | "os": [ 75 | "darwin" 76 | ], 77 | "engines": { 78 | "node": ">=12" 79 | } 80 | }, 81 | "node_modules/@esbuild/darwin-x64": { 82 | "version": "0.17.19", 83 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 84 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 85 | "cpu": [ 86 | "x64" 87 | ], 88 | "dev": true, 89 | "optional": true, 90 | "os": [ 91 | "darwin" 92 | ], 93 | "engines": { 94 | "node": ">=12" 95 | } 96 | }, 97 | "node_modules/@esbuild/freebsd-arm64": { 98 | "version": "0.17.19", 99 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 100 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 101 | "cpu": [ 102 | "arm64" 103 | ], 104 | "dev": true, 105 | "optional": true, 106 | "os": [ 107 | "freebsd" 108 | ], 109 | "engines": { 110 | "node": ">=12" 111 | } 112 | }, 113 | "node_modules/@esbuild/freebsd-x64": { 114 | "version": "0.17.19", 115 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 116 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 117 | "cpu": [ 118 | "x64" 119 | ], 120 | "dev": true, 121 | "optional": true, 122 | "os": [ 123 | "freebsd" 124 | ], 125 | "engines": { 126 | "node": ">=12" 127 | } 128 | }, 129 | "node_modules/@esbuild/linux-arm": { 130 | "version": "0.17.19", 131 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 132 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 133 | "cpu": [ 134 | "arm" 135 | ], 136 | "dev": true, 137 | "optional": true, 138 | "os": [ 139 | "linux" 140 | ], 141 | "engines": { 142 | "node": ">=12" 143 | } 144 | }, 145 | "node_modules/@esbuild/linux-arm64": { 146 | "version": "0.17.19", 147 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 148 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 149 | "cpu": [ 150 | "arm64" 151 | ], 152 | "dev": true, 153 | "optional": true, 154 | "os": [ 155 | "linux" 156 | ], 157 | "engines": { 158 | "node": ">=12" 159 | } 160 | }, 161 | "node_modules/@esbuild/linux-ia32": { 162 | "version": "0.17.19", 163 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 164 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 165 | "cpu": [ 166 | "ia32" 167 | ], 168 | "dev": true, 169 | "optional": true, 170 | "os": [ 171 | "linux" 172 | ], 173 | "engines": { 174 | "node": ">=12" 175 | } 176 | }, 177 | "node_modules/@esbuild/linux-loong64": { 178 | "version": "0.17.19", 179 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 180 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 181 | "cpu": [ 182 | "loong64" 183 | ], 184 | "dev": true, 185 | "optional": true, 186 | "os": [ 187 | "linux" 188 | ], 189 | "engines": { 190 | "node": ">=12" 191 | } 192 | }, 193 | "node_modules/@esbuild/linux-mips64el": { 194 | "version": "0.17.19", 195 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 196 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 197 | "cpu": [ 198 | "mips64el" 199 | ], 200 | "dev": true, 201 | "optional": true, 202 | "os": [ 203 | "linux" 204 | ], 205 | "engines": { 206 | "node": ">=12" 207 | } 208 | }, 209 | "node_modules/@esbuild/linux-ppc64": { 210 | "version": "0.17.19", 211 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 212 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 213 | "cpu": [ 214 | "ppc64" 215 | ], 216 | "dev": true, 217 | "optional": true, 218 | "os": [ 219 | "linux" 220 | ], 221 | "engines": { 222 | "node": ">=12" 223 | } 224 | }, 225 | "node_modules/@esbuild/linux-riscv64": { 226 | "version": "0.17.19", 227 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 228 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 229 | "cpu": [ 230 | "riscv64" 231 | ], 232 | "dev": true, 233 | "optional": true, 234 | "os": [ 235 | "linux" 236 | ], 237 | "engines": { 238 | "node": ">=12" 239 | } 240 | }, 241 | "node_modules/@esbuild/linux-s390x": { 242 | "version": "0.17.19", 243 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 244 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 245 | "cpu": [ 246 | "s390x" 247 | ], 248 | "dev": true, 249 | "optional": true, 250 | "os": [ 251 | "linux" 252 | ], 253 | "engines": { 254 | "node": ">=12" 255 | } 256 | }, 257 | "node_modules/@esbuild/linux-x64": { 258 | "version": "0.17.19", 259 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 260 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 261 | "cpu": [ 262 | "x64" 263 | ], 264 | "dev": true, 265 | "optional": true, 266 | "os": [ 267 | "linux" 268 | ], 269 | "engines": { 270 | "node": ">=12" 271 | } 272 | }, 273 | "node_modules/@esbuild/netbsd-x64": { 274 | "version": "0.17.19", 275 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 276 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 277 | "cpu": [ 278 | "x64" 279 | ], 280 | "dev": true, 281 | "optional": true, 282 | "os": [ 283 | "netbsd" 284 | ], 285 | "engines": { 286 | "node": ">=12" 287 | } 288 | }, 289 | "node_modules/@esbuild/openbsd-x64": { 290 | "version": "0.17.19", 291 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 292 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 293 | "cpu": [ 294 | "x64" 295 | ], 296 | "dev": true, 297 | "optional": true, 298 | "os": [ 299 | "openbsd" 300 | ], 301 | "engines": { 302 | "node": ">=12" 303 | } 304 | }, 305 | "node_modules/@esbuild/sunos-x64": { 306 | "version": "0.17.19", 307 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 308 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 309 | "cpu": [ 310 | "x64" 311 | ], 312 | "dev": true, 313 | "optional": true, 314 | "os": [ 315 | "sunos" 316 | ], 317 | "engines": { 318 | "node": ">=12" 319 | } 320 | }, 321 | "node_modules/@esbuild/win32-arm64": { 322 | "version": "0.17.19", 323 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 324 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 325 | "cpu": [ 326 | "arm64" 327 | ], 328 | "dev": true, 329 | "optional": true, 330 | "os": [ 331 | "win32" 332 | ], 333 | "engines": { 334 | "node": ">=12" 335 | } 336 | }, 337 | "node_modules/@esbuild/win32-ia32": { 338 | "version": "0.17.19", 339 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 340 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 341 | "cpu": [ 342 | "ia32" 343 | ], 344 | "dev": true, 345 | "optional": true, 346 | "os": [ 347 | "win32" 348 | ], 349 | "engines": { 350 | "node": ">=12" 351 | } 352 | }, 353 | "node_modules/@esbuild/win32-x64": { 354 | "version": "0.17.19", 355 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 356 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 357 | "cpu": [ 358 | "x64" 359 | ], 360 | "dev": true, 361 | "optional": true, 362 | "os": [ 363 | "win32" 364 | ], 365 | "engines": { 366 | "node": ">=12" 367 | } 368 | }, 369 | "node_modules/array-buffer-byte-length": { 370 | "version": "1.0.0", 371 | "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", 372 | "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", 373 | "dev": true, 374 | "dependencies": { 375 | "call-bind": "^1.0.2", 376 | "is-array-buffer": "^3.0.1" 377 | }, 378 | "funding": { 379 | "url": "https://github.com/sponsors/ljharb" 380 | } 381 | }, 382 | "node_modules/available-typed-arrays": { 383 | "version": "1.0.5", 384 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", 385 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", 386 | "dev": true, 387 | "engines": { 388 | "node": ">= 0.4" 389 | }, 390 | "funding": { 391 | "url": "https://github.com/sponsors/ljharb" 392 | } 393 | }, 394 | "node_modules/basictap": { 395 | "version": "4.3.3", 396 | "resolved": "https://registry.npmjs.org/basictap/-/basictap-4.3.3.tgz", 397 | "integrity": "sha512-0kRTR+p9uS4u7sOYTlfIk1d/9idsI+0Bi+YVRomoo/HYXCtAINjJ0nTUcWjXRjSATQ4A51KmDA2DMAJihkILug==", 398 | "dev": true, 399 | "dependencies": { 400 | "colorette": "^2.0.20", 401 | "events": "^3.3.0", 402 | "just-tap": "^2.9.0" 403 | } 404 | }, 405 | "node_modules/call-bind": { 406 | "version": "1.0.2", 407 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 408 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 409 | "dev": true, 410 | "dependencies": { 411 | "function-bind": "^1.1.1", 412 | "get-intrinsic": "^1.0.2" 413 | }, 414 | "funding": { 415 | "url": "https://github.com/sponsors/ljharb" 416 | } 417 | }, 418 | "node_modules/colorette": { 419 | "version": "2.0.20", 420 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", 421 | "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", 422 | "dev": true 423 | }, 424 | "node_modules/deep-equal": { 425 | "version": "2.2.1", 426 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", 427 | "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", 428 | "dev": true, 429 | "dependencies": { 430 | "array-buffer-byte-length": "^1.0.0", 431 | "call-bind": "^1.0.2", 432 | "es-get-iterator": "^1.1.3", 433 | "get-intrinsic": "^1.2.0", 434 | "is-arguments": "^1.1.1", 435 | "is-array-buffer": "^3.0.2", 436 | "is-date-object": "^1.0.5", 437 | "is-regex": "^1.1.4", 438 | "is-shared-array-buffer": "^1.0.2", 439 | "isarray": "^2.0.5", 440 | "object-is": "^1.1.5", 441 | "object-keys": "^1.1.1", 442 | "object.assign": "^4.1.4", 443 | "regexp.prototype.flags": "^1.5.0", 444 | "side-channel": "^1.0.4", 445 | "which-boxed-primitive": "^1.0.2", 446 | "which-collection": "^1.0.1", 447 | "which-typed-array": "^1.1.9" 448 | }, 449 | "funding": { 450 | "url": "https://github.com/sponsors/ljharb" 451 | } 452 | }, 453 | "node_modules/define-properties": { 454 | "version": "1.2.0", 455 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", 456 | "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", 457 | "dev": true, 458 | "dependencies": { 459 | "has-property-descriptors": "^1.0.0", 460 | "object-keys": "^1.1.1" 461 | }, 462 | "engines": { 463 | "node": ">= 0.4" 464 | }, 465 | "funding": { 466 | "url": "https://github.com/sponsors/ljharb" 467 | } 468 | }, 469 | "node_modules/diff": { 470 | "version": "5.1.0", 471 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", 472 | "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", 473 | "dev": true, 474 | "engines": { 475 | "node": ">=0.3.1" 476 | } 477 | }, 478 | "node_modules/es-get-iterator": { 479 | "version": "1.1.3", 480 | "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", 481 | "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", 482 | "dev": true, 483 | "dependencies": { 484 | "call-bind": "^1.0.2", 485 | "get-intrinsic": "^1.1.3", 486 | "has-symbols": "^1.0.3", 487 | "is-arguments": "^1.1.1", 488 | "is-map": "^2.0.2", 489 | "is-set": "^2.0.2", 490 | "is-string": "^1.0.7", 491 | "isarray": "^2.0.5", 492 | "stop-iteration-iterator": "^1.0.0" 493 | }, 494 | "funding": { 495 | "url": "https://github.com/sponsors/ljharb" 496 | } 497 | }, 498 | "node_modules/esbuild": { 499 | "version": "0.17.19", 500 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", 501 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 502 | "dev": true, 503 | "hasInstallScript": true, 504 | "bin": { 505 | "esbuild": "bin/esbuild" 506 | }, 507 | "engines": { 508 | "node": ">=12" 509 | }, 510 | "optionalDependencies": { 511 | "@esbuild/android-arm": "0.17.19", 512 | "@esbuild/android-arm64": "0.17.19", 513 | "@esbuild/android-x64": "0.17.19", 514 | "@esbuild/darwin-arm64": "0.17.19", 515 | "@esbuild/darwin-x64": "0.17.19", 516 | "@esbuild/freebsd-arm64": "0.17.19", 517 | "@esbuild/freebsd-x64": "0.17.19", 518 | "@esbuild/linux-arm": "0.17.19", 519 | "@esbuild/linux-arm64": "0.17.19", 520 | "@esbuild/linux-ia32": "0.17.19", 521 | "@esbuild/linux-loong64": "0.17.19", 522 | "@esbuild/linux-mips64el": "0.17.19", 523 | "@esbuild/linux-ppc64": "0.17.19", 524 | "@esbuild/linux-riscv64": "0.17.19", 525 | "@esbuild/linux-s390x": "0.17.19", 526 | "@esbuild/linux-x64": "0.17.19", 527 | "@esbuild/netbsd-x64": "0.17.19", 528 | "@esbuild/openbsd-x64": "0.17.19", 529 | "@esbuild/sunos-x64": "0.17.19", 530 | "@esbuild/win32-arm64": "0.17.19", 531 | "@esbuild/win32-ia32": "0.17.19", 532 | "@esbuild/win32-x64": "0.17.19" 533 | } 534 | }, 535 | "node_modules/events": { 536 | "version": "3.3.0", 537 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 538 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 539 | "dev": true, 540 | "engines": { 541 | "node": ">=0.8.x" 542 | } 543 | }, 544 | "node_modules/for-each": { 545 | "version": "0.3.3", 546 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 547 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 548 | "dev": true, 549 | "dependencies": { 550 | "is-callable": "^1.1.3" 551 | } 552 | }, 553 | "node_modules/function-bind": { 554 | "version": "1.1.1", 555 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 556 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 557 | "dev": true 558 | }, 559 | "node_modules/functions-have-names": { 560 | "version": "1.2.3", 561 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 562 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 563 | "dev": true, 564 | "funding": { 565 | "url": "https://github.com/sponsors/ljharb" 566 | } 567 | }, 568 | "node_modules/get-intrinsic": { 569 | "version": "1.2.1", 570 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 571 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 572 | "dev": true, 573 | "dependencies": { 574 | "function-bind": "^1.1.1", 575 | "has": "^1.0.3", 576 | "has-proto": "^1.0.1", 577 | "has-symbols": "^1.0.3" 578 | }, 579 | "funding": { 580 | "url": "https://github.com/sponsors/ljharb" 581 | } 582 | }, 583 | "node_modules/gopd": { 584 | "version": "1.0.1", 585 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 586 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 587 | "dev": true, 588 | "dependencies": { 589 | "get-intrinsic": "^1.1.3" 590 | }, 591 | "funding": { 592 | "url": "https://github.com/sponsors/ljharb" 593 | } 594 | }, 595 | "node_modules/has": { 596 | "version": "1.0.3", 597 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 598 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 599 | "dev": true, 600 | "dependencies": { 601 | "function-bind": "^1.1.1" 602 | }, 603 | "engines": { 604 | "node": ">= 0.4.0" 605 | } 606 | }, 607 | "node_modules/has-bigints": { 608 | "version": "1.0.2", 609 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", 610 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", 611 | "dev": true, 612 | "funding": { 613 | "url": "https://github.com/sponsors/ljharb" 614 | } 615 | }, 616 | "node_modules/has-property-descriptors": { 617 | "version": "1.0.0", 618 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 619 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 620 | "dev": true, 621 | "dependencies": { 622 | "get-intrinsic": "^1.1.1" 623 | }, 624 | "funding": { 625 | "url": "https://github.com/sponsors/ljharb" 626 | } 627 | }, 628 | "node_modules/has-proto": { 629 | "version": "1.0.1", 630 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 631 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 632 | "dev": true, 633 | "engines": { 634 | "node": ">= 0.4" 635 | }, 636 | "funding": { 637 | "url": "https://github.com/sponsors/ljharb" 638 | } 639 | }, 640 | "node_modules/has-symbols": { 641 | "version": "1.0.3", 642 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 643 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 644 | "dev": true, 645 | "engines": { 646 | "node": ">= 0.4" 647 | }, 648 | "funding": { 649 | "url": "https://github.com/sponsors/ljharb" 650 | } 651 | }, 652 | "node_modules/has-tostringtag": { 653 | "version": "1.0.0", 654 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 655 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 656 | "dev": true, 657 | "dependencies": { 658 | "has-symbols": "^1.0.2" 659 | }, 660 | "engines": { 661 | "node": ">= 0.4" 662 | }, 663 | "funding": { 664 | "url": "https://github.com/sponsors/ljharb" 665 | } 666 | }, 667 | "node_modules/internal-slot": { 668 | "version": "1.0.5", 669 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", 670 | "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", 671 | "dev": true, 672 | "dependencies": { 673 | "get-intrinsic": "^1.2.0", 674 | "has": "^1.0.3", 675 | "side-channel": "^1.0.4" 676 | }, 677 | "engines": { 678 | "node": ">= 0.4" 679 | } 680 | }, 681 | "node_modules/is-arguments": { 682 | "version": "1.1.1", 683 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", 684 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", 685 | "dev": true, 686 | "dependencies": { 687 | "call-bind": "^1.0.2", 688 | "has-tostringtag": "^1.0.0" 689 | }, 690 | "engines": { 691 | "node": ">= 0.4" 692 | }, 693 | "funding": { 694 | "url": "https://github.com/sponsors/ljharb" 695 | } 696 | }, 697 | "node_modules/is-array-buffer": { 698 | "version": "3.0.2", 699 | "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", 700 | "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", 701 | "dev": true, 702 | "dependencies": { 703 | "call-bind": "^1.0.2", 704 | "get-intrinsic": "^1.2.0", 705 | "is-typed-array": "^1.1.10" 706 | }, 707 | "funding": { 708 | "url": "https://github.com/sponsors/ljharb" 709 | } 710 | }, 711 | "node_modules/is-bigint": { 712 | "version": "1.0.4", 713 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 714 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 715 | "dev": true, 716 | "dependencies": { 717 | "has-bigints": "^1.0.1" 718 | }, 719 | "funding": { 720 | "url": "https://github.com/sponsors/ljharb" 721 | } 722 | }, 723 | "node_modules/is-boolean-object": { 724 | "version": "1.1.2", 725 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 726 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 727 | "dev": true, 728 | "dependencies": { 729 | "call-bind": "^1.0.2", 730 | "has-tostringtag": "^1.0.0" 731 | }, 732 | "engines": { 733 | "node": ">= 0.4" 734 | }, 735 | "funding": { 736 | "url": "https://github.com/sponsors/ljharb" 737 | } 738 | }, 739 | "node_modules/is-callable": { 740 | "version": "1.2.7", 741 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 742 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 743 | "dev": true, 744 | "engines": { 745 | "node": ">= 0.4" 746 | }, 747 | "funding": { 748 | "url": "https://github.com/sponsors/ljharb" 749 | } 750 | }, 751 | "node_modules/is-date-object": { 752 | "version": "1.0.5", 753 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 754 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 755 | "dev": true, 756 | "dependencies": { 757 | "has-tostringtag": "^1.0.0" 758 | }, 759 | "engines": { 760 | "node": ">= 0.4" 761 | }, 762 | "funding": { 763 | "url": "https://github.com/sponsors/ljharb" 764 | } 765 | }, 766 | "node_modules/is-map": { 767 | "version": "2.0.2", 768 | "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", 769 | "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", 770 | "dev": true, 771 | "funding": { 772 | "url": "https://github.com/sponsors/ljharb" 773 | } 774 | }, 775 | "node_modules/is-number-object": { 776 | "version": "1.0.7", 777 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", 778 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", 779 | "dev": true, 780 | "dependencies": { 781 | "has-tostringtag": "^1.0.0" 782 | }, 783 | "engines": { 784 | "node": ">= 0.4" 785 | }, 786 | "funding": { 787 | "url": "https://github.com/sponsors/ljharb" 788 | } 789 | }, 790 | "node_modules/is-regex": { 791 | "version": "1.1.4", 792 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 793 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 794 | "dev": true, 795 | "dependencies": { 796 | "call-bind": "^1.0.2", 797 | "has-tostringtag": "^1.0.0" 798 | }, 799 | "engines": { 800 | "node": ">= 0.4" 801 | }, 802 | "funding": { 803 | "url": "https://github.com/sponsors/ljharb" 804 | } 805 | }, 806 | "node_modules/is-set": { 807 | "version": "2.0.2", 808 | "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", 809 | "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", 810 | "dev": true, 811 | "funding": { 812 | "url": "https://github.com/sponsors/ljharb" 813 | } 814 | }, 815 | "node_modules/is-shared-array-buffer": { 816 | "version": "1.0.2", 817 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", 818 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", 819 | "dev": true, 820 | "dependencies": { 821 | "call-bind": "^1.0.2" 822 | }, 823 | "funding": { 824 | "url": "https://github.com/sponsors/ljharb" 825 | } 826 | }, 827 | "node_modules/is-string": { 828 | "version": "1.0.7", 829 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 830 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 831 | "dev": true, 832 | "dependencies": { 833 | "has-tostringtag": "^1.0.0" 834 | }, 835 | "engines": { 836 | "node": ">= 0.4" 837 | }, 838 | "funding": { 839 | "url": "https://github.com/sponsors/ljharb" 840 | } 841 | }, 842 | "node_modules/is-symbol": { 843 | "version": "1.0.4", 844 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 845 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 846 | "dev": true, 847 | "dependencies": { 848 | "has-symbols": "^1.0.2" 849 | }, 850 | "engines": { 851 | "node": ">= 0.4" 852 | }, 853 | "funding": { 854 | "url": "https://github.com/sponsors/ljharb" 855 | } 856 | }, 857 | "node_modules/is-typed-array": { 858 | "version": "1.1.10", 859 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", 860 | "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", 861 | "dev": true, 862 | "dependencies": { 863 | "available-typed-arrays": "^1.0.5", 864 | "call-bind": "^1.0.2", 865 | "for-each": "^0.3.3", 866 | "gopd": "^1.0.1", 867 | "has-tostringtag": "^1.0.0" 868 | }, 869 | "engines": { 870 | "node": ">= 0.4" 871 | }, 872 | "funding": { 873 | "url": "https://github.com/sponsors/ljharb" 874 | } 875 | }, 876 | "node_modules/is-weakmap": { 877 | "version": "2.0.1", 878 | "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", 879 | "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", 880 | "dev": true, 881 | "funding": { 882 | "url": "https://github.com/sponsors/ljharb" 883 | } 884 | }, 885 | "node_modules/is-weakset": { 886 | "version": "2.0.2", 887 | "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", 888 | "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", 889 | "dev": true, 890 | "dependencies": { 891 | "call-bind": "^1.0.2", 892 | "get-intrinsic": "^1.1.1" 893 | }, 894 | "funding": { 895 | "url": "https://github.com/sponsors/ljharb" 896 | } 897 | }, 898 | "node_modules/isarray": { 899 | "version": "2.0.5", 900 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 901 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 902 | "dev": true 903 | }, 904 | "node_modules/just-tap": { 905 | "version": "2.9.0", 906 | "resolved": "https://registry.npmjs.org/just-tap/-/just-tap-2.9.0.tgz", 907 | "integrity": "sha512-VNbp4xHVS00RMB4YFLAyMbOHkLXtWcqdrrC70Akj0rhfPwQK/m1qit9TFjVmnpOEsO95c8ZPmKXSPuVSLQIRIg==", 908 | "dev": true, 909 | "dependencies": { 910 | "deep-equal": "^2.2.0", 911 | "diff": "^5.1.0" 912 | } 913 | }, 914 | "node_modules/object-inspect": { 915 | "version": "1.12.3", 916 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 917 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 918 | "dev": true, 919 | "funding": { 920 | "url": "https://github.com/sponsors/ljharb" 921 | } 922 | }, 923 | "node_modules/object-is": { 924 | "version": "1.1.5", 925 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", 926 | "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", 927 | "dev": true, 928 | "dependencies": { 929 | "call-bind": "^1.0.2", 930 | "define-properties": "^1.1.3" 931 | }, 932 | "engines": { 933 | "node": ">= 0.4" 934 | }, 935 | "funding": { 936 | "url": "https://github.com/sponsors/ljharb" 937 | } 938 | }, 939 | "node_modules/object-keys": { 940 | "version": "1.1.1", 941 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 942 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 943 | "dev": true, 944 | "engines": { 945 | "node": ">= 0.4" 946 | } 947 | }, 948 | "node_modules/object.assign": { 949 | "version": "4.1.4", 950 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", 951 | "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", 952 | "dev": true, 953 | "dependencies": { 954 | "call-bind": "^1.0.2", 955 | "define-properties": "^1.1.4", 956 | "has-symbols": "^1.0.3", 957 | "object-keys": "^1.1.1" 958 | }, 959 | "engines": { 960 | "node": ">= 0.4" 961 | }, 962 | "funding": { 963 | "url": "https://github.com/sponsors/ljharb" 964 | } 965 | }, 966 | "node_modules/path-to-regexp": { 967 | "version": "6.2.1", 968 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", 969 | "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", 970 | "dev": true 971 | }, 972 | "node_modules/regexp.prototype.flags": { 973 | "version": "1.5.0", 974 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", 975 | "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", 976 | "dev": true, 977 | "dependencies": { 978 | "call-bind": "^1.0.2", 979 | "define-properties": "^1.2.0", 980 | "functions-have-names": "^1.2.3" 981 | }, 982 | "engines": { 983 | "node": ">= 0.4" 984 | }, 985 | "funding": { 986 | "url": "https://github.com/sponsors/ljharb" 987 | } 988 | }, 989 | "node_modules/routemeup": { 990 | "version": "4.0.0", 991 | "resolved": "https://registry.npmjs.org/routemeup/-/routemeup-4.0.0.tgz", 992 | "integrity": "sha512-XkGBFR6pstpbnfV5QfiwwuzNMBIZzZLyKHAvo+DPjZ6uHzSQhfIYIqcLvTenIhGI7WQcZnzhb4jj0elrotxnbA==", 993 | "dev": true, 994 | "dependencies": { 995 | "path-to-regexp": "^6.2.1" 996 | } 997 | }, 998 | "node_modules/side-channel": { 999 | "version": "1.0.4", 1000 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1001 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1002 | "dev": true, 1003 | "dependencies": { 1004 | "call-bind": "^1.0.0", 1005 | "get-intrinsic": "^1.0.2", 1006 | "object-inspect": "^1.9.0" 1007 | }, 1008 | "funding": { 1009 | "url": "https://github.com/sponsors/ljharb" 1010 | } 1011 | }, 1012 | "node_modules/stop-iteration-iterator": { 1013 | "version": "1.0.0", 1014 | "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", 1015 | "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", 1016 | "dev": true, 1017 | "dependencies": { 1018 | "internal-slot": "^1.0.4" 1019 | }, 1020 | "engines": { 1021 | "node": ">= 0.4" 1022 | } 1023 | }, 1024 | "node_modules/which-boxed-primitive": { 1025 | "version": "1.0.2", 1026 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 1027 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 1028 | "dev": true, 1029 | "dependencies": { 1030 | "is-bigint": "^1.0.1", 1031 | "is-boolean-object": "^1.1.0", 1032 | "is-number-object": "^1.0.4", 1033 | "is-string": "^1.0.5", 1034 | "is-symbol": "^1.0.3" 1035 | }, 1036 | "funding": { 1037 | "url": "https://github.com/sponsors/ljharb" 1038 | } 1039 | }, 1040 | "node_modules/which-collection": { 1041 | "version": "1.0.1", 1042 | "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", 1043 | "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", 1044 | "dev": true, 1045 | "dependencies": { 1046 | "is-map": "^2.0.1", 1047 | "is-set": "^2.0.1", 1048 | "is-weakmap": "^2.0.1", 1049 | "is-weakset": "^2.0.1" 1050 | }, 1051 | "funding": { 1052 | "url": "https://github.com/sponsors/ljharb" 1053 | } 1054 | }, 1055 | "node_modules/which-typed-array": { 1056 | "version": "1.1.9", 1057 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", 1058 | "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", 1059 | "dev": true, 1060 | "dependencies": { 1061 | "available-typed-arrays": "^1.0.5", 1062 | "call-bind": "^1.0.2", 1063 | "for-each": "^0.3.3", 1064 | "gopd": "^1.0.1", 1065 | "has-tostringtag": "^1.0.0", 1066 | "is-typed-array": "^1.1.10" 1067 | }, 1068 | "engines": { 1069 | "node": ">= 0.4" 1070 | }, 1071 | "funding": { 1072 | "url": "https://github.com/sponsors/ljharb" 1073 | } 1074 | } 1075 | } 1076 | } 1077 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "esbuild-plugin-resolve", 3 | "version": "2.0.0", 4 | "type": "module", 5 | "description": "Change where a module dependency is resolved/imported from.", 6 | "main": "index.js", 7 | "scripts": { 8 | "test": "node test" 9 | }, 10 | "keywords": [ 11 | "esbuild", 12 | "esbuild resolve", 13 | "resolve", 14 | "swap dependencies", 15 | "import", 16 | "dependencies" 17 | ], 18 | "author": { 19 | "email": "me@markwylde.com", 20 | "name": "Mark Wylde", 21 | "url": "https://github.com/markwylde" 22 | }, 23 | "license": "MIT", 24 | "repository": { 25 | "type": "git", 26 | "url": "git+https://github.com/markwylde/esbuild-plugin-resolve.git" 27 | }, 28 | "bugs": { 29 | "url": "https://github.com/markwylde/esbuild-plugin-resolve/issues" 30 | }, 31 | "homepage": "https://github.com/markwylde/esbuild-plugin-resolve#readme", 32 | "devDependencies": { 33 | "basictap": "^4.3.3", 34 | "esbuild": "^0.17.19", 35 | "routemeup": "^4.0.0" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /test/external/index.js: -------------------------------------------------------------------------------- 1 | import test from 'test'; 2 | console.log(test); 3 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import test from 'basictap'; 3 | import esbuild from 'esbuild'; 4 | 5 | import resolve from '../index.js'; 6 | 7 | const clean = string => string.replace(/[ ,\n]/g, ''); 8 | 9 | test('simple resolution', async t => { 10 | t.plan(1); 11 | 12 | await esbuild.build({ 13 | entryPoints: ['./test/simple/index.js'], 14 | bundle: true, 15 | outfile: './test/simple/index.built.js', 16 | plugins: [resolve({ 17 | test: '../shared/importable', 18 | func: '../shared/func' 19 | })] 20 | }); 21 | 22 | const result = await fs.promises.readFile('./test/simple/index.built.js', 'utf8'); 23 | 24 | t.equal(clean(result), clean(` 25 | (() => { 26 | // test/shared/importable.js 27 | function importable_default() { 28 | return "got here ok"; 29 | } 30 | 31 | // test/shared/func/fun.js 32 | function fun_default() { 33 | return "fun is ok"; 34 | } 35 | 36 | // test/simple/index.js 37 | console.log(importable_default); 38 | console.log(fun_default); 39 | })(); 40 | `)); 41 | }); 42 | 43 | test('external resolution', async t => { 44 | t.plan(1); 45 | 46 | await esbuild.build({ 47 | entryPoints: ['./test/simple/index.js'], 48 | bundle: true, 49 | outfile: './test/simple/index.built.js', 50 | plugins: [resolve({ 51 | test: 'routemeup' 52 | })], 53 | external: [ 54 | 'func', 55 | 'func/fun' 56 | ] 57 | }); 58 | 59 | const result = await fs.promises.readFile('./test/simple/index.built.js', 'utf8'); 60 | 61 | t.ok(result.includes('stringToRegexp')); 62 | }); 63 | -------------------------------------------------------------------------------- /test/shared/func/fun.js: -------------------------------------------------------------------------------- 1 | 2 | export default function () { 3 | return 'fun is ok'; 4 | } 5 | -------------------------------------------------------------------------------- /test/shared/importable.js: -------------------------------------------------------------------------------- 1 | export default function () { 2 | return 'got here ok'; 3 | } 4 | -------------------------------------------------------------------------------- /test/simple/index.js: -------------------------------------------------------------------------------- 1 | import test from 'test'; 2 | import func from 'func/fun'; 3 | console.log(test); 4 | console.log(func); 5 | --------------------------------------------------------------------------------