Mirror: React hooks for accessible, common web interactions. UI super powers without the UI.

chore: Upgrade Rollup build and refactor for bundlesize savings (#10)

* Upgrade Rollup dependencies

* Update Rollup build process

* Replace husky-v4

* Update selection restoration implementation

* Simplify getFocusTargets

* Simplify focus utilities

* Simplify click helpers

* Simplify usePriority

* Remove unnecessary utility function

authored by kitten.sh and committed by

GitHub 35a2870b 4e259a06

+836 -664
+15 -16
package.json
··· 4 4 "version": "0.1.0", 5 5 "main": "dist/use-interactions.js", 6 6 "module": "dist/use-interactions.es.js", 7 - "types": "dist/types/index.d.ts", 7 + "types": "dist/use-interactions.d.ts", 8 8 "source": "src/index.ts", 9 9 "sideEffects": false, 10 10 "license": "MIT", ··· 31 31 "check": "tsc", 32 32 "test": "cypress run --component", 33 33 "test:open": "cypress open --component", 34 - "build": "rollup -c rollup.config.js", 35 - "prepublishOnly": "run-s check build" 34 + "build": "rollup -c scripts/rollup.config.mjs", 35 + "prepublishOnly": "run-s check build", 36 + "prepare": "node ./scripts/prepare.js || true" 36 37 }, 37 38 "prettier": { 38 39 "singleQuote": true, ··· 44 45 "*.json": "prettier --write", 45 46 "*.md": "prettier --write" 46 47 }, 47 - "husky": { 48 - "hooks": { 49 - "pre-commit": "lint-staged --quiet --relative" 50 - } 51 - }, 52 48 "peerDependencies": { 53 49 "react": ">= 16.8.0" 54 50 }, 55 51 "devDependencies": { 52 + "@babel/core": "^7.21.8", 53 + "@babel/plugin-transform-block-scoping": "^7.21.0", 54 + "@babel/plugin-transform-typescript": "^7.21.3", 56 55 "@cypress/react": "^6.2.0", 57 56 "@cypress/vite-dev-server": "^3.3.1", 58 - "@rollup/plugin-buble": "^0.21.3", 59 - "@rollup/plugin-commonjs": "^21.0.2", 60 - "@rollup/plugin-node-resolve": "^13.1.3", 57 + "@rollup/plugin-babel": "^6.0.3", 58 + "@rollup/plugin-commonjs": "^25.0.0", 59 + "@rollup/plugin-node-resolve": "^15.0.2", 60 + "@rollup/plugin-terser": "^0.4.3", 61 61 "@types/react": "^17.0.42", 62 62 "cypress": "^10.10.0", 63 63 "cypress-real-events": "^1.7.2", 64 - "husky-v4": "^4.3.8", 65 64 "lint-staged": "^12.3.7", 66 65 "npm-run-all": "^4.1.5", 67 66 "prettier": "^2.6.0", 68 67 "react": "^17.0.2", 69 68 "react-dom": "^17.0.2", 70 - "rollup": "^2.70.1", 71 - "rollup-plugin-terser": "^7.0.2", 72 - "rollup-plugin-typescript2": "^0.31.2", 73 - "typescript": "^4.6.2", 69 + "rollup": "^3.23.0", 70 + "rollup-plugin-cjs-check": "^1.0.2", 71 + "rollup-plugin-dts": "^5.3.0", 72 + "typescript": "^5.0.4", 74 73 "vite": "^2.8.6" 75 74 } 76 75 }
+529 -482
pnpm-lock.yaml
··· 1 1 lockfileVersion: '6.0' 2 2 3 3 devDependencies: 4 + '@babel/core': 5 + specifier: ^7.21.8 6 + version: 7.21.8 7 + '@babel/plugin-transform-block-scoping': 8 + specifier: ^7.21.0 9 + version: 7.21.0(@babel/core@7.21.8) 10 + '@babel/plugin-transform-typescript': 11 + specifier: ^7.21.3 12 + version: 7.21.3(@babel/core@7.21.8) 4 13 '@cypress/react': 5 14 specifier: ^6.2.0 6 15 version: 6.2.0(@types/react@17.0.42)(cypress@10.10.0)(react-dom@17.0.2)(react@17.0.2) 7 16 '@cypress/vite-dev-server': 8 17 specifier: ^3.3.1 9 18 version: 3.3.1 10 - '@rollup/plugin-buble': 11 - specifier: ^0.21.3 12 - version: 0.21.3(rollup@2.70.1) 19 + '@rollup/plugin-babel': 20 + specifier: ^6.0.3 21 + version: 6.0.3(@babel/core@7.21.8)(rollup@3.23.0) 13 22 '@rollup/plugin-commonjs': 14 - specifier: ^21.0.2 15 - version: 21.0.2(rollup@2.70.1) 23 + specifier: ^25.0.0 24 + version: 25.0.0(rollup@3.23.0) 16 25 '@rollup/plugin-node-resolve': 17 - specifier: ^13.1.3 18 - version: 13.1.3(rollup@2.70.1) 26 + specifier: ^15.0.2 27 + version: 15.0.2(rollup@3.23.0) 28 + '@rollup/plugin-terser': 29 + specifier: ^0.4.3 30 + version: 0.4.3(rollup@3.23.0) 19 31 '@types/react': 20 32 specifier: ^17.0.42 21 33 version: 17.0.42 ··· 25 37 cypress-real-events: 26 38 specifier: ^1.7.2 27 39 version: 1.7.2(cypress@10.10.0) 28 - husky-v4: 29 - specifier: ^4.3.8 30 - version: 4.3.8 31 40 lint-staged: 32 41 specifier: ^12.3.7 33 42 version: 12.3.7 ··· 44 53 specifier: ^17.0.2 45 54 version: 17.0.2(react@17.0.2) 46 55 rollup: 47 - specifier: ^2.70.1 48 - version: 2.70.1 49 - rollup-plugin-terser: 50 - specifier: ^7.0.2 51 - version: 7.0.2(rollup@2.70.1) 52 - rollup-plugin-typescript2: 53 - specifier: ^0.31.2 54 - version: 0.31.2(rollup@2.70.1)(typescript@4.6.2) 56 + specifier: ^3.23.0 57 + version: 3.23.0 58 + rollup-plugin-cjs-check: 59 + specifier: ^1.0.2 60 + version: 1.0.2(rollup@3.23.0) 61 + rollup-plugin-dts: 62 + specifier: ^5.3.0 63 + version: 5.3.0(rollup@3.23.0)(typescript@5.0.4) 55 64 typescript: 56 - specifier: ^4.6.2 57 - version: 4.6.2 65 + specifier: ^5.0.4 66 + version: 5.0.4 58 67 vite: 59 68 specifier: ^2.8.6 60 69 version: 2.8.6 61 70 62 71 packages: 63 72 73 + /@ampproject/remapping@2.2.1: 74 + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 75 + engines: {node: '>=6.0.0'} 76 + dependencies: 77 + '@jridgewell/gen-mapping': 0.3.3 78 + '@jridgewell/trace-mapping': 0.3.18 79 + dev: true 80 + 64 81 /@babel/code-frame@7.21.4: 65 82 resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} 66 83 engines: {node: '>=6.9.0'} ··· 68 85 '@babel/highlight': 7.18.6 69 86 dev: true 70 87 88 + /@babel/compat-data@7.21.9: 89 + resolution: {integrity: sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==} 90 + engines: {node: '>=6.9.0'} 91 + dev: true 92 + 93 + /@babel/core@7.21.8: 94 + resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} 95 + engines: {node: '>=6.9.0'} 96 + dependencies: 97 + '@ampproject/remapping': 2.2.1 98 + '@babel/code-frame': 7.21.4 99 + '@babel/generator': 7.21.9 100 + '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) 101 + '@babel/helper-module-transforms': 7.21.5 102 + '@babel/helpers': 7.21.5 103 + '@babel/parser': 7.21.9 104 + '@babel/template': 7.21.9 105 + '@babel/traverse': 7.21.5 106 + '@babel/types': 7.21.5 107 + convert-source-map: 1.9.0 108 + debug: 4.3.4(supports-color@9.3.1) 109 + gensync: 1.0.0-beta.2 110 + json5: 2.2.3 111 + semver: 6.3.0 112 + transitivePeerDependencies: 113 + - supports-color 114 + dev: true 115 + 116 + /@babel/generator@7.21.9: 117 + resolution: {integrity: sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==} 118 + engines: {node: '>=6.9.0'} 119 + dependencies: 120 + '@babel/types': 7.21.5 121 + '@jridgewell/gen-mapping': 0.3.3 122 + '@jridgewell/trace-mapping': 0.3.18 123 + jsesc: 2.5.2 124 + dev: true 125 + 126 + /@babel/helper-annotate-as-pure@7.18.6: 127 + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} 128 + engines: {node: '>=6.9.0'} 129 + dependencies: 130 + '@babel/types': 7.21.5 131 + dev: true 132 + 133 + /@babel/helper-compilation-targets@7.21.5(@babel/core@7.21.8): 134 + resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==} 135 + engines: {node: '>=6.9.0'} 136 + peerDependencies: 137 + '@babel/core': ^7.0.0 138 + dependencies: 139 + '@babel/compat-data': 7.21.9 140 + '@babel/core': 7.21.8 141 + '@babel/helper-validator-option': 7.21.0 142 + browserslist: 4.21.5 143 + lru-cache: 5.1.1 144 + semver: 6.3.0 145 + dev: true 146 + 147 + /@babel/helper-create-class-features-plugin@7.21.8(@babel/core@7.21.8): 148 + resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==} 149 + engines: {node: '>=6.9.0'} 150 + peerDependencies: 151 + '@babel/core': ^7.0.0 152 + dependencies: 153 + '@babel/core': 7.21.8 154 + '@babel/helper-annotate-as-pure': 7.18.6 155 + '@babel/helper-environment-visitor': 7.21.5 156 + '@babel/helper-function-name': 7.21.0 157 + '@babel/helper-member-expression-to-functions': 7.21.5 158 + '@babel/helper-optimise-call-expression': 7.18.6 159 + '@babel/helper-replace-supers': 7.21.5 160 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 161 + '@babel/helper-split-export-declaration': 7.18.6 162 + semver: 6.3.0 163 + transitivePeerDependencies: 164 + - supports-color 165 + dev: true 166 + 167 + /@babel/helper-environment-visitor@7.21.5: 168 + resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==} 169 + engines: {node: '>=6.9.0'} 170 + dev: true 171 + 172 + /@babel/helper-function-name@7.21.0: 173 + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} 174 + engines: {node: '>=6.9.0'} 175 + dependencies: 176 + '@babel/template': 7.21.9 177 + '@babel/types': 7.21.5 178 + dev: true 179 + 180 + /@babel/helper-hoist-variables@7.18.6: 181 + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 182 + engines: {node: '>=6.9.0'} 183 + dependencies: 184 + '@babel/types': 7.21.5 185 + dev: true 186 + 187 + /@babel/helper-member-expression-to-functions@7.21.5: 188 + resolution: {integrity: sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==} 189 + engines: {node: '>=6.9.0'} 190 + dependencies: 191 + '@babel/types': 7.21.5 192 + dev: true 193 + 194 + /@babel/helper-module-imports@7.21.4: 195 + resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} 196 + engines: {node: '>=6.9.0'} 197 + dependencies: 198 + '@babel/types': 7.21.5 199 + dev: true 200 + 201 + /@babel/helper-module-transforms@7.21.5: 202 + resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==} 203 + engines: {node: '>=6.9.0'} 204 + dependencies: 205 + '@babel/helper-environment-visitor': 7.21.5 206 + '@babel/helper-module-imports': 7.21.4 207 + '@babel/helper-simple-access': 7.21.5 208 + '@babel/helper-split-export-declaration': 7.18.6 209 + '@babel/helper-validator-identifier': 7.19.1 210 + '@babel/template': 7.21.9 211 + '@babel/traverse': 7.21.5 212 + '@babel/types': 7.21.5 213 + transitivePeerDependencies: 214 + - supports-color 215 + dev: true 216 + 217 + /@babel/helper-optimise-call-expression@7.18.6: 218 + resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} 219 + engines: {node: '>=6.9.0'} 220 + dependencies: 221 + '@babel/types': 7.21.5 222 + dev: true 223 + 224 + /@babel/helper-plugin-utils@7.21.5: 225 + resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==} 226 + engines: {node: '>=6.9.0'} 227 + dev: true 228 + 229 + /@babel/helper-replace-supers@7.21.5: 230 + resolution: {integrity: sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==} 231 + engines: {node: '>=6.9.0'} 232 + dependencies: 233 + '@babel/helper-environment-visitor': 7.21.5 234 + '@babel/helper-member-expression-to-functions': 7.21.5 235 + '@babel/helper-optimise-call-expression': 7.18.6 236 + '@babel/template': 7.21.9 237 + '@babel/traverse': 7.21.5 238 + '@babel/types': 7.21.5 239 + transitivePeerDependencies: 240 + - supports-color 241 + dev: true 242 + 243 + /@babel/helper-simple-access@7.21.5: 244 + resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==} 245 + engines: {node: '>=6.9.0'} 246 + dependencies: 247 + '@babel/types': 7.21.5 248 + dev: true 249 + 250 + /@babel/helper-skip-transparent-expression-wrappers@7.20.0: 251 + resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} 252 + engines: {node: '>=6.9.0'} 253 + dependencies: 254 + '@babel/types': 7.21.5 255 + dev: true 256 + 257 + /@babel/helper-split-export-declaration@7.18.6: 258 + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} 259 + engines: {node: '>=6.9.0'} 260 + dependencies: 261 + '@babel/types': 7.21.5 262 + dev: true 263 + 264 + /@babel/helper-string-parser@7.21.5: 265 + resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} 266 + engines: {node: '>=6.9.0'} 267 + dev: true 268 + 71 269 /@babel/helper-validator-identifier@7.19.1: 72 270 resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 73 271 engines: {node: '>=6.9.0'} 74 272 dev: true 75 273 274 + /@babel/helper-validator-option@7.21.0: 275 + resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} 276 + engines: {node: '>=6.9.0'} 277 + dev: true 278 + 279 + /@babel/helpers@7.21.5: 280 + resolution: {integrity: sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==} 281 + engines: {node: '>=6.9.0'} 282 + dependencies: 283 + '@babel/template': 7.21.9 284 + '@babel/traverse': 7.21.5 285 + '@babel/types': 7.21.5 286 + transitivePeerDependencies: 287 + - supports-color 288 + dev: true 289 + 76 290 /@babel/highlight@7.18.6: 77 291 resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 78 292 engines: {node: '>=6.9.0'} ··· 82 296 js-tokens: 4.0.0 83 297 dev: true 84 298 299 + /@babel/parser@7.21.9: 300 + resolution: {integrity: sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==} 301 + engines: {node: '>=6.0.0'} 302 + hasBin: true 303 + dependencies: 304 + '@babel/types': 7.21.5 305 + dev: true 306 + 307 + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.8): 308 + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} 309 + engines: {node: '>=6.9.0'} 310 + peerDependencies: 311 + '@babel/core': ^7.0.0-0 312 + dependencies: 313 + '@babel/core': 7.21.8 314 + '@babel/helper-plugin-utils': 7.21.5 315 + dev: true 316 + 317 + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.8): 318 + resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} 319 + engines: {node: '>=6.9.0'} 320 + peerDependencies: 321 + '@babel/core': ^7.0.0-0 322 + dependencies: 323 + '@babel/core': 7.21.8 324 + '@babel/helper-plugin-utils': 7.21.5 325 + dev: true 326 + 327 + /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.8): 328 + resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} 329 + engines: {node: '>=6.9.0'} 330 + peerDependencies: 331 + '@babel/core': ^7.0.0-0 332 + dependencies: 333 + '@babel/core': 7.21.8 334 + '@babel/helper-annotate-as-pure': 7.18.6 335 + '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) 336 + '@babel/helper-plugin-utils': 7.21.5 337 + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8) 338 + transitivePeerDependencies: 339 + - supports-color 340 + dev: true 341 + 342 + /@babel/template@7.21.9: 343 + resolution: {integrity: sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==} 344 + engines: {node: '>=6.9.0'} 345 + dependencies: 346 + '@babel/code-frame': 7.21.4 347 + '@babel/parser': 7.21.9 348 + '@babel/types': 7.21.5 349 + dev: true 350 + 351 + /@babel/traverse@7.21.5: 352 + resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==} 353 + engines: {node: '>=6.9.0'} 354 + dependencies: 355 + '@babel/code-frame': 7.21.4 356 + '@babel/generator': 7.21.9 357 + '@babel/helper-environment-visitor': 7.21.5 358 + '@babel/helper-function-name': 7.21.0 359 + '@babel/helper-hoist-variables': 7.18.6 360 + '@babel/helper-split-export-declaration': 7.18.6 361 + '@babel/parser': 7.21.9 362 + '@babel/types': 7.21.5 363 + debug: 4.3.4(supports-color@9.3.1) 364 + globals: 11.12.0 365 + transitivePeerDependencies: 366 + - supports-color 367 + dev: true 368 + 369 + /@babel/types@7.21.5: 370 + resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} 371 + engines: {node: '>=6.9.0'} 372 + dependencies: 373 + '@babel/helper-string-parser': 7.21.5 374 + '@babel/helper-validator-identifier': 7.19.1 375 + to-fast-properties: 2.0.0 376 + dev: true 377 + 85 378 /@colors/colors@1.5.0: 86 379 resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} 87 380 engines: {node: '>=0.1.90'} ··· 201 494 '@jridgewell/sourcemap-codec': 1.4.14 202 495 dev: true 203 496 204 - /@rollup/plugin-buble@0.21.3(rollup@2.70.1): 205 - resolution: {integrity: sha512-Iv8cCuFPnMdqV4pcyU+OrfjOfagPArRQ1PyQjx5KgHk3dARedI+8PNTLSMpJts0lQJr8yF2pAU4GxpxCBJ9HYw==} 206 - engines: {node: '>= 8.0.0'} 497 + /@rollup/plugin-babel@6.0.3(@babel/core@7.21.8)(rollup@3.23.0): 498 + resolution: {integrity: sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==} 499 + engines: {node: '>=14.0.0'} 207 500 peerDependencies: 208 - rollup: ^1.20.0||^2.0.0 501 + '@babel/core': ^7.0.0 502 + '@types/babel__core': ^7.1.9 503 + rollup: ^1.20.0||^2.0.0||^3.0.0 504 + peerDependenciesMeta: 505 + '@types/babel__core': 506 + optional: true 507 + rollup: 508 + optional: true 209 509 dependencies: 210 - '@rollup/pluginutils': 3.1.0(rollup@2.70.1) 211 - '@types/buble': 0.19.2 212 - buble: 0.20.0 213 - rollup: 2.70.1 510 + '@babel/core': 7.21.8 511 + '@babel/helper-module-imports': 7.21.4 512 + '@rollup/pluginutils': 5.0.2(rollup@3.23.0) 513 + rollup: 3.23.0 214 514 dev: true 215 515 216 - /@rollup/plugin-commonjs@21.0.2(rollup@2.70.1): 217 - resolution: {integrity: sha512-d/OmjaLVO4j/aQX69bwpWPpbvI3TJkQuxoAk7BH8ew1PyoMBLTOuvJTjzG8oEoW7drIIqB0KCJtfFLu/2GClWg==} 218 - engines: {node: '>= 8.0.0'} 516 + /@rollup/plugin-commonjs@25.0.0(rollup@3.23.0): 517 + resolution: {integrity: sha512-hoho2Kay9TZrLu0bnDsTTCaj4Npa+THk9snajP/XDNb9a9mmjTjh52EQM9sKl3HD1LsnihX7js+eA2sd2uKAhw==} 518 + engines: {node: '>=14.0.0'} 219 519 peerDependencies: 220 - rollup: ^2.38.3 520 + rollup: ^2.68.0||^3.0.0 521 + peerDependenciesMeta: 522 + rollup: 523 + optional: true 221 524 dependencies: 222 - '@rollup/pluginutils': 3.1.0(rollup@2.70.1) 525 + '@rollup/pluginutils': 5.0.2(rollup@3.23.0) 223 526 commondir: 1.0.1 224 527 estree-walker: 2.0.2 225 - glob: 7.2.3 528 + glob: 8.1.0 226 529 is-reference: 1.2.1 227 - magic-string: 0.25.9 228 - resolve: 1.22.2 229 - rollup: 2.70.1 530 + magic-string: 0.27.0 531 + rollup: 3.23.0 230 532 dev: true 231 533 232 - /@rollup/plugin-node-resolve@13.1.3(rollup@2.70.1): 233 - resolution: {integrity: sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==} 234 - engines: {node: '>= 10.0.0'} 534 + /@rollup/plugin-node-resolve@15.0.2(rollup@3.23.0): 535 + resolution: {integrity: sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg==} 536 + engines: {node: '>=14.0.0'} 235 537 peerDependencies: 236 - rollup: ^2.42.0 538 + rollup: ^2.78.0||^3.0.0 539 + peerDependenciesMeta: 540 + rollup: 541 + optional: true 237 542 dependencies: 238 - '@rollup/pluginutils': 3.1.0(rollup@2.70.1) 239 - '@types/resolve': 1.17.1 240 - builtin-modules: 3.3.0 543 + '@rollup/pluginutils': 5.0.2(rollup@3.23.0) 544 + '@types/resolve': 1.20.2 241 545 deepmerge: 4.3.1 546 + is-builtin-module: 3.2.1 242 547 is-module: 1.0.0 243 548 resolve: 1.22.2 244 - rollup: 2.70.1 549 + rollup: 3.23.0 245 550 dev: true 246 551 247 - /@rollup/pluginutils@3.1.0(rollup@2.70.1): 248 - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} 249 - engines: {node: '>= 8.0.0'} 552 + /@rollup/plugin-terser@0.4.3(rollup@3.23.0): 553 + resolution: {integrity: sha512-EF0oejTMtkyhrkwCdg0HJ0IpkcaVg1MMSf2olHb2Jp+1mnLM04OhjpJWGma4HobiDTF0WCyViWuvadyE9ch2XA==} 554 + engines: {node: '>=14.0.0'} 250 555 peerDependencies: 251 - rollup: ^1.20.0||^2.0.0 556 + rollup: ^2.x || ^3.x 557 + peerDependenciesMeta: 558 + rollup: 559 + optional: true 252 560 dependencies: 253 - '@types/estree': 0.0.39 254 - estree-walker: 1.0.1 255 - picomatch: 2.3.1 256 - rollup: 2.70.1 561 + rollup: 3.23.0 562 + serialize-javascript: 6.0.1 563 + smob: 1.1.1 564 + terser: 5.17.6 257 565 dev: true 258 566 259 - /@rollup/pluginutils@4.2.1: 260 - resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 261 - engines: {node: '>= 8.0.0'} 567 + /@rollup/pluginutils@5.0.2(rollup@3.23.0): 568 + resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} 569 + engines: {node: '>=14.0.0'} 570 + peerDependencies: 571 + rollup: ^1.20.0||^2.0.0||^3.0.0 572 + peerDependenciesMeta: 573 + rollup: 574 + optional: true 262 575 dependencies: 576 + '@types/estree': 1.0.1 263 577 estree-walker: 2.0.2 264 578 picomatch: 2.3.1 265 - dev: true 266 - 267 - /@types/buble@0.19.2: 268 - resolution: {integrity: sha512-uUD8zIfXMKThmFkahTXDGI3CthFH1kMg2dOm3KLi4GlC5cbARA64bEcUMbbWdWdE73eoc/iBB9PiTMqH0dNS2Q==} 269 - dependencies: 270 - magic-string: 0.25.9 271 - dev: true 272 - 273 - /@types/estree@0.0.39: 274 - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} 579 + rollup: 3.23.0 275 580 dev: true 276 581 277 582 /@types/estree@1.0.1: ··· 282 587 resolution: {integrity: sha512-OuJi8bIng4wYHHA3YpKauL58dZrPxro3d0tabPHyiNF8rKfGKuVfr83oFlPLmKri1cX+Z3cJP39GXmnqkP11Gw==} 283 588 dev: true 284 589 285 - /@types/node@20.1.5: 286 - resolution: {integrity: sha512-IvGD1CD/nego63ySR7vrAKEX3AJTcmrAN2kn+/sDNLi1Ff5kBzDeEdqWDplK+0HAEoLYej137Sk0cUU8OLOlMg==} 287 - dev: true 288 - 289 - /@types/parse-json@4.0.0: 290 - resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} 291 - dev: true 292 - 293 590 /@types/prop-types@15.7.5: 294 591 resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 295 592 dev: true ··· 302 599 csstype: 3.1.2 303 600 dev: true 304 601 305 - /@types/resolve@1.17.1: 306 - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} 307 - dependencies: 308 - '@types/node': 20.1.5 602 + /@types/resolve@1.20.2: 603 + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 309 604 dev: true 310 605 311 606 /@types/scheduler@0.16.3: ··· 327 622 '@types/node': 14.18.47 328 623 dev: true 329 624 optional: true 330 - 331 - /@yarn-tool/resolve-package@1.0.47: 332 - resolution: {integrity: sha512-Zaw58gQxjQceJqhqybJi1oUDaORT8i2GTgwICPs8v/X/Pkx35FXQba69ldHVg5pQZ6YLKpROXgyHvBaCJOFXiA==} 333 - dependencies: 334 - pkg-dir: 5.0.0 335 - tslib: 2.5.0 336 - upath2: 3.1.19 337 - dev: true 338 - 339 - /acorn-dynamic-import@4.0.0(acorn@6.4.2): 340 - resolution: {integrity: sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==} 341 - deprecated: This is probably built in to whatever tool you're using. If you still need it... idk 342 - peerDependencies: 343 - acorn: ^6.0.0 344 - dependencies: 345 - acorn: 6.4.2 346 - dev: true 347 - 348 - /acorn-jsx@5.3.2(acorn@6.4.2): 349 - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 350 - peerDependencies: 351 - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 352 - dependencies: 353 - acorn: 6.4.2 354 - dev: true 355 - 356 - /acorn@6.4.2: 357 - resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} 358 - engines: {node: '>=0.4.0'} 359 - hasBin: true 360 - dev: true 361 625 362 626 /acorn@8.8.2: 363 627 resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} ··· 500 764 concat-map: 0.0.1 501 765 dev: true 502 766 767 + /brace-expansion@2.0.1: 768 + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 769 + dependencies: 770 + balanced-match: 1.0.2 771 + dev: true 772 + 503 773 /braces@3.0.2: 504 774 resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 505 775 engines: {node: '>=8'} ··· 507 777 fill-range: 7.0.1 508 778 dev: true 509 779 510 - /buble@0.20.0: 511 - resolution: {integrity: sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw==} 780 + /browserslist@4.21.5: 781 + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} 782 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 512 783 hasBin: true 513 784 dependencies: 514 - acorn: 6.4.2 515 - acorn-dynamic-import: 4.0.0(acorn@6.4.2) 516 - acorn-jsx: 5.3.2(acorn@6.4.2) 517 - chalk: 2.4.2 518 - magic-string: 0.25.9 519 - minimist: 1.2.8 520 - regexpu-core: 4.5.4 785 + caniuse-lite: 1.0.30001489 786 + electron-to-chromium: 1.4.408 787 + node-releases: 2.0.12 788 + update-browserslist-db: 1.0.11(browserslist@4.21.5) 521 789 dev: true 522 790 523 791 /buffer-crc32@0.2.13: ··· 552 820 get-intrinsic: 1.2.1 553 821 dev: true 554 822 555 - /callsites@3.1.0: 556 - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 557 - engines: {node: '>=6'} 823 + /caniuse-lite@1.0.30001489: 824 + resolution: {integrity: sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==} 558 825 dev: true 559 826 560 827 /caseless@0.12.0: ··· 583 850 engines: {node: '>= 0.8.0'} 584 851 dev: true 585 852 586 - /ci-info@2.0.0: 587 - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} 588 - dev: true 589 - 590 853 /ci-info@3.8.0: 591 854 resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} 592 855 engines: {node: '>=8'} 856 + dev: true 857 + 858 + /cjs-module-lexer@1.2.2: 859 + resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} 593 860 dev: true 594 861 595 862 /clean-stack@2.2.0: ··· 684 951 resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 685 952 dev: true 686 953 687 - /compare-versions@3.6.0: 688 - resolution: {integrity: sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==} 689 - dev: true 690 - 691 954 /concat-map@0.0.1: 692 955 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 693 956 dev: true 694 957 695 - /core-util-is@1.0.2: 696 - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} 958 + /convert-source-map@1.9.0: 959 + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 697 960 dev: true 698 961 699 - /cosmiconfig@7.1.0: 700 - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} 701 - engines: {node: '>=10'} 702 - dependencies: 703 - '@types/parse-json': 4.0.0 704 - import-fresh: 3.3.0 705 - parse-json: 5.2.0 706 - path-type: 4.0.0 707 - yaml: 1.10.2 962 + /core-util-is@1.0.2: 963 + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} 708 964 dev: true 709 965 710 966 /cross-spawn@6.0.5: ··· 921 1177 safer-buffer: 2.1.2 922 1178 dev: true 923 1179 1180 + /electron-to-chromium@1.4.408: 1181 + resolution: {integrity: sha512-vjeaj0u/UYnzA/CIdGXzzcxRLCqRwREYc9YfaWInjIEr7/XPttZ6ShpyqapchEy0S2r6LpLjDBTnNj7ZxnxJKg==} 1182 + dev: true 1183 + 924 1184 /emoji-regex@8.0.0: 925 1185 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 926 1186 dev: true ··· 1219 1479 esbuild-windows-arm64: 0.14.54 1220 1480 dev: true 1221 1481 1482 + /escalade@3.1.1: 1483 + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1484 + engines: {node: '>=6'} 1485 + dev: true 1486 + 1222 1487 /escape-string-regexp@1.0.5: 1223 1488 resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1224 1489 engines: {node: '>=0.8.0'} 1225 - dev: true 1226 - 1227 - /estree-walker@1.0.1: 1228 - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} 1229 1490 dev: true 1230 1491 1231 1492 /estree-walker@2.0.2: ··· 1316 1577 to-regex-range: 5.0.1 1317 1578 dev: true 1318 1579 1319 - /find-cache-dir@3.3.2: 1320 - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} 1321 - engines: {node: '>=8'} 1322 - dependencies: 1323 - commondir: 1.0.1 1324 - make-dir: 3.1.0 1325 - pkg-dir: 4.2.0 1326 - dev: true 1327 - 1328 - /find-up@4.1.0: 1329 - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1330 - engines: {node: '>=8'} 1331 - dependencies: 1332 - locate-path: 5.0.0 1333 - path-exists: 4.0.0 1334 - dev: true 1335 - 1336 - /find-up@5.0.0: 1337 - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1338 - engines: {node: '>=10'} 1339 - dependencies: 1340 - locate-path: 6.0.0 1341 - path-exists: 4.0.0 1342 - dev: true 1343 - 1344 1580 /find-up@6.3.0: 1345 1581 resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} 1346 1582 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} ··· 1349 1585 path-exists: 5.0.0 1350 1586 dev: true 1351 1587 1352 - /find-versions@4.0.0: 1353 - resolution: {integrity: sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==} 1354 - engines: {node: '>=10'} 1355 - dependencies: 1356 - semver-regex: 3.1.4 1357 - dev: true 1358 - 1359 1588 /for-each@0.3.3: 1360 1589 resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1361 1590 dependencies: ··· 1375 1604 mime-types: 2.1.35 1376 1605 dev: true 1377 1606 1378 - /fs-extra@10.1.0: 1379 - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} 1380 - engines: {node: '>=12'} 1381 - dependencies: 1382 - graceful-fs: 4.2.11 1383 - jsonfile: 6.1.0 1384 - universalify: 2.0.0 1385 - dev: true 1386 - 1387 1607 /fs-extra@9.1.0: 1388 1608 resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} 1389 1609 engines: {node: '>=10'} ··· 1422 1642 1423 1643 /functions-have-names@1.2.3: 1424 1644 resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1645 + dev: true 1646 + 1647 + /gensync@1.0.0-beta.2: 1648 + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1649 + engines: {node: '>=6.9.0'} 1425 1650 dev: true 1426 1651 1427 1652 /get-intrinsic@1.2.1: ··· 1476 1701 path-is-absolute: 1.0.1 1477 1702 dev: true 1478 1703 1704 + /glob@8.1.0: 1705 + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} 1706 + engines: {node: '>=12'} 1707 + dependencies: 1708 + fs.realpath: 1.0.0 1709 + inflight: 1.0.6 1710 + inherits: 2.0.4 1711 + minimatch: 5.1.6 1712 + once: 1.4.0 1713 + dev: true 1714 + 1479 1715 /global-dirs@3.0.1: 1480 1716 resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} 1481 1717 engines: {node: '>=10'} 1482 1718 dependencies: 1483 1719 ini: 2.0.0 1720 + dev: true 1721 + 1722 + /globals@11.12.0: 1723 + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1724 + engines: {node: '>=4'} 1484 1725 dev: true 1485 1726 1486 1727 /globalthis@1.0.3: ··· 1572 1813 engines: {node: '>=10.17.0'} 1573 1814 dev: true 1574 1815 1575 - /husky-v4@4.3.8: 1576 - resolution: {integrity: sha512-M7A9u/t6BnT/qbDzKb7SdXhr8qLTGTkqZL6YLDDM20jfCdmpIMEuO384LvYXSBcgv50oIgNWI/IaO3g4A4ShjA==} 1577 - engines: {node: '>=10'} 1578 - hasBin: true 1579 - requiresBuild: true 1580 - dependencies: 1581 - chalk: 4.1.2 1582 - ci-info: 2.0.0 1583 - compare-versions: 3.6.0 1584 - cosmiconfig: 7.1.0 1585 - find-versions: 4.0.0 1586 - opencollective-postinstall: 2.0.3 1587 - pkg-dir: 5.0.0 1588 - please-upgrade-node: 3.2.0 1589 - slash: 3.0.0 1590 - which-pm-runs: 1.1.0 1591 - dev: true 1592 - 1593 1816 /ieee754@1.2.1: 1594 1817 resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 1595 1818 dev: true 1596 1819 1597 - /import-fresh@3.3.0: 1598 - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1599 - engines: {node: '>=6'} 1600 - dependencies: 1601 - parent-module: 1.0.1 1602 - resolve-from: 4.0.0 1603 - dev: true 1604 - 1605 1820 /indent-string@4.0.0: 1606 1821 resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1607 1822 engines: {node: '>=8'} ··· 1658 1873 has-tostringtag: 1.0.0 1659 1874 dev: true 1660 1875 1876 + /is-builtin-module@3.2.1: 1877 + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 1878 + engines: {node: '>=6'} 1879 + dependencies: 1880 + builtin-modules: 3.3.0 1881 + dev: true 1882 + 1661 1883 /is-callable@1.2.7: 1662 1884 resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1663 1885 engines: {node: '>= 0.4'} ··· 1670 1892 ci-info: 3.8.0 1671 1893 dev: true 1672 1894 1673 - /is-core-module@2.12.0: 1674 - resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} 1895 + /is-core-module@2.12.1: 1896 + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} 1675 1897 dependencies: 1676 1898 has: 1.0.3 1677 1899 dev: true ··· 1800 2022 resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} 1801 2023 dev: true 1802 2024 1803 - /jest-worker@26.6.2: 1804 - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} 1805 - engines: {node: '>= 10.13.0'} 1806 - dependencies: 1807 - '@types/node': 20.1.5 1808 - merge-stream: 2.0.0 1809 - supports-color: 7.2.0 1810 - dev: true 1811 - 1812 2025 /js-tokens@4.0.0: 1813 2026 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1814 2027 dev: true ··· 1817 2030 resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} 1818 2031 dev: true 1819 2032 1820 - /jsesc@0.5.0: 1821 - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 2033 + /jsesc@2.5.2: 2034 + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 2035 + engines: {node: '>=4'} 1822 2036 hasBin: true 1823 2037 dev: true 1824 2038 ··· 1826 2040 resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} 1827 2041 dev: true 1828 2042 1829 - /json-parse-even-better-errors@2.3.1: 1830 - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1831 - dev: true 1832 - 1833 2043 /json-schema@0.4.0: 1834 2044 resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} 1835 2045 dev: true 1836 2046 1837 2047 /json-stringify-safe@5.0.1: 1838 2048 resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} 2049 + dev: true 2050 + 2051 + /json5@2.2.3: 2052 + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 2053 + engines: {node: '>=6'} 2054 + hasBin: true 1839 2055 dev: true 1840 2056 1841 2057 /jsonfile@6.1.0: ··· 1864 2080 /lilconfig@2.0.4: 1865 2081 resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==} 1866 2082 engines: {node: '>=10'} 1867 - dev: true 1868 - 1869 - /lines-and-columns@1.2.4: 1870 - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1871 2083 dev: true 1872 2084 1873 2085 /lint-staged@12.3.7: ··· 1947 2159 engines: {node: '>=14'} 1948 2160 dev: true 1949 2161 1950 - /locate-path@5.0.0: 1951 - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1952 - engines: {node: '>=8'} 1953 - dependencies: 1954 - p-locate: 4.1.0 1955 - dev: true 1956 - 1957 - /locate-path@6.0.0: 1958 - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1959 - engines: {node: '>=10'} 1960 - dependencies: 1961 - p-locate: 5.0.0 1962 - dev: true 1963 - 1964 2162 /locate-path@7.2.0: 1965 2163 resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} 1966 2164 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} ··· 1999 2197 hasBin: true 2000 2198 dependencies: 2001 2199 js-tokens: 4.0.0 2200 + dev: true 2201 + 2202 + /lru-cache@5.1.1: 2203 + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 2204 + dependencies: 2205 + yallist: 3.1.1 2002 2206 dev: true 2003 2207 2004 2208 /lru-cache@6.0.0: ··· 2008 2212 yallist: 4.0.0 2009 2213 dev: true 2010 2214 2011 - /magic-string@0.25.9: 2012 - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 2215 + /magic-string@0.27.0: 2216 + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 2217 + engines: {node: '>=12'} 2013 2218 dependencies: 2014 - sourcemap-codec: 1.4.8 2219 + '@jridgewell/sourcemap-codec': 1.4.15 2015 2220 dev: true 2016 2221 2017 - /make-dir@3.1.0: 2018 - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 2019 - engines: {node: '>=8'} 2222 + /magic-string@0.30.0: 2223 + resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} 2224 + engines: {node: '>=12'} 2020 2225 dependencies: 2021 - semver: 6.3.0 2226 + '@jridgewell/sourcemap-codec': 1.4.15 2022 2227 dev: true 2023 2228 2024 2229 /memorystream@0.3.1: ··· 2061 2266 brace-expansion: 1.1.11 2062 2267 dev: true 2063 2268 2269 + /minimatch@5.1.6: 2270 + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 2271 + engines: {node: '>=10'} 2272 + dependencies: 2273 + brace-expansion: 2.0.1 2274 + dev: true 2275 + 2064 2276 /minimist@1.2.8: 2065 2277 resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 2066 2278 dev: true ··· 2088 2300 dependencies: 2089 2301 css-select: 4.3.0 2090 2302 he: 1.2.0 2303 + dev: true 2304 + 2305 + /node-releases@2.0.12: 2306 + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} 2091 2307 dev: true 2092 2308 2093 2309 /normalize-package-data@2.5.0: ··· 2170 2386 mimic-fn: 2.1.0 2171 2387 dev: true 2172 2388 2173 - /opencollective-postinstall@2.0.3: 2174 - resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} 2175 - hasBin: true 2176 - dev: true 2177 - 2178 2389 /ospath@1.2.2: 2179 2390 resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} 2180 2391 dev: true 2181 2392 2182 - /p-limit@2.3.0: 2183 - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2184 - engines: {node: '>=6'} 2185 - dependencies: 2186 - p-try: 2.2.0 2187 - dev: true 2188 - 2189 - /p-limit@3.1.0: 2190 - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2191 - engines: {node: '>=10'} 2192 - dependencies: 2193 - yocto-queue: 0.1.0 2194 - dev: true 2195 - 2196 2393 /p-limit@4.0.0: 2197 2394 resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 2198 2395 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} ··· 2200 2397 yocto-queue: 1.0.0 2201 2398 dev: true 2202 2399 2203 - /p-locate@4.1.0: 2204 - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2205 - engines: {node: '>=8'} 2206 - dependencies: 2207 - p-limit: 2.3.0 2208 - dev: true 2209 - 2210 - /p-locate@5.0.0: 2211 - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2212 - engines: {node: '>=10'} 2213 - dependencies: 2214 - p-limit: 3.1.0 2215 - dev: true 2216 - 2217 2400 /p-locate@6.0.0: 2218 2401 resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} 2219 2402 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} ··· 2228 2411 aggregate-error: 3.1.0 2229 2412 dev: true 2230 2413 2231 - /p-try@2.2.0: 2232 - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2233 - engines: {node: '>=6'} 2234 - dev: true 2235 - 2236 - /parent-module@1.0.1: 2237 - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2238 - engines: {node: '>=6'} 2239 - dependencies: 2240 - callsites: 3.1.0 2241 - dev: true 2242 - 2243 2414 /parse-json@4.0.0: 2244 2415 resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} 2245 2416 engines: {node: '>=4'} ··· 2248 2419 json-parse-better-errors: 1.0.2 2249 2420 dev: true 2250 2421 2251 - /parse-json@5.2.0: 2252 - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 2253 - engines: {node: '>=8'} 2254 - dependencies: 2255 - '@babel/code-frame': 7.21.4 2256 - error-ex: 1.3.2 2257 - json-parse-even-better-errors: 2.3.1 2258 - lines-and-columns: 1.2.4 2259 - dev: true 2260 - 2261 - /path-exists@4.0.0: 2262 - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2263 - engines: {node: '>=8'} 2264 - dev: true 2265 - 2266 2422 /path-exists@5.0.0: 2267 2423 resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} 2268 2424 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} ··· 2273 2429 engines: {node: '>=0.10.0'} 2274 2430 dev: true 2275 2431 2276 - /path-is-network-drive@1.0.20: 2277 - resolution: {integrity: sha512-p5wCWlRB4+ggzxWshqHH9aF3kAuVu295NaENXmVhThbZPJQBeJdxZTP6CIoUR+kWHDUW56S9YcaO1gXnc/BOxw==} 2278 - dependencies: 2279 - tslib: 2.5.0 2280 - dev: true 2281 - 2282 2432 /path-key@2.0.1: 2283 2433 resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} 2284 2434 engines: {node: '>=4'} ··· 2293 2443 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2294 2444 dev: true 2295 2445 2296 - /path-strip-sep@1.0.17: 2297 - resolution: {integrity: sha512-+2zIC2fNgdilgV7pTrktY6oOxxZUo9x5zJYfTzxsGze5kSGDDwhA5/0WlBn+sUyv/WuuyYn3OfM+Ue5nhdQUgA==} 2298 - dependencies: 2299 - tslib: 2.5.0 2300 - dev: true 2301 - 2302 2446 /path-type@3.0.0: 2303 2447 resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} 2304 2448 engines: {node: '>=4'} 2305 2449 dependencies: 2306 2450 pify: 3.0.0 2307 - dev: true 2308 - 2309 - /path-type@4.0.0: 2310 - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2311 - engines: {node: '>=8'} 2312 2451 dev: true 2313 2452 2314 2453 /pathe@0.2.0: ··· 2352 2491 /pify@3.0.0: 2353 2492 resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} 2354 2493 engines: {node: '>=4'} 2355 - dev: true 2356 - 2357 - /pkg-dir@4.2.0: 2358 - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 2359 - engines: {node: '>=8'} 2360 - dependencies: 2361 - find-up: 4.1.0 2362 - dev: true 2363 - 2364 - /pkg-dir@5.0.0: 2365 - resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} 2366 - engines: {node: '>=10'} 2367 - dependencies: 2368 - find-up: 5.0.0 2369 - dev: true 2370 - 2371 - /please-upgrade-node@3.2.0: 2372 - resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} 2373 - dependencies: 2374 - semver-compare: 1.0.0 2375 2494 dev: true 2376 2495 2377 2496 /postcss@8.4.23: ··· 2455 2574 path-type: 3.0.0 2456 2575 dev: true 2457 2576 2458 - /regenerate-unicode-properties@8.2.0: 2459 - resolution: {integrity: sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==} 2460 - engines: {node: '>=4'} 2461 - dependencies: 2462 - regenerate: 1.4.2 2463 - dev: true 2464 - 2465 - /regenerate@1.4.2: 2466 - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} 2467 - dev: true 2468 - 2469 2577 /regexp.prototype.flags@1.5.0: 2470 2578 resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} 2471 2579 engines: {node: '>= 0.4'} ··· 2475 2583 functions-have-names: 1.2.3 2476 2584 dev: true 2477 2585 2478 - /regexpu-core@4.5.4: 2479 - resolution: {integrity: sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==} 2480 - engines: {node: '>=4'} 2481 - dependencies: 2482 - regenerate: 1.4.2 2483 - regenerate-unicode-properties: 8.2.0 2484 - regjsgen: 0.5.2 2485 - regjsparser: 0.6.9 2486 - unicode-match-property-ecmascript: 1.0.4 2487 - unicode-match-property-value-ecmascript: 1.2.0 2488 - dev: true 2489 - 2490 - /regjsgen@0.5.2: 2491 - resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==} 2492 - dev: true 2493 - 2494 - /regjsparser@0.6.9: 2495 - resolution: {integrity: sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==} 2496 - hasBin: true 2497 - dependencies: 2498 - jsesc: 0.5.0 2499 - dev: true 2500 - 2501 2586 /request-progress@3.0.0: 2502 2587 resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} 2503 2588 dependencies: 2504 2589 throttleit: 1.0.0 2505 2590 dev: true 2506 2591 2507 - /resolve-from@4.0.0: 2508 - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2509 - engines: {node: '>=4'} 2510 - dev: true 2511 - 2512 2592 /resolve@1.22.2: 2513 2593 resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 2514 2594 hasBin: true 2515 2595 dependencies: 2516 - is-core-module: 2.12.0 2596 + is-core-module: 2.12.1 2517 2597 path-parse: 1.0.7 2518 2598 supports-preserve-symlinks-flag: 1.0.0 2519 2599 dev: true ··· 2537 2617 glob: 7.2.3 2538 2618 dev: true 2539 2619 2540 - /rollup-plugin-terser@7.0.2(rollup@2.70.1): 2541 - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} 2542 - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser 2620 + /rollup-plugin-cjs-check@1.0.2(rollup@3.23.0): 2621 + resolution: {integrity: sha512-q5DuMiYTXoMlLIHeTDdTYQrN+v/AdjEyVZnfkdvX1NnS4jQP1fwSuOr29WS4pB/4lnF1D7Annp62/27aZUyTyQ==} 2622 + engines: {node: '>=14.0.0'} 2543 2623 peerDependencies: 2544 - rollup: ^2.0.0 2624 + rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 2545 2625 dependencies: 2546 - '@babel/code-frame': 7.21.4 2547 - jest-worker: 26.6.2 2548 - rollup: 2.70.1 2549 - serialize-javascript: 4.0.0 2550 - terser: 5.17.4 2626 + '@rollup/pluginutils': 5.0.2(rollup@3.23.0) 2627 + cjs-module-lexer: 1.2.2 2628 + rollup: 3.23.0 2551 2629 dev: true 2552 2630 2553 - /rollup-plugin-typescript2@0.31.2(rollup@2.70.1)(typescript@4.6.2): 2554 - resolution: {integrity: sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==} 2631 + /rollup-plugin-dts@5.3.0(rollup@3.23.0)(typescript@5.0.4): 2632 + resolution: {integrity: sha512-8FXp0ZkyZj1iU5klkIJYLjIq/YZSwBoERu33QBDxm/1yw5UU4txrEtcmMkrq+ZiKu3Q4qvPCNqc3ovX6rjqzbQ==} 2633 + engines: {node: '>=v14'} 2555 2634 peerDependencies: 2556 - rollup: '>=1.26.3' 2557 - typescript: '>=2.4.0' 2635 + rollup: ^3.0.0 2636 + typescript: ^4.1 || ^5.0 2558 2637 dependencies: 2559 - '@rollup/pluginutils': 4.2.1 2560 - '@yarn-tool/resolve-package': 1.0.47 2561 - find-cache-dir: 3.3.2 2562 - fs-extra: 10.1.0 2563 - resolve: 1.22.2 2564 - rollup: 2.70.1 2565 - tslib: 2.5.0 2566 - typescript: 4.6.2 2638 + magic-string: 0.30.0 2639 + rollup: 3.23.0 2640 + typescript: 5.0.4 2641 + optionalDependencies: 2642 + '@babel/code-frame': 7.21.4 2567 2643 dev: true 2568 2644 2569 - /rollup@2.70.1: 2570 - resolution: {integrity: sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==} 2645 + /rollup@2.79.1: 2646 + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} 2571 2647 engines: {node: '>=10.0.0'} 2572 2648 hasBin: true 2573 2649 optionalDependencies: 2574 2650 fsevents: 2.3.2 2575 2651 dev: true 2576 2652 2653 + /rollup@3.23.0: 2654 + resolution: {integrity: sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==} 2655 + engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2656 + hasBin: true 2657 + optionalDependencies: 2658 + fsevents: 2.3.2 2659 + dev: true 2660 + 2577 2661 /rxjs@7.8.1: 2578 2662 resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} 2579 2663 dependencies: 2580 - tslib: 2.5.0 2664 + tslib: 2.5.2 2581 2665 dev: true 2582 2666 2583 2667 /safe-buffer@5.2.1: ··· 2603 2687 object-assign: 4.1.1 2604 2688 dev: true 2605 2689 2606 - /semver-compare@1.0.0: 2607 - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} 2608 - dev: true 2609 - 2610 - /semver-regex@3.1.4: 2611 - resolution: {integrity: sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==} 2612 - engines: {node: '>=8'} 2613 - dev: true 2614 - 2615 2690 /semver@5.7.1: 2616 2691 resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 2617 2692 hasBin: true ··· 2630 2705 lru-cache: 6.0.0 2631 2706 dev: true 2632 2707 2633 - /serialize-javascript@4.0.0: 2634 - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} 2708 + /serialize-javascript@6.0.1: 2709 + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} 2635 2710 dependencies: 2636 2711 randombytes: 2.1.0 2637 2712 dev: true ··· 2676 2751 resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2677 2752 dev: true 2678 2753 2679 - /slash@3.0.0: 2680 - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2681 - engines: {node: '>=8'} 2682 - dev: true 2683 - 2684 2754 /slice-ansi@3.0.0: 2685 2755 resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} 2686 2756 engines: {node: '>=8'} ··· 2707 2777 is-fullwidth-code-point: 4.0.0 2708 2778 dev: true 2709 2779 2780 + /smob@1.1.1: 2781 + resolution: {integrity: sha512-i5aqEBPnDv9d77+NDxfjROtywxzNdAVNyaOr+RsLhM28Ts+Ar7luIp/Q+SBYa6wv/7BBcOpEkrhtDxsl2WA9Jg==} 2782 + dev: true 2783 + 2710 2784 /source-map-js@1.0.2: 2711 2785 resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2712 2786 engines: {node: '>=0.10.0'} ··· 2722 2796 /source-map@0.6.1: 2723 2797 resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2724 2798 engines: {node: '>=0.10.0'} 2725 - dev: true 2726 - 2727 - /sourcemap-codec@1.4.8: 2728 - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 2729 - deprecated: Please use @jridgewell/sourcemap-codec instead 2730 2799 dev: true 2731 2800 2732 2801 /spdx-correct@3.2.0: ··· 2879 2948 engines: {node: '>= 0.4'} 2880 2949 dev: true 2881 2950 2882 - /terser@5.17.4: 2883 - resolution: {integrity: sha512-jcEKZw6UPrgugz/0Tuk/PVyLAPfMBJf5clnGueo45wTweoV8yh7Q7PEkhkJ5uuUbC7zAxEcG3tqNr1bstkQ8nw==} 2951 + /terser@5.17.6: 2952 + resolution: {integrity: sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==} 2884 2953 engines: {node: '>=10'} 2885 2954 hasBin: true 2886 2955 dependencies: ··· 2903 2972 engines: {node: '>=8.17.0'} 2904 2973 dependencies: 2905 2974 rimraf: 3.0.2 2975 + dev: true 2976 + 2977 + /to-fast-properties@2.0.0: 2978 + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2979 + engines: {node: '>=4'} 2906 2980 dev: true 2907 2981 2908 2982 /to-regex-range@5.0.1: ··· 2920 2994 punycode: 2.3.0 2921 2995 dev: true 2922 2996 2923 - /tslib@2.5.0: 2924 - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} 2997 + /tslib@2.5.2: 2998 + resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} 2925 2999 dev: true 2926 3000 2927 3001 /tunnel-agent@0.6.0: ··· 2947 3021 is-typed-array: 1.1.10 2948 3022 dev: true 2949 3023 2950 - /typescript@4.6.2: 2951 - resolution: {integrity: sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==} 2952 - engines: {node: '>=4.2.0'} 3024 + /typescript@5.0.4: 3025 + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} 3026 + engines: {node: '>=12.20'} 2953 3027 hasBin: true 2954 3028 dev: true 2955 3029 ··· 2962 3036 which-boxed-primitive: 1.0.2 2963 3037 dev: true 2964 3038 2965 - /unicode-canonical-property-names-ecmascript@1.0.4: 2966 - resolution: {integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==} 2967 - engines: {node: '>=4'} 2968 - dev: true 2969 - 2970 - /unicode-match-property-ecmascript@1.0.4: 2971 - resolution: {integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==} 2972 - engines: {node: '>=4'} 2973 - dependencies: 2974 - unicode-canonical-property-names-ecmascript: 1.0.4 2975 - unicode-property-aliases-ecmascript: 1.1.0 2976 - dev: true 2977 - 2978 - /unicode-match-property-value-ecmascript@1.2.0: 2979 - resolution: {integrity: sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==} 2980 - engines: {node: '>=4'} 2981 - dev: true 2982 - 2983 - /unicode-property-aliases-ecmascript@1.1.0: 2984 - resolution: {integrity: sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==} 2985 - engines: {node: '>=4'} 2986 - dev: true 2987 - 2988 3039 /universalify@2.0.0: 2989 3040 resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} 2990 3041 engines: {node: '>= 10.0.0'} ··· 2995 3046 engines: {node: '>=8'} 2996 3047 dev: true 2997 3048 2998 - /upath2@3.1.19: 2999 - resolution: {integrity: sha512-d23dQLi8nDWSRTIQwXtaYqMrHuca0As53fNiTLLFDmsGBbepsZepISaB2H1x45bDFN/n3Qw9bydvyZEacTrEWQ==} 3049 + /update-browserslist-db@1.0.11(browserslist@4.21.5): 3050 + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 3051 + hasBin: true 3052 + peerDependencies: 3053 + browserslist: '>= 4.21.0' 3000 3054 dependencies: 3001 - '@types/node': 20.1.5 3002 - path-is-network-drive: 1.0.20 3003 - path-strip-sep: 1.0.17 3004 - tslib: 2.5.0 3055 + browserslist: 4.21.5 3056 + escalade: 3.1.1 3057 + picocolors: 1.0.0 3005 3058 dev: true 3006 3059 3007 3060 /uuid@8.3.2: ··· 3044 3097 esbuild: 0.14.54 3045 3098 postcss: 8.4.23 3046 3099 resolve: 1.22.2 3047 - rollup: 2.70.1 3100 + rollup: 2.79.1 3048 3101 optionalDependencies: 3049 3102 fsevents: 2.3.2 3050 3103 dev: true ··· 3057 3110 is-number-object: 1.0.7 3058 3111 is-string: 1.0.7 3059 3112 is-symbol: 1.0.4 3060 - dev: true 3061 - 3062 - /which-pm-runs@1.1.0: 3063 - resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} 3064 - engines: {node: '>=4'} 3065 3113 dev: true 3066 3114 3067 3115 /which-typed-array@1.1.9: ··· 3113 3161 resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3114 3162 dev: true 3115 3163 3164 + /yallist@3.1.1: 3165 + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 3166 + dev: true 3167 + 3116 3168 /yallist@4.0.0: 3117 3169 resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3118 3170 dev: true ··· 3127 3179 dependencies: 3128 3180 buffer-crc32: 0.2.13 3129 3181 fd-slicer: 1.1.0 3130 - dev: true 3131 - 3132 - /yocto-queue@0.1.0: 3133 - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3134 - engines: {node: '>=10'} 3135 3182 dev: true 3136 3183 3137 3184 /yocto-queue@1.0.0:
+12
scripts/prepare.js
··· 1 + const path = require('path'); 2 + const fs = require('fs'); 3 + 4 + const precommit = path.resolve(__dirname, '../.git/hooks/pre-commit'); 5 + 6 + const hook = ` 7 + #!/bin/sh 8 + pnpm exec lint-staged --quiet --relative 9 + `.trim(); 10 + 11 + fs.writeFileSync(precommit, hook); 12 + fs.chmodSync(precommit, '755');
+183
scripts/rollup.config.mjs
··· 1 + import { readFileSync } from 'fs'; 2 + import * as path from 'path'; 3 + 4 + import commonjs from '@rollup/plugin-commonjs'; 5 + import resolve from '@rollup/plugin-node-resolve'; 6 + import terser from '@rollup/plugin-terser'; 7 + import babel from '@rollup/plugin-babel'; 8 + import cjsCheck from 'rollup-plugin-cjs-check'; 9 + import dts from 'rollup-plugin-dts'; 10 + 11 + const cwd = process.cwd(); 12 + const pkg = JSON.parse(readFileSync(path.resolve(cwd, './package.json'), 'utf-8')); 13 + 14 + export const externalModules = ['dns', 'fs', 'path', 'url']; 15 + if (pkg.peerDependencies) 16 + externalModules.push(...Object.keys(pkg.peerDependencies)); 17 + if (pkg.dependencies) externalModules.push(...Object.keys(pkg.dependencies)); 18 + 19 + const externalPredicate = new RegExp(`^(${externalModules.join('|')})($|/)`); 20 + 21 + const terserPretty = terser({ 22 + warnings: true, 23 + ecma: 2015, 24 + keep_fnames: true, 25 + ie8: false, 26 + compress: { 27 + pure_getters: true, 28 + toplevel: true, 29 + booleans_as_integers: false, 30 + keep_fnames: true, 31 + keep_fargs: true, 32 + if_return: false, 33 + ie8: false, 34 + sequences: false, 35 + loops: false, 36 + conditionals: false, 37 + join_vars: false 38 + }, 39 + mangle: { 40 + module: true, 41 + keep_fnames: true, 42 + }, 43 + output: { 44 + comments: false, 45 + beautify: true, 46 + braces: true, 47 + indent_level: 2 48 + } 49 + }); 50 + 51 + const terserMinified = terser({ 52 + warnings: true, 53 + ecma: 2015, 54 + ie8: false, 55 + toplevel: true, 56 + compress: { 57 + keep_infinity: true, 58 + pure_getters: true, 59 + passes: 10 60 + }, 61 + mangle: { 62 + module: true, 63 + }, 64 + output: { 65 + comments: false 66 + } 67 + }); 68 + 69 + const commonPlugins = [ 70 + resolve({ 71 + extensions: ['.mjs', '.js', '.ts'], 72 + mainFields: ['module', 'jsnext', 'main'], 73 + preferBuiltins: false, 74 + browser: true, 75 + }), 76 + 77 + commonjs({ 78 + ignoreGlobal: true, 79 + include: /\/node_modules\//, 80 + extensions: ['.mjs', '.js', '.ts'], 81 + }), 82 + ]; 83 + 84 + const output = ({ format, isProduction }) => { 85 + if (typeof isProduction !== 'boolean') 86 + throw new Error('Invalid option `isProduction` at output({ ... })'); 87 + if (format !== 'cjs' && format !== 'esm') 88 + throw new Error('Invalid option `format` at output({ ... })'); 89 + 90 + let extension = format === 'esm' 91 + ? '.es.js' 92 + : '.js'; 93 + if (isProduction) { 94 + extension = '.min' + extension; 95 + } 96 + 97 + return { 98 + entryFileNames: `[name]${extension}`, 99 + dir: './dist', 100 + exports: 'named', 101 + sourcemap: true, 102 + sourcemapExcludeSources: false, 103 + hoistTransitiveImports: false, 104 + indent: false, 105 + freeze: false, 106 + strict: false, 107 + format, 108 + plugins: [ 109 + cjsCheck({ extension }), 110 + isProduction ? terserMinified : terserPretty, 111 + ], 112 + // NOTE: All below settings are important for cjs-module-lexer to detect the export 113 + // When this changes (and terser mangles the output) this will interfere with Node.js ESM intercompatibility 114 + esModule: format !== 'esm', 115 + externalLiveBindings: format !== 'esm', 116 + generatedCode: { 117 + preset: 'es5', 118 + reservedNamesAsProps: false, 119 + objectShorthand: false, 120 + constBindings: false, 121 + }, 122 + }; 123 + }; 124 + 125 + const commonConfig = { 126 + input: { 127 + 'use-interactions': './src/index.ts', 128 + }, 129 + external(id) { 130 + return externalPredicate.test(id); 131 + }, 132 + onwarn() {}, 133 + treeshake: { 134 + unknownGlobalSideEffects: false, 135 + tryCatchDeoptimization: false, 136 + moduleSideEffects: false, 137 + }, 138 + }; 139 + 140 + export default [ 141 + { 142 + ...commonConfig, 143 + plugins: [ 144 + ...commonPlugins, 145 + babel({ 146 + babelrc: false, 147 + babelHelpers: 'bundled', 148 + extensions: ['js', 'jsx', 'ts', 'tsx'], 149 + exclude: 'node_modules/**', 150 + presets: [], 151 + plugins: [ 152 + '@babel/plugin-transform-typescript', 153 + '@babel/plugin-transform-block-scoping', 154 + ], 155 + }), 156 + ], 157 + output: [ 158 + output({ format: 'cjs', isProduction: false }), 159 + output({ format: 'esm', isProduction: false }), 160 + output({ format: 'cjs', isProduction: true }), 161 + output({ format: 'esm', isProduction: true }), 162 + ], 163 + }, 164 + { 165 + ...commonConfig, 166 + input: { 167 + 'use-interactions': './src/index.ts', 168 + }, 169 + plugins: [ 170 + ...commonPlugins, 171 + dts({ 172 + compilerOptions: { 173 + preserveSymlinks: false, 174 + }, 175 + }), 176 + ], 177 + output: { 178 + minifyInternalExports: false, 179 + entryFileNames: '[name].d.ts', 180 + dir: './dist', 181 + }, 182 + }, 183 + ];
+2 -7
src/useDialogFocus.ts
··· 1 1 import { snapshotSelection, restoreSelection } from './utils/selection'; 2 - import { 3 - getFirstFocusTarget, 4 - getFocusTargets, 5 - getNextFocusTarget, 6 - focus, 7 - } from './utils/focus'; 2 + import { getFocusTargets, getNextFocusTarget, focus } from './utils/focus'; 8 3 import { click } from './utils/click'; 9 4 import { useLayoutEffect } from './utils/react'; 10 5 import { contains, isInputElement } from './utils/element'; ··· 147 142 event.code === 'Enter' 148 143 ) { 149 144 // Move focus to first target when Enter is pressed 150 - const newTarget = getFirstFocusTarget(element); 145 + const newTarget = getFocusTargets(element)[0]; 151 146 if (newTarget) { 152 147 willReceiveFocus = true; 153 148 focus(newTarget);
+2 -2
src/useMenuFocus.ts
··· 3 3 snapshotSelection, 4 4 restoreSelection, 5 5 } from './utils/selection'; 6 - import { getFirstFocusTarget, getFocusTargets, focus } from './utils/focus'; 6 + import { getFocusTargets, focus } from './utils/focus'; 7 7 import { click } from './utils/click'; 8 8 import { useLayoutEffect } from './utils/react'; 9 9 import { contains, isInputElement } from './utils/element'; ··· 103 103 event.code === 'Enter' 104 104 ) { 105 105 // Move focus to first target when enter is pressed 106 - focus(getFirstFocusTarget(element)); 106 + focus(getFocusTargets(element)[0]); 107 107 } else if ( 108 108 owner && 109 109 !contains(ref.current, owner) &&
+2 -6
src/useModalFocus.ts
··· 4 4 restoreSelection, 5 5 } from './utils/selection'; 6 6 7 - import { 8 - getAutofocusTarget, 9 - getFirstFocusTarget, 10 - getFocusTargets, 11 - } from './utils/focus'; 7 + import { getAutofocusTarget, getFocusTargets } from './utils/focus'; 12 8 13 9 import { useLayoutEffect } from './utils/react'; 14 10 import { contains } from './utils/element'; ··· 49 45 contains(element, event.target) && 50 46 !contains(element, event.relatedTarget) 51 47 ) { 52 - const target = getFirstFocusTarget(element); 48 + const target = getFocusTargets(element)[0]; 53 49 if (target) target.focus(); 54 50 } 55 51 }
+3 -4
src/usePriority.ts
··· 42 42 priorityStack.push(element); 43 43 priorityStack.sort(sortByHierarchy); 44 44 listeners.add(onChange); 45 - listeners.forEach(fn => fn()); 45 + for (const listener of listeners) listener(); 46 46 47 47 return () => { 48 - const index = priorityStack.indexOf(element); 49 - priorityStack.splice(index, 1); 48 + priorityStack.splice(priorityStack.indexOf(element), 1); 50 49 listeners.delete(onChange); 51 - listeners.forEach(fn => fn()); 50 + for (const listener of listeners) listener(); 52 51 }; 53 52 }, [ref.current, hasPriority, isDisabled]); 54 53
-1
src/utils/__tests__/focus.test.tsx
··· 10 10 <input type="hidden" className="ignored" /> 11 11 <input type="text" disabled className="ignored" /> 12 12 <button tabIndex={-1} className="ignored" /> 13 - <button style={{ visibility: 'hidden' }} className="ignored">Invisible</button> 14 13 <button style={{ display: 'none' }} className="ignored">Invisible</button> 15 14 <a className="ignored">No href</a> 16 15
+6 -9
src/utils/__tests__/selection.test.tsx
··· 13 13 selection = snapshotSelection(); 14 14 15 15 // check selection matches expected state 16 - expect(selection).to.deep.equal({ 17 - element: $el.get(0), 18 - method: 'focus', 19 - }); 16 + expect(selection?.element).to.deep.equal( 17 + $el.get(0), 18 + ); 20 19 }); 21 20 22 21 // unfocus the button ··· 48 47 selection = snapshotSelection(); 49 48 50 49 // check selection matches expected state 51 - expect(selection).to.deep.equal({ 52 - element: $el.get(0), 53 - method: 'setSelectionRange', 54 - arguments: [2, 2, 'none'], 55 - }); 50 + expect(selection?.element).to.deep.equal( 51 + $el.get(0), 52 + ); 56 53 }); 57 54 58 55 // unfocus the input
+1 -10
src/utils/click.ts
··· 1 + import { clickableSelectors, focus } from './focus'; 1 2 import { contains } from './element'; 2 - import { focus } from './focus'; 3 - 4 - const clickableSelectors = [ 5 - '[contenteditable]', 6 - 'input:not([type="hidden"]):not([disabled])', 7 - 'button:not([disabled])', 8 - 'select:not([disabled])', 9 - 'a[href]', 10 - ].join(','); 11 3 12 4 export const click = (node: Element) => { 13 5 const activeElement = document.activeElement; 14 6 if (!activeElement || contains(node, activeElement)) { 15 7 let target: Element | null = node; 16 - 17 8 if (node.tagName === 'LABEL') { 18 9 const forId = node.getAttribute('for'); 19 10 target = forId ? document.getElementById(forId) : null;
+11 -19
src/utils/element.ts
··· 1 + import { inputSelectors } from './focus'; 2 + 3 + const excludeSelector = 4 + ':not([tabindex^="-"]):not([aria-modal]):not([role="dialog"])'; 5 + 1 6 /** Returns a given tab index for an element, defaulting to zero. */ 2 - export const getTabIndex = (node: Element): number => { 3 - const index = parseInt(node.getAttribute('tabindex')!, 10); 4 - return ( 5 - (index === index && !(node as HTMLElement).isContentEditable && index) || 0 6 - ); 7 - }; 7 + export const getTabIndex = (node: HTMLElement): number => 8 + (!node.isContentEditable && node.tabIndex) || 0; 8 9 9 10 /** Returns whether an element is visible in the context of focusability. */ 10 - export const isVisible = (node: Element): boolean => 11 - !!( 12 - (node.tagName !== 'INPUT' || 13 - (node as HTMLInputElement).type !== 'hidden') && 14 - node.getClientRects().length && 15 - getComputedStyle(node).visibility !== 'hidden' 16 - ); 11 + export const isVisible = (node: Element): node is HTMLElement => 12 + node.matches(excludeSelector) && node.getClientRects().length > 0; 17 13 18 14 /** Returns whether an element accepts text input. */ 19 15 export const isInputElement = (node: Element): boolean => 20 - !!( 21 - node.tagName === 'INPUT' || 22 - node.tagName === 'TEXTAREA' || 23 - (node as HTMLElement).isContentEditable 24 - ); 16 + node.matches(inputSelectors); 25 17 26 18 export const contains = ( 27 19 owner: Element | EventTarget | null, 28 20 node: Element | EventTarget | null 29 - ) => 21 + ): owner is HTMLElement => 30 22 !!( 31 23 node && 32 24 owner &&
+37 -63
src/utils/focus.ts
··· 1 1 import { getTabIndex, isVisible } from './element'; 2 2 3 - const excludeSelector = 4 - ':not([tabindex^="-"]):not([aria-modal]):not([role="dialog"])'; 3 + export const inputSelectors = 4 + 'input:not([type="hidden"]):not([disabled])' + 5 + ',textarea:not([disabled])' + 6 + ',[contenteditable]'; 5 7 6 - const focusableSelectors = [ 7 - 'input:not([type="hidden"]):not([disabled])' + excludeSelector, 8 - 'select:not([disabled])' + excludeSelector, 9 - 'textarea:not([disabled])' + excludeSelector, 10 - 'button:not([disabled])' + excludeSelector, 11 - 'iframe' + excludeSelector, 12 - 'a[href]' + excludeSelector, 13 - 'audio[controls]' + excludeSelector, 14 - 'video[controls]' + excludeSelector, 15 - '[contenteditable]' + excludeSelector, 16 - '[tabindex]' + excludeSelector, 17 - ].join(','); 8 + export const clickableSelectors = 9 + inputSelectors + 10 + ',select:not([disabled])' + 11 + ',button:not([disabled])' + 12 + ',a[href]'; 13 + 14 + const focusableSelectors = 15 + clickableSelectors + 16 + ',select:not([disabled])' + 17 + ',button:not([disabled])' + 18 + ',iframe' + 19 + ',a[href]' + 20 + ',audio[controls]' + 21 + ',video[controls]' + 22 + ',[tabindex]'; 18 23 19 24 /** Generic sorting function for tupel containing elements with indices and tab indices. */ 20 - const sortByTabindex = <T extends HTMLElement>( 21 - a: [number, number, T], 22 - b: [number, number, T] 23 - ) => { 24 - return a[1] === a[1] ? a[0] - b[0] : a[1] - a[1]; 25 + const sortByTabindex = (a: HTMLElement, b: HTMLElement) => { 26 + const tabIndexA = getTabIndex(a) || 1 << 29; 27 + const tabIndexB = getTabIndex(b) || 1 << 29; 28 + return tabIndexA - tabIndexB; 25 29 }; 26 30 27 31 /** Returns whether this node is focusable. */ 28 32 export const isFocusTarget = (node: Element): boolean => 29 33 !!node.matches(focusableSelectors) && isVisible(node); 30 34 31 - /** Returns whether this node may contain focusable elements. */ 32 - export const hasFocusTargets = (node: Element): boolean => 33 - !node.matches(excludeSelector) && 34 - isVisible(node) && 35 - !!node.querySelector(focusableSelectors); 36 - 37 35 /** Returns a sorted list of focus targets inside the given element. */ 38 - export const getFocusTargets = (node: Element): HTMLElement[] => { 39 - const elements = node.querySelectorAll(focusableSelectors); 40 - const targets: HTMLElement[] = []; 41 - const tabIndexTargets: [ 42 - index: number, 43 - tabIndex: number, 44 - element: HTMLElement 45 - ][] = []; 46 - for (let i = 0, l = elements.length; i < l; i++) { 47 - const element = elements[i] as HTMLElement; 48 - if (isVisible(element)) { 49 - const tabIndex = getTabIndex(element); 50 - if (tabIndex === 0) { 51 - targets.push(element); 52 - } else if (tabIndex > 0) { 53 - tabIndexTargets.push([i, tabIndex, element]); 54 - } 55 - } 56 - } 57 - 58 - return tabIndexTargets.length 59 - ? tabIndexTargets 60 - .sort(sortByTabindex) 61 - .map(x => x[2]) 62 - .concat(targets) 63 - : targets; 64 - }; 36 + export const getFocusTargets = (node: Element): HTMLElement[] => 37 + ([...node.querySelectorAll(focusableSelectors)] as HTMLElement[]) 38 + .filter(isVisible) 39 + .sort(sortByTabindex); 65 40 66 - /** Returns the first focus target that should be focused automatically. */ 67 - export const getFirstFocusTarget = (node: HTMLElement): HTMLElement | null => 68 - getFocusTargets(node)[0] || null; 41 + /** Returns whether this node may contain focusable elements. */ 42 + export const hasFocusTargets = (node: Element): boolean => 43 + isVisible(node) && !!getFocusTargets(node).length; 69 44 70 45 /** Returns the first focus target that should be focused automatically in a modal/dialog. */ 71 46 export const getAutofocusTarget = (node: HTMLElement): HTMLElement => { 72 47 const elements = node.querySelectorAll(focusableSelectors); 73 - for (let i = 0, l = elements.length; i < l; i++) { 74 - const element = elements[i] as HTMLElement; 75 - if (isVisible(element) && element.matches('[autofocus]')) return element; 76 - } 77 - 78 - node.setAttribute('tabindex', '-1'); 48 + for (const element of elements) 49 + if (isVisible(element) && element.autofocus) return element; 50 + node.tabIndex = -1; 79 51 return node; 80 52 }; 81 53 ··· 90 62 while ( 91 63 (next = reverse ? next.previousElementSibling : next.nextElementSibling) 92 64 ) { 93 - if (isVisible(next) && !!next.matches(focusableSelectors)) { 65 + if (!isVisible(next)) { 66 + continue; 67 + } else if (!!next.matches(focusableSelectors)) { 94 68 return next as HTMLElement; 95 - } else if (hasFocusTargets(next)) { 69 + } else { 96 70 const targets = getFocusTargets(next); 97 71 if (targets.length) return targets[reverse ? targets.length - 1 : 0]; 98 72 }
+31 -44
src/utils/selection.ts
··· 1 1 import { contains } from './element'; 2 2 3 - interface RestoreInputSelection { 4 - element: HTMLInputElement; 5 - method: 'setSelectionRange'; 6 - arguments: [number, number, 'forward' | 'backward' | 'none' | undefined]; 7 - } 8 - 9 - interface RestoreActiveNode { 3 + export interface RestoreSelection { 10 4 element: HTMLElement; 11 - method: 'focus'; 5 + restore(): void; 12 6 } 13 7 14 - interface RestoreSelectionRange { 15 - element: HTMLElement; 16 - method: 'range'; 17 - range: Range; 18 - } 19 - 20 - export type RestoreSelection = 21 - | RestoreInputSelection 22 - | RestoreActiveNode 23 - | RestoreSelectionRange; 24 - 25 8 const hasSelection = (node: HTMLElement): node is HTMLInputElement => 26 - (node.nodeName === 'INPUT' || node.nodeName === 'TEXTAREA') && 27 9 typeof (node as HTMLInputElement).selectionStart === 'number' && 28 10 typeof (node as HTMLInputElement).selectionEnd === 'number'; 29 11 ··· 36 18 if (!element || !target) { 37 19 return null; 38 20 } else if (hasSelection(element)) { 21 + const { selectionStart, selectionEnd, selectionDirection } = element; 39 22 return { 40 23 element, 41 - method: 'setSelectionRange', 42 - arguments: [ 43 - element.selectionStart!, 44 - element.selectionEnd!, 45 - element.selectionDirection || undefined, 46 - ], 24 + restore() { 25 + element.focus(); 26 + element.setSelectionRange( 27 + selectionStart, 28 + selectionEnd, 29 + selectionDirection || undefined 30 + ); 31 + }, 47 32 }; 48 33 } 49 34 50 - const selection = window.getSelection && window.getSelection(); 35 + let range: Range | undefined; 36 + 37 + const selection = window.getSelection(); 51 38 if (selection && selection.rangeCount) { 52 - const range = selection.getRangeAt(0); 53 - if (range.startContainer && contains(target, range.startContainer)) { 54 - return { element, method: 'range', range }; 39 + const _range = selection.getRangeAt(0); 40 + if (_range.startContainer && contains(target, _range.startContainer)) { 41 + range = _range; 55 42 } 56 43 } 57 44 58 - return { element, method: 'focus' }; 45 + return { 46 + element, 47 + restore() { 48 + element.focus(); 49 + const selection = window.getSelection(); 50 + if (range && selection) { 51 + selection.removeAllRanges(); 52 + selection.addRange(range); 53 + } 54 + }, 55 + }; 59 56 }; 60 57 61 58 /** Restores a given snapshot of a selection, falling back to a simple focus. */ 62 - export const restoreSelection = (restore: RestoreSelection | null) => { 63 - if (!restore || !restore.element.parentNode) { 64 - return; 65 - } else if (restore.method === 'setSelectionRange') { 66 - restore.element.focus(); 67 - restore.element.setSelectionRange(...restore.arguments); 68 - } else if (restore.method === 'range') { 69 - const selection = window.getSelection()!; 70 - restore.element.focus(); 71 - selection.removeAllRanges(); 72 - selection.addRange(restore.range); 73 - } else { 74 - restore.element.focus(); 59 + export const restoreSelection = (selection: RestoreSelection | null) => { 60 + if (selection && selection.element.parentNode) { 61 + selection.restore(); 75 62 } 76 63 };
+2 -1
tsconfig.json
··· 7 7 "forceConsistentCasingInFileNames": true, 8 8 "noUnusedLocals": true, 9 9 "noEmit": true, 10 - "lib": ["dom", "esnext"], 10 + "lib": ["dom", "dom.iterable", "esnext"], 11 11 "jsx": "react", 12 12 "module": "es2015", 13 13 "moduleResolution": "node", 14 + "skipLibCheck": true, 14 15 "target": "esnext", 15 16 "strict": true, 16 17 "noImplicitAny": false,