├── .github └── workflows │ └── npm-publish.yml ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── content.jpg ├── index.html ├── index.js ├── package-lock.json ├── package.json ├── src ├── config.ts ├── index.ts ├── js-pdf.ts ├── plugins │ ├── index.ts │ └── useWaterMark.ts ├── render-canvas.ts ├── types.ts └── utils │ ├── getPageData.ts │ ├── images.ts │ └── joinObject.ts ├── test.png ├── tsconfig.json ├── webpack.config.js └── yarn.lock /.github/workflows/npm-publish.yml: -------------------------------------------------------------------------------- 1 | name: npm-publish 2 | on: 3 | push: 4 | tags: 5 | - 'v*' 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout 11 | uses: actions/checkout@v2 12 | - name: Setup Node 13 | uses: actions/setup-node@v2 14 | with: 15 | node-version: '16.x' 16 | registry-url: 'https://registry.npmjs.org' 17 | - name: Install dependencies and build 🔧 18 | run: yarn ci && yarn build 19 | - name: Publish package on NPM 📦 20 | run: npm publish 21 | # https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages 22 | env: 23 | NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist/ -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | index.html 2 | test.png 3 | content.jpg 4 | webpack.config.js 5 | /src/ 6 | /.github/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Johnny 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Downloads 3 | Version 4 | 5 | License 6 |

7 | 8 | # jsPDF-html2canvas 9 | A combine usage with jsPDF & html2canvas, which translating html content to PDF file. Written in Typescript. 10 | 11 | > html2PDF function will auto fit the target dom width into PDF size. So no need to worry about the overflow part. And if the content height is over 1 pdf, it'll auto seperate it into another pdf page. 12 | 13 | 14 | ## Install 15 | 16 | ``` 17 | npm i jspdf-html2canvas 18 | ``` 19 | 20 | ```js 21 | import html2PDF from 'jspdf-html2canvas'; 22 | 23 | html2PDF(node, options); 24 | ``` 25 | 26 | since this plugin is an umd module, you can also use by cdn with `/dist/jspdf-html2canvas.min.js`, just remember to include both `jspdf` & `html2canvas` cdn before this plugin. 27 | 28 | ```js 29 | 30 | 31 | 32 | ``` 33 | 34 | 35 | ## html2PDF([Node, NodeList], options) 36 | 37 | convert specific DOM target to print it into PDF file. 38 | 39 | Automatically, it'll save the file, or you can define the `success` callback to do with the jsPDF instance. 40 | 41 | ```html 42 | 43 |
44 |

PDF for Test

45 |

Here is some content for testing!!

