├── .editorconfig ├── .gitattributes ├── .github └── workflows │ └── release.yml ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── package.json ├── pnpm-lock.yaml ├── renovate.json ├── src └── index.ts ├── test ├── __snapshots__ │ └── index.test.ts.snap ├── fixture │ ├── chunks │ │ ├── bar.js │ │ └── foo.js │ ├── hashbang.js │ └── no-hashbang.js └── index.test.ts ├── tsconfig.json └── types.d.ts /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - "v*" 7 | 8 | jobs: 9 | release: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v2 13 | - uses: actions/setup-node@v2 14 | with: 15 | node-version: 16 16 | registry-url: https://registry.npmjs.org/ 17 | - name: Cache pnpm modules 18 | uses: actions/cache@v2 19 | with: 20 | path: ~/.pnpm-store 21 | key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} 22 | restore-keys: | 23 | ${{ runner.os }}- 24 | - uses: pnpm/action-setup@v2.1.0 25 | with: 26 | version: 6.24.0 27 | run_install: true 28 | - run: | 29 | pnpm run build 30 | pnpx kanpai release 31 | env: 32 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 33 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | output 3 | dist 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## Unreleased 4 | 5 | No unreleased changes. 6 | 7 | ## 3.0.0 8 | 9 | - Migrated to TypeScript 10 | - Require node 14 or above 11 | - Require rollup 2 or above 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) EGOIST <0x142857@gmail.com> (https://egoist.moe) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # rollup-plugin-hashbang 2 | 3 | [![NPM version](https://img.shields.io/npm/v/rollup-plugin-hashbang.svg?style=flat)](https://npmjs.com/package/rollup-plugin-hashbang) [![NPM downloads](https://img.shields.io/npm/dm/rollup-plugin-hashbang.svg?style=flat)](https://npmjs.com/package/rollup-plugin-hashbang) 4 | 5 | ## Install 6 | 7 | ```bash 8 | npm i rollup-plugin-hashbang -D 9 | ``` 10 | 11 | ## Usage 12 | 13 | With `rollup.config.js`: 14 | 15 | ```js 16 | import hashbang from "rollup-plugin-hashbang"; 17 | 18 | export default { 19 | plugins: [hashbang()], 20 | }; 21 | ``` 22 | 23 | In: 24 | 25 | ```js 26 | #!/usr/bin/env node 27 | 28 | console.log("hi"); 29 | ``` 30 | 31 | Output: 32 | 33 | ```js 34 | #!/usr/bin/env node 35 | "use strict"; 36 | 37 | console.log("hi"); 38 | ``` 39 | 40 | Hashbang is preserved and the output file will be executable you don't need to `chmod +x FILE` to run it. 41 | 42 | ## Contributing 43 | 44 | 1. Fork it! 45 | 2. Create your feature branch: `git checkout -b my-new-feature` 46 | 3. Commit your changes: `git commit -am 'Add some feature'` 47 | 4. Push to the branch: `git push origin my-new-feature` 48 | 5. Submit a pull request :D 49 | 50 | ## Author 51 | 52 | **rollup-plugin-hashbang** © [EGOIST](https://github.com/egoist), Released under the [MIT](./LICENSE) License.
53 | Authored and maintained by EGOIST with help from contributors ([list](https://github.com/egoist/rollup-plugin-hashbang/contributors)). 54 | 55 | > [egoist.moe](https://egoist.moe) · GitHub [@EGOIST](https://github.com/egoist) · Twitter [@\_egoistlily](https://twitter.com/_egoistlily) 56 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rollup-plugin-hashbang", 3 | "version": "3.0.0", 4 | "description": "Preserve hashbang and make output file executable.", 5 | "repository": { 6 | "url": "egoist/rollup-plugin-hashbang", 7 | "type": "git" 8 | }, 9 | "main": "dist/index.js", 10 | "types": "dist/index.d.ts", 11 | "files": [ 12 | "dist" 13 | ], 14 | "scripts": { 15 | "test": "vitest run", 16 | "build": "tsup src/index.ts --dts", 17 | "prepublishOnly": "npm run build" 18 | }, 19 | "author": "egoist <0x142857@gmail.com>", 20 | "license": "MIT", 21 | "dependencies": { 22 | "magic-string": "^0.25.7" 23 | }, 24 | "devDependencies": { 25 | "@types/fs-extra": "^9.0.13", 26 | "executable": "^4.1.1", 27 | "fs-extra": "^10.0.0", 28 | "kanpai": "^0.10.1", 29 | "rollup": "^2.63.0", 30 | "tsup": "^5.11.11", 31 | "typescript": "^4.5.4", 32 | "vitest": "0.4.2" 33 | }, 34 | "peerDependencies": { 35 | "rollup": ">=2" 36 | }, 37 | "engines": { 38 | "node": ">=14" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@types/fs-extra': ^9.0.13 5 | executable: ^4.1.1 6 | fs-extra: ^10.0.0 7 | kanpai: ^0.10.1 8 | magic-string: ^0.25.7 9 | rollup: ^2.63.0 10 | tsup: ^5.11.11 11 | typescript: ^4.5.4 12 | vitest: 0.4.2 13 | 14 | dependencies: 15 | magic-string: 0.25.7 16 | 17 | devDependencies: 18 | '@types/fs-extra': 9.0.13 19 | executable: 4.1.1 20 | fs-extra: 10.0.0 21 | kanpai: 0.10.1 22 | rollup: 2.63.0 23 | tsup: 5.11.11_typescript@4.5.4 24 | typescript: 4.5.4 25 | vitest: 0.4.2 26 | 27 | packages: 28 | 29 | /@nodelib/fs.scandir/2.1.5: 30 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 31 | engines: {node: '>= 8'} 32 | dependencies: 33 | '@nodelib/fs.stat': 2.0.5 34 | run-parallel: 1.2.0 35 | dev: true 36 | 37 | /@nodelib/fs.stat/2.0.5: 38 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 39 | engines: {node: '>= 8'} 40 | dev: true 41 | 42 | /@nodelib/fs.walk/1.2.8: 43 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 44 | engines: {node: '>= 8'} 45 | dependencies: 46 | '@nodelib/fs.scandir': 2.1.5 47 | fastq: 1.13.0 48 | dev: true 49 | 50 | /@types/chai-subset/1.3.3: 51 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} 52 | dependencies: 53 | '@types/chai': 4.3.0 54 | dev: true 55 | 56 | /@types/chai/4.3.0: 57 | resolution: {integrity: sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==} 58 | dev: true 59 | 60 | /@types/fs-extra/9.0.13: 61 | resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} 62 | dependencies: 63 | '@types/node': 17.0.8 64 | dev: true 65 | 66 | /@types/node/17.0.8: 67 | resolution: {integrity: sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==} 68 | dev: true 69 | 70 | /any-promise/1.3.0: 71 | resolution: {integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8=} 72 | dev: true 73 | 74 | /anymatch/3.1.2: 75 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 76 | engines: {node: '>= 8'} 77 | dependencies: 78 | normalize-path: 3.0.0 79 | picomatch: 2.3.1 80 | dev: true 81 | 82 | /array-union/2.1.0: 83 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 84 | engines: {node: '>=8'} 85 | dev: true 86 | 87 | /assertion-error/1.1.0: 88 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 89 | dev: true 90 | 91 | /balanced-match/1.0.2: 92 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 93 | dev: true 94 | 95 | /binary-extensions/2.2.0: 96 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 97 | engines: {node: '>=8'} 98 | dev: true 99 | 100 | /brace-expansion/1.1.11: 101 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 102 | dependencies: 103 | balanced-match: 1.0.2 104 | concat-map: 0.0.1 105 | dev: true 106 | 107 | /braces/3.0.2: 108 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 109 | engines: {node: '>=8'} 110 | dependencies: 111 | fill-range: 7.0.1 112 | dev: true 113 | 114 | /bundle-require/2.2.0_esbuild@0.14.11: 115 | resolution: {integrity: sha512-JDVxYEAxEX1g8AWtadiIkCkFf42RulEl5AOIvUa4cpuEL/VKpK2lJwogyswHnp+qizNQxM0Ylamw7CjPRaJZuA==} 116 | peerDependencies: 117 | esbuild: '>=0.13' 118 | dependencies: 119 | esbuild: 0.14.11 120 | dev: true 121 | 122 | /cac/6.7.12: 123 | resolution: {integrity: sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==} 124 | engines: {node: '>=8'} 125 | dev: true 126 | 127 | /chai/4.3.6: 128 | resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} 129 | engines: {node: '>=4'} 130 | dependencies: 131 | assertion-error: 1.1.0 132 | check-error: 1.0.2 133 | deep-eql: 3.0.1 134 | get-func-name: 2.0.0 135 | loupe: 2.3.4 136 | pathval: 1.1.1 137 | type-detect: 4.0.8 138 | dev: true 139 | 140 | /check-error/1.0.2: 141 | resolution: {integrity: sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=} 142 | dev: true 143 | 144 | /chokidar/3.5.2: 145 | resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} 146 | engines: {node: '>= 8.10.0'} 147 | dependencies: 148 | anymatch: 3.1.2 149 | braces: 3.0.2 150 | glob-parent: 5.1.2 151 | is-binary-path: 2.1.0 152 | is-glob: 4.0.3 153 | normalize-path: 3.0.0 154 | readdirp: 3.6.0 155 | optionalDependencies: 156 | fsevents: 2.3.2 157 | dev: true 158 | 159 | /commander/4.1.1: 160 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 161 | engines: {node: '>= 6'} 162 | dev: true 163 | 164 | /concat-map/0.0.1: 165 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 166 | dev: true 167 | 168 | /cross-spawn/7.0.3: 169 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 170 | engines: {node: '>= 8'} 171 | dependencies: 172 | path-key: 3.1.1 173 | shebang-command: 2.0.0 174 | which: 2.0.2 175 | dev: true 176 | 177 | /debug/4.3.3: 178 | resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} 179 | engines: {node: '>=6.0'} 180 | peerDependencies: 181 | supports-color: '*' 182 | peerDependenciesMeta: 183 | supports-color: 184 | optional: true 185 | dependencies: 186 | ms: 2.1.2 187 | dev: true 188 | 189 | /deep-eql/3.0.1: 190 | resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} 191 | engines: {node: '>=0.12'} 192 | dependencies: 193 | type-detect: 4.0.8 194 | dev: true 195 | 196 | /dir-glob/3.0.1: 197 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 198 | engines: {node: '>=8'} 199 | dependencies: 200 | path-type: 4.0.0 201 | dev: true 202 | 203 | /esbuild-android-arm64/0.14.11: 204 | resolution: {integrity: sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw==} 205 | cpu: [arm64] 206 | os: [android] 207 | requiresBuild: true 208 | dev: true 209 | optional: true 210 | 211 | /esbuild-android-arm64/0.14.23: 212 | resolution: {integrity: sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==} 213 | engines: {node: '>=12'} 214 | cpu: [arm64] 215 | os: [android] 216 | requiresBuild: true 217 | dev: true 218 | optional: true 219 | 220 | /esbuild-darwin-64/0.14.11: 221 | resolution: {integrity: sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ==} 222 | cpu: [x64] 223 | os: [darwin] 224 | requiresBuild: true 225 | dev: true 226 | optional: true 227 | 228 | /esbuild-darwin-64/0.14.23: 229 | resolution: {integrity: sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==} 230 | engines: {node: '>=12'} 231 | cpu: [x64] 232 | os: [darwin] 233 | requiresBuild: true 234 | dev: true 235 | optional: true 236 | 237 | /esbuild-darwin-arm64/0.14.11: 238 | resolution: {integrity: sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg==} 239 | cpu: [arm64] 240 | os: [darwin] 241 | requiresBuild: true 242 | dev: true 243 | optional: true 244 | 245 | /esbuild-darwin-arm64/0.14.23: 246 | resolution: {integrity: sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==} 247 | engines: {node: '>=12'} 248 | cpu: [arm64] 249 | os: [darwin] 250 | requiresBuild: true 251 | dev: true 252 | optional: true 253 | 254 | /esbuild-freebsd-64/0.14.11: 255 | resolution: {integrity: sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA==} 256 | cpu: [x64] 257 | os: [freebsd] 258 | requiresBuild: true 259 | dev: true 260 | optional: true 261 | 262 | /esbuild-freebsd-64/0.14.23: 263 | resolution: {integrity: sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==} 264 | engines: {node: '>=12'} 265 | cpu: [x64] 266 | os: [freebsd] 267 | requiresBuild: true 268 | dev: true 269 | optional: true 270 | 271 | /esbuild-freebsd-arm64/0.14.11: 272 | resolution: {integrity: sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w==} 273 | cpu: [arm64] 274 | os: [freebsd] 275 | requiresBuild: true 276 | dev: true 277 | optional: true 278 | 279 | /esbuild-freebsd-arm64/0.14.23: 280 | resolution: {integrity: sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==} 281 | engines: {node: '>=12'} 282 | cpu: [arm64] 283 | os: [freebsd] 284 | requiresBuild: true 285 | dev: true 286 | optional: true 287 | 288 | /esbuild-linux-32/0.14.11: 289 | resolution: {integrity: sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg==} 290 | cpu: [ia32] 291 | os: [linux] 292 | requiresBuild: true 293 | dev: true 294 | optional: true 295 | 296 | /esbuild-linux-32/0.14.23: 297 | resolution: {integrity: sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==} 298 | engines: {node: '>=12'} 299 | cpu: [ia32] 300 | os: [linux] 301 | requiresBuild: true 302 | dev: true 303 | optional: true 304 | 305 | /esbuild-linux-64/0.14.11: 306 | resolution: {integrity: sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg==} 307 | cpu: [x64] 308 | os: [linux] 309 | requiresBuild: true 310 | dev: true 311 | optional: true 312 | 313 | /esbuild-linux-64/0.14.23: 314 | resolution: {integrity: sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==} 315 | engines: {node: '>=12'} 316 | cpu: [x64] 317 | os: [linux] 318 | requiresBuild: true 319 | dev: true 320 | optional: true 321 | 322 | /esbuild-linux-arm/0.14.11: 323 | resolution: {integrity: sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ==} 324 | cpu: [arm] 325 | os: [linux] 326 | requiresBuild: true 327 | dev: true 328 | optional: true 329 | 330 | /esbuild-linux-arm/0.14.23: 331 | resolution: {integrity: sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==} 332 | engines: {node: '>=12'} 333 | cpu: [arm] 334 | os: [linux] 335 | requiresBuild: true 336 | dev: true 337 | optional: true 338 | 339 | /esbuild-linux-arm64/0.14.11: 340 | resolution: {integrity: sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg==} 341 | cpu: [arm64] 342 | os: [linux] 343 | requiresBuild: true 344 | dev: true 345 | optional: true 346 | 347 | /esbuild-linux-arm64/0.14.23: 348 | resolution: {integrity: sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==} 349 | engines: {node: '>=12'} 350 | cpu: [arm64] 351 | os: [linux] 352 | requiresBuild: true 353 | dev: true 354 | optional: true 355 | 356 | /esbuild-linux-mips64le/0.14.11: 357 | resolution: {integrity: sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw==} 358 | cpu: [mips64el] 359 | os: [linux] 360 | requiresBuild: true 361 | dev: true 362 | optional: true 363 | 364 | /esbuild-linux-mips64le/0.14.23: 365 | resolution: {integrity: sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==} 366 | engines: {node: '>=12'} 367 | cpu: [mips64el] 368 | os: [linux] 369 | requiresBuild: true 370 | dev: true 371 | optional: true 372 | 373 | /esbuild-linux-ppc64le/0.14.11: 374 | resolution: {integrity: sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ==} 375 | cpu: [ppc64] 376 | os: [linux] 377 | requiresBuild: true 378 | dev: true 379 | optional: true 380 | 381 | /esbuild-linux-ppc64le/0.14.23: 382 | resolution: {integrity: sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==} 383 | engines: {node: '>=12'} 384 | cpu: [ppc64] 385 | os: [linux] 386 | requiresBuild: true 387 | dev: true 388 | optional: true 389 | 390 | /esbuild-linux-riscv64/0.14.23: 391 | resolution: {integrity: sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==} 392 | engines: {node: '>=12'} 393 | cpu: [riscv64] 394 | os: [linux] 395 | requiresBuild: true 396 | dev: true 397 | optional: true 398 | 399 | /esbuild-linux-s390x/0.14.11: 400 | resolution: {integrity: sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw==} 401 | cpu: [s390x] 402 | os: [linux] 403 | requiresBuild: true 404 | dev: true 405 | optional: true 406 | 407 | /esbuild-linux-s390x/0.14.23: 408 | resolution: {integrity: sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==} 409 | engines: {node: '>=12'} 410 | cpu: [s390x] 411 | os: [linux] 412 | requiresBuild: true 413 | dev: true 414 | optional: true 415 | 416 | /esbuild-netbsd-64/0.14.11: 417 | resolution: {integrity: sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw==} 418 | cpu: [x64] 419 | os: [netbsd] 420 | requiresBuild: true 421 | dev: true 422 | optional: true 423 | 424 | /esbuild-netbsd-64/0.14.23: 425 | resolution: {integrity: sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==} 426 | engines: {node: '>=12'} 427 | cpu: [x64] 428 | os: [netbsd] 429 | requiresBuild: true 430 | dev: true 431 | optional: true 432 | 433 | /esbuild-openbsd-64/0.14.11: 434 | resolution: {integrity: sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q==} 435 | cpu: [x64] 436 | os: [openbsd] 437 | requiresBuild: true 438 | dev: true 439 | optional: true 440 | 441 | /esbuild-openbsd-64/0.14.23: 442 | resolution: {integrity: sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==} 443 | engines: {node: '>=12'} 444 | cpu: [x64] 445 | os: [openbsd] 446 | requiresBuild: true 447 | dev: true 448 | optional: true 449 | 450 | /esbuild-sunos-64/0.14.11: 451 | resolution: {integrity: sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg==} 452 | cpu: [x64] 453 | os: [sunos] 454 | requiresBuild: true 455 | dev: true 456 | optional: true 457 | 458 | /esbuild-sunos-64/0.14.23: 459 | resolution: {integrity: sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==} 460 | engines: {node: '>=12'} 461 | cpu: [x64] 462 | os: [sunos] 463 | requiresBuild: true 464 | dev: true 465 | optional: true 466 | 467 | /esbuild-windows-32/0.14.11: 468 | resolution: {integrity: sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ==} 469 | cpu: [ia32] 470 | os: [win32] 471 | requiresBuild: true 472 | dev: true 473 | optional: true 474 | 475 | /esbuild-windows-32/0.14.23: 476 | resolution: {integrity: sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==} 477 | engines: {node: '>=12'} 478 | cpu: [ia32] 479 | os: [win32] 480 | requiresBuild: true 481 | dev: true 482 | optional: true 483 | 484 | /esbuild-windows-64/0.14.11: 485 | resolution: {integrity: sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg==} 486 | cpu: [x64] 487 | os: [win32] 488 | requiresBuild: true 489 | dev: true 490 | optional: true 491 | 492 | /esbuild-windows-64/0.14.23: 493 | resolution: {integrity: sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==} 494 | engines: {node: '>=12'} 495 | cpu: [x64] 496 | os: [win32] 497 | requiresBuild: true 498 | dev: true 499 | optional: true 500 | 501 | /esbuild-windows-arm64/0.14.11: 502 | resolution: {integrity: sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ==} 503 | cpu: [arm64] 504 | os: [win32] 505 | requiresBuild: true 506 | dev: true 507 | optional: true 508 | 509 | /esbuild-windows-arm64/0.14.23: 510 | resolution: {integrity: sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==} 511 | engines: {node: '>=12'} 512 | cpu: [arm64] 513 | os: [win32] 514 | requiresBuild: true 515 | dev: true 516 | optional: true 517 | 518 | /esbuild/0.14.11: 519 | resolution: {integrity: sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg==} 520 | hasBin: true 521 | requiresBuild: true 522 | optionalDependencies: 523 | esbuild-android-arm64: 0.14.11 524 | esbuild-darwin-64: 0.14.11 525 | esbuild-darwin-arm64: 0.14.11 526 | esbuild-freebsd-64: 0.14.11 527 | esbuild-freebsd-arm64: 0.14.11 528 | esbuild-linux-32: 0.14.11 529 | esbuild-linux-64: 0.14.11 530 | esbuild-linux-arm: 0.14.11 531 | esbuild-linux-arm64: 0.14.11 532 | esbuild-linux-mips64le: 0.14.11 533 | esbuild-linux-ppc64le: 0.14.11 534 | esbuild-linux-s390x: 0.14.11 535 | esbuild-netbsd-64: 0.14.11 536 | esbuild-openbsd-64: 0.14.11 537 | esbuild-sunos-64: 0.14.11 538 | esbuild-windows-32: 0.14.11 539 | esbuild-windows-64: 0.14.11 540 | esbuild-windows-arm64: 0.14.11 541 | dev: true 542 | 543 | /esbuild/0.14.23: 544 | resolution: {integrity: sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==} 545 | engines: {node: '>=12'} 546 | hasBin: true 547 | requiresBuild: true 548 | optionalDependencies: 549 | esbuild-android-arm64: 0.14.23 550 | esbuild-darwin-64: 0.14.23 551 | esbuild-darwin-arm64: 0.14.23 552 | esbuild-freebsd-64: 0.14.23 553 | esbuild-freebsd-arm64: 0.14.23 554 | esbuild-linux-32: 0.14.23 555 | esbuild-linux-64: 0.14.23 556 | esbuild-linux-arm: 0.14.23 557 | esbuild-linux-arm64: 0.14.23 558 | esbuild-linux-mips64le: 0.14.23 559 | esbuild-linux-ppc64le: 0.14.23 560 | esbuild-linux-riscv64: 0.14.23 561 | esbuild-linux-s390x: 0.14.23 562 | esbuild-netbsd-64: 0.14.23 563 | esbuild-openbsd-64: 0.14.23 564 | esbuild-sunos-64: 0.14.23 565 | esbuild-windows-32: 0.14.23 566 | esbuild-windows-64: 0.14.23 567 | esbuild-windows-arm64: 0.14.23 568 | dev: true 569 | 570 | /execa/5.1.1: 571 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 572 | engines: {node: '>=10'} 573 | dependencies: 574 | cross-spawn: 7.0.3 575 | get-stream: 6.0.1 576 | human-signals: 2.1.0 577 | is-stream: 2.0.1 578 | merge-stream: 2.0.0 579 | npm-run-path: 4.0.1 580 | onetime: 5.1.2 581 | signal-exit: 3.0.6 582 | strip-final-newline: 2.0.0 583 | dev: true 584 | 585 | /executable/4.1.1: 586 | resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} 587 | engines: {node: '>=4'} 588 | dependencies: 589 | pify: 2.3.0 590 | dev: true 591 | 592 | /fast-glob/3.2.10: 593 | resolution: {integrity: sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==} 594 | engines: {node: '>=8.6.0'} 595 | dependencies: 596 | '@nodelib/fs.stat': 2.0.5 597 | '@nodelib/fs.walk': 1.2.8 598 | glob-parent: 5.1.2 599 | merge2: 1.4.1 600 | micromatch: 4.0.4 601 | dev: true 602 | 603 | /fastq/1.13.0: 604 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 605 | dependencies: 606 | reusify: 1.0.4 607 | dev: true 608 | 609 | /fill-range/7.0.1: 610 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 611 | engines: {node: '>=8'} 612 | dependencies: 613 | to-regex-range: 5.0.1 614 | dev: true 615 | 616 | /fs-extra/10.0.0: 617 | resolution: {integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==} 618 | engines: {node: '>=12'} 619 | dependencies: 620 | graceful-fs: 4.2.9 621 | jsonfile: 6.1.0 622 | universalify: 2.0.0 623 | dev: true 624 | 625 | /fs.realpath/1.0.0: 626 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} 627 | dev: true 628 | 629 | /fsevents/2.3.2: 630 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 631 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 632 | os: [darwin] 633 | requiresBuild: true 634 | dev: true 635 | optional: true 636 | 637 | /function-bind/1.1.1: 638 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 639 | dev: true 640 | 641 | /get-func-name/2.0.0: 642 | resolution: {integrity: sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=} 643 | dev: true 644 | 645 | /get-stream/6.0.1: 646 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 647 | engines: {node: '>=10'} 648 | dev: true 649 | 650 | /glob-parent/5.1.2: 651 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 652 | engines: {node: '>= 6'} 653 | dependencies: 654 | is-glob: 4.0.3 655 | dev: true 656 | 657 | /glob/7.1.6: 658 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 659 | dependencies: 660 | fs.realpath: 1.0.0 661 | inflight: 1.0.6 662 | inherits: 2.0.4 663 | minimatch: 3.0.4 664 | once: 1.4.0 665 | path-is-absolute: 1.0.1 666 | dev: true 667 | 668 | /globby/11.1.0: 669 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 670 | engines: {node: '>=10'} 671 | dependencies: 672 | array-union: 2.1.0 673 | dir-glob: 3.0.1 674 | fast-glob: 3.2.10 675 | ignore: 5.2.0 676 | merge2: 1.4.1 677 | slash: 3.0.0 678 | dev: true 679 | 680 | /graceful-fs/4.2.9: 681 | resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} 682 | dev: true 683 | 684 | /has/1.0.3: 685 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 686 | engines: {node: '>= 0.4.0'} 687 | dependencies: 688 | function-bind: 1.1.1 689 | dev: true 690 | 691 | /human-signals/2.1.0: 692 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 693 | engines: {node: '>=10.17.0'} 694 | dev: true 695 | 696 | /ignore/5.2.0: 697 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} 698 | engines: {node: '>= 4'} 699 | dev: true 700 | 701 | /inflight/1.0.6: 702 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} 703 | dependencies: 704 | once: 1.4.0 705 | wrappy: 1.0.2 706 | dev: true 707 | 708 | /inherits/2.0.4: 709 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 710 | dev: true 711 | 712 | /is-binary-path/2.1.0: 713 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 714 | engines: {node: '>=8'} 715 | dependencies: 716 | binary-extensions: 2.2.0 717 | dev: true 718 | 719 | /is-core-module/2.8.1: 720 | resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} 721 | dependencies: 722 | has: 1.0.3 723 | dev: true 724 | 725 | /is-extglob/2.1.1: 726 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 727 | engines: {node: '>=0.10.0'} 728 | dev: true 729 | 730 | /is-glob/4.0.3: 731 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 732 | engines: {node: '>=0.10.0'} 733 | dependencies: 734 | is-extglob: 2.1.1 735 | dev: true 736 | 737 | /is-number/7.0.0: 738 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 739 | engines: {node: '>=0.12.0'} 740 | dev: true 741 | 742 | /is-stream/2.0.1: 743 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 744 | engines: {node: '>=8'} 745 | dev: true 746 | 747 | /isexe/2.0.0: 748 | resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} 749 | dev: true 750 | 751 | /joycon/3.1.1: 752 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 753 | engines: {node: '>=10'} 754 | dev: true 755 | 756 | /jsonfile/6.1.0: 757 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 758 | dependencies: 759 | universalify: 2.0.0 760 | optionalDependencies: 761 | graceful-fs: 4.2.9 762 | dev: true 763 | 764 | /kanpai/0.10.1: 765 | resolution: {integrity: sha512-EUmZoO4FxphrH0blToWScMEUWyqHUg6x31WgW8ruUhj6EPy4FpI2j+z0LJ3qnUiIeGObrkx/xToH2hFcxLwtuA==} 766 | engines: {node: '>=14.0.0'} 767 | hasBin: true 768 | dev: true 769 | 770 | /lilconfig/2.0.4: 771 | resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==} 772 | engines: {node: '>=10'} 773 | dev: true 774 | 775 | /lines-and-columns/1.2.4: 776 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 777 | dev: true 778 | 779 | /local-pkg/0.4.1: 780 | resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==} 781 | engines: {node: '>=14'} 782 | dev: true 783 | 784 | /loupe/2.3.4: 785 | resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} 786 | dependencies: 787 | get-func-name: 2.0.0 788 | dev: true 789 | 790 | /magic-string/0.25.7: 791 | resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==} 792 | dependencies: 793 | sourcemap-codec: 1.4.8 794 | dev: false 795 | 796 | /merge-stream/2.0.0: 797 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 798 | dev: true 799 | 800 | /merge2/1.4.1: 801 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 802 | engines: {node: '>= 8'} 803 | dev: true 804 | 805 | /micromatch/4.0.4: 806 | resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} 807 | engines: {node: '>=8.6'} 808 | dependencies: 809 | braces: 3.0.2 810 | picomatch: 2.3.1 811 | dev: true 812 | 813 | /mimic-fn/2.1.0: 814 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 815 | engines: {node: '>=6'} 816 | dev: true 817 | 818 | /minimatch/3.0.4: 819 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} 820 | dependencies: 821 | brace-expansion: 1.1.11 822 | dev: true 823 | 824 | /ms/2.1.2: 825 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 826 | dev: true 827 | 828 | /mz/2.7.0: 829 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 830 | dependencies: 831 | any-promise: 1.3.0 832 | object-assign: 4.1.1 833 | thenify-all: 1.6.0 834 | dev: true 835 | 836 | /nanoid/3.3.1: 837 | resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} 838 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 839 | hasBin: true 840 | dev: true 841 | 842 | /normalize-path/3.0.0: 843 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 844 | engines: {node: '>=0.10.0'} 845 | dev: true 846 | 847 | /npm-run-path/4.0.1: 848 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 849 | engines: {node: '>=8'} 850 | dependencies: 851 | path-key: 3.1.1 852 | dev: true 853 | 854 | /object-assign/4.1.1: 855 | resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} 856 | engines: {node: '>=0.10.0'} 857 | dev: true 858 | 859 | /once/1.4.0: 860 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} 861 | dependencies: 862 | wrappy: 1.0.2 863 | dev: true 864 | 865 | /onetime/5.1.2: 866 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 867 | engines: {node: '>=6'} 868 | dependencies: 869 | mimic-fn: 2.1.0 870 | dev: true 871 | 872 | /path-is-absolute/1.0.1: 873 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} 874 | engines: {node: '>=0.10.0'} 875 | dev: true 876 | 877 | /path-key/3.1.1: 878 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 879 | engines: {node: '>=8'} 880 | dev: true 881 | 882 | /path-parse/1.0.7: 883 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 884 | dev: true 885 | 886 | /path-type/4.0.0: 887 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 888 | engines: {node: '>=8'} 889 | dev: true 890 | 891 | /pathval/1.1.1: 892 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 893 | dev: true 894 | 895 | /picocolors/1.0.0: 896 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 897 | dev: true 898 | 899 | /picomatch/2.3.1: 900 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 901 | engines: {node: '>=8.6'} 902 | dev: true 903 | 904 | /pify/2.3.0: 905 | resolution: {integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=} 906 | engines: {node: '>=0.10.0'} 907 | dev: true 908 | 909 | /pirates/4.0.4: 910 | resolution: {integrity: sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==} 911 | engines: {node: '>= 6'} 912 | dev: true 913 | 914 | /postcss-load-config/3.1.1: 915 | resolution: {integrity: sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==} 916 | engines: {node: '>= 10'} 917 | peerDependencies: 918 | ts-node: '>=9.0.0' 919 | peerDependenciesMeta: 920 | ts-node: 921 | optional: true 922 | dependencies: 923 | lilconfig: 2.0.4 924 | yaml: 1.10.2 925 | dev: true 926 | 927 | /postcss/8.4.6: 928 | resolution: {integrity: sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==} 929 | engines: {node: ^10 || ^12 || >=14} 930 | dependencies: 931 | nanoid: 3.3.1 932 | picocolors: 1.0.0 933 | source-map-js: 1.0.2 934 | dev: true 935 | 936 | /queue-microtask/1.2.3: 937 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 938 | dev: true 939 | 940 | /readdirp/3.6.0: 941 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 942 | engines: {node: '>=8.10.0'} 943 | dependencies: 944 | picomatch: 2.3.1 945 | dev: true 946 | 947 | /resolve-from/5.0.0: 948 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 949 | engines: {node: '>=8'} 950 | dev: true 951 | 952 | /resolve/1.22.0: 953 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 954 | hasBin: true 955 | dependencies: 956 | is-core-module: 2.8.1 957 | path-parse: 1.0.7 958 | supports-preserve-symlinks-flag: 1.0.0 959 | dev: true 960 | 961 | /reusify/1.0.4: 962 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 963 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 964 | dev: true 965 | 966 | /rollup/2.63.0: 967 | resolution: {integrity: sha512-nps0idjmD+NXl6OREfyYXMn/dar3WGcyKn+KBzPdaLecub3x/LrId0wUcthcr8oZUAcZAR8NKcfGGFlNgGL1kQ==} 968 | engines: {node: '>=10.0.0'} 969 | hasBin: true 970 | optionalDependencies: 971 | fsevents: 2.3.2 972 | dev: true 973 | 974 | /run-parallel/1.2.0: 975 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 976 | dependencies: 977 | queue-microtask: 1.2.3 978 | dev: true 979 | 980 | /shebang-command/2.0.0: 981 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 982 | engines: {node: '>=8'} 983 | dependencies: 984 | shebang-regex: 3.0.0 985 | dev: true 986 | 987 | /shebang-regex/3.0.0: 988 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 989 | engines: {node: '>=8'} 990 | dev: true 991 | 992 | /signal-exit/3.0.6: 993 | resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==} 994 | dev: true 995 | 996 | /slash/3.0.0: 997 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 998 | engines: {node: '>=8'} 999 | dev: true 1000 | 1001 | /source-map-js/1.0.2: 1002 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1003 | engines: {node: '>=0.10.0'} 1004 | dev: true 1005 | 1006 | /source-map/0.7.3: 1007 | resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} 1008 | engines: {node: '>= 8'} 1009 | dev: true 1010 | 1011 | /sourcemap-codec/1.4.8: 1012 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 1013 | dev: false 1014 | 1015 | /strip-final-newline/2.0.0: 1016 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1017 | engines: {node: '>=6'} 1018 | dev: true 1019 | 1020 | /sucrase/3.20.3: 1021 | resolution: {integrity: sha512-azqwq0/Bs6RzLAdb4dXxsCgMtAaD2hzmUr4UhSfsxO46JFPAwMnnb441B/qsudZiS6Ylea3JXZe3Q497lsgXzQ==} 1022 | engines: {node: '>=8'} 1023 | hasBin: true 1024 | dependencies: 1025 | commander: 4.1.1 1026 | glob: 7.1.6 1027 | lines-and-columns: 1.2.4 1028 | mz: 2.7.0 1029 | pirates: 4.0.4 1030 | ts-interface-checker: 0.1.13 1031 | dev: true 1032 | 1033 | /supports-preserve-symlinks-flag/1.0.0: 1034 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1035 | engines: {node: '>= 0.4'} 1036 | dev: true 1037 | 1038 | /thenify-all/1.6.0: 1039 | resolution: {integrity: sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=} 1040 | engines: {node: '>=0.8'} 1041 | dependencies: 1042 | thenify: 3.3.1 1043 | dev: true 1044 | 1045 | /thenify/3.3.1: 1046 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1047 | dependencies: 1048 | any-promise: 1.3.0 1049 | dev: true 1050 | 1051 | /tinypool/0.1.2: 1052 | resolution: {integrity: sha512-fvtYGXoui2RpeMILfkvGIgOVkzJEGediv8UJt7TxdAOY8pnvUkFg/fkvqTfXG9Acc9S17Cnn1S4osDc2164guA==} 1053 | engines: {node: '>=14.0.0'} 1054 | dev: true 1055 | 1056 | /tinyspy/0.3.0: 1057 | resolution: {integrity: sha512-c5uFHqtUp74R2DJE3/Efg0mH5xicmgziaQXMm/LvuuZn3RdpADH32aEGDRyCzObXT1DNfwDMqRQ/Drh1MlO12g==} 1058 | engines: {node: '>=14.0.0'} 1059 | dev: true 1060 | 1061 | /to-regex-range/5.0.1: 1062 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1063 | engines: {node: '>=8.0'} 1064 | dependencies: 1065 | is-number: 7.0.0 1066 | dev: true 1067 | 1068 | /tree-kill/1.2.2: 1069 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1070 | hasBin: true 1071 | dev: true 1072 | 1073 | /ts-interface-checker/0.1.13: 1074 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1075 | dev: true 1076 | 1077 | /tsup/5.11.11_typescript@4.5.4: 1078 | resolution: {integrity: sha512-rgbTu+KhAI9PdGUS07rKohDXbRLTstBGJaxl75q7RZYRGF+n+kN8L4RlXY5pqYb9Hsq0gEB6nS39v7nSvVBS+g==} 1079 | hasBin: true 1080 | peerDependencies: 1081 | typescript: ^4.1.0 1082 | peerDependenciesMeta: 1083 | typescript: 1084 | optional: true 1085 | dependencies: 1086 | bundle-require: 2.2.0_esbuild@0.14.11 1087 | cac: 6.7.12 1088 | chokidar: 3.5.2 1089 | debug: 4.3.3 1090 | esbuild: 0.14.11 1091 | execa: 5.1.1 1092 | globby: 11.1.0 1093 | joycon: 3.1.1 1094 | postcss-load-config: 3.1.1 1095 | resolve-from: 5.0.0 1096 | rollup: 2.63.0 1097 | source-map: 0.7.3 1098 | sucrase: 3.20.3 1099 | tree-kill: 1.2.2 1100 | typescript: 4.5.4 1101 | transitivePeerDependencies: 1102 | - supports-color 1103 | - ts-node 1104 | dev: true 1105 | 1106 | /type-detect/4.0.8: 1107 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1108 | engines: {node: '>=4'} 1109 | dev: true 1110 | 1111 | /typescript/4.5.4: 1112 | resolution: {integrity: sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==} 1113 | engines: {node: '>=4.2.0'} 1114 | hasBin: true 1115 | dev: true 1116 | 1117 | /universalify/2.0.0: 1118 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} 1119 | engines: {node: '>= 10.0.0'} 1120 | dev: true 1121 | 1122 | /vite/2.8.4: 1123 | resolution: {integrity: sha512-GwtOkkaT2LDI82uWZKcrpRQxP5tymLnC7hVHHqNkhFNknYr0hJUlDLfhVRgngJvAy3RwypkDCWtTKn1BjO96Dw==} 1124 | engines: {node: '>=12.2.0'} 1125 | hasBin: true 1126 | peerDependencies: 1127 | less: '*' 1128 | sass: '*' 1129 | stylus: '*' 1130 | peerDependenciesMeta: 1131 | less: 1132 | optional: true 1133 | sass: 1134 | optional: true 1135 | stylus: 1136 | optional: true 1137 | dependencies: 1138 | esbuild: 0.14.23 1139 | postcss: 8.4.6 1140 | resolve: 1.22.0 1141 | rollup: 2.63.0 1142 | optionalDependencies: 1143 | fsevents: 2.3.2 1144 | dev: true 1145 | 1146 | /vitest/0.4.2: 1147 | resolution: {integrity: sha512-f5kclFhkCuIKQ96lsAveESeyfTf9ihT79ZQcLDNCoJbMDNTHQdSMnU7aq9KAeOmZVh4la3NANKWECWM7HfP1ng==} 1148 | engines: {node: '>=14.14.0'} 1149 | hasBin: true 1150 | peerDependencies: 1151 | '@vitest/ui': '*' 1152 | c8: '*' 1153 | happy-dom: '*' 1154 | jsdom: '*' 1155 | peerDependenciesMeta: 1156 | '@vitest/ui': 1157 | optional: true 1158 | c8: 1159 | optional: true 1160 | happy-dom: 1161 | optional: true 1162 | jsdom: 1163 | optional: true 1164 | dependencies: 1165 | '@types/chai': 4.3.0 1166 | '@types/chai-subset': 1.3.3 1167 | chai: 4.3.6 1168 | local-pkg: 0.4.1 1169 | tinypool: 0.1.2 1170 | tinyspy: 0.3.0 1171 | vite: 2.8.4 1172 | transitivePeerDependencies: 1173 | - less 1174 | - sass 1175 | - stylus 1176 | dev: true 1177 | 1178 | /which/2.0.2: 1179 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1180 | engines: {node: '>= 8'} 1181 | hasBin: true 1182 | dependencies: 1183 | isexe: 2.0.0 1184 | dev: true 1185 | 1186 | /wrappy/1.0.2: 1187 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} 1188 | dev: true 1189 | 1190 | /yaml/1.10.2: 1191 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1192 | engines: {node: '>= 6'} 1193 | dev: true 1194 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | import path from "path"; 3 | import { Plugin } from "rollup"; 4 | import MagicString from "magic-string"; 5 | 6 | export default (): Plugin => { 7 | const shebangs: Map = new Map(); 8 | const shebangRe = /^\s*(#!.*)/; 9 | const outputFiles: Set = new Set(); 10 | 11 | return { 12 | name: "hashbang", 13 | 14 | transform(code, id) { 15 | let match; 16 | 17 | // eslint-disable-next-line no-cond-assign 18 | if ((match = shebangRe.exec(code))) { 19 | shebangs.set(id, match[1]); 20 | const str = new MagicString(code); 21 | str.remove(match.index, match[1].length); 22 | return { 23 | code: str.toString(), 24 | map: str.generateMap({ hires: true }), 25 | }; 26 | } 27 | 28 | return null; 29 | }, 30 | 31 | renderChunk( 32 | code, 33 | { isEntry, facadeModuleId, fileName }, 34 | { file, dir, sourcemap } 35 | ) { 36 | if (!isEntry || !facadeModuleId || !shebangs.has(facadeModuleId)) return; 37 | 38 | outputFiles.add(file || path.resolve(dir || process.cwd(), fileName)); 39 | 40 | const s = new MagicString(code); 41 | s.prepend(shebangs.get(facadeModuleId) + "\n"); 42 | 43 | return { 44 | code: s.toString(), 45 | map: sourcemap ? s.generateMap({ hires: true }) : undefined, 46 | }; 47 | }, 48 | 49 | async writeBundle() { 50 | await Promise.all( 51 | [...outputFiles].map(async (file) => { 52 | await fs.promises.chmod(file, 0o755 & ~process.umask()); 53 | }) 54 | ); 55 | }, 56 | }; 57 | }; 58 | -------------------------------------------------------------------------------- /test/__snapshots__/index.test.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`hashbang 1`] = ` 4 | "#!/usr/env/env node 5 | 'use strict'; 6 | 7 | Object.defineProperty(exports, '__esModule', { value: true }); 8 | 9 | var hashbang = 42; 10 | 11 | exports[\\"default\\"] = hashbang; 12 | " 13 | `; 14 | 15 | exports[`no hashbang 1`] = ` 16 | "'use strict'; 17 | 18 | Object.defineProperty(exports, '__esModule', { value: true }); 19 | 20 | var noHashbang = 42; 21 | 22 | exports[\\"default\\"] = noHashbang; 23 | " 24 | `; 25 | -------------------------------------------------------------------------------- /test/fixture/chunks/bar.js: -------------------------------------------------------------------------------- 1 | console.log('bar') 2 | -------------------------------------------------------------------------------- /test/fixture/chunks/foo.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | console.log('foo') 4 | -------------------------------------------------------------------------------- /test/fixture/hashbang.js: -------------------------------------------------------------------------------- 1 | #!/usr/env/env node 2 | export default 42 3 | -------------------------------------------------------------------------------- /test/fixture/no-hashbang.js: -------------------------------------------------------------------------------- 1 | export default 42 2 | -------------------------------------------------------------------------------- /test/index.test.ts: -------------------------------------------------------------------------------- 1 | import path from "path"; 2 | import fs from "fs-extra"; 3 | import { rollup } from "rollup"; 4 | import { afterAll, test, expect } from "vitest"; 5 | import isExecutable from "executable"; 6 | import hashbangPlugin from "../src"; 7 | 8 | function fixture(...args: string[]) { 9 | return path.join(__dirname, "fixture", ...args); 10 | } 11 | 12 | afterAll(() => fs.remove(fixture("output"))); 13 | 14 | async function build(input: string, output: string) { 15 | input = fixture(input); 16 | output = fixture(output); 17 | const bundle = await rollup({ 18 | input, 19 | plugins: [hashbangPlugin()], 20 | }); 21 | await bundle.write({ 22 | file: output, 23 | format: "cjs", 24 | exports: "named", 25 | }); 26 | return { 27 | executable: await isExecutable(output), 28 | output: await fs.readFile(output, "utf8"), 29 | }; 30 | } 31 | 32 | test("hashbang", async () => { 33 | const { executable, output } = await build("hashbang.js", "output/a.js"); 34 | expect(executable).toBe(true); 35 | expect(output).toMatchSnapshot(); 36 | }); 37 | 38 | test("no hashbang", async () => { 39 | const { executable, output } = await build("no-hashbang.js", "output/b.js"); 40 | expect(executable).toBe(false); 41 | expect(output).toMatchSnapshot(); 42 | }); 43 | 44 | test("chunks", async () => { 45 | const bundle = await rollup({ 46 | input: { 47 | foo: fixture("chunks/foo.js"), 48 | bar: fixture("chunks/bar.js"), 49 | }, 50 | plugins: [hashbangPlugin()], 51 | }); 52 | await bundle.write({ 53 | format: "cjs", 54 | dir: fixture("output/chunks"), 55 | }); 56 | expect(await isExecutable(fixture("output/chunks/foo.js"))).toBe(true); 57 | expect(await isExecutable(fixture("output/chunks/bar.js"))).toBe(false); 58 | }); 59 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "esnext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ 22 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | 26 | /* Modules */ 27 | "module": "esnext" /* Specify what module code is generated. */, 28 | // "rootDir": "./", /* Specify the root folder within your source files. */ 29 | "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, 30 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 31 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 32 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 33 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ 34 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 35 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 36 | // "resolveJsonModule": true, /* Enable importing .json files */ 37 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ 38 | 39 | /* JavaScript Support */ 40 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ 41 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 42 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ 43 | 44 | /* Emit */ 45 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 46 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 47 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 48 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 49 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ 50 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 51 | // "removeComments": true, /* Disable emitting comments. */ 52 | // "noEmit": true, /* Disable emitting files from a compilation. */ 53 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 54 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ 55 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 56 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 58 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 59 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 60 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 61 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 62 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ 63 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ 64 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 65 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ 66 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 67 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 68 | 69 | /* Interop Constraints */ 70 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 71 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 72 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, 73 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 74 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 75 | 76 | /* Type Checking */ 77 | "strict": true /* Enable all strict type-checking options. */, 78 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ 79 | // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ 80 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 81 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ 82 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 83 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ 84 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ 85 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 86 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ 87 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ 88 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 89 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 90 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 91 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 92 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 93 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ 94 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 95 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 96 | 97 | /* Completeness */ 98 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 99 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /types.d.ts: -------------------------------------------------------------------------------- 1 | declare module "executable" { 2 | function isExecutable(path: string): Promise; 3 | export default isExecutable; 4 | } 5 | --------------------------------------------------------------------------------