├── .github ├── dependabot.yml └── workflows │ └── test.yml ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── README.md ├── eslint.config.js ├── index.js ├── package-lock.json ├── package.json ├── test ├── fix-411.test.js ├── fixtures-esm │ ├── echo.js │ ├── hello │ │ ├── foo.js │ │ └── world.js │ └── main.js ├── fixtures-fix-411 │ ├── echo.ts │ ├── main.ts │ ├── shim.d.ts │ └── tsconfig.json ├── fixtures-include │ ├── echo.js │ └── main.js ├── fixtures │ ├── echo.js │ └── main.js ├── include.test.js ├── index.test.js ├── package-lock.json └── package.json └── types.d.ts /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "20:00" 8 | open-pull-requests-limit: 10 9 | ignore: 10 | - dependency-name: ts-loader 11 | versions: 12 | - 9.0.2 13 | - 9.1.0 14 | - dependency-name: webpack 15 | versions: 16 | - 5.18.0 17 | - 5.19.0 18 | - 5.20.1 19 | - 5.20.2 20 | - 5.21.2 21 | - 5.22.0 22 | - 5.23.0 23 | - 5.24.0 24 | - 5.24.1 25 | - 5.24.2 26 | - 5.25.0 27 | - 5.26.0 28 | - 5.26.2 29 | - 5.26.3 30 | - 5.27.0 31 | - 5.27.2 32 | - 5.30.0 33 | - 5.31.0 34 | - 5.31.2 35 | - 5.32.0 36 | - 5.33.2 37 | - 5.35.0 38 | - dependency-name: tap 39 | versions: 40 | - 15.0.0 41 | - 15.0.1 42 | - 15.0.2 43 | - 15.0.4 44 | - dependency-name: eslint 45 | versions: 46 | - 7.18.0 47 | - 7.19.0 48 | - 7.20.0 49 | - dependency-name: typescript 50 | versions: 51 | - 4.2.2 52 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Node.js CI 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ${{ matrix.os }} 16 | 17 | strategy: 18 | fail-fast: false 19 | matrix: 20 | os: [ubuntu-latest, windows-latest] 21 | node-version: [18.x, 20.x] 22 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ 23 | 24 | steps: 25 | - uses: actions/checkout@v2 26 | - name: Use Node.js ${{ matrix.node-version }} 27 | uses: actions/setup-node@v2 28 | with: 29 | node-version: ${{ matrix.node-version }} 30 | cache: 'npm' 31 | - run: npm ci 32 | - run: npm run build --if-present 33 | - run: npm run lint 34 | - run: npm test 35 | - name: Coveralls GitHub Action 36 | uses: coverallsapp/github-action@1.1.3 37 | with: 38 | github-token: ${{ secrets.GITHUB_TOKEN }} 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .nyc_output 3 | coverage 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '16' 4 | - '14' 5 | - '12' 6 | after_success: npm run coverage 7 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # [2.6.0](https://github.com/fossamagna/gas-webpack-plugin/compare/v2.5.0...v2.6.0) (2024-05-23) 2 | 3 | 4 | ### Features 5 | 6 | * detect export function if autoGlobalExportsFiles is enabled ([#909](https://github.com/fossamagna/gas-webpack-plugin/issues/909)) ([99925f6](https://github.com/fossamagna/gas-webpack-plugin/commit/99925f67bd15c6e61db1054dc3ada4b31869cd48)) 7 | 8 | 9 | 10 | # [2.5.0](https://github.com/fossamagna/gas-webpack-plugin/compare/v2.4.0...v2.5.0) (2023-04-25) 11 | 12 | 13 | 14 | # [2.4.0](https://github.com/fossamagna/gas-webpack-plugin/compare/v2.3.0...v2.4.0) (2023-04-25) 15 | 16 | 17 | ### Features 18 | 19 | * support export named declaration when use autoGlobalExportsFiles ([#795](https://github.com/fossamagna/gas-webpack-plugin/issues/795)) ([83eb97c](https://github.com/fossamagna/gas-webpack-plugin/commit/83eb97ccfa3c4103d5c8ea7c88848ee885cdb760)) 20 | * support export named declaration when use autoGlobalExportsFiles ([#801](https://github.com/fossamagna/gas-webpack-plugin/issues/801)) ([03fe306](https://github.com/fossamagna/gas-webpack-plugin/commit/03fe3069385e9540c967d121c10d65b9e19fd48b)) 21 | 22 | 23 | 24 | # [2.3.0](https://github.com/fossamagna/gas-webpack-plugin/compare/v2.2.2...v2.3.0) (2022-06-20) 25 | 26 | 27 | 28 | ## [2.2.2](https://github.com/fossamagna/gas-webpack-plugin/compare/v2.2.2-beta.0...v2.2.2) (2022-06-15) 29 | 30 | 31 | 32 | ## [2.2.2-beta.0](https://github.com/fossamagna/gas-webpack-plugin/compare/v2.2.1...v2.2.2-beta.0) (2022-06-15) 33 | 34 | 35 | ### Bug Fixes 36 | 37 | * use position of original source to insert global assignments ([4c76d11](https://github.com/fossamagna/gas-webpack-plugin/commit/4c76d11c6dd7eef856fd14a2f6ce245f92a118f4)) 38 | 39 | 40 | 41 | ## [2.2.1](https://github.com/fossamagna/gas-webpack-plugin/compare/v2.2.0...v2.2.1) (2022-03-31) 42 | 43 | 44 | ### Bug Fixes 45 | 46 | * make sure using slash as path separator of include path pattern on Windows ([e959c1c](https://github.com/fossamagna/gas-webpack-plugin/commit/e959c1c33bc57f1de6be8431f1443506ca6dcac7)) 47 | 48 | 49 | 50 | # [2.2.0](https://github.com/fossamagna/gas-webpack-plugin/compare/v2.1.0...v2.2.0) (2022-03-10) 51 | 52 | 53 | ### Features 54 | 55 | * add include option to define path patterns to detect functions ([4f2c1dc](https://github.com/fossamagna/gas-webpack-plugin/commit/4f2c1dc51bbf08a06d3437a2f9119f9cefcbe6ce)) 56 | 57 | 58 | 59 | # [2.1.0](https://github.com/fossamagna/gas-webpack-plugin/compare/v2.0.2...v2.1.0) (2021-07-30) 60 | 61 | 62 | ### Features 63 | 64 | * Add types ([b519d58](https://github.com/fossamagna/gas-webpack-plugin/commit/b519d584dfd80cd28f4d40f2fbc1527b79dc5fa3)) 65 | 66 | 67 | 68 | ## [2.0.2](https://github.com/fossamagna/gas-webpack-plugin/compare/v2.0.1...v2.0.2) (2021-06-07) 69 | 70 | 71 | ### Bug Fixes 72 | 73 | * ReferenceError: "global" is not defined when use autoGlobalExportsFiles option ([80553bf](https://github.com/fossamagna/gas-webpack-plugin/commit/80553bff2283d4d4b5185fda1cc92882659e37fd)), closes [#561](https://github.com/fossamagna/gas-webpack-plugin/issues/561) 74 | 75 | 76 | 77 | ## [2.0.1](https://github.com/fossamagna/gas-webpack-plugin/compare/v2.0.0...v2.0.1) (2021-03-26) 78 | 79 | 80 | ### Bug Fixes 81 | 82 | * Make it possible to use ES module in production mode ([3183834](https://github.com/fossamagna/gas-webpack-plugin/commit/318383407e0e6329a35382de256f00b6b867477b)), closes [#516](https://github.com/fossamagna/gas-webpack-plugin/issues/516) 83 | 84 | 85 | 86 | # [2.0.0](https://github.com/fossamagna/gas-webpack-plugin/compare/v1.2.2...v2.0.0) (2021-02-27) 87 | 88 | 89 | ### Features 90 | 91 | * Support webpack@5 ([e27f312](https://github.com/fossamagna/gas-webpack-plugin/commit/e27f3128b0561623b5742452ff57ea85632d7c93)), closes [#417](https://github.com/fossamagna/gas-webpack-plugin/issues/417) 92 | 93 | 94 | 95 | ## [1.2.2](https://github.com/fossamagna/gas-webpack-plugin/compare/v1.2.1...v1.2.2) (2020-11-29) 96 | 97 | 98 | 99 | ## [1.2.1](https://github.com/fossamagna/gas-webpack-plugin/compare/v1.2.0...v1.2.1) (2020-11-18) 100 | 101 | 102 | ### Bug Fixes 103 | 104 | * Avoid to fail bundling when has module ignored by webpack ([dfd9262](https://github.com/fossamagna/gas-webpack-plugin/commit/dfd926278d8098540649fdc93d27d1c8d182f762)) 105 | 106 | 107 | 108 | # [1.2.0](https://github.com/fossamagna/gas-webpack-plugin/compare/v1.1.0...v1.2.0) (2020-09-11) 109 | 110 | 111 | ### Features 112 | 113 | * Add support auto generation of global assignment expressions from exports.* ([f681381](https://github.com/fossamagna/gas-webpack-plugin/commit/f6813812265012c3f7c5ceee4e1d3015eddcce7b)) 114 | 115 | 116 | 117 | # [1.1.0](https://github.com/fossamagna/gas-webpack-plugin/compare/v1.0.5...v1.1.0) (2020-09-04) 118 | 119 | 120 | ### Features 121 | 122 | * Add development mode ([d15858e](https://github.com/fossamagna/gas-webpack-plugin/commit/d15858e80fdb8f067e89e4c97150949b1713651a)) 123 | 124 | 125 | 126 | ## [1.0.5](https://github.com/fossamagna/gas-webpack-plugin/compare/v1.0.4...v1.0.5) (2020-08-24) 127 | 128 | 129 | ### Bug Fixes 130 | 131 | * Enable to work with es3ify and source map ([2f8fa79](https://github.com/fossamagna/gas-webpack-plugin/commit/2f8fa796603605ec07dd3eb3d301113dc7ffd156)) 132 | 133 | 134 | 135 | ## [1.0.4](https://github.com/fossamagna/gas-webpack-plugin/compare/v1.0.3...v1.0.4) (2020-07-27) 136 | 137 | 138 | ### Bug Fixes 139 | 140 | * Fix to prepend top-level functions when minimize too. ([684c3d2](https://github.com/fossamagna/gas-webpack-plugin/commit/684c3d29cc84d3935d0d61b203ca47618b486851)) 141 | 142 | 143 | 144 | ## [1.0.3](https://github.com/fossamagna/gas-webpack-plugin/compare/v1.0.2...v1.0.3) (2020-06-24) 145 | 146 | 147 | 148 | ## [1.0.2](https://github.com/fossamagna/gas-webpack-plugin/compare/v1.0.1...v1.0.2) (2019-01-21) 149 | 150 | 151 | ### Bug Fixes 152 | 153 | * Add test for SequenceExpression ([033859b](https://github.com/fossamagna/gas-webpack-plugin/commit/033859bc1e2c02b6ec8abb4eaa3df436c60b74db)), closes [#208](https://github.com/fossamagna/gas-webpack-plugin/issues/208) 154 | 155 | 156 | 157 | ## [1.0.1](https://github.com/fossamagna/gas-webpack-plugin/compare/v1.0.0...v1.0.1) (2018-12-20) 158 | 159 | 160 | 161 | # [1.0.0](https://github.com/fossamagna/gas-webpack-plugin/compare/v0.3.0...v1.0.0) (2018-12-20) 162 | 163 | 164 | ### Features 165 | 166 | * Add comment option ([fa31a7e](https://github.com/fossamagna/gas-webpack-plugin/commit/fa31a7e6f3d781463c26a32c3c0d1b40d4a63a31)), closes [#195](https://github.com/fossamagna/gas-webpack-plugin/issues/195) 167 | 168 | 169 | 170 | # [0.3.0](https://github.com/fossamagna/gas-webpack-plugin/compare/0.2.1...v0.3.0) (2018-05-13) 171 | 172 | 173 | 174 | ## [0.2.1](https://github.com/fossamagna/gas-webpack-plugin/compare/0.2.0...0.2.1) (2017-08-04) 175 | 176 | 177 | ### Bug Fixes 178 | 179 | * **package:** update gas-entry-generator to version 1.0.1 ([337c3a2](https://github.com/fossamagna/gas-webpack-plugin/commit/337c3a2a75a6e83ef0c47e1f92ab3be2471421a2)) 180 | 181 | 182 | 183 | # [0.2.0](https://github.com/fossamagna/gas-webpack-plugin/compare/0.1.0...0.2.0) (2017-03-25) 184 | 185 | 186 | 187 | # 0.1.0 (2016-11-23) 188 | 189 | 190 | 191 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gas-webpack-plugin [![NPM version][npm-image]][npm-url] [![Build Status][github-actions-image]][github-actions-url] [![Coverage percentage][coveralls-image]][coveralls-url] 2 | 3 | [Webpack](https://webpack.js.org/) plugin for Google Apps Script. 4 | 5 | ## About 6 | 7 | In Google Apps Script, an entry point called from [google.script.run](https://developers.google.com/apps-script/guides/html/reference/run) must be a top level function declaration on the server side. 8 | `gas-webpack-plugin` detects function assignment expressions to `global` object and generate a corresponding top level function declaration statement. 9 | 10 | ## example 11 | 12 | main.js: 13 | ```js 14 | var echo = require('./echo'); 15 | /** 16 | * Return write arguments. 17 | */ 18 | global.echo = echo; 19 | ``` 20 | 21 | echo.js: 22 | ```js 23 | module.exports = function(message) { 24 | return message; 25 | } 26 | ``` 27 | 28 | webpack.config.js: 29 | ```js 30 | const GasPlugin = require("gas-webpack-plugin"); 31 | module.exports = { 32 | context: __dirname, 33 | entry: "./main.js", 34 | output: { 35 | path: __dirname , 36 | filename: 'Code.gs' 37 | }, 38 | plugins: [ 39 | new GasPlugin() 40 | ] 41 | } 42 | ``` 43 | 44 | build: 45 | ``` 46 | $ webpack --mode production 47 | ``` 48 | 49 | Code.gs 50 | ```js 51 | /** 52 | * Return write arguments. 53 | */ 54 | function echo() { 55 | }/******/ (function(modules) { // webpackBootstrap 56 | /******/ // The module cache 57 | /******/ var installedModules = {}; 58 | /******/ 59 | /******/ // The require function 60 | /******/ function __webpack_require__(moduleId) { 61 | /******/ 62 | /******/ // Check if module is in cache 63 | /******/ if(installedModules[moduleId]) 64 | /******/ return installedModules[moduleId].exports; 65 | /******/ 66 | /******/ // Create a new module (and put it into the cache) 67 | /******/ var module = installedModules[moduleId] = { 68 | /******/ i: moduleId, 69 | /******/ l: false, 70 | /******/ exports: {} 71 | /******/ }; 72 | /******/ 73 | /******/ // Execute the module function 74 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 75 | /******/ 76 | /******/ // Flag the module as loaded 77 | /******/ module.l = true; 78 | /******/ 79 | /******/ // Return the exports of the module 80 | /******/ return module.exports; 81 | /******/ } 82 | /******/ 83 | /******/ 84 | /******/ // expose the modules object (__webpack_modules__) 85 | /******/ __webpack_require__.m = modules; 86 | /******/ 87 | /******/ // expose the module cache 88 | /******/ __webpack_require__.c = installedModules; 89 | /******/ 90 | /******/ // identity function for calling harmony imports with the correct context 91 | /******/ __webpack_require__.i = function(value) { return value; }; 92 | /******/ 93 | /******/ // define getter function for harmony exports 94 | /******/ __webpack_require__.d = function(exports, name, getter) { 95 | /******/ if(!__webpack_require__.o(exports, name)) { 96 | /******/ Object.defineProperty(exports, name, { 97 | /******/ configurable: false, 98 | /******/ enumerable: true, 99 | /******/ get: getter 100 | /******/ }); 101 | /******/ } 102 | /******/ }; 103 | /******/ 104 | /******/ // getDefaultExport function for compatibility with non-harmony modules 105 | /******/ __webpack_require__.n = function(module) { 106 | /******/ var getter = module && module.__esModule ? 107 | /******/ function getDefault() { return module['default']; } : 108 | /******/ function getModuleExports() { return module; }; 109 | /******/ __webpack_require__.d(getter, 'a', getter); 110 | /******/ return getter; 111 | /******/ }; 112 | /******/ 113 | /******/ // Object.prototype.hasOwnProperty.call 114 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 115 | /******/ 116 | /******/ // __webpack_public_path__ 117 | /******/ __webpack_require__.p = ""; 118 | /******/ 119 | /******/ // Load entry module and return exports 120 | /******/ return __webpack_require__(__webpack_require__.s = 2); 121 | /******/ }) 122 | /************************************************************************/ 123 | /******/ ([ 124 | /* 0 */ 125 | /***/ (function(module, exports) { 126 | 127 | var g; 128 | 129 | // This works in non-strict mode 130 | g = (function() { 131 | return this; 132 | })(); 133 | 134 | try { 135 | // This works if eval is allowed (see CSP) 136 | g = g || Function("return this")() || (1,eval)("this"); 137 | } catch(e) { 138 | // This works if the window reference is available 139 | if(typeof window === "object") 140 | g = window; 141 | } 142 | 143 | // g can still be undefined, but nothing to do about it... 144 | // We return undefined, instead of nothing here, so it's 145 | // easier to handle this case. if(!global) { ...} 146 | 147 | module.exports = g; 148 | 149 | 150 | /***/ }), 151 | /* 1 */ 152 | /***/ (function(module, exports) { 153 | 154 | module.exports = function(message) { 155 | return message; 156 | }; 157 | 158 | 159 | /***/ }), 160 | /* 2 */ 161 | /***/ (function(module, exports, __webpack_require__) { 162 | 163 | /* WEBPACK VAR INJECTION */(function(global) {var echo = __webpack_require__(1); 164 | global.echo = echo; 165 | 166 | /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) 167 | 168 | /***/ }) 169 | /******/ ]); 170 | ``` 171 | 172 | ## Installation 173 | 174 | ```sh 175 | $ npm install gas-webpack-plugin --save-dev 176 | ``` 177 | 178 | ## Usage 179 | 180 | ### CLI 181 | 182 | ```sh 183 | $ webpack --mode production 184 | ``` 185 | 186 | ### Options 187 | 188 | You can pass a hash of configuration options to gas-webpack-plugin. Allowed values are as follows 189 | 190 | | Name | Type | Default | Description | 191 | -------|------|---------|-------------| 192 | | comment | `{Boolean}` | `true` | If true then generate a top level function declaration statement with comment. | 193 | | autoGlobalExportsFiles | `{Array}` | `[]` | Array of source file paths that to generate global assignments expression from exports.* statements. | 194 | | include | `{Array}` | `[**/*]` | Array of path patterns to detect functions to generate top level function definitions. accept glob pattern. | 195 | 196 | ## Geranate global assignment expressions from exports.* 197 | 198 | Assignments expression to global object is automatically generated from named exports (`exports.*`) Included in the file specified by the autoGlobalExportsFiles option. 199 | 200 | main.ts: 201 | ```ts 202 | import './echo'; 203 | ``` 204 | 205 | echo.ts: 206 | ```ts 207 | // geranate global assignment expressions from named export 208 | export const echo = (message) => message; 209 | ``` 210 | 211 | webpack.config.js: 212 | ```js 213 | const GasPlugin = require("gas-webpack-plugin"); 214 | module.exports = { 215 | context: __dirname, 216 | entry: "./main.ts", 217 | module: { 218 | rules: [ 219 | { 220 | test: /(\.ts)$/, 221 | loader: 'ts-loader', 222 | }, 223 | ], 224 | }, 225 | resolve: { 226 | extensions: [".ts"], 227 | }, 228 | output: { 229 | path: __dirname , 230 | filename: 'Code.js' 231 | }, 232 | plugins: [ 233 | new GasPlugin({ 234 | autoGlobalExportsFiles: ['**/*.ts'] 235 | }) 236 | ] 237 | } 238 | ``` 239 | 240 | ### Webpack version support 241 | 242 | gas-webpack-plugin is support for Webpack@5.x 243 | 244 | [npm-image]: https://badge.fury.io/js/gas-webpack-plugin.svg 245 | [npm-url]: https://npmjs.org/package/gas-webpack-plugin 246 | [github-actions-image]: https://github.com/fossamagna/gas-webpack-plugin/actions/workflows/test.yml/badge.svg?branch=master 247 | [github-actions-url]: https://github.com/fossamagna/gas-webpack-plugin/actions/workflows/test.yml?branch=master 248 | [coveralls-image]: https://coveralls.io/repos/github/fossamagna/gas-webpack-plugin/badge.svg?branch=master 249 | [coveralls-url]: https://coveralls.io/github/fossamagna/gas-webpack-plugin?branch=master 250 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | const js = require("@eslint/js"); 2 | const globals = require("globals"); 3 | 4 | module.exports = [ 5 | js.configs.recommended, 6 | { 7 | languageOptions: { 8 | globals: { 9 | ...globals.node, 10 | ...globals.commonjs, 11 | }, 12 | }, 13 | }, 14 | ]; 15 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const { generate } = require("gas-entry-generator"); 4 | const { SourceMapSource, RawSource } = require("webpack-sources"); 5 | const { RuntimeGlobals, Dependency } = require("webpack"); 6 | const { minimatch } = require("minimatch"); 7 | const path = require("path"); 8 | const slash = require("slash"); 9 | 10 | const defaultOptions = { 11 | comment: true, 12 | autoGlobalExportsFiles: [], 13 | include: ["**/*"], 14 | }; 15 | 16 | function GasPlugin(options) { 17 | this.options = Object.assign({}, defaultOptions, options || {}); 18 | } 19 | 20 | function gasify(compilation, chunk, filename, entryFunctions) { 21 | const asset = compilation.assets[filename]; 22 | let source, map; 23 | if (asset.sourceAndMap) { 24 | let sourceAndMap = asset.sourceAndMap(); 25 | source = sourceAndMap.source; 26 | map = sourceAndMap.map; 27 | } else { 28 | source = asset.source(); 29 | map = typeof asset.map === "function" ? asset.map() : null; 30 | } 31 | 32 | const entries = compilation.chunkGraph 33 | .getChunkModules(chunk) 34 | .filter((module) => !!entryFunctions.get(module.rootModule || module)) 35 | .map( 36 | (module) => 37 | entryFunctions.get(module.rootModule || module).entryPointFunctions 38 | ) 39 | .filter((entries) => !!entries) 40 | .join("\n"); 41 | 42 | const gasify = entries + source; 43 | compilation.assets[filename] = map 44 | ? new SourceMapSource(gasify, filename, map) 45 | : new RawSource(gasify); 46 | } 47 | 48 | class GasDependency extends Dependency { 49 | constructor(m) { 50 | super(); 51 | this.m = m; 52 | } 53 | } 54 | 55 | GasDependency.Template = class GasDependencyTemplate { 56 | constructor(options) { 57 | this.comment = options.comment; 58 | this.autoGlobalExportsFilePatterns = options.autoGlobalExportsFilePatterns; 59 | this.includePatterns = options.includePatterns; 60 | this.entryFunctions = new Map(); 61 | } 62 | 63 | match(target, pattern) { 64 | return minimatch(slash(target), slash(pattern)); 65 | } 66 | 67 | apply(dep, source) { 68 | const module = dep.m; 69 | if ( 70 | !this.includePatterns.some((file) => this.match(module.resource, file)) 71 | ) { 72 | return; 73 | } 74 | const options = { 75 | comment: this.comment, 76 | autoGlobalExports: 77 | module.resource && 78 | this.autoGlobalExportsFilePatterns.some((file) => 79 | this.match(module.resource, file) 80 | ), 81 | exportsIdentifierName: RuntimeGlobals.exports, 82 | globalIdentifierName: RuntimeGlobals.global, 83 | }; 84 | 85 | const originalSource = 86 | typeof source.original === "function" 87 | ? source.original().source() 88 | : source.source(); 89 | 90 | const output = generate(originalSource, options); 91 | this.entryFunctions.set(module, output); 92 | if (output.globalAssignments) { 93 | source.insert(originalSource.length, output.globalAssignments); 94 | } 95 | } 96 | }; 97 | 98 | GasPlugin.prototype.apply = function (compiler) { 99 | const context = compiler.options.context; 100 | const autoGlobalExportsFilePatterns = this.options.autoGlobalExportsFiles.map( 101 | (file) => (path.isAbsolute(file) ? file : path.resolve(context, file)) 102 | ); 103 | const includePatterns = this.options.include.map((file) => 104 | path.isAbsolute(file) ? file : path.resolve(context, file) 105 | ); 106 | 107 | const plugin = { name: "GasPlugin" }; 108 | const compilationHook = (compilation, { normalModuleFactory }) => { 109 | const gasDependencyTemplate = new GasDependency.Template({ 110 | comment: this.options.comment, 111 | autoGlobalExportsFilePatterns, 112 | includePatterns, 113 | }); 114 | 115 | compilation.dependencyTemplates.set(GasDependency, gasDependencyTemplate); 116 | 117 | const handler = (parser) => { 118 | parser.hooks.program.tap(plugin, () => { 119 | parser.state.current.addDependency( 120 | new GasDependency(parser.state.current) 121 | ); 122 | }); 123 | }; 124 | 125 | normalModuleFactory.hooks.parser 126 | .for("javascript/auto") 127 | .tap("GasPlugin", handler); 128 | normalModuleFactory.hooks.parser 129 | .for("javascript/dynamic") 130 | .tap("GasPlugin", handler); 131 | normalModuleFactory.hooks.parser 132 | .for("javascript/esm") 133 | .tap("GasPlugin", handler); 134 | 135 | compilation.hooks.chunkAsset.tap(plugin, (chunk, filename) => { 136 | gasify( 137 | compilation, 138 | chunk, 139 | filename, 140 | gasDependencyTemplate.entryFunctions 141 | ); 142 | }); 143 | 144 | compilation.hooks.additionalModuleRuntimeRequirements.tap( 145 | plugin, 146 | (_module, set) => { 147 | set.add(RuntimeGlobals.global); 148 | } 149 | ); 150 | }; 151 | 152 | compiler.hooks.compilation.tap(plugin, compilationHook); 153 | }; 154 | 155 | module.exports = GasPlugin; 156 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gas-webpack-plugin", 3 | "version": "2.6.0", 4 | "description": "Webpack Plugin for Google Apps Script", 5 | "main": "index.js", 6 | "types": "types.d.ts", 7 | "dependencies": { 8 | "gas-entry-generator": "2.6.0", 9 | "minimatch": "^10.0.1", 10 | "slash": "^3.0.0", 11 | "webpack-sources": "^3.1.1" 12 | }, 13 | "devDependencies": { 14 | "@eslint/js": "^9.1.1", 15 | "conventional-changelog-cli": "^5.0.0", 16 | "es3ify-webpack-plugin": "^0.1.0", 17 | "eslint": "9.22.0", 18 | "globals": "^16.0.0", 19 | "memory-fs": "0.5.0", 20 | "nyc": "15.1.0", 21 | "tap": "16.3.10", 22 | "ts-loader": "^9.1.1", 23 | "typescript": "^5.0.4", 24 | "webpack": "^5.24.2" 25 | }, 26 | "scripts": { 27 | "pretest": "cd test && npm install", 28 | "lint": "eslint index.js", 29 | "test": "nyc --reporter=lcov --reporter=text-summary tap test/*.test.js", 30 | "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0", 31 | "version": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md" 32 | }, 33 | "repository": { 34 | "type": "git", 35 | "url": "git+https://github.com/fossamagna/gas-webpack-plugin.git" 36 | }, 37 | "author": "fossamagna ", 38 | "license": "MIT" 39 | } 40 | -------------------------------------------------------------------------------- /test/fix-411.test.js: -------------------------------------------------------------------------------- 1 | const webpack = require("webpack"); 2 | const MemoryFS = require("memory-fs"); 3 | const test = require("tap").test; 4 | const GasPlugin = require("../"); 5 | const es3ifyPlugin = require("es3ify-webpack-plugin"); 6 | 7 | const options = { 8 | mode: "none", 9 | devtool: "source-map", 10 | context: __dirname + "/fixtures-fix-411", 11 | entry: "./main.ts", 12 | module: { 13 | rules: [ 14 | { 15 | test: /(\.ts)$/, 16 | loader: "ts-loader", 17 | }, 18 | ], 19 | }, 20 | resolve: { 21 | extensions: [".ts"], 22 | }, 23 | output: { 24 | path: __dirname + "/output", 25 | filename: "bundle.js", 26 | }, 27 | plugins: [ 28 | new GasPlugin({ 29 | autoGlobalExportsFiles: ["*.ts"], 30 | }), 31 | ], 32 | optimization: { 33 | minimize: false, 34 | }, 35 | }; 36 | 37 | test("gas-plugin with es3ify", function (t) { 38 | const compiler = webpack(options); 39 | const mfs = new MemoryFS(); 40 | compiler.outputFileSystem = mfs; 41 | compiler.run(function (err, stats) { 42 | t.error(err, "build failed"); 43 | const jsonStats = stats.toJson(); 44 | t.ok(jsonStats.errors.length === 0); 45 | t.ok(jsonStats.warnings.length === 0); 46 | const bundle = mfs.readFileSync(__dirname + "/output/bundle.js", "utf8"); 47 | const output = `/** 48 | * Return write arguments. 49 | */ 50 | function echo() { 51 | } 52 | function plus() { 53 | } 54 | function minus() { 55 | } 56 | function boo() { 57 | } 58 | function foo() { 59 | }`; 60 | t.ok(bundle.replace(/\r\n/g, "\n").startsWith(output), bundle); 61 | t.match( 62 | bundle.toString(), 63 | /.*__webpack_require__\.g\.foo = __webpack_exports__\.foo;.*/ 64 | ); 65 | t.end(); 66 | }); 67 | }); 68 | 69 | test("gas-plugin with es3ify prepend top-level functions when minimize is enabled", function (t) { 70 | options.optimization.minimize = true; 71 | const compiler = webpack(options); 72 | const mfs = new MemoryFS(); 73 | compiler.outputFileSystem = mfs; 74 | compiler.run(function (err, stats) { 75 | t.error(err, "build failed"); 76 | const jsonStats = stats.toJson(); 77 | t.ok(jsonStats.errors.length === 0); 78 | t.ok(jsonStats.warnings.length === 0); 79 | const bundle = mfs.readFileSync(__dirname + "/output/bundle.js", "utf8"); 80 | const output = 81 | "function echo(){}function plus(){}function minus(){}function boo(){}function foo(){}"; 82 | t.ok(bundle.startsWith(output), bundle); 83 | t.match(bundle, /.*\.g\.foo=.+\.foo.*/); 84 | t.end(); 85 | }); 86 | }); 87 | -------------------------------------------------------------------------------- /test/fixtures-esm/echo.js: -------------------------------------------------------------------------------- 1 | export function echo(message) { 2 | return message; 3 | }; 4 | -------------------------------------------------------------------------------- /test/fixtures-esm/hello/foo.js: -------------------------------------------------------------------------------- 1 | export const foo = () => 'foo'; 2 | -------------------------------------------------------------------------------- /test/fixtures-esm/hello/world.js: -------------------------------------------------------------------------------- 1 | export const printHello = () => { 2 | console.log('Hello world'); 3 | }; 4 | -------------------------------------------------------------------------------- /test/fixtures-esm/main.js: -------------------------------------------------------------------------------- 1 | import { echo } from './echo'; 2 | import { printHello } from './hello/world'; 3 | export { foo } from './hello/foo'; 4 | 5 | global.test = () => { 6 | printHello(); 7 | }; 8 | /** 9 | * Return write arguments. 10 | */ 11 | global.echo = echo; 12 | -------------------------------------------------------------------------------- /test/fixtures-fix-411/echo.ts: -------------------------------------------------------------------------------- 1 | export default function(message: string) { 2 | return message; 3 | }; 4 | 5 | export function foo() { 6 | }; 7 | -------------------------------------------------------------------------------- /test/fixtures-fix-411/main.ts: -------------------------------------------------------------------------------- 1 | import echo from "./echo"; 2 | /** 3 | * Return write arguments. 4 | */ 5 | global.echo = echo; 6 | 7 | function plus(x: number, y: number) { 8 | return x + y; 9 | } 10 | function minus(x: number, y: number) { 11 | return x - y; 12 | } 13 | (global.plus = plus), (global.minus = minus); 14 | export function boo() {} 15 | -------------------------------------------------------------------------------- /test/fixtures-fix-411/shim.d.ts: -------------------------------------------------------------------------------- 1 | declare var global: any; -------------------------------------------------------------------------------- /test/fixtures-fix-411/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Basic Options */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | "target": "ESNext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, 8 | "module": "ESNext" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, 9 | // "lib": [], /* Specify library files to be included in the compilation. */ 10 | // "allowJs": true, /* Allow javascript files to be compiled. */ 11 | // "checkJs": true, /* Report errors in .js files. */ 12 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 13 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 14 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 15 | "sourceMap": true /* Generates corresponding '.map' file. */, 16 | // "outFile": "./", /* Concatenate and emit output to single file. */ 17 | // "outDir": "./", /* Redirect output structure to the directory. */ 18 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 19 | // "composite": true, /* Enable project compilation */ 20 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 21 | // "removeComments": true, /* Do not emit comments to output. */ 22 | // "noEmit": true, /* Do not emit outputs. */ 23 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 24 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 25 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 26 | 27 | /* Strict Type-Checking Options */ 28 | "strict": true /* Enable all strict type-checking options. */, 29 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 30 | // "strictNullChecks": true, /* Enable strict null checks. */ 31 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 32 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ 33 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 34 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 35 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 36 | 37 | /* Additional Checks */ 38 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 39 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 40 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 41 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 42 | 43 | /* Module Resolution Options */ 44 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 45 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 46 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 47 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 48 | // "typeRoots": [], /* List of folders to include type definitions from. */ 49 | // "types": [], /* Type declaration files to be included in compilation. */ 50 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 51 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, 52 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 53 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 54 | 55 | /* Source Map Options */ 56 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 58 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 59 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 60 | 61 | /* Experimental Options */ 62 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 63 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 64 | 65 | /* Advanced Options */ 66 | "skipLibCheck": true /* Skip type checking of declaration files. */, 67 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ 68 | }, 69 | "include": ["./**/*"] 70 | } 71 | -------------------------------------------------------------------------------- /test/fixtures-include/echo.js: -------------------------------------------------------------------------------- 1 | global.echo = function(message) { 2 | return message; 3 | }; 4 | -------------------------------------------------------------------------------- /test/fixtures-include/main.js: -------------------------------------------------------------------------------- 1 | require("./echo"); 2 | 3 | global.hi = function () { 4 | } -------------------------------------------------------------------------------- /test/fixtures/echo.js: -------------------------------------------------------------------------------- 1 | module.exports = function(message) { 2 | return message; 3 | }; 4 | -------------------------------------------------------------------------------- /test/fixtures/main.js: -------------------------------------------------------------------------------- 1 | var echo = require('./echo'); 2 | const seedrandom = require("seedrandom"); 3 | 4 | exports.foo = () => seedrandom("bar")(); 5 | /** 6 | * Return write arguments. 7 | */ 8 | global.echo = echo; 9 | 10 | function plus(x, y) { 11 | return x + y; 12 | } 13 | function minus(x, y) { 14 | return x - y; 15 | } 16 | global.plus = plus, global.minus = minus; 17 | -------------------------------------------------------------------------------- /test/include.test.js: -------------------------------------------------------------------------------- 1 | const webpack = require("webpack"); 2 | const MemoryFS = require("memory-fs"); 3 | const test = require('tap').test; 4 | const GasPlugin = require('../'); 5 | const _ = require('lodash'); 6 | 7 | const options = { 8 | mode: 'production', 9 | context: __dirname + '/fixtures-include', 10 | entry: "./main.js", 11 | output: { 12 | path: __dirname + "/output", 13 | filename: "bundle.js", 14 | }, 15 | plugins: [ 16 | new GasPlugin({ include: ["./main.js"] }) 17 | ] 18 | }; 19 | 20 | test('gas-plugin include option', function(t) { 21 | const opts = _.cloneDeep(options); 22 | const compiler = webpack(opts); 23 | const mfs = new MemoryFS(); 24 | compiler.outputFileSystem = mfs; 25 | compiler.run(function(err, stats) { 26 | t.error(err, 'build failed'); 27 | const jsonStats = stats.toJson(); 28 | t.ok(jsonStats.errors.length === 0, jsonStats.errors); 29 | t.ok(jsonStats.warnings.length === 0); 30 | const bundle = mfs.readFileSync(__dirname + '/output/bundle.js', 'utf8'); 31 | const output = `function hi(){}`; 32 | console.log(bundle.toString()) 33 | t.ok(bundle.toString().startsWith(output), 'plugin and expected output match'); 34 | t.notMatch(bundle, /.*function echo.*/); 35 | t.end(); 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /test/index.test.js: -------------------------------------------------------------------------------- 1 | const webpack = require("webpack"); 2 | const MemoryFS = require("memory-fs"); 3 | const test = require('tap').test; 4 | const GasPlugin = require('../'); 5 | const _ = require('lodash'); 6 | 7 | const options = { 8 | mode: 'production', 9 | context: __dirname + '/fixtures', 10 | entry: "./main.js", 11 | output: { 12 | path: __dirname + "/output", 13 | filename: "bundle.js", 14 | }, 15 | plugins: [ 16 | new GasPlugin({ autoGlobalExportsFiles: ["./main.js"] }) 17 | ], 18 | optimization: { 19 | minimize: false, 20 | } 21 | }; 22 | 23 | test('gas-plugin', function(t) { 24 | const opts = _.cloneDeep(options); 25 | const compiler = webpack(opts); 26 | const mfs = new MemoryFS(); 27 | compiler.outputFileSystem = mfs; 28 | compiler.run(function(err, stats) { 29 | t.error(err, 'build failed'); 30 | const jsonStats = stats.toJson(); 31 | t.ok(jsonStats.errors.length === 0, jsonStats.errors); 32 | t.ok(jsonStats.warnings.length === 0); 33 | const bundle = mfs.readFileSync(__dirname + '/output/bundle.js', 'utf8'); 34 | const output = `function foo() { 35 | } 36 | /** 37 | * Return write arguments. 38 | */ 39 | function echo() { 40 | } 41 | function plus() { 42 | } 43 | function minus() { 44 | }` 45 | t.ok(bundle.replace(/\r\n/g, "\n").startsWith(output), 'plugin and expected output match:' + bundle); 46 | t.match(bundle, /.*__webpack_require__\.g\.foo = __webpack_exports__\.foo;.*/); 47 | t.end(); 48 | }); 49 | }); 50 | 51 | test('gas-plugin prepend top-level functions when minimize is enabled', function(t) { 52 | const opts = _.cloneDeep(options); 53 | opts.optimization.minimize = true; 54 | const compiler = webpack(opts); 55 | const mfs = new MemoryFS(); 56 | compiler.outputFileSystem = mfs; 57 | compiler.run(function(err, stats) { 58 | t.error(err, 'build failed'); 59 | const jsonStats = stats.toJson(); 60 | t.ok(jsonStats.errors.length === 0, jsonStats.errors); 61 | t.ok(jsonStats.warnings.length === 0, jsonStats.errors); 62 | const bundle = mfs.readFileSync(__dirname + '/output/bundle.js', 'utf8'); 63 | const output = 'function foo(){}function echo(){}function plus(){}function minus(){}' 64 | t.ok(bundle.toString().startsWith(output), 'plugin and expected output match'); 65 | t.match(bundle, /.+\.foo=.+\.foo.*/); 66 | t.end(); 67 | }); 68 | }); 69 | 70 | test('gas-plugin prepend top-level functions in development mode', function(t) { 71 | const opts = _.cloneDeep(options); 72 | opts.mode = 'development'; 73 | const compiler = webpack(opts); 74 | const mfs = new MemoryFS(); 75 | compiler.outputFileSystem = mfs; 76 | compiler.run(function(err, stats) { 77 | t.error(err, 'build failed'); 78 | const jsonStats = stats.toJson(); 79 | t.ok(jsonStats.errors.length === 0, jsonStats.errors); 80 | t.ok(jsonStats.warnings.length === 0, jsonStats.errors); 81 | const bundle = mfs.readFileSync(__dirname + '/output/bundle.js', 'utf8'); 82 | const output = `function foo() { 83 | } 84 | /** 85 | * Return write arguments. 86 | */ 87 | function echo() { 88 | } 89 | function plus() { 90 | } 91 | function minus() { 92 | }` 93 | t.ok(bundle.replace(/\r\n/g, "\n").startsWith(output), 'plugin and expected output match'); 94 | t.match(bundle, /.*__webpack_require__\.g\.foo = __webpack_exports__\.foo;.*/); 95 | t.end(); 96 | }); 97 | }); 98 | 99 | 100 | test('gas-plugin prepend top-level functions in production and ES Module', function(t) { 101 | const opts = _.cloneDeep(options); 102 | opts.context = __dirname + '/fixtures-esm'; 103 | const compiler = webpack(opts); 104 | const mfs = new MemoryFS(); 105 | compiler.outputFileSystem = mfs; 106 | compiler.run(function(err, stats) { 107 | t.error(err, 'build failed'); 108 | const jsonStats = stats.toJson(); 109 | t.ok(jsonStats.errors.length === 0, jsonStats.errors); 110 | t.ok(jsonStats.warnings.length === 0, jsonStats.errors); 111 | const bundle = mfs.readFileSync(__dirname + '/output/bundle.js', 'utf8'); 112 | const output = `function foo() { 113 | } 114 | function test() { 115 | } 116 | /** 117 | * Return write arguments. 118 | */ 119 | function echo() { 120 | }` 121 | t.ok(bundle.replace(/\r\n/g, "\n").startsWith(output), 'plugin and expected output match'); 122 | t.end(); 123 | }); 124 | }); -------------------------------------------------------------------------------- /test/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "test", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "seedrandom": "^3.0.5", 13 | "webpack": "^5.24.2" 14 | }, 15 | "devDependencies": { 16 | "@types/seedrandom": "^2.4.28" 17 | } 18 | }, 19 | "node_modules/@jridgewell/gen-mapping": { 20 | "version": "0.3.5", 21 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 22 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 23 | "dependencies": { 24 | "@jridgewell/set-array": "^1.2.1", 25 | "@jridgewell/sourcemap-codec": "^1.4.10", 26 | "@jridgewell/trace-mapping": "^0.3.24" 27 | }, 28 | "engines": { 29 | "node": ">=6.0.0" 30 | } 31 | }, 32 | "node_modules/@jridgewell/resolve-uri": { 33 | "version": "3.1.2", 34 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 35 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 36 | "engines": { 37 | "node": ">=6.0.0" 38 | } 39 | }, 40 | "node_modules/@jridgewell/set-array": { 41 | "version": "1.2.1", 42 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 43 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 44 | "engines": { 45 | "node": ">=6.0.0" 46 | } 47 | }, 48 | "node_modules/@jridgewell/source-map": { 49 | "version": "0.3.6", 50 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", 51 | "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", 52 | "dependencies": { 53 | "@jridgewell/gen-mapping": "^0.3.5", 54 | "@jridgewell/trace-mapping": "^0.3.25" 55 | } 56 | }, 57 | "node_modules/@jridgewell/sourcemap-codec": { 58 | "version": "1.5.0", 59 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 60 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" 61 | }, 62 | "node_modules/@jridgewell/trace-mapping": { 63 | "version": "0.3.25", 64 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 65 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 66 | "dependencies": { 67 | "@jridgewell/resolve-uri": "^3.1.0", 68 | "@jridgewell/sourcemap-codec": "^1.4.14" 69 | } 70 | }, 71 | "node_modules/@types/estree": { 72 | "version": "1.0.5", 73 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 74 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" 75 | }, 76 | "node_modules/@types/json-schema": { 77 | "version": "7.0.15", 78 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 79 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" 80 | }, 81 | "node_modules/@types/node": { 82 | "version": "22.5.1", 83 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.1.tgz", 84 | "integrity": "sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==", 85 | "dependencies": { 86 | "undici-types": "~6.19.2" 87 | } 88 | }, 89 | "node_modules/@types/seedrandom": { 90 | "version": "2.4.28", 91 | "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.28.tgz", 92 | "integrity": "sha512-SMA+fUwULwK7sd/ZJicUztiPs8F1yCPwF3O23Z9uQ32ME5Ha0NmDK9+QTsYE4O2tHXChzXomSWWeIhCnoN1LqA==", 93 | "dev": true 94 | }, 95 | "node_modules/@webassemblyjs/ast": { 96 | "version": "1.12.1", 97 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", 98 | "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", 99 | "dependencies": { 100 | "@webassemblyjs/helper-numbers": "1.11.6", 101 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6" 102 | } 103 | }, 104 | "node_modules/@webassemblyjs/floating-point-hex-parser": { 105 | "version": "1.11.6", 106 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", 107 | "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" 108 | }, 109 | "node_modules/@webassemblyjs/helper-api-error": { 110 | "version": "1.11.6", 111 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", 112 | "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" 113 | }, 114 | "node_modules/@webassemblyjs/helper-buffer": { 115 | "version": "1.12.1", 116 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", 117 | "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" 118 | }, 119 | "node_modules/@webassemblyjs/helper-numbers": { 120 | "version": "1.11.6", 121 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", 122 | "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", 123 | "dependencies": { 124 | "@webassemblyjs/floating-point-hex-parser": "1.11.6", 125 | "@webassemblyjs/helper-api-error": "1.11.6", 126 | "@xtuc/long": "4.2.2" 127 | } 128 | }, 129 | "node_modules/@webassemblyjs/helper-wasm-bytecode": { 130 | "version": "1.11.6", 131 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", 132 | "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" 133 | }, 134 | "node_modules/@webassemblyjs/helper-wasm-section": { 135 | "version": "1.12.1", 136 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", 137 | "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", 138 | "dependencies": { 139 | "@webassemblyjs/ast": "1.12.1", 140 | "@webassemblyjs/helper-buffer": "1.12.1", 141 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 142 | "@webassemblyjs/wasm-gen": "1.12.1" 143 | } 144 | }, 145 | "node_modules/@webassemblyjs/ieee754": { 146 | "version": "1.11.6", 147 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", 148 | "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", 149 | "dependencies": { 150 | "@xtuc/ieee754": "^1.2.0" 151 | } 152 | }, 153 | "node_modules/@webassemblyjs/leb128": { 154 | "version": "1.11.6", 155 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", 156 | "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", 157 | "dependencies": { 158 | "@xtuc/long": "4.2.2" 159 | } 160 | }, 161 | "node_modules/@webassemblyjs/utf8": { 162 | "version": "1.11.6", 163 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", 164 | "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" 165 | }, 166 | "node_modules/@webassemblyjs/wasm-edit": { 167 | "version": "1.12.1", 168 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", 169 | "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", 170 | "dependencies": { 171 | "@webassemblyjs/ast": "1.12.1", 172 | "@webassemblyjs/helper-buffer": "1.12.1", 173 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 174 | "@webassemblyjs/helper-wasm-section": "1.12.1", 175 | "@webassemblyjs/wasm-gen": "1.12.1", 176 | "@webassemblyjs/wasm-opt": "1.12.1", 177 | "@webassemblyjs/wasm-parser": "1.12.1", 178 | "@webassemblyjs/wast-printer": "1.12.1" 179 | } 180 | }, 181 | "node_modules/@webassemblyjs/wasm-gen": { 182 | "version": "1.12.1", 183 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", 184 | "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", 185 | "dependencies": { 186 | "@webassemblyjs/ast": "1.12.1", 187 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 188 | "@webassemblyjs/ieee754": "1.11.6", 189 | "@webassemblyjs/leb128": "1.11.6", 190 | "@webassemblyjs/utf8": "1.11.6" 191 | } 192 | }, 193 | "node_modules/@webassemblyjs/wasm-opt": { 194 | "version": "1.12.1", 195 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", 196 | "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", 197 | "dependencies": { 198 | "@webassemblyjs/ast": "1.12.1", 199 | "@webassemblyjs/helper-buffer": "1.12.1", 200 | "@webassemblyjs/wasm-gen": "1.12.1", 201 | "@webassemblyjs/wasm-parser": "1.12.1" 202 | } 203 | }, 204 | "node_modules/@webassemblyjs/wasm-parser": { 205 | "version": "1.12.1", 206 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", 207 | "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", 208 | "dependencies": { 209 | "@webassemblyjs/ast": "1.12.1", 210 | "@webassemblyjs/helper-api-error": "1.11.6", 211 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 212 | "@webassemblyjs/ieee754": "1.11.6", 213 | "@webassemblyjs/leb128": "1.11.6", 214 | "@webassemblyjs/utf8": "1.11.6" 215 | } 216 | }, 217 | "node_modules/@webassemblyjs/wast-printer": { 218 | "version": "1.12.1", 219 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", 220 | "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", 221 | "dependencies": { 222 | "@webassemblyjs/ast": "1.12.1", 223 | "@xtuc/long": "4.2.2" 224 | } 225 | }, 226 | "node_modules/@xtuc/ieee754": { 227 | "version": "1.2.0", 228 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 229 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" 230 | }, 231 | "node_modules/@xtuc/long": { 232 | "version": "4.2.2", 233 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", 234 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" 235 | }, 236 | "node_modules/acorn": { 237 | "version": "8.12.1", 238 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 239 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 240 | "bin": { 241 | "acorn": "bin/acorn" 242 | }, 243 | "engines": { 244 | "node": ">=0.4.0" 245 | } 246 | }, 247 | "node_modules/acorn-import-attributes": { 248 | "version": "1.9.5", 249 | "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", 250 | "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", 251 | "peerDependencies": { 252 | "acorn": "^8" 253 | } 254 | }, 255 | "node_modules/ajv": { 256 | "version": "6.12.6", 257 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 258 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 259 | "dependencies": { 260 | "fast-deep-equal": "^3.1.1", 261 | "fast-json-stable-stringify": "^2.0.0", 262 | "json-schema-traverse": "^0.4.1", 263 | "uri-js": "^4.2.2" 264 | }, 265 | "funding": { 266 | "type": "github", 267 | "url": "https://github.com/sponsors/epoberezkin" 268 | } 269 | }, 270 | "node_modules/ajv-keywords": { 271 | "version": "3.5.2", 272 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 273 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 274 | "peerDependencies": { 275 | "ajv": "^6.9.1" 276 | } 277 | }, 278 | "node_modules/browserslist": { 279 | "version": "4.23.3", 280 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", 281 | "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", 282 | "funding": [ 283 | { 284 | "type": "opencollective", 285 | "url": "https://opencollective.com/browserslist" 286 | }, 287 | { 288 | "type": "tidelift", 289 | "url": "https://tidelift.com/funding/github/npm/browserslist" 290 | }, 291 | { 292 | "type": "github", 293 | "url": "https://github.com/sponsors/ai" 294 | } 295 | ], 296 | "dependencies": { 297 | "caniuse-lite": "^1.0.30001646", 298 | "electron-to-chromium": "^1.5.4", 299 | "node-releases": "^2.0.18", 300 | "update-browserslist-db": "^1.1.0" 301 | }, 302 | "bin": { 303 | "browserslist": "cli.js" 304 | }, 305 | "engines": { 306 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 307 | } 308 | }, 309 | "node_modules/buffer-from": { 310 | "version": "1.1.2", 311 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 312 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 313 | }, 314 | "node_modules/caniuse-lite": { 315 | "version": "1.0.30001655", 316 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", 317 | "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==", 318 | "funding": [ 319 | { 320 | "type": "opencollective", 321 | "url": "https://opencollective.com/browserslist" 322 | }, 323 | { 324 | "type": "tidelift", 325 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 326 | }, 327 | { 328 | "type": "github", 329 | "url": "https://github.com/sponsors/ai" 330 | } 331 | ] 332 | }, 333 | "node_modules/chrome-trace-event": { 334 | "version": "1.0.2", 335 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", 336 | "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", 337 | "dependencies": { 338 | "tslib": "^1.9.0" 339 | }, 340 | "engines": { 341 | "node": ">=6.0" 342 | } 343 | }, 344 | "node_modules/commander": { 345 | "version": "2.20.3", 346 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 347 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 348 | }, 349 | "node_modules/electron-to-chromium": { 350 | "version": "1.5.13", 351 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", 352 | "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==" 353 | }, 354 | "node_modules/enhanced-resolve": { 355 | "version": "5.17.1", 356 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", 357 | "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", 358 | "dependencies": { 359 | "graceful-fs": "^4.2.4", 360 | "tapable": "^2.2.0" 361 | }, 362 | "engines": { 363 | "node": ">=10.13.0" 364 | } 365 | }, 366 | "node_modules/es-module-lexer": { 367 | "version": "1.5.4", 368 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", 369 | "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" 370 | }, 371 | "node_modules/escalade": { 372 | "version": "3.2.0", 373 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 374 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 375 | "engines": { 376 | "node": ">=6" 377 | } 378 | }, 379 | "node_modules/eslint-scope": { 380 | "version": "5.1.1", 381 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 382 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 383 | "dependencies": { 384 | "esrecurse": "^4.3.0", 385 | "estraverse": "^4.1.1" 386 | }, 387 | "engines": { 388 | "node": ">=8.0.0" 389 | } 390 | }, 391 | "node_modules/esrecurse": { 392 | "version": "4.3.0", 393 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 394 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 395 | "dependencies": { 396 | "estraverse": "^5.2.0" 397 | }, 398 | "engines": { 399 | "node": ">=4.0" 400 | } 401 | }, 402 | "node_modules/esrecurse/node_modules/estraverse": { 403 | "version": "5.2.0", 404 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 405 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 406 | "engines": { 407 | "node": ">=4.0" 408 | } 409 | }, 410 | "node_modules/estraverse": { 411 | "version": "4.3.0", 412 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 413 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 414 | "engines": { 415 | "node": ">=4.0" 416 | } 417 | }, 418 | "node_modules/events": { 419 | "version": "3.2.0", 420 | "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", 421 | "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", 422 | "engines": { 423 | "node": ">=0.8.x" 424 | } 425 | }, 426 | "node_modules/fast-deep-equal": { 427 | "version": "3.1.3", 428 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 429 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 430 | }, 431 | "node_modules/fast-json-stable-stringify": { 432 | "version": "2.1.0", 433 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 434 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 435 | }, 436 | "node_modules/glob-to-regexp": { 437 | "version": "0.4.1", 438 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 439 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" 440 | }, 441 | "node_modules/graceful-fs": { 442 | "version": "4.2.11", 443 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 444 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 445 | }, 446 | "node_modules/has-flag": { 447 | "version": "4.0.0", 448 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 449 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 450 | "engines": { 451 | "node": ">=8" 452 | } 453 | }, 454 | "node_modules/jest-worker": { 455 | "version": "27.5.1", 456 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", 457 | "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", 458 | "dependencies": { 459 | "@types/node": "*", 460 | "merge-stream": "^2.0.0", 461 | "supports-color": "^8.0.0" 462 | }, 463 | "engines": { 464 | "node": ">= 10.13.0" 465 | } 466 | }, 467 | "node_modules/json-parse-even-better-errors": { 468 | "version": "2.3.1", 469 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 470 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" 471 | }, 472 | "node_modules/json-schema-traverse": { 473 | "version": "0.4.1", 474 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 475 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 476 | }, 477 | "node_modules/loader-runner": { 478 | "version": "4.2.0", 479 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", 480 | "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", 481 | "engines": { 482 | "node": ">=6.11.5" 483 | } 484 | }, 485 | "node_modules/merge-stream": { 486 | "version": "2.0.0", 487 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 488 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" 489 | }, 490 | "node_modules/mime-db": { 491 | "version": "1.46.0", 492 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", 493 | "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", 494 | "engines": { 495 | "node": ">= 0.6" 496 | } 497 | }, 498 | "node_modules/mime-types": { 499 | "version": "2.1.29", 500 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", 501 | "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", 502 | "dependencies": { 503 | "mime-db": "1.46.0" 504 | }, 505 | "engines": { 506 | "node": ">= 0.6" 507 | } 508 | }, 509 | "node_modules/neo-async": { 510 | "version": "2.6.2", 511 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 512 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" 513 | }, 514 | "node_modules/node-releases": { 515 | "version": "2.0.18", 516 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", 517 | "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" 518 | }, 519 | "node_modules/picocolors": { 520 | "version": "1.0.1", 521 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", 522 | "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" 523 | }, 524 | "node_modules/punycode": { 525 | "version": "2.3.1", 526 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 527 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 528 | "engines": { 529 | "node": ">=6" 530 | } 531 | }, 532 | "node_modules/randombytes": { 533 | "version": "2.1.0", 534 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 535 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 536 | "dependencies": { 537 | "safe-buffer": "^5.1.0" 538 | } 539 | }, 540 | "node_modules/safe-buffer": { 541 | "version": "5.2.1", 542 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 543 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 544 | "funding": [ 545 | { 546 | "type": "github", 547 | "url": "https://github.com/sponsors/feross" 548 | }, 549 | { 550 | "type": "patreon", 551 | "url": "https://www.patreon.com/feross" 552 | }, 553 | { 554 | "type": "consulting", 555 | "url": "https://feross.org/support" 556 | } 557 | ] 558 | }, 559 | "node_modules/schema-utils": { 560 | "version": "3.3.0", 561 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", 562 | "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", 563 | "dependencies": { 564 | "@types/json-schema": "^7.0.8", 565 | "ajv": "^6.12.5", 566 | "ajv-keywords": "^3.5.2" 567 | }, 568 | "engines": { 569 | "node": ">= 10.13.0" 570 | }, 571 | "funding": { 572 | "type": "opencollective", 573 | "url": "https://opencollective.com/webpack" 574 | } 575 | }, 576 | "node_modules/seedrandom": { 577 | "version": "3.0.5", 578 | "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", 579 | "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" 580 | }, 581 | "node_modules/serialize-javascript": { 582 | "version": "6.0.2", 583 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", 584 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", 585 | "dependencies": { 586 | "randombytes": "^2.1.0" 587 | } 588 | }, 589 | "node_modules/source-map": { 590 | "version": "0.6.1", 591 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 592 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 593 | "engines": { 594 | "node": ">=0.10.0" 595 | } 596 | }, 597 | "node_modules/source-map-support": { 598 | "version": "0.5.21", 599 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 600 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 601 | "dependencies": { 602 | "buffer-from": "^1.0.0", 603 | "source-map": "^0.6.0" 604 | } 605 | }, 606 | "node_modules/supports-color": { 607 | "version": "8.1.1", 608 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 609 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 610 | "dependencies": { 611 | "has-flag": "^4.0.0" 612 | }, 613 | "engines": { 614 | "node": ">=10" 615 | }, 616 | "funding": { 617 | "url": "https://github.com/chalk/supports-color?sponsor=1" 618 | } 619 | }, 620 | "node_modules/tapable": { 621 | "version": "2.2.1", 622 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 623 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", 624 | "engines": { 625 | "node": ">=6" 626 | } 627 | }, 628 | "node_modules/terser": { 629 | "version": "5.31.6", 630 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", 631 | "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", 632 | "dependencies": { 633 | "@jridgewell/source-map": "^0.3.3", 634 | "acorn": "^8.8.2", 635 | "commander": "^2.20.0", 636 | "source-map-support": "~0.5.20" 637 | }, 638 | "bin": { 639 | "terser": "bin/terser" 640 | }, 641 | "engines": { 642 | "node": ">=10" 643 | } 644 | }, 645 | "node_modules/terser-webpack-plugin": { 646 | "version": "5.3.10", 647 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", 648 | "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", 649 | "dependencies": { 650 | "@jridgewell/trace-mapping": "^0.3.20", 651 | "jest-worker": "^27.4.5", 652 | "schema-utils": "^3.1.1", 653 | "serialize-javascript": "^6.0.1", 654 | "terser": "^5.26.0" 655 | }, 656 | "engines": { 657 | "node": ">= 10.13.0" 658 | }, 659 | "funding": { 660 | "type": "opencollective", 661 | "url": "https://opencollective.com/webpack" 662 | }, 663 | "peerDependencies": { 664 | "webpack": "^5.1.0" 665 | }, 666 | "peerDependenciesMeta": { 667 | "@swc/core": { 668 | "optional": true 669 | }, 670 | "esbuild": { 671 | "optional": true 672 | }, 673 | "uglify-js": { 674 | "optional": true 675 | } 676 | } 677 | }, 678 | "node_modules/tslib": { 679 | "version": "1.14.1", 680 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 681 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 682 | }, 683 | "node_modules/undici-types": { 684 | "version": "6.19.8", 685 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 686 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" 687 | }, 688 | "node_modules/update-browserslist-db": { 689 | "version": "1.1.0", 690 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", 691 | "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", 692 | "funding": [ 693 | { 694 | "type": "opencollective", 695 | "url": "https://opencollective.com/browserslist" 696 | }, 697 | { 698 | "type": "tidelift", 699 | "url": "https://tidelift.com/funding/github/npm/browserslist" 700 | }, 701 | { 702 | "type": "github", 703 | "url": "https://github.com/sponsors/ai" 704 | } 705 | ], 706 | "dependencies": { 707 | "escalade": "^3.1.2", 708 | "picocolors": "^1.0.1" 709 | }, 710 | "bin": { 711 | "update-browserslist-db": "cli.js" 712 | }, 713 | "peerDependencies": { 714 | "browserslist": ">= 4.21.0" 715 | } 716 | }, 717 | "node_modules/uri-js": { 718 | "version": "4.4.1", 719 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 720 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 721 | "dependencies": { 722 | "punycode": "^2.1.0" 723 | } 724 | }, 725 | "node_modules/watchpack": { 726 | "version": "2.4.2", 727 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", 728 | "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", 729 | "dependencies": { 730 | "glob-to-regexp": "^0.4.1", 731 | "graceful-fs": "^4.1.2" 732 | }, 733 | "engines": { 734 | "node": ">=10.13.0" 735 | } 736 | }, 737 | "node_modules/webpack": { 738 | "version": "5.94.0", 739 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", 740 | "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", 741 | "dependencies": { 742 | "@types/estree": "^1.0.5", 743 | "@webassemblyjs/ast": "^1.12.1", 744 | "@webassemblyjs/wasm-edit": "^1.12.1", 745 | "@webassemblyjs/wasm-parser": "^1.12.1", 746 | "acorn": "^8.7.1", 747 | "acorn-import-attributes": "^1.9.5", 748 | "browserslist": "^4.21.10", 749 | "chrome-trace-event": "^1.0.2", 750 | "enhanced-resolve": "^5.17.1", 751 | "es-module-lexer": "^1.2.1", 752 | "eslint-scope": "5.1.1", 753 | "events": "^3.2.0", 754 | "glob-to-regexp": "^0.4.1", 755 | "graceful-fs": "^4.2.11", 756 | "json-parse-even-better-errors": "^2.3.1", 757 | "loader-runner": "^4.2.0", 758 | "mime-types": "^2.1.27", 759 | "neo-async": "^2.6.2", 760 | "schema-utils": "^3.2.0", 761 | "tapable": "^2.1.1", 762 | "terser-webpack-plugin": "^5.3.10", 763 | "watchpack": "^2.4.1", 764 | "webpack-sources": "^3.2.3" 765 | }, 766 | "bin": { 767 | "webpack": "bin/webpack.js" 768 | }, 769 | "engines": { 770 | "node": ">=10.13.0" 771 | }, 772 | "funding": { 773 | "type": "opencollective", 774 | "url": "https://opencollective.com/webpack" 775 | }, 776 | "peerDependenciesMeta": { 777 | "webpack-cli": { 778 | "optional": true 779 | } 780 | } 781 | }, 782 | "node_modules/webpack-sources": { 783 | "version": "3.2.3", 784 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", 785 | "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", 786 | "engines": { 787 | "node": ">=10.13.0" 788 | } 789 | } 790 | }, 791 | "dependencies": { 792 | "@jridgewell/gen-mapping": { 793 | "version": "0.3.5", 794 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 795 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 796 | "requires": { 797 | "@jridgewell/set-array": "^1.2.1", 798 | "@jridgewell/sourcemap-codec": "^1.4.10", 799 | "@jridgewell/trace-mapping": "^0.3.24" 800 | } 801 | }, 802 | "@jridgewell/resolve-uri": { 803 | "version": "3.1.2", 804 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 805 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" 806 | }, 807 | "@jridgewell/set-array": { 808 | "version": "1.2.1", 809 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 810 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" 811 | }, 812 | "@jridgewell/source-map": { 813 | "version": "0.3.6", 814 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", 815 | "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", 816 | "requires": { 817 | "@jridgewell/gen-mapping": "^0.3.5", 818 | "@jridgewell/trace-mapping": "^0.3.25" 819 | } 820 | }, 821 | "@jridgewell/sourcemap-codec": { 822 | "version": "1.5.0", 823 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 824 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" 825 | }, 826 | "@jridgewell/trace-mapping": { 827 | "version": "0.3.25", 828 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 829 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 830 | "requires": { 831 | "@jridgewell/resolve-uri": "^3.1.0", 832 | "@jridgewell/sourcemap-codec": "^1.4.14" 833 | } 834 | }, 835 | "@types/estree": { 836 | "version": "1.0.5", 837 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 838 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" 839 | }, 840 | "@types/json-schema": { 841 | "version": "7.0.15", 842 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 843 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" 844 | }, 845 | "@types/node": { 846 | "version": "22.5.1", 847 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.1.tgz", 848 | "integrity": "sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==", 849 | "requires": { 850 | "undici-types": "~6.19.2" 851 | } 852 | }, 853 | "@types/seedrandom": { 854 | "version": "2.4.28", 855 | "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.28.tgz", 856 | "integrity": "sha512-SMA+fUwULwK7sd/ZJicUztiPs8F1yCPwF3O23Z9uQ32ME5Ha0NmDK9+QTsYE4O2tHXChzXomSWWeIhCnoN1LqA==", 857 | "dev": true 858 | }, 859 | "@webassemblyjs/ast": { 860 | "version": "1.12.1", 861 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", 862 | "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", 863 | "requires": { 864 | "@webassemblyjs/helper-numbers": "1.11.6", 865 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6" 866 | } 867 | }, 868 | "@webassemblyjs/floating-point-hex-parser": { 869 | "version": "1.11.6", 870 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", 871 | "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" 872 | }, 873 | "@webassemblyjs/helper-api-error": { 874 | "version": "1.11.6", 875 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", 876 | "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" 877 | }, 878 | "@webassemblyjs/helper-buffer": { 879 | "version": "1.12.1", 880 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", 881 | "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" 882 | }, 883 | "@webassemblyjs/helper-numbers": { 884 | "version": "1.11.6", 885 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", 886 | "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", 887 | "requires": { 888 | "@webassemblyjs/floating-point-hex-parser": "1.11.6", 889 | "@webassemblyjs/helper-api-error": "1.11.6", 890 | "@xtuc/long": "4.2.2" 891 | } 892 | }, 893 | "@webassemblyjs/helper-wasm-bytecode": { 894 | "version": "1.11.6", 895 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", 896 | "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" 897 | }, 898 | "@webassemblyjs/helper-wasm-section": { 899 | "version": "1.12.1", 900 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", 901 | "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", 902 | "requires": { 903 | "@webassemblyjs/ast": "1.12.1", 904 | "@webassemblyjs/helper-buffer": "1.12.1", 905 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 906 | "@webassemblyjs/wasm-gen": "1.12.1" 907 | } 908 | }, 909 | "@webassemblyjs/ieee754": { 910 | "version": "1.11.6", 911 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", 912 | "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", 913 | "requires": { 914 | "@xtuc/ieee754": "^1.2.0" 915 | } 916 | }, 917 | "@webassemblyjs/leb128": { 918 | "version": "1.11.6", 919 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", 920 | "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", 921 | "requires": { 922 | "@xtuc/long": "4.2.2" 923 | } 924 | }, 925 | "@webassemblyjs/utf8": { 926 | "version": "1.11.6", 927 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", 928 | "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" 929 | }, 930 | "@webassemblyjs/wasm-edit": { 931 | "version": "1.12.1", 932 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", 933 | "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", 934 | "requires": { 935 | "@webassemblyjs/ast": "1.12.1", 936 | "@webassemblyjs/helper-buffer": "1.12.1", 937 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 938 | "@webassemblyjs/helper-wasm-section": "1.12.1", 939 | "@webassemblyjs/wasm-gen": "1.12.1", 940 | "@webassemblyjs/wasm-opt": "1.12.1", 941 | "@webassemblyjs/wasm-parser": "1.12.1", 942 | "@webassemblyjs/wast-printer": "1.12.1" 943 | } 944 | }, 945 | "@webassemblyjs/wasm-gen": { 946 | "version": "1.12.1", 947 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", 948 | "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", 949 | "requires": { 950 | "@webassemblyjs/ast": "1.12.1", 951 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 952 | "@webassemblyjs/ieee754": "1.11.6", 953 | "@webassemblyjs/leb128": "1.11.6", 954 | "@webassemblyjs/utf8": "1.11.6" 955 | } 956 | }, 957 | "@webassemblyjs/wasm-opt": { 958 | "version": "1.12.1", 959 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", 960 | "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", 961 | "requires": { 962 | "@webassemblyjs/ast": "1.12.1", 963 | "@webassemblyjs/helper-buffer": "1.12.1", 964 | "@webassemblyjs/wasm-gen": "1.12.1", 965 | "@webassemblyjs/wasm-parser": "1.12.1" 966 | } 967 | }, 968 | "@webassemblyjs/wasm-parser": { 969 | "version": "1.12.1", 970 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", 971 | "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", 972 | "requires": { 973 | "@webassemblyjs/ast": "1.12.1", 974 | "@webassemblyjs/helper-api-error": "1.11.6", 975 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 976 | "@webassemblyjs/ieee754": "1.11.6", 977 | "@webassemblyjs/leb128": "1.11.6", 978 | "@webassemblyjs/utf8": "1.11.6" 979 | } 980 | }, 981 | "@webassemblyjs/wast-printer": { 982 | "version": "1.12.1", 983 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", 984 | "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", 985 | "requires": { 986 | "@webassemblyjs/ast": "1.12.1", 987 | "@xtuc/long": "4.2.2" 988 | } 989 | }, 990 | "@xtuc/ieee754": { 991 | "version": "1.2.0", 992 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 993 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" 994 | }, 995 | "@xtuc/long": { 996 | "version": "4.2.2", 997 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", 998 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" 999 | }, 1000 | "acorn": { 1001 | "version": "8.12.1", 1002 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 1003 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==" 1004 | }, 1005 | "acorn-import-attributes": { 1006 | "version": "1.9.5", 1007 | "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", 1008 | "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", 1009 | "requires": {} 1010 | }, 1011 | "ajv": { 1012 | "version": "6.12.6", 1013 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1014 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1015 | "requires": { 1016 | "fast-deep-equal": "^3.1.1", 1017 | "fast-json-stable-stringify": "^2.0.0", 1018 | "json-schema-traverse": "^0.4.1", 1019 | "uri-js": "^4.2.2" 1020 | } 1021 | }, 1022 | "ajv-keywords": { 1023 | "version": "3.5.2", 1024 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 1025 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 1026 | "requires": {} 1027 | }, 1028 | "browserslist": { 1029 | "version": "4.23.3", 1030 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", 1031 | "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", 1032 | "requires": { 1033 | "caniuse-lite": "^1.0.30001646", 1034 | "electron-to-chromium": "^1.5.4", 1035 | "node-releases": "^2.0.18", 1036 | "update-browserslist-db": "^1.1.0" 1037 | } 1038 | }, 1039 | "buffer-from": { 1040 | "version": "1.1.2", 1041 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1042 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 1043 | }, 1044 | "caniuse-lite": { 1045 | "version": "1.0.30001655", 1046 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", 1047 | "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==" 1048 | }, 1049 | "chrome-trace-event": { 1050 | "version": "1.0.2", 1051 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", 1052 | "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", 1053 | "requires": { 1054 | "tslib": "^1.9.0" 1055 | } 1056 | }, 1057 | "commander": { 1058 | "version": "2.20.3", 1059 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1060 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 1061 | }, 1062 | "electron-to-chromium": { 1063 | "version": "1.5.13", 1064 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", 1065 | "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==" 1066 | }, 1067 | "enhanced-resolve": { 1068 | "version": "5.17.1", 1069 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", 1070 | "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", 1071 | "requires": { 1072 | "graceful-fs": "^4.2.4", 1073 | "tapable": "^2.2.0" 1074 | } 1075 | }, 1076 | "es-module-lexer": { 1077 | "version": "1.5.4", 1078 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", 1079 | "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" 1080 | }, 1081 | "escalade": { 1082 | "version": "3.2.0", 1083 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1084 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" 1085 | }, 1086 | "eslint-scope": { 1087 | "version": "5.1.1", 1088 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 1089 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 1090 | "requires": { 1091 | "esrecurse": "^4.3.0", 1092 | "estraverse": "^4.1.1" 1093 | } 1094 | }, 1095 | "esrecurse": { 1096 | "version": "4.3.0", 1097 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1098 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1099 | "requires": { 1100 | "estraverse": "^5.2.0" 1101 | }, 1102 | "dependencies": { 1103 | "estraverse": { 1104 | "version": "5.2.0", 1105 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 1106 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" 1107 | } 1108 | } 1109 | }, 1110 | "estraverse": { 1111 | "version": "4.3.0", 1112 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1113 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" 1114 | }, 1115 | "events": { 1116 | "version": "3.2.0", 1117 | "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", 1118 | "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" 1119 | }, 1120 | "fast-deep-equal": { 1121 | "version": "3.1.3", 1122 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1123 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 1124 | }, 1125 | "fast-json-stable-stringify": { 1126 | "version": "2.1.0", 1127 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1128 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 1129 | }, 1130 | "glob-to-regexp": { 1131 | "version": "0.4.1", 1132 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1133 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" 1134 | }, 1135 | "graceful-fs": { 1136 | "version": "4.2.11", 1137 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1138 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 1139 | }, 1140 | "has-flag": { 1141 | "version": "4.0.0", 1142 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1143 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 1144 | }, 1145 | "jest-worker": { 1146 | "version": "27.5.1", 1147 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", 1148 | "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", 1149 | "requires": { 1150 | "@types/node": "*", 1151 | "merge-stream": "^2.0.0", 1152 | "supports-color": "^8.0.0" 1153 | } 1154 | }, 1155 | "json-parse-even-better-errors": { 1156 | "version": "2.3.1", 1157 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1158 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" 1159 | }, 1160 | "json-schema-traverse": { 1161 | "version": "0.4.1", 1162 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1163 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 1164 | }, 1165 | "loader-runner": { 1166 | "version": "4.2.0", 1167 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", 1168 | "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" 1169 | }, 1170 | "merge-stream": { 1171 | "version": "2.0.0", 1172 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1173 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" 1174 | }, 1175 | "mime-db": { 1176 | "version": "1.46.0", 1177 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", 1178 | "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" 1179 | }, 1180 | "mime-types": { 1181 | "version": "2.1.29", 1182 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", 1183 | "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", 1184 | "requires": { 1185 | "mime-db": "1.46.0" 1186 | } 1187 | }, 1188 | "neo-async": { 1189 | "version": "2.6.2", 1190 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 1191 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" 1192 | }, 1193 | "node-releases": { 1194 | "version": "2.0.18", 1195 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", 1196 | "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" 1197 | }, 1198 | "picocolors": { 1199 | "version": "1.0.1", 1200 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", 1201 | "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" 1202 | }, 1203 | "punycode": { 1204 | "version": "2.3.1", 1205 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 1206 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" 1207 | }, 1208 | "randombytes": { 1209 | "version": "2.1.0", 1210 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1211 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1212 | "requires": { 1213 | "safe-buffer": "^5.1.0" 1214 | } 1215 | }, 1216 | "safe-buffer": { 1217 | "version": "5.2.1", 1218 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1219 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1220 | }, 1221 | "schema-utils": { 1222 | "version": "3.3.0", 1223 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", 1224 | "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", 1225 | "requires": { 1226 | "@types/json-schema": "^7.0.8", 1227 | "ajv": "^6.12.5", 1228 | "ajv-keywords": "^3.5.2" 1229 | } 1230 | }, 1231 | "seedrandom": { 1232 | "version": "3.0.5", 1233 | "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", 1234 | "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" 1235 | }, 1236 | "serialize-javascript": { 1237 | "version": "6.0.2", 1238 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", 1239 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", 1240 | "requires": { 1241 | "randombytes": "^2.1.0" 1242 | } 1243 | }, 1244 | "source-map": { 1245 | "version": "0.6.1", 1246 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1247 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1248 | }, 1249 | "source-map-support": { 1250 | "version": "0.5.21", 1251 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1252 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1253 | "requires": { 1254 | "buffer-from": "^1.0.0", 1255 | "source-map": "^0.6.0" 1256 | } 1257 | }, 1258 | "supports-color": { 1259 | "version": "8.1.1", 1260 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1261 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1262 | "requires": { 1263 | "has-flag": "^4.0.0" 1264 | } 1265 | }, 1266 | "tapable": { 1267 | "version": "2.2.1", 1268 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 1269 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" 1270 | }, 1271 | "terser": { 1272 | "version": "5.31.6", 1273 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", 1274 | "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", 1275 | "requires": { 1276 | "@jridgewell/source-map": "^0.3.3", 1277 | "acorn": "^8.8.2", 1278 | "commander": "^2.20.0", 1279 | "source-map-support": "~0.5.20" 1280 | } 1281 | }, 1282 | "terser-webpack-plugin": { 1283 | "version": "5.3.10", 1284 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", 1285 | "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", 1286 | "requires": { 1287 | "@jridgewell/trace-mapping": "^0.3.20", 1288 | "jest-worker": "^27.4.5", 1289 | "schema-utils": "^3.1.1", 1290 | "serialize-javascript": "^6.0.1", 1291 | "terser": "^5.26.0" 1292 | } 1293 | }, 1294 | "tslib": { 1295 | "version": "1.14.1", 1296 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1297 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 1298 | }, 1299 | "undici-types": { 1300 | "version": "6.19.8", 1301 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 1302 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" 1303 | }, 1304 | "update-browserslist-db": { 1305 | "version": "1.1.0", 1306 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", 1307 | "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", 1308 | "requires": { 1309 | "escalade": "^3.1.2", 1310 | "picocolors": "^1.0.1" 1311 | } 1312 | }, 1313 | "uri-js": { 1314 | "version": "4.4.1", 1315 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1316 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1317 | "requires": { 1318 | "punycode": "^2.1.0" 1319 | } 1320 | }, 1321 | "watchpack": { 1322 | "version": "2.4.2", 1323 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", 1324 | "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", 1325 | "requires": { 1326 | "glob-to-regexp": "^0.4.1", 1327 | "graceful-fs": "^4.1.2" 1328 | } 1329 | }, 1330 | "webpack": { 1331 | "version": "5.94.0", 1332 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", 1333 | "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", 1334 | "requires": { 1335 | "@types/estree": "^1.0.5", 1336 | "@webassemblyjs/ast": "^1.12.1", 1337 | "@webassemblyjs/wasm-edit": "^1.12.1", 1338 | "@webassemblyjs/wasm-parser": "^1.12.1", 1339 | "acorn": "^8.7.1", 1340 | "acorn-import-attributes": "^1.9.5", 1341 | "browserslist": "^4.21.10", 1342 | "chrome-trace-event": "^1.0.2", 1343 | "enhanced-resolve": "^5.17.1", 1344 | "es-module-lexer": "^1.2.1", 1345 | "eslint-scope": "5.1.1", 1346 | "events": "^3.2.0", 1347 | "glob-to-regexp": "^0.4.1", 1348 | "graceful-fs": "^4.2.11", 1349 | "json-parse-even-better-errors": "^2.3.1", 1350 | "loader-runner": "^4.2.0", 1351 | "mime-types": "^2.1.27", 1352 | "neo-async": "^2.6.2", 1353 | "schema-utils": "^3.2.0", 1354 | "tapable": "^2.1.1", 1355 | "terser-webpack-plugin": "^5.3.10", 1356 | "watchpack": "^2.4.1", 1357 | "webpack-sources": "^3.2.3" 1358 | } 1359 | }, 1360 | "webpack-sources": { 1361 | "version": "3.2.3", 1362 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", 1363 | "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" 1364 | } 1365 | } 1366 | } 1367 | -------------------------------------------------------------------------------- /test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "fixtures/main.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "seedrandom": "^3.0.5", 13 | "webpack": "^5.24.2" 14 | }, 15 | "devDependencies": { 16 | "@types/seedrandom": "^2.4.28" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /types.d.ts: -------------------------------------------------------------------------------- 1 | import type { Compiler, WebpackPluginInstance } from "webpack"; 2 | 3 | interface Options { 4 | /** 5 | * If true then generate a top level function declaration statement with comment. 6 | */ 7 | comment?: boolean; 8 | /** 9 | * Array of source file paths that to generate global assignments expression from exports.* statements. 10 | */ 11 | autoGlobalExportsFiles?: string[]; 12 | /** 13 | * Array of path patterns to detect functions to generate top level function definitions. accept glob pattern. 14 | */ 15 | include?: [] 16 | } 17 | 18 | export default class implements WebpackPluginInstance { 19 | constructor(options?: Options); 20 | apply(compiler: Compiler): void; 21 | } 22 | --------------------------------------------------------------------------------