46 |
47 | 48 | 49 | ``` 50 | 51 | ```js 52 | let btn = document.getElementById('btn'); 53 | let page = document.getElementById('page'); 54 | 55 | btn.addEventListener('click', function(){ 56 | html2PDF(page, { 57 | jsPDF: { 58 | format: 'a4', 59 | }, 60 | imageType: 'image/jpeg', 61 | output: './pdf/generate.pdf' 62 | }); 63 | }); 64 | ``` 65 | 66 | you can easily `await` the method to wait for pdf generated. 67 | 68 | ```js 69 | async function printPdf() { 70 | const pdf = await html2PDF(page, { 71 | // ... 72 | }); 73 | // do something with pdf(jsPdf instance) 74 | } 75 | ``` 76 | 77 | > If there's some white space on top of the outputed PDF file, it might caused by the scroll problem, just add some settings for `html2canvas` plugin as following. [see the reference](https://stackoverflow.com/questions/57936607/why-there-is-a-white-space-on-the-top-on-html2canvas) 78 | ```js 79 | html2PDF(page, { 80 | // ... other settings 81 | html2canvas: { 82 | scrollX: 0, 83 | scrollY: -window.scrollY, 84 | }, 85 | }); 86 | ``` 87 | 88 | ## Custom multiple page supported 89 | 90 | There might be some situation you want to print DOM seperately, just easily give the nodeList with `length` in it, will adjust every nodes inside seperately into a new page in the same PDF output. 91 | 92 | for example: 93 | 94 | ```html 95 |
96 |
97 |

Test page 1

98 |

This is an page for testing 1

99 |
100 |
101 |

Test page 2

102 |

This is an page for testing 1

103 |
104 |
105 |

Test page 3

106 |

This is an page for testing 1

107 |
108 |
109 | ``` 110 | 111 | ```js 112 | const pages = document.getElementsByClassName('page'); 113 | 114 | btn.addEventListener('click', function(){ 115 | html2PDF(pages, { 116 | jsPDF: { 117 | format: 'a4', 118 | }, 119 | imageType: 'image/jpeg', 120 | output: './pdf/generate.pdf' 121 | }); 122 | }); 123 | ``` 124 | 125 | 126 | ## Options 127 | 128 | ### - jsPDF 129 | 130 | - type: `Object` 131 | - default: 132 | ```js 133 | { 134 | unit: 'pt', 135 | format: 'a4' 136 | } 137 | ``` 138 | 139 | setting for creating jsPDF's instance, please ref to [JSPDF Documentation](http://raw.githack.com/MrRio/jsPDF/master/docs/) 140 | 141 | 142 | ### - html2canvas 143 | 144 | - type: `Object` 145 | - default: 146 | ```js 147 | { 148 | imageTimeout: 15000, 149 | logging: true, 150 | useCORS: false 151 | } 152 | ``` 153 | 154 | setting for `html2canvas` configs, please ref to [html2canvas Documentation](https://html2canvas.hertzen.com/documentation) 155 | 156 | 157 | ### - watermark 158 | 159 | - type: `String` | `Function` | `Object` 160 | - optional 161 | 162 | setting for watermark in pdf, will add watermark into each pages of your outputed pdf file. 163 | 164 | each data type has different usage as following: 165 | 166 | #### datatype: `String` => image url 167 | create image watermark in the center of each page with default image scale size `1`, please use `.png` file for watermark. 168 | 169 | ```js 170 | html2PDF(page, { 171 | watermark: './test.png', 172 | }); 173 | ``` 174 | 175 | #### datatype: `Function` => custom handler 176 | define custom handler to do things for each page of pdf file. 177 | 178 | ```js 179 | html2PDF(page, { 180 | watermark({ pdf, pageNumber, totalPageNumber }) { 181 | // pdf: jsPDF instance 182 | pdf.setTextColor('#ddd'); 183 | pdf.text(50, pdf.internal.pageSize.height - 30, `Watermark, page: ${pageNumber}/${totalPageNumber}`); 184 | }, 185 | }); 186 | ``` 187 | 188 | #### datatype: `Object` => custom handler or resize image watermark 189 | define image watermark with change `ratio`, or use custom `handler` to do with the image position. 190 | ```js 191 | html2PDF(page, { 192 | watermark: { 193 | src: './test.png', 194 | scale: 0.5 195 | }, 196 | }); 197 | // or 198 | html2PDF(page, { 199 | watermark: { 200 | src: './test.png', 201 | handler({ pdf, imgNode, pageNumber, totalPageNumber }) { 202 | const props = pdf.getImageProperties(imgNode); 203 | // do something... 204 | pdf.addImage(imgNode, 'PNG', 0, 0, 40, 40); 205 | }, 206 | }, 207 | }); 208 | ``` 209 | 210 | ### - imageType 211 | 212 | - type: `String` 213 | - allowed: `image/jpeg`, `image/png`, `image/webp` 214 | - default: `image/jpeg` 215 | 216 | define the target imageType, now only support for jpeg, png, webp 217 | 218 | ```js 219 | // will be used like 220 | let pageData = canvas.toDataURL(opts.imageType, opts.imageQuality); 221 | ``` 222 | 223 | ### - imageQuality 224 | 225 | - type: `Number` 226 | - allowed: `0 - 1` 227 | - default: `1` 228 | 229 | define the image quality transfered from canvas 230 | 231 | 232 | ### - margin 233 | 234 | - type: `Object{key => number}` 235 | - allowed key: `top`, `right`, `bottom`, `left` 236 | - default: `0` 237 | 238 | define the margin of each page 239 | 240 | ### - autoResize 241 | 242 | - type: `Boolean` 243 | - default: `true` 244 | 245 | define whether to auto resize the snapshot image to fit PDF layout size 246 | 247 | ### - output 248 | 249 | - type: `String` 250 | - default: `jspdf-generate.pdf` 251 | 252 | define name of the output PDF file 253 | 254 | ```js 255 | pdf.save(opts.output); 256 | ``` 257 | 258 | ### - init 259 | 260 | - type: `Function` 261 | 262 | ```js 263 | function init(pdf) { 264 | pdf.setFont('Myfont'); 265 | pdf.setFontSize(10); 266 | } 267 | ``` 268 | 269 | define some init for jspdf initiating before printing 270 | 271 | ### - success 272 | 273 | - type: `Function` 274 | - default: 275 | ```js 276 | function success(pdf) { 277 | pdf.save(this.output); 278 | } 279 | ``` 280 | 281 | callback function to do after all code, default will save the file with the output name setting. 282 | 283 | 284 | ## Defaults options 285 | 286 | ```js 287 | const defaultOptions = { 288 | jsPDF: { 289 | unit: 'pt', 290 | format: 'a4', 291 | }, 292 | html2canvas: { 293 | imageTimeout: 15000, 294 | logging: true, 295 | useCORS: false, 296 | }, 297 | imageType: 'image/jpeg', 298 | imageQuality: 1, 299 | margin: { 300 | top: 0, 301 | right: 0, 302 | bottom: 0, 303 | left: 0, 304 | }, 305 | watermark: undefined, 306 | autoResize: true, 307 | output: 'jspdf-generate.pdf', 308 | init: function() {}, 309 | success: function(pdf) { 310 | pdf.save(this.output); 311 | } 312 | } 313 | ``` 314 | 315 | 316 | ## Recommend 317 | 318 | if you want more custom & widing solutions, you can use this npm package 319 | 320 | html2pdf: https://www.npmjs.com/package/html2pdf.js -------------------------------------------------------------------------------- /content.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnywang1994/jsPDF-html2canvas/c4020e1f2aa6ff4c5b0859e0e39ed75230a51719/content.jpg -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Test 8 | 9 | 10 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
57 | 58 |
59 |
60 |

Test page 1

61 |

This is an page for testing 1, This is an page for testing 1, This is an page for testing 1, This is an page for testing 1

62 |
63 |
64 |

Test page 2

65 |

66 | 67 |

68 |
69 |
70 |

Test page 3

71 |

This is an page for testing 3

72 |
73 |
74 |
1
75 |
2
76 |
3
77 |
4
78 |
79 |
80 | 81 |
82 |
83 |

Test page 4

84 |

This is an page for testing 3

85 |
86 |
87 |

Test page 5

88 |

89 | This is an page for testing 5 90 |

91 | 92 |

93 |

94 |
95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 |
Title3Title2Title2
Content1Content1Content1
Content1Content1Content1
Content1Content1Content1
121 |
122 |
123 | 124 | 125 | 173 | 174 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const html2PDF = require('./dist/jspdf-html2canvas.min'); 2 | module.exports = html2PDF; 3 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jspdf-html2canvas", 3 | "version": "1.5.2", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "jspdf-html2canvas", 9 | "version": "1.5.2", 10 | "license": "ISC", 11 | "dependencies": { 12 | "html2canvas": "1.4.1", 13 | "jspdf": "^2.5.1" 14 | }, 15 | "devDependencies": { 16 | "cross-env": "^7.0.2", 17 | "ts-loader": "^9.4.4", 18 | "typescript": "^5.2.2", 19 | "webpack": "^5.88.2", 20 | "webpack-cli": "^5.1.4" 21 | } 22 | }, 23 | "node_modules/@babel/runtime": { 24 | "version": "7.22.15", 25 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", 26 | "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", 27 | "license": "MIT", 28 | "dependencies": { 29 | "regenerator-runtime": "^0.14.0" 30 | }, 31 | "engines": { 32 | "node": ">=6.9.0" 33 | } 34 | }, 35 | "node_modules/@babel/runtime/node_modules/regenerator-runtime": { 36 | "version": "0.14.0", 37 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", 38 | "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", 39 | "license": "MIT" 40 | }, 41 | "node_modules/@discoveryjs/json-ext": { 42 | "version": "0.5.7", 43 | "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", 44 | "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", 45 | "dev": true, 46 | "license": "MIT", 47 | "engines": { 48 | "node": ">=10.0.0" 49 | } 50 | }, 51 | "node_modules/@jridgewell/gen-mapping": { 52 | "version": "0.3.3", 53 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 54 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 55 | "dev": true, 56 | "license": "MIT", 57 | "dependencies": { 58 | "@jridgewell/set-array": "^1.0.1", 59 | "@jridgewell/sourcemap-codec": "^1.4.10", 60 | "@jridgewell/trace-mapping": "^0.3.9" 61 | }, 62 | "engines": { 63 | "node": ">=6.0.0" 64 | } 65 | }, 66 | "node_modules/@jridgewell/resolve-uri": { 67 | "version": "3.1.1", 68 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 69 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 70 | "dev": true, 71 | "license": "MIT", 72 | "engines": { 73 | "node": ">=6.0.0" 74 | } 75 | }, 76 | "node_modules/@jridgewell/set-array": { 77 | "version": "1.1.2", 78 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 79 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 80 | "dev": true, 81 | "license": "MIT", 82 | "engines": { 83 | "node": ">=6.0.0" 84 | } 85 | }, 86 | "node_modules/@jridgewell/source-map": { 87 | "version": "0.3.5", 88 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", 89 | "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", 90 | "dev": true, 91 | "license": "MIT", 92 | "dependencies": { 93 | "@jridgewell/gen-mapping": "^0.3.0", 94 | "@jridgewell/trace-mapping": "^0.3.9" 95 | } 96 | }, 97 | "node_modules/@jridgewell/sourcemap-codec": { 98 | "version": "1.4.15", 99 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 100 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 101 | "dev": true, 102 | "license": "MIT" 103 | }, 104 | "node_modules/@jridgewell/trace-mapping": { 105 | "version": "0.3.19", 106 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", 107 | "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", 108 | "dev": true, 109 | "license": "MIT", 110 | "dependencies": { 111 | "@jridgewell/resolve-uri": "^3.1.0", 112 | "@jridgewell/sourcemap-codec": "^1.4.14" 113 | } 114 | }, 115 | "node_modules/@types/eslint": { 116 | "version": "8.44.2", 117 | "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", 118 | "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", 119 | "dev": true, 120 | "license": "MIT", 121 | "dependencies": { 122 | "@types/estree": "*", 123 | "@types/json-schema": "*" 124 | } 125 | }, 126 | "node_modules/@types/eslint-scope": { 127 | "version": "3.7.4", 128 | "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", 129 | "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", 130 | "dev": true, 131 | "license": "MIT", 132 | "dependencies": { 133 | "@types/eslint": "*", 134 | "@types/estree": "*" 135 | } 136 | }, 137 | "node_modules/@types/estree": { 138 | "version": "1.0.1", 139 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", 140 | "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", 141 | "dev": true, 142 | "license": "MIT" 143 | }, 144 | "node_modules/@types/json-schema": { 145 | "version": "7.0.12", 146 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", 147 | "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", 148 | "dev": true, 149 | "license": "MIT" 150 | }, 151 | "node_modules/@types/node": { 152 | "version": "20.6.0", 153 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz", 154 | "integrity": "sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==", 155 | "dev": true, 156 | "license": "MIT" 157 | }, 158 | "node_modules/@types/raf": { 159 | "version": "3.4.0", 160 | "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", 161 | "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", 162 | "license": "MIT", 163 | "optional": true 164 | }, 165 | "node_modules/@webassemblyjs/ast": { 166 | "version": "1.11.6", 167 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", 168 | "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", 169 | "dev": true, 170 | "license": "MIT", 171 | "dependencies": { 172 | "@webassemblyjs/helper-numbers": "1.11.6", 173 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6" 174 | } 175 | }, 176 | "node_modules/@webassemblyjs/floating-point-hex-parser": { 177 | "version": "1.11.6", 178 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", 179 | "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", 180 | "dev": true, 181 | "license": "MIT" 182 | }, 183 | "node_modules/@webassemblyjs/helper-api-error": { 184 | "version": "1.11.6", 185 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", 186 | "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", 187 | "dev": true, 188 | "license": "MIT" 189 | }, 190 | "node_modules/@webassemblyjs/helper-buffer": { 191 | "version": "1.11.6", 192 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", 193 | "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", 194 | "dev": true, 195 | "license": "MIT" 196 | }, 197 | "node_modules/@webassemblyjs/helper-numbers": { 198 | "version": "1.11.6", 199 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", 200 | "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", 201 | "dev": true, 202 | "license": "MIT", 203 | "dependencies": { 204 | "@webassemblyjs/floating-point-hex-parser": "1.11.6", 205 | "@webassemblyjs/helper-api-error": "1.11.6", 206 | "@xtuc/long": "4.2.2" 207 | } 208 | }, 209 | "node_modules/@webassemblyjs/helper-wasm-bytecode": { 210 | "version": "1.11.6", 211 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", 212 | "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", 213 | "dev": true, 214 | "license": "MIT" 215 | }, 216 | "node_modules/@webassemblyjs/helper-wasm-section": { 217 | "version": "1.11.6", 218 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", 219 | "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", 220 | "dev": true, 221 | "license": "MIT", 222 | "dependencies": { 223 | "@webassemblyjs/ast": "1.11.6", 224 | "@webassemblyjs/helper-buffer": "1.11.6", 225 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 226 | "@webassemblyjs/wasm-gen": "1.11.6" 227 | } 228 | }, 229 | "node_modules/@webassemblyjs/ieee754": { 230 | "version": "1.11.6", 231 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", 232 | "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", 233 | "dev": true, 234 | "license": "MIT", 235 | "dependencies": { 236 | "@xtuc/ieee754": "^1.2.0" 237 | } 238 | }, 239 | "node_modules/@webassemblyjs/leb128": { 240 | "version": "1.11.6", 241 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", 242 | "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", 243 | "dev": true, 244 | "license": "Apache-2.0", 245 | "dependencies": { 246 | "@xtuc/long": "4.2.2" 247 | } 248 | }, 249 | "node_modules/@webassemblyjs/utf8": { 250 | "version": "1.11.6", 251 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", 252 | "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", 253 | "dev": true, 254 | "license": "MIT" 255 | }, 256 | "node_modules/@webassemblyjs/wasm-edit": { 257 | "version": "1.11.6", 258 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", 259 | "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", 260 | "dev": true, 261 | "license": "MIT", 262 | "dependencies": { 263 | "@webassemblyjs/ast": "1.11.6", 264 | "@webassemblyjs/helper-buffer": "1.11.6", 265 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 266 | "@webassemblyjs/helper-wasm-section": "1.11.6", 267 | "@webassemblyjs/wasm-gen": "1.11.6", 268 | "@webassemblyjs/wasm-opt": "1.11.6", 269 | "@webassemblyjs/wasm-parser": "1.11.6", 270 | "@webassemblyjs/wast-printer": "1.11.6" 271 | } 272 | }, 273 | "node_modules/@webassemblyjs/wasm-gen": { 274 | "version": "1.11.6", 275 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", 276 | "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", 277 | "dev": true, 278 | "license": "MIT", 279 | "dependencies": { 280 | "@webassemblyjs/ast": "1.11.6", 281 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 282 | "@webassemblyjs/ieee754": "1.11.6", 283 | "@webassemblyjs/leb128": "1.11.6", 284 | "@webassemblyjs/utf8": "1.11.6" 285 | } 286 | }, 287 | "node_modules/@webassemblyjs/wasm-opt": { 288 | "version": "1.11.6", 289 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", 290 | "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", 291 | "dev": true, 292 | "license": "MIT", 293 | "dependencies": { 294 | "@webassemblyjs/ast": "1.11.6", 295 | "@webassemblyjs/helper-buffer": "1.11.6", 296 | "@webassemblyjs/wasm-gen": "1.11.6", 297 | "@webassemblyjs/wasm-parser": "1.11.6" 298 | } 299 | }, 300 | "node_modules/@webassemblyjs/wasm-parser": { 301 | "version": "1.11.6", 302 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", 303 | "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", 304 | "dev": true, 305 | "license": "MIT", 306 | "dependencies": { 307 | "@webassemblyjs/ast": "1.11.6", 308 | "@webassemblyjs/helper-api-error": "1.11.6", 309 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 310 | "@webassemblyjs/ieee754": "1.11.6", 311 | "@webassemblyjs/leb128": "1.11.6", 312 | "@webassemblyjs/utf8": "1.11.6" 313 | } 314 | }, 315 | "node_modules/@webassemblyjs/wast-printer": { 316 | "version": "1.11.6", 317 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", 318 | "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", 319 | "dev": true, 320 | "license": "MIT", 321 | "dependencies": { 322 | "@webassemblyjs/ast": "1.11.6", 323 | "@xtuc/long": "4.2.2" 324 | } 325 | }, 326 | "node_modules/@webpack-cli/configtest": { 327 | "version": "2.1.1", 328 | "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", 329 | "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", 330 | "dev": true, 331 | "license": "MIT", 332 | "engines": { 333 | "node": ">=14.15.0" 334 | }, 335 | "peerDependencies": { 336 | "webpack": "5.x.x", 337 | "webpack-cli": "5.x.x" 338 | } 339 | }, 340 | "node_modules/@webpack-cli/info": { 341 | "version": "2.0.2", 342 | "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", 343 | "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", 344 | "dev": true, 345 | "license": "MIT", 346 | "engines": { 347 | "node": ">=14.15.0" 348 | }, 349 | "peerDependencies": { 350 | "webpack": "5.x.x", 351 | "webpack-cli": "5.x.x" 352 | } 353 | }, 354 | "node_modules/@webpack-cli/serve": { 355 | "version": "2.0.5", 356 | "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", 357 | "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", 358 | "dev": true, 359 | "license": "MIT", 360 | "engines": { 361 | "node": ">=14.15.0" 362 | }, 363 | "peerDependencies": { 364 | "webpack": "5.x.x", 365 | "webpack-cli": "5.x.x" 366 | }, 367 | "peerDependenciesMeta": { 368 | "webpack-dev-server": { 369 | "optional": true 370 | } 371 | } 372 | }, 373 | "node_modules/@xtuc/ieee754": { 374 | "version": "1.2.0", 375 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 376 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", 377 | "dev": true, 378 | "license": "BSD-3-Clause" 379 | }, 380 | "node_modules/@xtuc/long": { 381 | "version": "4.2.2", 382 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", 383 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", 384 | "dev": true, 385 | "license": "Apache-2.0" 386 | }, 387 | "node_modules/acorn": { 388 | "version": "8.10.0", 389 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 390 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 391 | "dev": true, 392 | "license": "MIT", 393 | "bin": { 394 | "acorn": "bin/acorn" 395 | }, 396 | "engines": { 397 | "node": ">=0.4.0" 398 | } 399 | }, 400 | "node_modules/acorn-import-assertions": { 401 | "version": "1.9.0", 402 | "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", 403 | "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", 404 | "dev": true, 405 | "license": "MIT", 406 | "peerDependencies": { 407 | "acorn": "^8" 408 | } 409 | }, 410 | "node_modules/ajv": { 411 | "version": "6.12.6", 412 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 413 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 414 | "dev": true, 415 | "license": "MIT", 416 | "dependencies": { 417 | "fast-deep-equal": "^3.1.1", 418 | "fast-json-stable-stringify": "^2.0.0", 419 | "json-schema-traverse": "^0.4.1", 420 | "uri-js": "^4.2.2" 421 | }, 422 | "funding": { 423 | "type": "github", 424 | "url": "https://github.com/sponsors/epoberezkin" 425 | } 426 | }, 427 | "node_modules/ajv-keywords": { 428 | "version": "3.5.2", 429 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 430 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 431 | "dev": true, 432 | "license": "MIT", 433 | "peerDependencies": { 434 | "ajv": "^6.9.1" 435 | } 436 | }, 437 | "node_modules/ansi-styles": { 438 | "version": "4.3.0", 439 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 440 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 441 | "dev": true, 442 | "license": "MIT", 443 | "dependencies": { 444 | "color-convert": "^2.0.1" 445 | }, 446 | "engines": { 447 | "node": ">=8" 448 | }, 449 | "funding": { 450 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 451 | } 452 | }, 453 | "node_modules/atob": { 454 | "version": "2.1.2", 455 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 456 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", 457 | "license": "(MIT OR Apache-2.0)", 458 | "bin": { 459 | "atob": "bin/atob.js" 460 | }, 461 | "engines": { 462 | "node": ">= 4.5.0" 463 | } 464 | }, 465 | "node_modules/base64-arraybuffer": { 466 | "version": "1.0.2", 467 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", 468 | "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", 469 | "license": "MIT", 470 | "engines": { 471 | "node": ">= 0.6.0" 472 | } 473 | }, 474 | "node_modules/braces": { 475 | "version": "3.0.2", 476 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 477 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 478 | "dev": true, 479 | "license": "MIT", 480 | "dependencies": { 481 | "fill-range": "^7.0.1" 482 | }, 483 | "engines": { 484 | "node": ">=8" 485 | } 486 | }, 487 | "node_modules/browserslist": { 488 | "version": "4.21.10", 489 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", 490 | "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", 491 | "dev": true, 492 | "funding": [ 493 | { 494 | "type": "opencollective", 495 | "url": "https://opencollective.com/browserslist" 496 | }, 497 | { 498 | "type": "tidelift", 499 | "url": "https://tidelift.com/funding/github/npm/browserslist" 500 | }, 501 | { 502 | "type": "github", 503 | "url": "https://github.com/sponsors/ai" 504 | } 505 | ], 506 | "license": "MIT", 507 | "dependencies": { 508 | "caniuse-lite": "^1.0.30001517", 509 | "electron-to-chromium": "^1.4.477", 510 | "node-releases": "^2.0.13", 511 | "update-browserslist-db": "^1.0.11" 512 | }, 513 | "bin": { 514 | "browserslist": "cli.js" 515 | }, 516 | "engines": { 517 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 518 | } 519 | }, 520 | "node_modules/btoa": { 521 | "version": "1.2.1", 522 | "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", 523 | "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", 524 | "license": "(MIT OR Apache-2.0)", 525 | "bin": { 526 | "btoa": "bin/btoa.js" 527 | }, 528 | "engines": { 529 | "node": ">= 0.4.0" 530 | } 531 | }, 532 | "node_modules/buffer-from": { 533 | "version": "1.1.2", 534 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 535 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 536 | "dev": true, 537 | "license": "MIT" 538 | }, 539 | "node_modules/caniuse-lite": { 540 | "version": "1.0.30001532", 541 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", 542 | "integrity": "sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==", 543 | "dev": true, 544 | "funding": [ 545 | { 546 | "type": "opencollective", 547 | "url": "https://opencollective.com/browserslist" 548 | }, 549 | { 550 | "type": "tidelift", 551 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 552 | }, 553 | { 554 | "type": "github", 555 | "url": "https://github.com/sponsors/ai" 556 | } 557 | ], 558 | "license": "CC-BY-4.0" 559 | }, 560 | "node_modules/canvg": { 561 | "version": "3.0.10", 562 | "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz", 563 | "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==", 564 | "license": "MIT", 565 | "optional": true, 566 | "dependencies": { 567 | "@babel/runtime": "^7.12.5", 568 | "@types/raf": "^3.4.0", 569 | "core-js": "^3.8.3", 570 | "raf": "^3.4.1", 571 | "regenerator-runtime": "^0.13.7", 572 | "rgbcolor": "^1.0.1", 573 | "stackblur-canvas": "^2.0.0", 574 | "svg-pathdata": "^6.0.3" 575 | }, 576 | "engines": { 577 | "node": ">=10.0.0" 578 | } 579 | }, 580 | "node_modules/chalk": { 581 | "version": "4.1.2", 582 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 583 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 584 | "dev": true, 585 | "license": "MIT", 586 | "dependencies": { 587 | "ansi-styles": "^4.1.0", 588 | "supports-color": "^7.1.0" 589 | }, 590 | "engines": { 591 | "node": ">=10" 592 | }, 593 | "funding": { 594 | "url": "https://github.com/chalk/chalk?sponsor=1" 595 | } 596 | }, 597 | "node_modules/chrome-trace-event": { 598 | "version": "1.0.3", 599 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", 600 | "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", 601 | "dev": true, 602 | "license": "MIT", 603 | "engines": { 604 | "node": ">=6.0" 605 | } 606 | }, 607 | "node_modules/clone-deep": { 608 | "version": "4.0.1", 609 | "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", 610 | "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", 611 | "dev": true, 612 | "license": "MIT", 613 | "dependencies": { 614 | "is-plain-object": "^2.0.4", 615 | "kind-of": "^6.0.2", 616 | "shallow-clone": "^3.0.0" 617 | }, 618 | "engines": { 619 | "node": ">=6" 620 | } 621 | }, 622 | "node_modules/color-convert": { 623 | "version": "2.0.1", 624 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 625 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 626 | "dev": true, 627 | "license": "MIT", 628 | "dependencies": { 629 | "color-name": "~1.1.4" 630 | }, 631 | "engines": { 632 | "node": ">=7.0.0" 633 | } 634 | }, 635 | "node_modules/color-name": { 636 | "version": "1.1.4", 637 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 638 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 639 | "dev": true, 640 | "license": "MIT" 641 | }, 642 | "node_modules/colorette": { 643 | "version": "2.0.20", 644 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", 645 | "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", 646 | "dev": true, 647 | "license": "MIT" 648 | }, 649 | "node_modules/commander": { 650 | "version": "10.0.1", 651 | "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", 652 | "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", 653 | "dev": true, 654 | "license": "MIT", 655 | "engines": { 656 | "node": ">=14" 657 | } 658 | }, 659 | "node_modules/core-js": { 660 | "version": "3.32.2", 661 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.2.tgz", 662 | "integrity": "sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ==", 663 | "hasInstallScript": true, 664 | "license": "MIT", 665 | "optional": true, 666 | "funding": { 667 | "type": "opencollective", 668 | "url": "https://opencollective.com/core-js" 669 | } 670 | }, 671 | "node_modules/cross-env": { 672 | "version": "7.0.3", 673 | "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", 674 | "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", 675 | "dev": true, 676 | "license": "MIT", 677 | "dependencies": { 678 | "cross-spawn": "^7.0.1" 679 | }, 680 | "bin": { 681 | "cross-env": "src/bin/cross-env.js", 682 | "cross-env-shell": "src/bin/cross-env-shell.js" 683 | }, 684 | "engines": { 685 | "node": ">=10.14", 686 | "npm": ">=6", 687 | "yarn": ">=1" 688 | } 689 | }, 690 | "node_modules/cross-spawn": { 691 | "version": "7.0.3", 692 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 693 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 694 | "dev": true, 695 | "license": "MIT", 696 | "dependencies": { 697 | "path-key": "^3.1.0", 698 | "shebang-command": "^2.0.0", 699 | "which": "^2.0.1" 700 | }, 701 | "engines": { 702 | "node": ">= 8" 703 | } 704 | }, 705 | "node_modules/css-line-break": { 706 | "version": "2.1.0", 707 | "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", 708 | "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", 709 | "license": "MIT", 710 | "dependencies": { 711 | "utrie": "^1.0.2" 712 | } 713 | }, 714 | "node_modules/dompurify": { 715 | "version": "2.4.7", 716 | "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz", 717 | "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==", 718 | "license": "(MPL-2.0 OR Apache-2.0)", 719 | "optional": true 720 | }, 721 | "node_modules/electron-to-chromium": { 722 | "version": "1.4.513", 723 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.513.tgz", 724 | "integrity": "sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==", 725 | "dev": true, 726 | "license": "ISC" 727 | }, 728 | "node_modules/enhanced-resolve": { 729 | "version": "5.15.0", 730 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", 731 | "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", 732 | "dev": true, 733 | "license": "MIT", 734 | "dependencies": { 735 | "graceful-fs": "^4.2.4", 736 | "tapable": "^2.2.0" 737 | }, 738 | "engines": { 739 | "node": ">=10.13.0" 740 | } 741 | }, 742 | "node_modules/envinfo": { 743 | "version": "7.10.0", 744 | "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", 745 | "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", 746 | "dev": true, 747 | "license": "MIT", 748 | "bin": { 749 | "envinfo": "dist/cli.js" 750 | }, 751 | "engines": { 752 | "node": ">=4" 753 | } 754 | }, 755 | "node_modules/es-module-lexer": { 756 | "version": "1.3.0", 757 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", 758 | "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", 759 | "dev": true, 760 | "license": "MIT" 761 | }, 762 | "node_modules/escalade": { 763 | "version": "3.1.1", 764 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 765 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 766 | "dev": true, 767 | "license": "MIT", 768 | "engines": { 769 | "node": ">=6" 770 | } 771 | }, 772 | "node_modules/eslint-scope": { 773 | "version": "5.1.1", 774 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 775 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 776 | "dev": true, 777 | "license": "BSD-2-Clause", 778 | "dependencies": { 779 | "esrecurse": "^4.3.0", 780 | "estraverse": "^4.1.1" 781 | }, 782 | "engines": { 783 | "node": ">=8.0.0" 784 | } 785 | }, 786 | "node_modules/esrecurse": { 787 | "version": "4.3.0", 788 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 789 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 790 | "dev": true, 791 | "license": "BSD-2-Clause", 792 | "dependencies": { 793 | "estraverse": "^5.2.0" 794 | }, 795 | "engines": { 796 | "node": ">=4.0" 797 | } 798 | }, 799 | "node_modules/esrecurse/node_modules/estraverse": { 800 | "version": "5.3.0", 801 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 802 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 803 | "dev": true, 804 | "license": "BSD-2-Clause", 805 | "engines": { 806 | "node": ">=4.0" 807 | } 808 | }, 809 | "node_modules/estraverse": { 810 | "version": "4.3.0", 811 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 812 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 813 | "dev": true, 814 | "license": "BSD-2-Clause", 815 | "engines": { 816 | "node": ">=4.0" 817 | } 818 | }, 819 | "node_modules/events": { 820 | "version": "3.3.0", 821 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 822 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 823 | "dev": true, 824 | "license": "MIT", 825 | "engines": { 826 | "node": ">=0.8.x" 827 | } 828 | }, 829 | "node_modules/fast-deep-equal": { 830 | "version": "3.1.3", 831 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 832 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 833 | "dev": true, 834 | "license": "MIT" 835 | }, 836 | "node_modules/fast-json-stable-stringify": { 837 | "version": "2.1.0", 838 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 839 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 840 | "dev": true, 841 | "license": "MIT" 842 | }, 843 | "node_modules/fastest-levenshtein": { 844 | "version": "1.0.16", 845 | "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", 846 | "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", 847 | "dev": true, 848 | "license": "MIT", 849 | "engines": { 850 | "node": ">= 4.9.1" 851 | } 852 | }, 853 | "node_modules/fflate": { 854 | "version": "0.4.8", 855 | "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", 856 | "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==", 857 | "license": "MIT" 858 | }, 859 | "node_modules/fill-range": { 860 | "version": "7.0.1", 861 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 862 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 863 | "dev": true, 864 | "license": "MIT", 865 | "dependencies": { 866 | "to-regex-range": "^5.0.1" 867 | }, 868 | "engines": { 869 | "node": ">=8" 870 | } 871 | }, 872 | "node_modules/find-up": { 873 | "version": "4.1.0", 874 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 875 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 876 | "dev": true, 877 | "license": "MIT", 878 | "dependencies": { 879 | "locate-path": "^5.0.0", 880 | "path-exists": "^4.0.0" 881 | }, 882 | "engines": { 883 | "node": ">=8" 884 | } 885 | }, 886 | "node_modules/function-bind": { 887 | "version": "1.1.1", 888 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 889 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 890 | "dev": true, 891 | "license": "MIT" 892 | }, 893 | "node_modules/glob-to-regexp": { 894 | "version": "0.4.1", 895 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 896 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 897 | "dev": true, 898 | "license": "BSD-2-Clause" 899 | }, 900 | "node_modules/graceful-fs": { 901 | "version": "4.2.11", 902 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 903 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 904 | "dev": true, 905 | "license": "ISC" 906 | }, 907 | "node_modules/has": { 908 | "version": "1.0.3", 909 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 910 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 911 | "dev": true, 912 | "license": "MIT", 913 | "dependencies": { 914 | "function-bind": "^1.1.1" 915 | }, 916 | "engines": { 917 | "node": ">= 0.4.0" 918 | } 919 | }, 920 | "node_modules/has-flag": { 921 | "version": "4.0.0", 922 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 923 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 924 | "dev": true, 925 | "license": "MIT", 926 | "engines": { 927 | "node": ">=8" 928 | } 929 | }, 930 | "node_modules/html2canvas": { 931 | "version": "1.4.1", 932 | "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", 933 | "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", 934 | "license": "MIT", 935 | "dependencies": { 936 | "css-line-break": "^2.1.0", 937 | "text-segmentation": "^1.0.3" 938 | }, 939 | "engines": { 940 | "node": ">=8.0.0" 941 | } 942 | }, 943 | "node_modules/import-local": { 944 | "version": "3.1.0", 945 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", 946 | "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", 947 | "dev": true, 948 | "license": "MIT", 949 | "dependencies": { 950 | "pkg-dir": "^4.2.0", 951 | "resolve-cwd": "^3.0.0" 952 | }, 953 | "bin": { 954 | "import-local-fixture": "fixtures/cli.js" 955 | }, 956 | "engines": { 957 | "node": ">=8" 958 | }, 959 | "funding": { 960 | "url": "https://github.com/sponsors/sindresorhus" 961 | } 962 | }, 963 | "node_modules/interpret": { 964 | "version": "3.1.1", 965 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", 966 | "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", 967 | "dev": true, 968 | "license": "MIT", 969 | "engines": { 970 | "node": ">=10.13.0" 971 | } 972 | }, 973 | "node_modules/is-core-module": { 974 | "version": "2.13.0", 975 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", 976 | "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", 977 | "dev": true, 978 | "license": "MIT", 979 | "dependencies": { 980 | "has": "^1.0.3" 981 | }, 982 | "funding": { 983 | "url": "https://github.com/sponsors/ljharb" 984 | } 985 | }, 986 | "node_modules/is-number": { 987 | "version": "7.0.0", 988 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 989 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 990 | "dev": true, 991 | "license": "MIT", 992 | "engines": { 993 | "node": ">=0.12.0" 994 | } 995 | }, 996 | "node_modules/is-plain-object": { 997 | "version": "2.0.4", 998 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 999 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 1000 | "dev": true, 1001 | "license": "MIT", 1002 | "dependencies": { 1003 | "isobject": "^3.0.1" 1004 | }, 1005 | "engines": { 1006 | "node": ">=0.10.0" 1007 | } 1008 | }, 1009 | "node_modules/isexe": { 1010 | "version": "2.0.0", 1011 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1012 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1013 | "dev": true, 1014 | "license": "ISC" 1015 | }, 1016 | "node_modules/isobject": { 1017 | "version": "3.0.1", 1018 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 1019 | "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", 1020 | "dev": true, 1021 | "license": "MIT", 1022 | "engines": { 1023 | "node": ">=0.10.0" 1024 | } 1025 | }, 1026 | "node_modules/jest-worker": { 1027 | "version": "27.5.1", 1028 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", 1029 | "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", 1030 | "dev": true, 1031 | "license": "MIT", 1032 | "dependencies": { 1033 | "@types/node": "*", 1034 | "merge-stream": "^2.0.0", 1035 | "supports-color": "^8.0.0" 1036 | }, 1037 | "engines": { 1038 | "node": ">= 10.13.0" 1039 | } 1040 | }, 1041 | "node_modules/jest-worker/node_modules/supports-color": { 1042 | "version": "8.1.1", 1043 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1044 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1045 | "dev": true, 1046 | "license": "MIT", 1047 | "dependencies": { 1048 | "has-flag": "^4.0.0" 1049 | }, 1050 | "engines": { 1051 | "node": ">=10" 1052 | }, 1053 | "funding": { 1054 | "url": "https://github.com/chalk/supports-color?sponsor=1" 1055 | } 1056 | }, 1057 | "node_modules/json-parse-even-better-errors": { 1058 | "version": "2.3.1", 1059 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1060 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1061 | "dev": true, 1062 | "license": "MIT" 1063 | }, 1064 | "node_modules/json-schema-traverse": { 1065 | "version": "0.4.1", 1066 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1067 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1068 | "dev": true, 1069 | "license": "MIT" 1070 | }, 1071 | "node_modules/jspdf": { 1072 | "version": "2.5.1", 1073 | "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", 1074 | "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", 1075 | "license": "MIT", 1076 | "dependencies": { 1077 | "@babel/runtime": "^7.14.0", 1078 | "atob": "^2.1.2", 1079 | "btoa": "^1.2.1", 1080 | "fflate": "^0.4.8" 1081 | }, 1082 | "optionalDependencies": { 1083 | "canvg": "^3.0.6", 1084 | "core-js": "^3.6.0", 1085 | "dompurify": "^2.2.0", 1086 | "html2canvas": "^1.0.0-rc.5" 1087 | } 1088 | }, 1089 | "node_modules/kind-of": { 1090 | "version": "6.0.3", 1091 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 1092 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 1093 | "dev": true, 1094 | "license": "MIT", 1095 | "engines": { 1096 | "node": ">=0.10.0" 1097 | } 1098 | }, 1099 | "node_modules/loader-runner": { 1100 | "version": "4.3.0", 1101 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", 1102 | "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", 1103 | "dev": true, 1104 | "license": "MIT", 1105 | "engines": { 1106 | "node": ">=6.11.5" 1107 | } 1108 | }, 1109 | "node_modules/locate-path": { 1110 | "version": "5.0.0", 1111 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1112 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1113 | "dev": true, 1114 | "license": "MIT", 1115 | "dependencies": { 1116 | "p-locate": "^4.1.0" 1117 | }, 1118 | "engines": { 1119 | "node": ">=8" 1120 | } 1121 | }, 1122 | "node_modules/lru-cache": { 1123 | "version": "6.0.0", 1124 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1125 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1126 | "dev": true, 1127 | "license": "ISC", 1128 | "dependencies": { 1129 | "yallist": "^4.0.0" 1130 | }, 1131 | "engines": { 1132 | "node": ">=10" 1133 | } 1134 | }, 1135 | "node_modules/merge-stream": { 1136 | "version": "2.0.0", 1137 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1138 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1139 | "dev": true, 1140 | "license": "MIT" 1141 | }, 1142 | "node_modules/micromatch": { 1143 | "version": "4.0.5", 1144 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1145 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1146 | "dev": true, 1147 | "license": "MIT", 1148 | "dependencies": { 1149 | "braces": "^3.0.2", 1150 | "picomatch": "^2.3.1" 1151 | }, 1152 | "engines": { 1153 | "node": ">=8.6" 1154 | } 1155 | }, 1156 | "node_modules/mime-db": { 1157 | "version": "1.52.0", 1158 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1159 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1160 | "dev": true, 1161 | "license": "MIT", 1162 | "engines": { 1163 | "node": ">= 0.6" 1164 | } 1165 | }, 1166 | "node_modules/mime-types": { 1167 | "version": "2.1.35", 1168 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1169 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1170 | "dev": true, 1171 | "license": "MIT", 1172 | "dependencies": { 1173 | "mime-db": "1.52.0" 1174 | }, 1175 | "engines": { 1176 | "node": ">= 0.6" 1177 | } 1178 | }, 1179 | "node_modules/neo-async": { 1180 | "version": "2.6.2", 1181 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 1182 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", 1183 | "dev": true, 1184 | "license": "MIT" 1185 | }, 1186 | "node_modules/node-releases": { 1187 | "version": "2.0.13", 1188 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", 1189 | "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", 1190 | "dev": true, 1191 | "license": "MIT" 1192 | }, 1193 | "node_modules/p-limit": { 1194 | "version": "2.3.0", 1195 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1196 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1197 | "dev": true, 1198 | "license": "MIT", 1199 | "dependencies": { 1200 | "p-try": "^2.0.0" 1201 | }, 1202 | "engines": { 1203 | "node": ">=6" 1204 | }, 1205 | "funding": { 1206 | "url": "https://github.com/sponsors/sindresorhus" 1207 | } 1208 | }, 1209 | "node_modules/p-locate": { 1210 | "version": "4.1.0", 1211 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1212 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1213 | "dev": true, 1214 | "license": "MIT", 1215 | "dependencies": { 1216 | "p-limit": "^2.2.0" 1217 | }, 1218 | "engines": { 1219 | "node": ">=8" 1220 | } 1221 | }, 1222 | "node_modules/p-try": { 1223 | "version": "2.2.0", 1224 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1225 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1226 | "dev": true, 1227 | "license": "MIT", 1228 | "engines": { 1229 | "node": ">=6" 1230 | } 1231 | }, 1232 | "node_modules/path-exists": { 1233 | "version": "4.0.0", 1234 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1235 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1236 | "dev": true, 1237 | "license": "MIT", 1238 | "engines": { 1239 | "node": ">=8" 1240 | } 1241 | }, 1242 | "node_modules/path-key": { 1243 | "version": "3.1.1", 1244 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1245 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1246 | "dev": true, 1247 | "license": "MIT", 1248 | "engines": { 1249 | "node": ">=8" 1250 | } 1251 | }, 1252 | "node_modules/path-parse": { 1253 | "version": "1.0.7", 1254 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1255 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1256 | "dev": true, 1257 | "license": "MIT" 1258 | }, 1259 | "node_modules/performance-now": { 1260 | "version": "2.1.0", 1261 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1262 | "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", 1263 | "license": "MIT", 1264 | "optional": true 1265 | }, 1266 | "node_modules/picocolors": { 1267 | "version": "1.0.0", 1268 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1269 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1270 | "dev": true, 1271 | "license": "ISC" 1272 | }, 1273 | "node_modules/picomatch": { 1274 | "version": "2.3.1", 1275 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1276 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1277 | "dev": true, 1278 | "license": "MIT", 1279 | "engines": { 1280 | "node": ">=8.6" 1281 | }, 1282 | "funding": { 1283 | "url": "https://github.com/sponsors/jonschlinkert" 1284 | } 1285 | }, 1286 | "node_modules/pkg-dir": { 1287 | "version": "4.2.0", 1288 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1289 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1290 | "dev": true, 1291 | "license": "MIT", 1292 | "dependencies": { 1293 | "find-up": "^4.0.0" 1294 | }, 1295 | "engines": { 1296 | "node": ">=8" 1297 | } 1298 | }, 1299 | "node_modules/punycode": { 1300 | "version": "2.3.0", 1301 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1302 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 1303 | "dev": true, 1304 | "license": "MIT", 1305 | "engines": { 1306 | "node": ">=6" 1307 | } 1308 | }, 1309 | "node_modules/raf": { 1310 | "version": "3.4.1", 1311 | "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", 1312 | "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", 1313 | "license": "MIT", 1314 | "optional": true, 1315 | "dependencies": { 1316 | "performance-now": "^2.1.0" 1317 | } 1318 | }, 1319 | "node_modules/randombytes": { 1320 | "version": "2.1.0", 1321 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1322 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1323 | "dev": true, 1324 | "license": "MIT", 1325 | "dependencies": { 1326 | "safe-buffer": "^5.1.0" 1327 | } 1328 | }, 1329 | "node_modules/rechoir": { 1330 | "version": "0.8.0", 1331 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", 1332 | "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", 1333 | "dev": true, 1334 | "license": "MIT", 1335 | "dependencies": { 1336 | "resolve": "^1.20.0" 1337 | }, 1338 | "engines": { 1339 | "node": ">= 10.13.0" 1340 | } 1341 | }, 1342 | "node_modules/regenerator-runtime": { 1343 | "version": "0.13.11", 1344 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", 1345 | "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", 1346 | "license": "MIT", 1347 | "optional": true 1348 | }, 1349 | "node_modules/resolve": { 1350 | "version": "1.22.4", 1351 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", 1352 | "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", 1353 | "dev": true, 1354 | "license": "MIT", 1355 | "dependencies": { 1356 | "is-core-module": "^2.13.0", 1357 | "path-parse": "^1.0.7", 1358 | "supports-preserve-symlinks-flag": "^1.0.0" 1359 | }, 1360 | "bin": { 1361 | "resolve": "bin/resolve" 1362 | }, 1363 | "funding": { 1364 | "url": "https://github.com/sponsors/ljharb" 1365 | } 1366 | }, 1367 | "node_modules/resolve-cwd": { 1368 | "version": "3.0.0", 1369 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 1370 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 1371 | "dev": true, 1372 | "license": "MIT", 1373 | "dependencies": { 1374 | "resolve-from": "^5.0.0" 1375 | }, 1376 | "engines": { 1377 | "node": ">=8" 1378 | } 1379 | }, 1380 | "node_modules/resolve-from": { 1381 | "version": "5.0.0", 1382 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 1383 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 1384 | "dev": true, 1385 | "license": "MIT", 1386 | "engines": { 1387 | "node": ">=8" 1388 | } 1389 | }, 1390 | "node_modules/rgbcolor": { 1391 | "version": "1.0.1", 1392 | "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", 1393 | "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", 1394 | "license": "MIT OR SEE LICENSE IN FEEL-FREE.md", 1395 | "optional": true, 1396 | "engines": { 1397 | "node": ">= 0.8.15" 1398 | } 1399 | }, 1400 | "node_modules/safe-buffer": { 1401 | "version": "5.2.1", 1402 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1403 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1404 | "dev": true, 1405 | "funding": [ 1406 | { 1407 | "type": "github", 1408 | "url": "https://github.com/sponsors/feross" 1409 | }, 1410 | { 1411 | "type": "patreon", 1412 | "url": "https://www.patreon.com/feross" 1413 | }, 1414 | { 1415 | "type": "consulting", 1416 | "url": "https://feross.org/support" 1417 | } 1418 | ], 1419 | "license": "MIT" 1420 | }, 1421 | "node_modules/schema-utils": { 1422 | "version": "3.3.0", 1423 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", 1424 | "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", 1425 | "dev": true, 1426 | "license": "MIT", 1427 | "dependencies": { 1428 | "@types/json-schema": "^7.0.8", 1429 | "ajv": "^6.12.5", 1430 | "ajv-keywords": "^3.5.2" 1431 | }, 1432 | "engines": { 1433 | "node": ">= 10.13.0" 1434 | }, 1435 | "funding": { 1436 | "type": "opencollective", 1437 | "url": "https://opencollective.com/webpack" 1438 | } 1439 | }, 1440 | "node_modules/semver": { 1441 | "version": "7.5.4", 1442 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 1443 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 1444 | "dev": true, 1445 | "license": "ISC", 1446 | "dependencies": { 1447 | "lru-cache": "^6.0.0" 1448 | }, 1449 | "bin": { 1450 | "semver": "bin/semver.js" 1451 | }, 1452 | "engines": { 1453 | "node": ">=10" 1454 | } 1455 | }, 1456 | "node_modules/serialize-javascript": { 1457 | "version": "6.0.1", 1458 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", 1459 | "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", 1460 | "dev": true, 1461 | "license": "BSD-3-Clause", 1462 | "dependencies": { 1463 | "randombytes": "^2.1.0" 1464 | } 1465 | }, 1466 | "node_modules/shallow-clone": { 1467 | "version": "3.0.1", 1468 | "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", 1469 | "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", 1470 | "dev": true, 1471 | "license": "MIT", 1472 | "dependencies": { 1473 | "kind-of": "^6.0.2" 1474 | }, 1475 | "engines": { 1476 | "node": ">=8" 1477 | } 1478 | }, 1479 | "node_modules/shebang-command": { 1480 | "version": "2.0.0", 1481 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1482 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1483 | "dev": true, 1484 | "license": "MIT", 1485 | "dependencies": { 1486 | "shebang-regex": "^3.0.0" 1487 | }, 1488 | "engines": { 1489 | "node": ">=8" 1490 | } 1491 | }, 1492 | "node_modules/shebang-regex": { 1493 | "version": "3.0.0", 1494 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1495 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1496 | "dev": true, 1497 | "license": "MIT", 1498 | "engines": { 1499 | "node": ">=8" 1500 | } 1501 | }, 1502 | "node_modules/source-map": { 1503 | "version": "0.6.1", 1504 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1505 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1506 | "dev": true, 1507 | "license": "BSD-3-Clause", 1508 | "engines": { 1509 | "node": ">=0.10.0" 1510 | } 1511 | }, 1512 | "node_modules/source-map-support": { 1513 | "version": "0.5.21", 1514 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1515 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1516 | "dev": true, 1517 | "license": "MIT", 1518 | "dependencies": { 1519 | "buffer-from": "^1.0.0", 1520 | "source-map": "^0.6.0" 1521 | } 1522 | }, 1523 | "node_modules/stackblur-canvas": { 1524 | "version": "2.6.0", 1525 | "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.6.0.tgz", 1526 | "integrity": "sha512-8S1aIA+UoF6erJYnglGPug6MaHYGo1Ot7h5fuXx4fUPvcvQfcdw2o/ppCse63+eZf8PPidSu4v1JnmEVtEDnpg==", 1527 | "license": "MIT", 1528 | "optional": true, 1529 | "engines": { 1530 | "node": ">=0.1.14" 1531 | } 1532 | }, 1533 | "node_modules/supports-color": { 1534 | "version": "7.2.0", 1535 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1536 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1537 | "dev": true, 1538 | "license": "MIT", 1539 | "dependencies": { 1540 | "has-flag": "^4.0.0" 1541 | }, 1542 | "engines": { 1543 | "node": ">=8" 1544 | } 1545 | }, 1546 | "node_modules/supports-preserve-symlinks-flag": { 1547 | "version": "1.0.0", 1548 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1549 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1550 | "dev": true, 1551 | "license": "MIT", 1552 | "engines": { 1553 | "node": ">= 0.4" 1554 | }, 1555 | "funding": { 1556 | "url": "https://github.com/sponsors/ljharb" 1557 | } 1558 | }, 1559 | "node_modules/svg-pathdata": { 1560 | "version": "6.0.3", 1561 | "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", 1562 | "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", 1563 | "license": "MIT", 1564 | "optional": true, 1565 | "engines": { 1566 | "node": ">=12.0.0" 1567 | } 1568 | }, 1569 | "node_modules/tapable": { 1570 | "version": "2.2.1", 1571 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 1572 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", 1573 | "dev": true, 1574 | "license": "MIT", 1575 | "engines": { 1576 | "node": ">=6" 1577 | } 1578 | }, 1579 | "node_modules/terser": { 1580 | "version": "5.19.4", 1581 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", 1582 | "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", 1583 | "dev": true, 1584 | "license": "BSD-2-Clause", 1585 | "dependencies": { 1586 | "@jridgewell/source-map": "^0.3.3", 1587 | "acorn": "^8.8.2", 1588 | "commander": "^2.20.0", 1589 | "source-map-support": "~0.5.20" 1590 | }, 1591 | "bin": { 1592 | "terser": "bin/terser" 1593 | }, 1594 | "engines": { 1595 | "node": ">=10" 1596 | } 1597 | }, 1598 | "node_modules/terser-webpack-plugin": { 1599 | "version": "5.3.9", 1600 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", 1601 | "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", 1602 | "dev": true, 1603 | "license": "MIT", 1604 | "dependencies": { 1605 | "@jridgewell/trace-mapping": "^0.3.17", 1606 | "jest-worker": "^27.4.5", 1607 | "schema-utils": "^3.1.1", 1608 | "serialize-javascript": "^6.0.1", 1609 | "terser": "^5.16.8" 1610 | }, 1611 | "engines": { 1612 | "node": ">= 10.13.0" 1613 | }, 1614 | "funding": { 1615 | "type": "opencollective", 1616 | "url": "https://opencollective.com/webpack" 1617 | }, 1618 | "peerDependencies": { 1619 | "webpack": "^5.1.0" 1620 | }, 1621 | "peerDependenciesMeta": { 1622 | "@swc/core": { 1623 | "optional": true 1624 | }, 1625 | "esbuild": { 1626 | "optional": true 1627 | }, 1628 | "uglify-js": { 1629 | "optional": true 1630 | } 1631 | } 1632 | }, 1633 | "node_modules/terser/node_modules/commander": { 1634 | "version": "2.20.3", 1635 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1636 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1637 | "dev": true, 1638 | "license": "MIT" 1639 | }, 1640 | "node_modules/text-segmentation": { 1641 | "version": "1.0.3", 1642 | "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", 1643 | "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", 1644 | "license": "MIT", 1645 | "dependencies": { 1646 | "utrie": "^1.0.2" 1647 | } 1648 | }, 1649 | "node_modules/to-regex-range": { 1650 | "version": "5.0.1", 1651 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1652 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1653 | "dev": true, 1654 | "license": "MIT", 1655 | "dependencies": { 1656 | "is-number": "^7.0.0" 1657 | }, 1658 | "engines": { 1659 | "node": ">=8.0" 1660 | } 1661 | }, 1662 | "node_modules/ts-loader": { 1663 | "version": "9.4.4", 1664 | "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", 1665 | "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", 1666 | "dev": true, 1667 | "license": "MIT", 1668 | "dependencies": { 1669 | "chalk": "^4.1.0", 1670 | "enhanced-resolve": "^5.0.0", 1671 | "micromatch": "^4.0.0", 1672 | "semver": "^7.3.4" 1673 | }, 1674 | "engines": { 1675 | "node": ">=12.0.0" 1676 | }, 1677 | "peerDependencies": { 1678 | "typescript": "*", 1679 | "webpack": "^5.0.0" 1680 | } 1681 | }, 1682 | "node_modules/typescript": { 1683 | "version": "5.2.2", 1684 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", 1685 | "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", 1686 | "dev": true, 1687 | "license": "Apache-2.0", 1688 | "bin": { 1689 | "tsc": "bin/tsc", 1690 | "tsserver": "bin/tsserver" 1691 | }, 1692 | "engines": { 1693 | "node": ">=14.17" 1694 | } 1695 | }, 1696 | "node_modules/update-browserslist-db": { 1697 | "version": "1.0.11", 1698 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", 1699 | "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", 1700 | "dev": true, 1701 | "funding": [ 1702 | { 1703 | "type": "opencollective", 1704 | "url": "https://opencollective.com/browserslist" 1705 | }, 1706 | { 1707 | "type": "tidelift", 1708 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1709 | }, 1710 | { 1711 | "type": "github", 1712 | "url": "https://github.com/sponsors/ai" 1713 | } 1714 | ], 1715 | "license": "MIT", 1716 | "dependencies": { 1717 | "escalade": "^3.1.1", 1718 | "picocolors": "^1.0.0" 1719 | }, 1720 | "bin": { 1721 | "update-browserslist-db": "cli.js" 1722 | }, 1723 | "peerDependencies": { 1724 | "browserslist": ">= 4.21.0" 1725 | } 1726 | }, 1727 | "node_modules/uri-js": { 1728 | "version": "4.4.1", 1729 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1730 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1731 | "dev": true, 1732 | "license": "BSD-2-Clause", 1733 | "dependencies": { 1734 | "punycode": "^2.1.0" 1735 | } 1736 | }, 1737 | "node_modules/utrie": { 1738 | "version": "1.0.2", 1739 | "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", 1740 | "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", 1741 | "license": "MIT", 1742 | "dependencies": { 1743 | "base64-arraybuffer": "^1.0.2" 1744 | } 1745 | }, 1746 | "node_modules/watchpack": { 1747 | "version": "2.4.0", 1748 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", 1749 | "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", 1750 | "dev": true, 1751 | "license": "MIT", 1752 | "dependencies": { 1753 | "glob-to-regexp": "^0.4.1", 1754 | "graceful-fs": "^4.1.2" 1755 | }, 1756 | "engines": { 1757 | "node": ">=10.13.0" 1758 | } 1759 | }, 1760 | "node_modules/webpack": { 1761 | "version": "5.88.2", 1762 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", 1763 | "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", 1764 | "dev": true, 1765 | "license": "MIT", 1766 | "dependencies": { 1767 | "@types/eslint-scope": "^3.7.3", 1768 | "@types/estree": "^1.0.0", 1769 | "@webassemblyjs/ast": "^1.11.5", 1770 | "@webassemblyjs/wasm-edit": "^1.11.5", 1771 | "@webassemblyjs/wasm-parser": "^1.11.5", 1772 | "acorn": "^8.7.1", 1773 | "acorn-import-assertions": "^1.9.0", 1774 | "browserslist": "^4.14.5", 1775 | "chrome-trace-event": "^1.0.2", 1776 | "enhanced-resolve": "^5.15.0", 1777 | "es-module-lexer": "^1.2.1", 1778 | "eslint-scope": "5.1.1", 1779 | "events": "^3.2.0", 1780 | "glob-to-regexp": "^0.4.1", 1781 | "graceful-fs": "^4.2.9", 1782 | "json-parse-even-better-errors": "^2.3.1", 1783 | "loader-runner": "^4.2.0", 1784 | "mime-types": "^2.1.27", 1785 | "neo-async": "^2.6.2", 1786 | "schema-utils": "^3.2.0", 1787 | "tapable": "^2.1.1", 1788 | "terser-webpack-plugin": "^5.3.7", 1789 | "watchpack": "^2.4.0", 1790 | "webpack-sources": "^3.2.3" 1791 | }, 1792 | "bin": { 1793 | "webpack": "bin/webpack.js" 1794 | }, 1795 | "engines": { 1796 | "node": ">=10.13.0" 1797 | }, 1798 | "funding": { 1799 | "type": "opencollective", 1800 | "url": "https://opencollective.com/webpack" 1801 | }, 1802 | "peerDependenciesMeta": { 1803 | "webpack-cli": { 1804 | "optional": true 1805 | } 1806 | } 1807 | }, 1808 | "node_modules/webpack-cli": { 1809 | "version": "5.1.4", 1810 | "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", 1811 | "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", 1812 | "dev": true, 1813 | "license": "MIT", 1814 | "dependencies": { 1815 | "@discoveryjs/json-ext": "^0.5.0", 1816 | "@webpack-cli/configtest": "^2.1.1", 1817 | "@webpack-cli/info": "^2.0.2", 1818 | "@webpack-cli/serve": "^2.0.5", 1819 | "colorette": "^2.0.14", 1820 | "commander": "^10.0.1", 1821 | "cross-spawn": "^7.0.3", 1822 | "envinfo": "^7.7.3", 1823 | "fastest-levenshtein": "^1.0.12", 1824 | "import-local": "^3.0.2", 1825 | "interpret": "^3.1.1", 1826 | "rechoir": "^0.8.0", 1827 | "webpack-merge": "^5.7.3" 1828 | }, 1829 | "bin": { 1830 | "webpack-cli": "bin/cli.js" 1831 | }, 1832 | "engines": { 1833 | "node": ">=14.15.0" 1834 | }, 1835 | "funding": { 1836 | "type": "opencollective", 1837 | "url": "https://opencollective.com/webpack" 1838 | }, 1839 | "peerDependencies": { 1840 | "webpack": "5.x.x" 1841 | }, 1842 | "peerDependenciesMeta": { 1843 | "@webpack-cli/generators": { 1844 | "optional": true 1845 | }, 1846 | "webpack-bundle-analyzer": { 1847 | "optional": true 1848 | }, 1849 | "webpack-dev-server": { 1850 | "optional": true 1851 | } 1852 | } 1853 | }, 1854 | "node_modules/webpack-merge": { 1855 | "version": "5.9.0", 1856 | "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", 1857 | "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", 1858 | "dev": true, 1859 | "license": "MIT", 1860 | "dependencies": { 1861 | "clone-deep": "^4.0.1", 1862 | "wildcard": "^2.0.0" 1863 | }, 1864 | "engines": { 1865 | "node": ">=10.0.0" 1866 | } 1867 | }, 1868 | "node_modules/webpack-sources": { 1869 | "version": "3.2.3", 1870 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", 1871 | "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", 1872 | "dev": true, 1873 | "license": "MIT", 1874 | "engines": { 1875 | "node": ">=10.13.0" 1876 | } 1877 | }, 1878 | "node_modules/which": { 1879 | "version": "2.0.2", 1880 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1881 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1882 | "dev": true, 1883 | "license": "ISC", 1884 | "dependencies": { 1885 | "isexe": "^2.0.0" 1886 | }, 1887 | "bin": { 1888 | "node-which": "bin/node-which" 1889 | }, 1890 | "engines": { 1891 | "node": ">= 8" 1892 | } 1893 | }, 1894 | "node_modules/wildcard": { 1895 | "version": "2.0.1", 1896 | "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", 1897 | "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", 1898 | "dev": true, 1899 | "license": "MIT" 1900 | }, 1901 | "node_modules/yallist": { 1902 | "version": "4.0.0", 1903 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1904 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1905 | "dev": true, 1906 | "license": "ISC" 1907 | } 1908 | } 1909 | } 1910 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jspdf-html2canvas", 3 | "version": "1.5.2", 4 | "description": "A combine usage with jsPDF and html2canvas, which translating html content to PDF file.", 5 | "main": "dist/jspdf-html2canvas.min.js", 6 | "module": "dist/jspdf-html2canvas.min.js", 7 | "scripts": { 8 | "prebuild": "rm -rf ./dist", 9 | "dev": "cross-env NODE_ENV=development webpack --mode development --watch", 10 | "build": "cross-env NODE_ENV=production webpack --mode production", 11 | "ci": "yarn install --immutable --immutable-cache --check-cache" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/johnnywang1994/jsPDF-html2canvas.git" 16 | }, 17 | "keywords": [ 18 | "npm", 19 | "jsPDF", 20 | "html2canvas" 21 | ], 22 | "author": "johnnywang", 23 | "license": "ISC", 24 | "bugs": { 25 | "url": "https://github.com/johnnywang1994/jsPDF-html2canvas/issues" 26 | }, 27 | "homepage": "https://github.com/johnnywang1994/jsPDF-html2canvas#readme", 28 | "types": "dist/index.d.ts", 29 | "dependencies": { 30 | "html2canvas": "^1.4.1", 31 | "jspdf": "^2.5.1" 32 | }, 33 | "devDependencies": { 34 | "cross-env": "^7.0.2", 35 | "ts-loader": "^9.4.4", 36 | "typescript": "^5.2.2", 37 | "webpack": "^5.88.2", 38 | "webpack-cli": "^5.1.4" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/config.ts: -------------------------------------------------------------------------------- 1 | import type { Options } from './types'; 2 | 3 | export const defaultOpts: Options = { 4 | jsPDF: { 5 | unit: 'pt', 6 | format: 'a4', 7 | }, 8 | html2canvas: { 9 | imageTimeout: 15000, 10 | logging: true, 11 | useCORS: false, 12 | }, 13 | margin: { 14 | right: 0, 15 | top: 0, 16 | bottom: 0, 17 | left: 0, 18 | }, 19 | imageType: 'image/jpeg', 20 | imageQuality: 1, 21 | autoResize: true, 22 | output: 'jspdf-generate.pdf', 23 | watermark: undefined, 24 | init: function() {}, 25 | success: function(pdf) { 26 | pdf.save(this.output); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import html2PDF from './js-pdf'; 2 | 3 | export default html2PDF; 4 | -------------------------------------------------------------------------------- /src/js-pdf.ts: -------------------------------------------------------------------------------- 1 | import { jsPDF } from 'jspdf'; 2 | import html2canvas from 'html2canvas'; 3 | import { defaultOpts } from './config'; 4 | import renderCanvas from './render-canvas'; 5 | import usePlugins from './plugins'; 6 | import joinObject from './utils/joinObject'; 7 | 8 | import type { Options, PdfInstance } from './types'; 9 | 10 | // ----- jsPDF ----- 11 | function getPdf(opts: Options): PdfInstance { 12 | const { margin } = opts; 13 | const pdf = new jsPDF(opts.jsPDF); 14 | const pdfWidth = pdf.internal.pageSize.getWidth(); 15 | const pdfHeight = pdf.internal.pageSize.getHeight(); 16 | const pdfContentWidth = pdfWidth - (margin.left + margin.right); 17 | const pdfContentHeight = pdfHeight - (margin.top + margin.bottom); 18 | const position = 0; 19 | const currentPage = 1; 20 | const pageOfCurrentNode = 1; 21 | return { 22 | pdf, 23 | pdfWidth, 24 | pdfHeight, 25 | pdfContentWidth, 26 | pdfContentHeight, 27 | position, 28 | currentPage, 29 | pageOfCurrentNode, 30 | }; 31 | } 32 | 33 | async function html2PDF( 34 | dom: HTMLElement | HTMLElement[], 35 | opts: Partial = {}, 36 | ) { 37 | const _opts = joinObject(defaultOpts, opts); 38 | const pdfInstance = getPdf(_opts); 39 | // init pdf 40 | _opts.init.call(_opts, pdfInstance.pdf); 41 | 42 | // multi pages by nodes 43 | if ('length' in dom) { 44 | for (let i = 0; i < dom.length; i++) { 45 | const canvas = await html2canvas(dom[i], _opts.html2canvas); 46 | renderCanvas(canvas, pdfInstance, _opts); 47 | } 48 | } else { 49 | // single page for one node 50 | const canvas = await html2canvas(dom, _opts.html2canvas); 51 | renderCanvas(canvas, pdfInstance, _opts); 52 | } 53 | 54 | // check plugins 55 | await usePlugins(pdfInstance, _opts); 56 | 57 | // save pdf 58 | _opts.success.call(_opts, pdfInstance.pdf); 59 | 60 | return pdfInstance.pdf; 61 | } 62 | 63 | export default html2PDF; 64 | -------------------------------------------------------------------------------- /src/plugins/index.ts: -------------------------------------------------------------------------------- 1 | import { Options, PdfInstance } from '../types'; 2 | import useWaterMark from '../plugins/useWaterMark'; 3 | 4 | async function usePlugins(pdfInstance: PdfInstance, opts: Options) { 5 | // check watermark 6 | if (!!opts.watermark) { 7 | await useWaterMark(pdfInstance, opts); 8 | } 9 | } 10 | 11 | export default usePlugins; 12 | -------------------------------------------------------------------------------- /src/plugins/useWaterMark.ts: -------------------------------------------------------------------------------- 1 | import type { jsPDF } from 'jspdf'; 2 | import type { Options, PdfInstance, jsPDFInternal } from '../types'; 3 | import images from '../utils/images'; 4 | 5 | 6 | function addWaterMark(pdf: jsPDF, opts: Options) { 7 | const totalPages = (pdf.internal as jsPDFInternal).getNumberOfPages(); 8 | if (typeof opts.watermark === 'function') { 9 | // custom function handler 10 | for (let i = 1; i <= totalPages; i++) { 11 | pdf.setPage(i); 12 | const param = { 13 | pdf, 14 | pageNumber: i, 15 | totalPageNumber: totalPages, 16 | }; 17 | opts.watermark.call(opts, param); 18 | } 19 | } else if (opts.watermarkImg) { 20 | // image watermark 21 | const waterProps = pdf.getImageProperties(opts.watermarkImg); 22 | const ratio = typeof opts.watermark !== 'string' 23 | ? opts.watermark?.scale || 1 24 | : 1; 25 | for (let i = 1; i <= totalPages; i++) { 26 | pdf.setPage(i); 27 | if (typeof opts.watermark !== 'string' && opts.watermark?.handler) { 28 | // custom handler with image 29 | const param = { 30 | pdf, 31 | pageNumber: i, 32 | totalPageNumber: totalPages, 33 | imgNode: opts.watermarkImg, 34 | }; 35 | opts.watermark.handler.call(opts, param); 36 | } else { 37 | // auto centeral watermark with ratio 38 | pdf.addImage( 39 | opts.watermarkImg, 40 | images('image/png'), 41 | (pdf.internal.pageSize.width - waterProps.width * ratio) / 2, 42 | (pdf.internal.pageSize.height - waterProps.height * ratio) / 2, 43 | waterProps.width * ratio, 44 | waterProps.height * ratio 45 | ); 46 | } 47 | } 48 | } else { 49 | console.warn('[jspdf-html2canvas] "watermark" option should be either "string" or "function" type.'); 50 | } 51 | return pdf; 52 | } 53 | 54 | function useWaterMark( 55 | pdfInstance: PdfInstance, 56 | opts: Options, 57 | ) { 58 | return new Promise((resolve) => { 59 | const watermarkImg = new Image(); 60 | const src = typeof opts.watermark === 'string' 61 | ? opts.watermark 62 | : typeof opts.watermark !== 'function' ? opts.watermark?.src : false; 63 | const resolveWithWaterMark = () => { 64 | pdfInstance.pdf = addWaterMark(pdfInstance.pdf, opts); 65 | resolve(null); 66 | }; 67 | // image watermark 68 | if (!!src) { 69 | watermarkImg.onload = function() { 70 | opts.watermarkImg = watermarkImg; 71 | resolveWithWaterMark(); 72 | }; 73 | watermarkImg.crossOrigin = 'Anonymous'; 74 | watermarkImg.src = src; 75 | } else if (typeof opts.watermark === 'function') { 76 | resolveWithWaterMark(); 77 | } 78 | }) 79 | } 80 | 81 | export default useWaterMark; 82 | -------------------------------------------------------------------------------- /src/render-canvas.ts: -------------------------------------------------------------------------------- 1 | import type { jsPDF } from 'jspdf'; 2 | import getPageData from './utils/getPageData'; 3 | import images from './utils/images'; 4 | import type { PdfInstance, Options } from './types'; 5 | 6 | 7 | function setPdf( 8 | pdfInstance: PdfInstance, 9 | pdf: jsPDF, 10 | position: number, 11 | currentPage: number, 12 | pageOfCurrentNode: number, 13 | ) { 14 | pdfInstance.pdf = pdf; 15 | pdfInstance.position = position; 16 | pdfInstance.currentPage = currentPage; 17 | pdfInstance.pageOfCurrentNode = pageOfCurrentNode; 18 | } 19 | 20 | function renderCanvas( 21 | canvas: HTMLCanvasElement, 22 | pdfInstance: PdfInstance, 23 | opts: Options, 24 | ) { 25 | let { 26 | pdf, 27 | pdfContentWidth, 28 | pdfContentHeight, 29 | pdfWidth, 30 | pdfHeight, 31 | position, 32 | currentPage, 33 | pageOfCurrentNode } = pdfInstance; 34 | const { pageData, printWidth, printHeight } = getPageData({ canvas, pdf, pdfContentWidth, opts }); 35 | 36 | // height which not yet print to PDF. 37 | let leftHeight = printHeight; 38 | 39 | // check if need reset position(change node) 40 | if (position < 0) { 41 | pdf.addPage(); 42 | currentPage += 1; 43 | pageOfCurrentNode = 1; 44 | position = 0; 45 | } 46 | 47 | // check if content needs multi pages 48 | const { margin } = opts; 49 | while (leftHeight > 0) { 50 | // add content 51 | pdf.addImage( 52 | pageData, 53 | images(opts.imageType), 54 | margin.left, 55 | position + 56 | margin.top * pageOfCurrentNode + 57 | margin.bottom * (pageOfCurrentNode - 1), 58 | printWidth, 59 | printHeight, 60 | ); 61 | // add margin top/bottom 62 | pdf.setFillColor(255, 255, 255); 63 | pdf.rect(0, 0, pdfWidth, margin.top, 'F'); 64 | pdf.rect(0, pdfHeight - margin.bottom, pdfWidth, margin.bottom, 'F'); 65 | // check left content 66 | if (leftHeight < pdfContentHeight) { 67 | position -= leftHeight; 68 | break; 69 | } else { 70 | leftHeight -= pdfContentHeight; 71 | position -= pdfHeight; 72 | pdf.addPage(); 73 | currentPage += 1; 74 | pageOfCurrentNode += 1; 75 | } 76 | } 77 | 78 | // expose for next round 79 | setPdf(pdfInstance, pdf, position, currentPage, pageOfCurrentNode); 80 | } 81 | 82 | export default renderCanvas; 83 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import type { jsPDF, jsPDFOptions } from 'jspdf'; 2 | import type { Options as Html2CanvasOptions } from 'html2canvas'; 3 | 4 | type WaterMarkHandlerParam = { 5 | pdf: jsPDF; 6 | pageNumber: number; 7 | totalPageNumber: number; 8 | imgNode: HTMLImageElement; 9 | } 10 | 11 | // allow string | function | object 12 | type WaterMarkOptions = { 13 | scale: number; 14 | src?: string; 15 | handler?: (param: WaterMarkHandlerParam) => void; 16 | } | ((param: Omit) => void) | string; 17 | 18 | export interface Options { 19 | jsPDF: Partial; 20 | html2canvas: Partial; 21 | margin: { 22 | right: number; 23 | top: number; 24 | bottom: number; 25 | left: number; 26 | }; 27 | imageType: string; 28 | imageQuality: number; 29 | output: string; 30 | autoResize: boolean; 31 | watermarkImg?: HTMLImageElement; // used inside plugin 32 | watermark?: WaterMarkOptions; 33 | init: (this: Options, pdf: jsPDF) => Promise | void; 34 | success: (pdf: jsPDF) => Promise | void; 35 | } 36 | 37 | export interface PdfInstance { 38 | pdf: jsPDF; 39 | pdfWidth: number; 40 | pdfHeight: number; 41 | pdfContentWidth: number; 42 | pdfContentHeight: number; 43 | position: number; // page's start position 44 | currentPage: number; // current page number of total pdf 45 | pageOfCurrentNode: number; // current page of current node 46 | } 47 | 48 | export type jsPDFInternal = jsPDF['internal'] & { 49 | getNumberOfPages: () => number; 50 | } -------------------------------------------------------------------------------- /src/utils/getPageData.ts: -------------------------------------------------------------------------------- 1 | import type { jsPDF } from 'jspdf'; 2 | import type { Options } from '../types'; 3 | 4 | const pixelRatio = window.devicePixelRatio; 5 | 6 | // canvas to DataUri 7 | function getPageData({ canvas, pdf, pdfContentWidth, opts }: { 8 | canvas: HTMLCanvasElement; 9 | pdf: jsPDF; 10 | pdfContentWidth: number; 11 | opts: Options; 12 | }) { 13 | const pageData = canvas.toDataURL(opts.imageType, opts.imageQuality); 14 | const imgProps = pdf.getImageProperties(pageData); 15 | const printWidth = !!opts.autoResize 16 | ? pdfContentWidth 17 | : imgProps.width / pixelRatio; 18 | const printHeight = !!opts.autoResize 19 | ? pdfContentWidth / imgProps.width * imgProps.height 20 | : imgProps.height / pixelRatio; 21 | return { 22 | pageData, 23 | printWidth, 24 | printHeight, 25 | }; 26 | } 27 | 28 | export default getPageData; 29 | -------------------------------------------------------------------------------- /src/utils/images.ts: -------------------------------------------------------------------------------- 1 | const types: Record = { 2 | 'image/jpeg': 'JPEG', 3 | 'image/png': 'PNG', 4 | 'image/webp': 'WEBP' 5 | }; 6 | 7 | const images = function(type: string) { 8 | return types[type]; 9 | }; 10 | 11 | export default images; 12 | -------------------------------------------------------------------------------- /src/utils/joinObject.ts: -------------------------------------------------------------------------------- 1 | function isObject(v: unknown) { 2 | return v !== null && typeof v === 'object'; 3 | } 4 | 5 | function isFn(v: unknown) { 6 | return typeof v === 'function'; 7 | } 8 | 9 | export default function joinObject(obj1: any, obj2: any): T { 10 | for (let i = 0, keys = Object.keys(obj1); i < keys.length; i++) { 11 | const key = keys[i]; 12 | if (key in obj2) { 13 | const isObject_1 = isObject(obj1[key]); 14 | const isObject_2 = isObject(obj2[key]); 15 | if (isObject_1 && isObject_2) { 16 | if (isFn(obj1[key]) && isFn(obj2[key])) { 17 | if (isFn(obj1[key]) && !isFn(obj2[key])) { 18 | console.error(`[jspdf-html2canvas] config key "${key}" type invalid`); 19 | } else { 20 | obj1[key] = obj2[key]; 21 | } 22 | } else { 23 | obj1[key] = joinObject(obj1[key], obj2[key]); 24 | } 25 | } else if (isObject_2) { 26 | obj2[key].old = obj1[key]; 27 | obj1[key] = obj2[key]; 28 | } else if (isObject_1) { 29 | obj1[key].new = obj2[key]; 30 | } else { 31 | obj1[key] = obj2[key]; 32 | } 33 | delete obj2[key]; 34 | } 35 | } 36 | return Object.assign(obj1, obj2); 37 | } -------------------------------------------------------------------------------- /test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnnywang1994/jsPDF-html2canvas/c4020e1f2aa6ff4c5b0859e0e39ed75230a51719/test.png -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2015", 4 | "module": "esnext", 5 | "moduleResolution": "node", 6 | "lib": [ 7 | "dom", 8 | "dom.iterable", 9 | "esnext" 10 | ], 11 | "baseUrl": "./src", 12 | "rootDir": "./src", 13 | "outDir": "./dist", 14 | "strict": true, 15 | "esModuleInterop": true, 16 | "allowSyntheticDefaultImports": true, 17 | "forceConsistentCasingInFileNames": true, 18 | "skipLibCheck": true, 19 | "declaration": true, 20 | "paths": { 21 | "@/*": ["*"], 22 | }, 23 | }, 24 | "include": ["**/*.ts"], 25 | "exclude": ["node_modules"] 26 | } -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | const isProd = process.env.NODE_ENV === 'production'; 4 | 5 | module.exports = { 6 | mode: process.env.NODE_ENV, 7 | entry: path.join(__dirname, 'src/index.ts'), 8 | output: { 9 | path: path.join(__dirname, 'dist'), 10 | filename: isProd ? 'jspdf-html2canvas.min.js' : 'jspdf-html2canvas.js', 11 | library: { 12 | root: 'html2PDF', 13 | amd: 'jspdf-html2canvas', 14 | commonjs: 'jspdf-html2canvas' 15 | }, 16 | libraryTarget: 'umd', 17 | libraryExport: 'default' 18 | }, 19 | resolve: { 20 | extensions: [".ts", ".js"], 21 | alias: { '@': path.join(__dirname, 'src') }, 22 | }, 23 | module: { 24 | rules: [ 25 | { 26 | test: /\.ts$/, 27 | loader: 'ts-loader' 28 | } 29 | ] 30 | }, 31 | externals: { 32 | jspdf: 'jspdf', 33 | html2canvas: 'html2canvas' 34 | }, 35 | } 36 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0": 6 | version "7.22.15" 7 | resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz" 8 | integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== 9 | dependencies: 10 | regenerator-runtime "^0.14.0" 11 | 12 | "@discoveryjs/json-ext@^0.5.0": 13 | version "0.5.7" 14 | resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" 15 | integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== 16 | 17 | "@jridgewell/gen-mapping@^0.3.0": 18 | version "0.3.3" 19 | resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" 20 | integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== 21 | dependencies: 22 | "@jridgewell/set-array" "^1.0.1" 23 | "@jridgewell/sourcemap-codec" "^1.4.10" 24 | "@jridgewell/trace-mapping" "^0.3.9" 25 | 26 | "@jridgewell/resolve-uri@^3.1.0": 27 | version "3.1.1" 28 | resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" 29 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== 30 | 31 | "@jridgewell/set-array@^1.0.1": 32 | version "1.1.2" 33 | resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" 34 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 35 | 36 | "@jridgewell/source-map@^0.3.3": 37 | version "0.3.5" 38 | resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" 39 | integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== 40 | dependencies: 41 | "@jridgewell/gen-mapping" "^0.3.0" 42 | "@jridgewell/trace-mapping" "^0.3.9" 43 | 44 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": 45 | version "1.4.15" 46 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" 47 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 48 | 49 | "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": 50 | version "0.3.19" 51 | resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz" 52 | integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== 53 | dependencies: 54 | "@jridgewell/resolve-uri" "^3.1.0" 55 | "@jridgewell/sourcemap-codec" "^1.4.14" 56 | 57 | "@types/eslint-scope@^3.7.3": 58 | version "3.7.4" 59 | resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" 60 | integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== 61 | dependencies: 62 | "@types/eslint" "*" 63 | "@types/estree" "*" 64 | 65 | "@types/eslint@*": 66 | version "8.44.2" 67 | resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz" 68 | integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== 69 | dependencies: 70 | "@types/estree" "*" 71 | "@types/json-schema" "*" 72 | 73 | "@types/estree@*", "@types/estree@^1.0.0": 74 | version "1.0.1" 75 | resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz" 76 | integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== 77 | 78 | "@types/json-schema@*", "@types/json-schema@^7.0.8": 79 | version "7.0.12" 80 | resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" 81 | integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== 82 | 83 | "@types/node@*": 84 | version "20.6.0" 85 | resolved "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz" 86 | integrity sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg== 87 | 88 | "@types/raf@^3.4.0": 89 | version "3.4.0" 90 | resolved "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz" 91 | integrity sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw== 92 | 93 | "@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": 94 | version "1.11.6" 95 | resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz" 96 | integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== 97 | dependencies: 98 | "@webassemblyjs/helper-numbers" "1.11.6" 99 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 100 | 101 | "@webassemblyjs/floating-point-hex-parser@1.11.6": 102 | version "1.11.6" 103 | resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz" 104 | integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== 105 | 106 | "@webassemblyjs/helper-api-error@1.11.6": 107 | version "1.11.6" 108 | resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz" 109 | integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== 110 | 111 | "@webassemblyjs/helper-buffer@1.11.6": 112 | version "1.11.6" 113 | resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz" 114 | integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== 115 | 116 | "@webassemblyjs/helper-numbers@1.11.6": 117 | version "1.11.6" 118 | resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz" 119 | integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== 120 | dependencies: 121 | "@webassemblyjs/floating-point-hex-parser" "1.11.6" 122 | "@webassemblyjs/helper-api-error" "1.11.6" 123 | "@xtuc/long" "4.2.2" 124 | 125 | "@webassemblyjs/helper-wasm-bytecode@1.11.6": 126 | version "1.11.6" 127 | resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz" 128 | integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== 129 | 130 | "@webassemblyjs/helper-wasm-section@1.11.6": 131 | version "1.11.6" 132 | resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz" 133 | integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== 134 | dependencies: 135 | "@webassemblyjs/ast" "1.11.6" 136 | "@webassemblyjs/helper-buffer" "1.11.6" 137 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 138 | "@webassemblyjs/wasm-gen" "1.11.6" 139 | 140 | "@webassemblyjs/ieee754@1.11.6": 141 | version "1.11.6" 142 | resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz" 143 | integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== 144 | dependencies: 145 | "@xtuc/ieee754" "^1.2.0" 146 | 147 | "@webassemblyjs/leb128@1.11.6": 148 | version "1.11.6" 149 | resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz" 150 | integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== 151 | dependencies: 152 | "@xtuc/long" "4.2.2" 153 | 154 | "@webassemblyjs/utf8@1.11.6": 155 | version "1.11.6" 156 | resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz" 157 | integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== 158 | 159 | "@webassemblyjs/wasm-edit@^1.11.5": 160 | version "1.11.6" 161 | resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz" 162 | integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== 163 | dependencies: 164 | "@webassemblyjs/ast" "1.11.6" 165 | "@webassemblyjs/helper-buffer" "1.11.6" 166 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 167 | "@webassemblyjs/helper-wasm-section" "1.11.6" 168 | "@webassemblyjs/wasm-gen" "1.11.6" 169 | "@webassemblyjs/wasm-opt" "1.11.6" 170 | "@webassemblyjs/wasm-parser" "1.11.6" 171 | "@webassemblyjs/wast-printer" "1.11.6" 172 | 173 | "@webassemblyjs/wasm-gen@1.11.6": 174 | version "1.11.6" 175 | resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz" 176 | integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== 177 | dependencies: 178 | "@webassemblyjs/ast" "1.11.6" 179 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 180 | "@webassemblyjs/ieee754" "1.11.6" 181 | "@webassemblyjs/leb128" "1.11.6" 182 | "@webassemblyjs/utf8" "1.11.6" 183 | 184 | "@webassemblyjs/wasm-opt@1.11.6": 185 | version "1.11.6" 186 | resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz" 187 | integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== 188 | dependencies: 189 | "@webassemblyjs/ast" "1.11.6" 190 | "@webassemblyjs/helper-buffer" "1.11.6" 191 | "@webassemblyjs/wasm-gen" "1.11.6" 192 | "@webassemblyjs/wasm-parser" "1.11.6" 193 | 194 | "@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": 195 | version "1.11.6" 196 | resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" 197 | integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== 198 | dependencies: 199 | "@webassemblyjs/ast" "1.11.6" 200 | "@webassemblyjs/helper-api-error" "1.11.6" 201 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 202 | "@webassemblyjs/ieee754" "1.11.6" 203 | "@webassemblyjs/leb128" "1.11.6" 204 | "@webassemblyjs/utf8" "1.11.6" 205 | 206 | "@webassemblyjs/wast-printer@1.11.6": 207 | version "1.11.6" 208 | resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz" 209 | integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== 210 | dependencies: 211 | "@webassemblyjs/ast" "1.11.6" 212 | "@xtuc/long" "4.2.2" 213 | 214 | "@webpack-cli/configtest@^2.1.1": 215 | version "2.1.1" 216 | resolved "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz" 217 | integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== 218 | 219 | "@webpack-cli/info@^2.0.2": 220 | version "2.0.2" 221 | resolved "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz" 222 | integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== 223 | 224 | "@webpack-cli/serve@^2.0.5": 225 | version "2.0.5" 226 | resolved "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz" 227 | integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== 228 | 229 | "@xtuc/ieee754@^1.2.0": 230 | version "1.2.0" 231 | resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" 232 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== 233 | 234 | "@xtuc/long@4.2.2": 235 | version "4.2.2" 236 | resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" 237 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== 238 | 239 | acorn-import-assertions@^1.9.0: 240 | version "1.9.0" 241 | resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" 242 | integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== 243 | 244 | acorn@^8.7.1, acorn@^8.8.2: 245 | version "8.10.0" 246 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" 247 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== 248 | 249 | ajv-keywords@^3.5.2: 250 | version "3.5.2" 251 | resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" 252 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== 253 | 254 | ajv@^6.12.5: 255 | version "6.12.6" 256 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 257 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 258 | dependencies: 259 | fast-deep-equal "^3.1.1" 260 | fast-json-stable-stringify "^2.0.0" 261 | json-schema-traverse "^0.4.1" 262 | uri-js "^4.2.2" 263 | 264 | ansi-styles@^4.1.0: 265 | version "4.3.0" 266 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 267 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 268 | dependencies: 269 | color-convert "^2.0.1" 270 | 271 | atob@^2.1.2: 272 | version "2.1.2" 273 | resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" 274 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== 275 | 276 | base64-arraybuffer@^1.0.2: 277 | version "1.0.2" 278 | resolved "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz" 279 | integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== 280 | 281 | braces@^3.0.2: 282 | version "3.0.2" 283 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 284 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 285 | dependencies: 286 | fill-range "^7.0.1" 287 | 288 | browserslist@^4.14.5: 289 | version "4.21.10" 290 | resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz" 291 | integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== 292 | dependencies: 293 | caniuse-lite "^1.0.30001517" 294 | electron-to-chromium "^1.4.477" 295 | node-releases "^2.0.13" 296 | update-browserslist-db "^1.0.11" 297 | 298 | btoa@^1.2.1: 299 | version "1.2.1" 300 | resolved "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz" 301 | integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== 302 | 303 | buffer-from@^1.0.0: 304 | version "1.1.2" 305 | resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" 306 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 307 | 308 | caniuse-lite@^1.0.30001517: 309 | version "1.0.30001532" 310 | resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz" 311 | integrity sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw== 312 | 313 | canvg@^3.0.6: 314 | version "3.0.10" 315 | resolved "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz" 316 | integrity sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q== 317 | dependencies: 318 | "@babel/runtime" "^7.12.5" 319 | "@types/raf" "^3.4.0" 320 | core-js "^3.8.3" 321 | raf "^3.4.1" 322 | regenerator-runtime "^0.13.7" 323 | rgbcolor "^1.0.1" 324 | stackblur-canvas "^2.0.0" 325 | svg-pathdata "^6.0.3" 326 | 327 | chalk@^4.1.0: 328 | version "4.1.2" 329 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 330 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 331 | dependencies: 332 | ansi-styles "^4.1.0" 333 | supports-color "^7.1.0" 334 | 335 | chrome-trace-event@^1.0.2: 336 | version "1.0.3" 337 | resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" 338 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== 339 | 340 | clone-deep@^4.0.1: 341 | version "4.0.1" 342 | resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" 343 | integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== 344 | dependencies: 345 | is-plain-object "^2.0.4" 346 | kind-of "^6.0.2" 347 | shallow-clone "^3.0.0" 348 | 349 | color-convert@^2.0.1: 350 | version "2.0.1" 351 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 352 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 353 | dependencies: 354 | color-name "~1.1.4" 355 | 356 | color-name@~1.1.4: 357 | version "1.1.4" 358 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 359 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 360 | 361 | colorette@^2.0.14: 362 | version "2.0.20" 363 | resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" 364 | integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== 365 | 366 | commander@^10.0.1: 367 | version "10.0.1" 368 | resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" 369 | integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== 370 | 371 | commander@^2.20.0: 372 | version "2.20.3" 373 | resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" 374 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 375 | 376 | core-js@^3.6.0, core-js@^3.8.3: 377 | version "3.32.2" 378 | resolved "https://registry.npmjs.org/core-js/-/core-js-3.32.2.tgz" 379 | integrity sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ== 380 | 381 | cross-env@^7.0.2: 382 | version "7.0.3" 383 | resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" 384 | integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== 385 | dependencies: 386 | cross-spawn "^7.0.1" 387 | 388 | cross-spawn@^7.0.1, cross-spawn@^7.0.3: 389 | version "7.0.3" 390 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" 391 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 392 | dependencies: 393 | path-key "^3.1.0" 394 | shebang-command "^2.0.0" 395 | which "^2.0.1" 396 | 397 | css-line-break@^2.1.0: 398 | version "2.1.0" 399 | resolved "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz" 400 | integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w== 401 | dependencies: 402 | utrie "^1.0.2" 403 | 404 | dompurify@^2.2.0: 405 | version "2.4.7" 406 | resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz" 407 | integrity sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ== 408 | 409 | electron-to-chromium@^1.4.477: 410 | version "1.4.513" 411 | resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.513.tgz" 412 | integrity sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw== 413 | 414 | enhanced-resolve@^5.0.0, enhanced-resolve@^5.15.0: 415 | version "5.15.0" 416 | resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" 417 | integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== 418 | dependencies: 419 | graceful-fs "^4.2.4" 420 | tapable "^2.2.0" 421 | 422 | envinfo@^7.7.3: 423 | version "7.10.0" 424 | resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz" 425 | integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== 426 | 427 | es-module-lexer@^1.2.1: 428 | version "1.3.0" 429 | resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz" 430 | integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== 431 | 432 | escalade@^3.1.1: 433 | version "3.1.1" 434 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" 435 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 436 | 437 | eslint-scope@5.1.1: 438 | version "5.1.1" 439 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" 440 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 441 | dependencies: 442 | esrecurse "^4.3.0" 443 | estraverse "^4.1.1" 444 | 445 | esrecurse@^4.3.0: 446 | version "4.3.0" 447 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 448 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 449 | dependencies: 450 | estraverse "^5.2.0" 451 | 452 | estraverse@^4.1.1: 453 | version "4.3.0" 454 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" 455 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 456 | 457 | estraverse@^5.2.0: 458 | version "5.3.0" 459 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 460 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 461 | 462 | events@^3.2.0: 463 | version "3.3.0" 464 | resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" 465 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 466 | 467 | fast-deep-equal@^3.1.1: 468 | version "3.1.3" 469 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 470 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 471 | 472 | fast-json-stable-stringify@^2.0.0: 473 | version "2.1.0" 474 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 475 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 476 | 477 | fastest-levenshtein@^1.0.12: 478 | version "1.0.16" 479 | resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" 480 | integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== 481 | 482 | fflate@^0.4.8: 483 | version "0.4.8" 484 | resolved "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz" 485 | integrity sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA== 486 | 487 | fill-range@^7.0.1: 488 | version "7.0.1" 489 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 490 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 491 | dependencies: 492 | to-regex-range "^5.0.1" 493 | 494 | find-up@^4.0.0: 495 | version "4.1.0" 496 | resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" 497 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 498 | dependencies: 499 | locate-path "^5.0.0" 500 | path-exists "^4.0.0" 501 | 502 | function-bind@^1.1.1: 503 | version "1.1.1" 504 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 505 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 506 | 507 | glob-to-regexp@^0.4.1: 508 | version "0.4.1" 509 | resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" 510 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 511 | 512 | graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: 513 | version "4.2.11" 514 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" 515 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 516 | 517 | has-flag@^4.0.0: 518 | version "4.0.0" 519 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 520 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 521 | 522 | has@^1.0.3: 523 | version "1.0.3" 524 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 525 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 526 | dependencies: 527 | function-bind "^1.1.1" 528 | 529 | html2canvas@^1.0.0-rc.5, html2canvas@^1.4.1: 530 | version "1.4.1" 531 | resolved "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" 532 | integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA== 533 | dependencies: 534 | css-line-break "^2.1.0" 535 | text-segmentation "^1.0.3" 536 | 537 | import-local@^3.0.2: 538 | version "3.1.0" 539 | resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" 540 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 541 | dependencies: 542 | pkg-dir "^4.2.0" 543 | resolve-cwd "^3.0.0" 544 | 545 | interpret@^3.1.1: 546 | version "3.1.1" 547 | resolved "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz" 548 | integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== 549 | 550 | is-core-module@^2.13.0: 551 | version "2.13.0" 552 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" 553 | integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== 554 | dependencies: 555 | has "^1.0.3" 556 | 557 | is-number@^7.0.0: 558 | version "7.0.0" 559 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 560 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 561 | 562 | is-plain-object@^2.0.4: 563 | version "2.0.4" 564 | resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" 565 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 566 | dependencies: 567 | isobject "^3.0.1" 568 | 569 | isexe@^2.0.0: 570 | version "2.0.0" 571 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 572 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 573 | 574 | isobject@^3.0.1: 575 | version "3.0.1" 576 | resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" 577 | integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== 578 | 579 | jest-worker@^27.4.5: 580 | version "27.5.1" 581 | resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" 582 | integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== 583 | dependencies: 584 | "@types/node" "*" 585 | merge-stream "^2.0.0" 586 | supports-color "^8.0.0" 587 | 588 | json-parse-even-better-errors@^2.3.1: 589 | version "2.3.1" 590 | resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" 591 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 592 | 593 | json-schema-traverse@^0.4.1: 594 | version "0.4.1" 595 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 596 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 597 | 598 | jspdf@^2.5.1: 599 | version "2.5.1" 600 | resolved "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz" 601 | integrity sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA== 602 | dependencies: 603 | "@babel/runtime" "^7.14.0" 604 | atob "^2.1.2" 605 | btoa "^1.2.1" 606 | fflate "^0.4.8" 607 | optionalDependencies: 608 | canvg "^3.0.6" 609 | core-js "^3.6.0" 610 | dompurify "^2.2.0" 611 | html2canvas "^1.0.0-rc.5" 612 | 613 | kind-of@^6.0.2: 614 | version "6.0.3" 615 | resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" 616 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 617 | 618 | loader-runner@^4.2.0: 619 | version "4.3.0" 620 | resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" 621 | integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== 622 | 623 | locate-path@^5.0.0: 624 | version "5.0.0" 625 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" 626 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 627 | dependencies: 628 | p-locate "^4.1.0" 629 | 630 | lru-cache@^6.0.0: 631 | version "6.0.0" 632 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 633 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 634 | dependencies: 635 | yallist "^4.0.0" 636 | 637 | merge-stream@^2.0.0: 638 | version "2.0.0" 639 | resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" 640 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 641 | 642 | micromatch@^4.0.0: 643 | version "4.0.5" 644 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" 645 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 646 | dependencies: 647 | braces "^3.0.2" 648 | picomatch "^2.3.1" 649 | 650 | mime-db@1.52.0: 651 | version "1.52.0" 652 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" 653 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 654 | 655 | mime-types@^2.1.27: 656 | version "2.1.35" 657 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" 658 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 659 | dependencies: 660 | mime-db "1.52.0" 661 | 662 | neo-async@^2.6.2: 663 | version "2.6.2" 664 | resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" 665 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== 666 | 667 | node-releases@^2.0.13: 668 | version "2.0.13" 669 | resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" 670 | integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== 671 | 672 | p-limit@^2.2.0: 673 | version "2.3.0" 674 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" 675 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 676 | dependencies: 677 | p-try "^2.0.0" 678 | 679 | p-locate@^4.1.0: 680 | version "4.1.0" 681 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" 682 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 683 | dependencies: 684 | p-limit "^2.2.0" 685 | 686 | p-try@^2.0.0: 687 | version "2.2.0" 688 | resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" 689 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 690 | 691 | path-exists@^4.0.0: 692 | version "4.0.0" 693 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 694 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 695 | 696 | path-key@^3.1.0: 697 | version "3.1.1" 698 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 699 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 700 | 701 | path-parse@^1.0.7: 702 | version "1.0.7" 703 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 704 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 705 | 706 | performance-now@^2.1.0: 707 | version "2.1.0" 708 | resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" 709 | integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== 710 | 711 | picocolors@^1.0.0: 712 | version "1.0.0" 713 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" 714 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 715 | 716 | picomatch@^2.3.1: 717 | version "2.3.1" 718 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 719 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 720 | 721 | pkg-dir@^4.2.0: 722 | version "4.2.0" 723 | resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" 724 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 725 | dependencies: 726 | find-up "^4.0.0" 727 | 728 | punycode@^2.1.0: 729 | version "2.3.0" 730 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" 731 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== 732 | 733 | raf@^3.4.1: 734 | version "3.4.1" 735 | resolved "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz" 736 | integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== 737 | dependencies: 738 | performance-now "^2.1.0" 739 | 740 | randombytes@^2.1.0: 741 | version "2.1.0" 742 | resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" 743 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 744 | dependencies: 745 | safe-buffer "^5.1.0" 746 | 747 | rechoir@^0.8.0: 748 | version "0.8.0" 749 | resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz" 750 | integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== 751 | dependencies: 752 | resolve "^1.20.0" 753 | 754 | regenerator-runtime@^0.13.7: 755 | version "0.13.11" 756 | resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" 757 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== 758 | 759 | regenerator-runtime@^0.14.0: 760 | version "0.14.0" 761 | resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz" 762 | integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== 763 | 764 | resolve-cwd@^3.0.0: 765 | version "3.0.0" 766 | resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" 767 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 768 | dependencies: 769 | resolve-from "^5.0.0" 770 | 771 | resolve-from@^5.0.0: 772 | version "5.0.0" 773 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" 774 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 775 | 776 | resolve@^1.20.0: 777 | version "1.22.4" 778 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz" 779 | integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== 780 | dependencies: 781 | is-core-module "^2.13.0" 782 | path-parse "^1.0.7" 783 | supports-preserve-symlinks-flag "^1.0.0" 784 | 785 | rgbcolor@^1.0.1: 786 | version "1.0.1" 787 | resolved "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz" 788 | integrity sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw== 789 | 790 | safe-buffer@^5.1.0: 791 | version "5.2.1" 792 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 793 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 794 | 795 | schema-utils@^3.1.1, schema-utils@^3.2.0: 796 | version "3.3.0" 797 | resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" 798 | integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== 799 | dependencies: 800 | "@types/json-schema" "^7.0.8" 801 | ajv "^6.12.5" 802 | ajv-keywords "^3.5.2" 803 | 804 | semver@^7.3.4: 805 | version "7.5.4" 806 | resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" 807 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 808 | dependencies: 809 | lru-cache "^6.0.0" 810 | 811 | serialize-javascript@^6.0.1: 812 | version "6.0.1" 813 | resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" 814 | integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== 815 | dependencies: 816 | randombytes "^2.1.0" 817 | 818 | shallow-clone@^3.0.0: 819 | version "3.0.1" 820 | resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" 821 | integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== 822 | dependencies: 823 | kind-of "^6.0.2" 824 | 825 | shebang-command@^2.0.0: 826 | version "2.0.0" 827 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 828 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 829 | dependencies: 830 | shebang-regex "^3.0.0" 831 | 832 | shebang-regex@^3.0.0: 833 | version "3.0.0" 834 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 835 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 836 | 837 | source-map-support@~0.5.20: 838 | version "0.5.21" 839 | resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" 840 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 841 | dependencies: 842 | buffer-from "^1.0.0" 843 | source-map "^0.6.0" 844 | 845 | source-map@^0.6.0: 846 | version "0.6.1" 847 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" 848 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 849 | 850 | stackblur-canvas@^2.0.0: 851 | version "2.6.0" 852 | resolved "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.6.0.tgz" 853 | integrity sha512-8S1aIA+UoF6erJYnglGPug6MaHYGo1Ot7h5fuXx4fUPvcvQfcdw2o/ppCse63+eZf8PPidSu4v1JnmEVtEDnpg== 854 | 855 | supports-color@^7.1.0: 856 | version "7.2.0" 857 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 858 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 859 | dependencies: 860 | has-flag "^4.0.0" 861 | 862 | supports-color@^8.0.0: 863 | version "8.1.1" 864 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" 865 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 866 | dependencies: 867 | has-flag "^4.0.0" 868 | 869 | supports-preserve-symlinks-flag@^1.0.0: 870 | version "1.0.0" 871 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 872 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 873 | 874 | svg-pathdata@^6.0.3: 875 | version "6.0.3" 876 | resolved "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz" 877 | integrity sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw== 878 | 879 | tapable@^2.1.1, tapable@^2.2.0: 880 | version "2.2.1" 881 | resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" 882 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== 883 | 884 | terser-webpack-plugin@^5.3.7: 885 | version "5.3.9" 886 | resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz" 887 | integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== 888 | dependencies: 889 | "@jridgewell/trace-mapping" "^0.3.17" 890 | jest-worker "^27.4.5" 891 | schema-utils "^3.1.1" 892 | serialize-javascript "^6.0.1" 893 | terser "^5.16.8" 894 | 895 | terser@^5.16.8: 896 | version "5.19.4" 897 | resolved "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz" 898 | integrity sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g== 899 | dependencies: 900 | "@jridgewell/source-map" "^0.3.3" 901 | acorn "^8.8.2" 902 | commander "^2.20.0" 903 | source-map-support "~0.5.20" 904 | 905 | text-segmentation@^1.0.3: 906 | version "1.0.3" 907 | resolved "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz" 908 | integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw== 909 | dependencies: 910 | utrie "^1.0.2" 911 | 912 | to-regex-range@^5.0.1: 913 | version "5.0.1" 914 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 915 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 916 | dependencies: 917 | is-number "^7.0.0" 918 | 919 | ts-loader@^9.4.4: 920 | version "9.4.4" 921 | resolved "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz" 922 | integrity sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w== 923 | dependencies: 924 | chalk "^4.1.0" 925 | enhanced-resolve "^5.0.0" 926 | micromatch "^4.0.0" 927 | semver "^7.3.4" 928 | 929 | typescript@^5.2.2: 930 | version "5.2.2" 931 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz" 932 | integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== 933 | 934 | update-browserslist-db@^1.0.11: 935 | version "1.0.11" 936 | resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" 937 | integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== 938 | dependencies: 939 | escalade "^3.1.1" 940 | picocolors "^1.0.0" 941 | 942 | uri-js@^4.2.2: 943 | version "4.4.1" 944 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" 945 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 946 | dependencies: 947 | punycode "^2.1.0" 948 | 949 | utrie@^1.0.2: 950 | version "1.0.2" 951 | resolved "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz" 952 | integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw== 953 | dependencies: 954 | base64-arraybuffer "^1.0.2" 955 | 956 | watchpack@^2.4.0: 957 | version "2.4.0" 958 | resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" 959 | integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== 960 | dependencies: 961 | glob-to-regexp "^0.4.1" 962 | graceful-fs "^4.1.2" 963 | 964 | webpack-cli@^5.1.4: 965 | version "5.1.4" 966 | resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz" 967 | integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== 968 | dependencies: 969 | "@discoveryjs/json-ext" "^0.5.0" 970 | "@webpack-cli/configtest" "^2.1.1" 971 | "@webpack-cli/info" "^2.0.2" 972 | "@webpack-cli/serve" "^2.0.5" 973 | colorette "^2.0.14" 974 | commander "^10.0.1" 975 | cross-spawn "^7.0.3" 976 | envinfo "^7.7.3" 977 | fastest-levenshtein "^1.0.12" 978 | import-local "^3.0.2" 979 | interpret "^3.1.1" 980 | rechoir "^0.8.0" 981 | webpack-merge "^5.7.3" 982 | 983 | webpack-merge@^5.7.3: 984 | version "5.9.0" 985 | resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz" 986 | integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== 987 | dependencies: 988 | clone-deep "^4.0.1" 989 | wildcard "^2.0.0" 990 | 991 | webpack-sources@^3.2.3: 992 | version "3.2.3" 993 | resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" 994 | integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== 995 | 996 | webpack@^5.88.2: 997 | version "5.88.2" 998 | resolved "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz" 999 | integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== 1000 | dependencies: 1001 | "@types/eslint-scope" "^3.7.3" 1002 | "@types/estree" "^1.0.0" 1003 | "@webassemblyjs/ast" "^1.11.5" 1004 | "@webassemblyjs/wasm-edit" "^1.11.5" 1005 | "@webassemblyjs/wasm-parser" "^1.11.5" 1006 | acorn "^8.7.1" 1007 | acorn-import-assertions "^1.9.0" 1008 | browserslist "^4.14.5" 1009 | chrome-trace-event "^1.0.2" 1010 | enhanced-resolve "^5.15.0" 1011 | es-module-lexer "^1.2.1" 1012 | eslint-scope "5.1.1" 1013 | events "^3.2.0" 1014 | glob-to-regexp "^0.4.1" 1015 | graceful-fs "^4.2.9" 1016 | json-parse-even-better-errors "^2.3.1" 1017 | loader-runner "^4.2.0" 1018 | mime-types "^2.1.27" 1019 | neo-async "^2.6.2" 1020 | schema-utils "^3.2.0" 1021 | tapable "^2.1.1" 1022 | terser-webpack-plugin "^5.3.7" 1023 | watchpack "^2.4.0" 1024 | webpack-sources "^3.2.3" 1025 | 1026 | which@^2.0.1: 1027 | version "2.0.2" 1028 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1029 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1030 | dependencies: 1031 | isexe "^2.0.0" 1032 | 1033 | wildcard@^2.0.0: 1034 | version "2.0.1" 1035 | resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" 1036 | integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== 1037 | 1038 | yallist@^4.0.0: 1039 | version "4.0.0" 1040 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 1041 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1042 | --------------------------------------------------------------------------------