diff --git a/CHANGELOG.md b/CHANGELOG.md index 610ff0c..ad866e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,24 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [6.0.0](https://github.com/webpack-contrib/compression-webpack-plugin/compare/v5.0.2...v6.0.0) (2020-09-14) + + +### ⚠ BREAKING CHANGES + +* default value of the `filename` option was changed to `"[path][base].gz"` +* removed the `[dir]` placeholder, please use the `[path]` placeholder +* the `Function` type of the `filename` option should return value with placeholders, please see an [example](https://github.com/webpack-contrib/compression-webpack-plugin#function-1) + +### Features + +* added `[fragment]`, `[base]` and `[path]` placeholders for the `filename` option + +### Bug Fixes + +* caching ([#194](https://github.com/webpack-contrib/compression-webpack-plugin/issues/194)) ([9de2a88](https://github.com/webpack-contrib/compression-webpack-plugin/commit/9de2a88ccb7b16a84a4e1e08ae0889bc589a0089)) +* respect `immutable` flag for assets + ### [5.0.2](https://github.com/webpack-contrib/compression-webpack-plugin/compare/v5.0.1...v5.0.2) (2020-09-02) diff --git a/README.md b/README.md index b269022..231306c 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ And run `webpack` via your preferred method. | **[`compressionOptions`](#compressionoptions)** | `{Object}` | `{ level: 9 }` | Compression options for `algorithm` | | **[`threshold`](#threshold)** | `{Number}` | `0` | Only assets bigger than this size are processed (in bytes) | | **[`minRatio`](#minratio)** | `{Number}` | `0.8` | Only assets that compress better than this ratio are processed (`minRatio = Compressed Size / Original Size`) | -| **[`filename`](#filename)** | `{String\|Function}` | `[path].gz` | The target asset filename. | +| **[`filename`](#filename)** | `{String\|Function}` | `[base].gz` | The target asset filename. | | **[`cache`](#cache)** | `{Boolean}` | `true` | Enable file caching | ### `test` @@ -230,18 +230,27 @@ module.exports = { ### `filename` Type: `String|Function` -Default: `[path].gz[query]` +Default: `"[path][base].gz"` The target asset filename. #### `String` -`[file]` is replaced with the original asset filename. -`[path]` is replaced with the path of the original asset. -`[dir]` is replaced with the directory of the original asset. -`[name]` is replaced with the filename of the original asset. -`[ext]` is replaced with the extension of the original asset. -`[query]` is replaced with the query. +For example we have `assets/images/image.png?foo=bar#hash`: + +`[path]` is replaced with the directories to the original asset, included trailing `/` (`assets/images/`). + +`[file]` is replaced with the path of original asset (`assets/images/image.png`). + +`[base]` is replaced with the base (`[name]` + `[ext]`) of the original asset (`image.png`). + +`[name]` is replaced with the name of the original asset (`image`). + +`[ext]` is replaced with the extension of the original asset, included `.` (`.png`). + +`[query]` is replaced with the query of the original asset, included `?` (`?foo=bar`). + +`[fragment]` is replaced with the fragment (in the concept of URL it is called `hash`) of the original asset (`#hash`). **webpack.config.js** @@ -263,11 +272,14 @@ module.exports = { module.exports = { plugins: [ new CompressionPlugin({ - filename(info) { - // info.file is the original asset filename - // info.path is the path of the original asset - // info.query is the query - return `${info.path}.gz${info.query}`; + filename(pathData) { + // The `pathData` argument contains all placeholders - `path`/`name`/`ext`/etc + // Available properties described above, for the `String` notation + if (/\.svg$/.test(pathData.file)) { + return 'assets/svg/[path][base].gz'; + } + + return 'assets/js/[path][base].gz'; }, }), ], diff --git a/package-lock.json b/package-lock.json index e860bcc..7965f55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,13 @@ { "name": "compression-webpack-plugin", - "version": "5.0.2", + "version": "6.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/cli": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.10.5.tgz", - "integrity": "sha512-j9H9qSf3kLdM0Ao3aGPbGZ73mEA9XazuupcS6cDGWuiyAcANoguhP0r2Lx32H5JGw4sSSoHG3x/mxVnHgvOoyA==", + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.11.6.tgz", + "integrity": "sha512-+w7BZCvkewSmaRM6H4L2QM3RL90teqEIHDIFXAmrW33+0jhlymnDAEdqVeCZATvxhQuio1ifoGVlJJbIiH9Ffg==", "dev": true, "requires": { "chokidar": "^2.1.8", @@ -74,19 +74,19 @@ } }, "@babel/core": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.4.tgz", - "integrity": "sha512-5deljj5HlqRXN+5oJTY7Zs37iH3z3b++KjiKtIsJy1NrjOOVSEaJHEetLBhyu0aQOSNNZ/0IuEAan9GzRuDXHg==", + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", + "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.4", + "@babel/generator": "^7.11.6", "@babel/helper-module-transforms": "^7.11.0", "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.4", + "@babel/parser": "^7.11.5", "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.0", - "@babel/types": "^7.11.0", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -127,12 +127,12 @@ } }, "@babel/generator": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz", - "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==", + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", + "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", "dev": true, "requires": { - "@babel/types": "^7.11.0", + "@babel/types": "^7.11.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -409,9 +409,9 @@ } }, "@babel/parser": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", - "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", + "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { @@ -989,9 +989,9 @@ } }, "@babel/preset-env": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", - "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.5.tgz", + "integrity": "sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==", "dev": true, "requires": { "@babel/compat-data": "^7.11.0", @@ -1056,7 +1056,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.10.4", "@babel/plugin-transform-unicode-regex": "^7.10.4", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.0", + "@babel/types": "^7.11.5", "browserslist": "^4.12.0", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", @@ -1073,9 +1073,9 @@ } }, "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1106,17 +1106,17 @@ } }, "@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", + "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", + "@babel/generator": "^7.11.5", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.0", - "@babel/types": "^7.11.0", + "@babel/parser": "^7.11.5", + "@babel/types": "^7.11.5", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" @@ -1140,9 +1140,9 @@ } }, "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", + "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -1167,16 +1167,16 @@ } }, "@commitlint/cli": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-10.0.0.tgz", - "integrity": "sha512-a+dLjNovvMyom0GNcKj9ebmgtbJEKuhJuqwPUmfNy3yPoM4h12b3hjVOS33IyvpbKmlYUJg8dgcr4S5FhFvhFg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-11.0.0.tgz", + "integrity": "sha512-YWZWg1DuqqO5Zjh7vUOeSX76vm0FFyz4y0cpGMFhrhvUi5unc4IVfCXZ6337R9zxuBtmveiRuuhQqnRRer+13g==", "dev": true, "requires": { - "@babel/runtime": "^7.9.6", - "@commitlint/format": "^10.0.0", - "@commitlint/lint": "^10.0.0", - "@commitlint/load": "^10.0.0", - "@commitlint/read": "^10.0.0", + "@babel/runtime": "^7.11.2", + "@commitlint/format": "^11.0.0", + "@commitlint/lint": "^11.0.0", + "@commitlint/load": "^11.0.0", + "@commitlint/read": "^11.0.0", "chalk": "4.1.0", "core-js": "^3.6.1", "get-stdin": "8.0.0", @@ -1228,9 +1228,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -1239,37 +1239,37 @@ } }, "@commitlint/config-conventional": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-10.0.0.tgz", - "integrity": "sha512-M9l7hh2a1GB9nQ/Gm+aDLGPmzGdpgxqJoSmrbTxDlapJDyaL7FPe5aQf66F50Eq3j0bmaRaJihFCA6mIUBQAag==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-11.0.0.tgz", + "integrity": "sha512-SNDRsb5gLuDd2PL83yCOQX6pE7gevC79UPFx+GLbLfw6jGnnbO9/tlL76MLD8MOViqGbo7ZicjChO9Gn+7tHhA==", "dev": true, "requires": { "conventional-changelog-conventionalcommits": "^4.3.1" } }, "@commitlint/ensure": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-10.0.0.tgz", - "integrity": "sha512-OBlv6Hw91u4Gqz4ocKO7IyIvQ6ZmKbJaLFf8MD0EOH3Prn0aatiiqUB0+paBELKt3yWdwQNYI8ZkzZWtj4EcYw==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-11.0.0.tgz", + "integrity": "sha512-/T4tjseSwlirKZdnx4AuICMNNlFvRyPQimbZIOYujp9DSO6XRtOy9NrmvWujwHsq9F5Wb80QWi4WMW6HMaENug==", "dev": true, "requires": { - "@commitlint/types": "^10.0.0", + "@commitlint/types": "^11.0.0", "lodash": "^4.17.19" } }, "@commitlint/execute-rule": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-10.0.0.tgz", - "integrity": "sha512-vRIp6Cwy+C1dOh5VAcoBks+8UI+rpxOB5cwhU/RQZhlVd2hgFiAPXnyKWMOB7HDO9XFI5amLJehvaaDI+eLDnA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-11.0.0.tgz", + "integrity": "sha512-g01p1g4BmYlZ2+tdotCavrMunnPFPhTzG1ZiLKTCYrooHRbmvqo42ZZn4QMStUEIcn+jfLb6BRZX3JzIwA1ezQ==", "dev": true }, "@commitlint/format": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-10.0.0.tgz", - "integrity": "sha512-EpCmMCcjloeaoUtgmzlpYmIYJzAvZhYfLJ7YCrOlnmt5/MAeywuNgxcr/EM2xHgEKotTWqRQdiIgAtkIWHhgrQ==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-11.0.0.tgz", + "integrity": "sha512-bpBLWmG0wfZH/svzqD1hsGTpm79TKJWcf6EXZllh2J/LSSYKxGlv967lpw0hNojme0sZd4a/97R3qA2QHWWSLg==", "dev": true, "requires": { - "@commitlint/types": "^10.0.0", + "@commitlint/types": "^11.0.0", "chalk": "^4.0.0" }, "dependencies": { @@ -1315,9 +1315,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -1326,12 +1326,12 @@ } }, "@commitlint/is-ignored": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-10.0.0.tgz", - "integrity": "sha512-OLjUs/0HaQGh5iSqv/jF/TXqQ8sJ5VShujTmADSvnGTyruZu+d1Hfgw9QM1FMjzcx2NpMDsX/EFBU0ZMx9hmEg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-11.0.0.tgz", + "integrity": "sha512-VLHOUBN+sOlkYC4tGuzE41yNPO2w09sQnOpfS+pSPnBFkNUUHawEuA44PLHtDvQgVuYrMAmSWFQpWabMoP5/Xg==", "dev": true, "requires": { - "@commitlint/types": "^10.0.0", + "@commitlint/types": "^11.0.0", "semver": "7.3.2" }, "dependencies": { @@ -1344,26 +1344,26 @@ } }, "@commitlint/lint": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-10.0.0.tgz", - "integrity": "sha512-KcDzOMQYVLziWIXNedTDnf5LS9NMYKzcdzjuCH8jTZLx/oX3kuOVB0jYZHVaKPwjj0miZSOhONqIMJDlLZpn+g==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-11.0.0.tgz", + "integrity": "sha512-Q8IIqGIHfwKr8ecVZyYh6NtXFmKw4YSEWEr2GJTB/fTZXgaOGtGFZDWOesCZllQ63f1s/oWJYtVv5RAEuwN8BQ==", "dev": true, "requires": { - "@commitlint/is-ignored": "^10.0.0", - "@commitlint/parse": "^10.0.0", - "@commitlint/rules": "^10.0.0", - "@commitlint/types": "^10.0.0" + "@commitlint/is-ignored": "^11.0.0", + "@commitlint/parse": "^11.0.0", + "@commitlint/rules": "^11.0.0", + "@commitlint/types": "^11.0.0" } }, "@commitlint/load": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-10.0.0.tgz", - "integrity": "sha512-pUwGshEpxkU2R9U3O5hwHU4VT0zkyIs5gzGrGbR2c/aurI9qe00LZ9DquYVVYVmfwG6UaQpatCG4TrXNXIj5Mg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-11.0.0.tgz", + "integrity": "sha512-t5ZBrtgvgCwPfxmG811FCp39/o3SJ7L+SNsxFL92OR4WQxPcu6c8taD0CG2lzOHGuRyuMxZ7ps3EbngT2WpiCg==", "dev": true, "requires": { - "@commitlint/execute-rule": "^10.0.0", - "@commitlint/resolve-extends": "^10.0.0", - "@commitlint/types": "^10.0.0", + "@commitlint/execute-rule": "^11.0.0", + "@commitlint/resolve-extends": "^11.0.0", + "@commitlint/types": "^11.0.0", "chalk": "4.1.0", "cosmiconfig": "^7.0.0", "lodash": "^4.17.19", @@ -1412,9 +1412,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -1423,15 +1423,15 @@ } }, "@commitlint/message": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-10.0.0.tgz", - "integrity": "sha512-2ZDgHc6v3t1C/zkAkRwPDIRVD/jbrQAu+Iqe7VH1/Y//cJhwte6OuSGfs2Qze/6gh+/RbvUIBskR8OUIY6VTrA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-11.0.0.tgz", + "integrity": "sha512-01ObK/18JL7PEIE3dBRtoMmU6S3ecPYDTQWWhcO+ErA3Ai0KDYqV5VWWEijdcVafNpdeUNrEMigRkxXHQLbyJA==", "dev": true }, "@commitlint/parse": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-10.0.0.tgz", - "integrity": "sha512-xIBD0w85FVhrlX4pI/m4xF9MvTQNMbvilPSr42yIds2xn7GJcJidN4Z8O6qCqcjwl6f3ruQ8G8Pdi3PggVjZrw==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-11.0.0.tgz", + "integrity": "sha512-DekKQAIYWAXIcyAZ6/PDBJylWJ1BROTfDIzr9PMVxZRxBPc1gW2TG8fLgjZfBP5mc0cuthPkVi91KQQKGri/7A==", "dev": true, "requires": { "conventional-changelog-angular": "^5.0.0", @@ -1439,20 +1439,20 @@ } }, "@commitlint/read": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-10.0.0.tgz", - "integrity": "sha512-ARebcoJMDNtlCTV9jpSacN9gCvua+JiGQLQlq4PsaNo/e4hyyIWu+wOEAXO8IhD5xycoTBaJRVWzgXRncEyrkg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-11.0.0.tgz", + "integrity": "sha512-37V0V91GSv0aDzMzJioKpCoZw6l0shk7+tRG8RkW1GfZzUIytdg3XqJmM+IaIYpaop0m6BbZtfq+idzUwJnw7g==", "dev": true, "requires": { - "@commitlint/top-level": "^10.0.0", + "@commitlint/top-level": "^11.0.0", "fs-extra": "^9.0.0", "git-raw-commits": "^2.0.0" } }, "@commitlint/resolve-extends": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-10.0.0.tgz", - "integrity": "sha512-ltj4LvdCEJeYzWdzFS9AhLMkc4rweKvfju/JYBgbLqFx7lAGz3e2Wub0uuuWuLBJqCjL7UJbYiA0T2Hzhhd91Q==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-11.0.0.tgz", + "integrity": "sha512-WinU6Uv6L7HDGLqn/To13KM1CWvZ09VHZqryqxXa1OY+EvJkfU734CwnOEeNlSCK7FVLrB4kmodLJtL1dkEpXw==", "dev": true, "requires": { "import-fresh": "^3.0.0", @@ -1462,27 +1462,27 @@ } }, "@commitlint/rules": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-10.0.0.tgz", - "integrity": "sha512-myHG8pgUHIOtceJsALRRXvYBuLbTwWl7/6soDrIJudDhKsyhV3yFtAbRX40pujg25IlAUra6nuy8JDU86bVxog==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-11.0.0.tgz", + "integrity": "sha512-2hD9y9Ep5ZfoNxDDPkQadd2jJeocrwC4vJ98I0g8pNYn/W8hS9+/FuNpolREHN8PhmexXbkjrwyQrWbuC0DVaA==", "dev": true, "requires": { - "@commitlint/ensure": "^10.0.0", - "@commitlint/message": "^10.0.0", - "@commitlint/to-lines": "^10.0.0", - "@commitlint/types": "^10.0.0" + "@commitlint/ensure": "^11.0.0", + "@commitlint/message": "^11.0.0", + "@commitlint/to-lines": "^11.0.0", + "@commitlint/types": "^11.0.0" } }, "@commitlint/to-lines": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-10.0.0.tgz", - "integrity": "sha512-qUHuYiLgE7ioBRgHUR2EOwXuEhb2TnAktEc9NBZcQNzfqu5nbOaf2iOBx5mlDK0heTJyTjLboAmzojXxuqJNcA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-11.0.0.tgz", + "integrity": "sha512-TIDTB0Y23jlCNubDROUVokbJk6860idYB5cZkLWcRS9tlb6YSoeLn1NLafPlrhhkkkZzTYnlKYzCVrBNVes1iw==", "dev": true }, "@commitlint/top-level": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-10.0.0.tgz", - "integrity": "sha512-FHlDD31gTQptInSuRGQt/9fNiSQ4euBZtcBZD4NImCtQCkwBP1cyxClN6wr9DmqISG0KSJybReF4z8rm5znNDA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-11.0.0.tgz", + "integrity": "sha512-O0nFU8o+Ws+py5pfMQIuyxOtfR/kwtr5ybqTvR+C2lUPer2x6lnQU+OnfD7hPM+A+COIUZWx10mYQvkR3MmtAA==", "dev": true, "requires": { "find-up": "^5.0.0" @@ -1528,11 +1528,73 @@ } }, "@commitlint/types": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-10.0.0.tgz", - "integrity": "sha512-b7uumSfDI1guYnNc11BpkTZjiY7gC1DPedeUa0r+csd/1DiFyRo4oNOaxXHve0cC4NzaHaOHa0aPktWMTYJlVQ==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-11.0.0.tgz", + "integrity": "sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==", "dev": true }, + "@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "@gfx/zopfli": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/@gfx/zopfli/-/zopfli-1.0.15.tgz", @@ -1623,9 +1685,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -1634,9 +1696,9 @@ } }, "@jest/core": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.4.1.tgz", - "integrity": "sha512-EFziH1tJC5N8xb8OjUcQgyWdezJh6+zBX5p+9S7HR1jzBVeG8jCE/Edp7yqxW/cToLG/QKj8qrpox+HV9Qw1rw==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.4.2.tgz", + "integrity": "sha512-sDva7YkeNprxJfepOctzS8cAk9TOekldh+5FhVuXS40+94SHbiicRO1VV2tSoRtgIo+POs/Cdyf8p76vPTd6dg==", "dev": true, "requires": { "@jest/console": "^26.3.0", @@ -1650,17 +1712,17 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-changed-files": "^26.3.0", - "jest-config": "^26.4.1", + "jest-config": "^26.4.2", "jest-haste-map": "^26.3.0", "jest-message-util": "^26.3.0", "jest-regex-util": "^26.0.0", "jest-resolve": "^26.4.0", - "jest-resolve-dependencies": "^26.4.1", - "jest-runner": "^26.4.1", - "jest-runtime": "^26.4.1", - "jest-snapshot": "^26.4.1", + "jest-resolve-dependencies": "^26.4.2", + "jest-runner": "^26.4.2", + "jest-runtime": "^26.4.2", + "jest-snapshot": "^26.4.2", "jest-util": "^26.3.0", - "jest-validate": "^26.4.0", + "jest-validate": "^26.4.2", "jest-watcher": "^26.3.0", "micromatch": "^4.0.2", "p-each-series": "^2.1.0", @@ -1751,9 +1813,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -1797,14 +1859,14 @@ } }, "@jest/globals": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.4.1.tgz", - "integrity": "sha512-gdsHefnwjck+AwDUwW+6rmctmKEcZEEZ4F3PB5kKnub7r0dUoN1KVSyNRXtB5qpZgRYESnxgDXhpw/XYKIsAeg==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.4.2.tgz", + "integrity": "sha512-Ot5ouAlehhHLRhc+sDz2/9bmNv9p5ZWZ9LE1pXGGTCXBasmi5jnYjlgYcYt03FBwLmZXCZ7GrL29c33/XRQiow==", "dev": true, "requires": { "@jest/environment": "^26.3.0", "@jest/types": "^26.3.0", - "expect": "^26.4.1" + "expect": "^26.4.2" } }, "@jest/reporters": { @@ -1888,9 +1950,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -1922,16 +1984,16 @@ } }, "@jest/test-sequencer": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.4.1.tgz", - "integrity": "sha512-YR4PNPu1RVHxyv/HSQMjc+pBEWa6wuM7xbEX/u5M5FFg6ZM6m00m7Jf0fjRxGN6hZlY5vECmNhJu/kvJLrxR8w==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.4.2.tgz", + "integrity": "sha512-83DRD8N3M0tOhz9h0bn6Kl6dSp+US6DazuVF8J9m21WAp5x7CqSMaNycMP0aemC/SH/pDQQddbsfHRTBXVUgog==", "dev": true, "requires": { "@jest/test-result": "^26.3.0", "graceful-fs": "^4.2.4", "jest-haste-map": "^26.3.0", - "jest-runner": "^26.4.1", - "jest-runtime": "^26.4.1" + "jest-runner": "^26.4.2", + "jest-runtime": "^26.4.2" } }, "@jest/transform": { @@ -2039,9 +2101,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -2113,9 +2175,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -2208,9 +2270,9 @@ } }, "@types/babel__traverse": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.13.tgz", - "integrity": "sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.14.tgz", + "integrity": "sha512-8w9szzKs14ZtBVuP6Wn7nMLRJ0D6dfB0VEBEyRgxrZ/Ln49aNMykrghM2FaNn4FJRzNppCSa0Rv9pBRM5Xc3wg==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -2266,9 +2328,9 @@ } }, "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" }, "@types/json5": { "version": "0.0.29", @@ -2289,9 +2351,9 @@ "dev": true }, "@types/node": { - "version": "14.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.0.tgz", - "integrity": "sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA==", + "version": "14.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.10.1.tgz", + "integrity": "sha512-aYNbO+FZ/3KGeQCEkNhHFRIzBOUgc7QvcVNKXbfnhDkSfwUv91JsQQa10rDgKSTSLkXZ1UIyPe4FJJNVgw1xWQ==", "dev": true }, "@types/normalize-package-data": { @@ -2307,9 +2369,9 @@ "dev": true }, "@types/prettier": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.0.2.tgz", - "integrity": "sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.0.tgz", + "integrity": "sha512-hiYA88aHiEIgDmeKlsyVsuQdcFn3Z2VuFd/Xm/HCnGnPD8UFU5BM128uzzRVVGEzKDKYUrRsRH9S2o+NUy/3IA==", "dev": true }, "@types/stack-utils": { @@ -2565,9 +2627,9 @@ } }, "abab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", - "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, "acorn": { @@ -2587,9 +2649,9 @@ } }, "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true }, "acorn-walk": { @@ -2614,9 +2676,9 @@ } }, "ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "version": "6.12.5", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", + "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2748,6 +2810,27 @@ "define-properties": "^1.1.3", "es-abstract": "^1.17.0", "is-string": "^1.0.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "array-union": { @@ -2770,6 +2853,27 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "arrify": { @@ -3012,9 +3116,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -3340,15 +3444,15 @@ } }, "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", + "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", "escalade": "^3.0.2", - "node-releases": "^1.1.60" + "node-releases": "^1.1.61" } }, "bser": { @@ -3454,9 +3558,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001117", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001117.tgz", - "integrity": "sha512-4tY0Fatzdx59kYjQs+bNxUwZB03ZEBgVmJ1UkFPz/Q8OLiUUbjct2EdpnXj0fvFTPej2EkbPIG0w8BWsjAyk1Q==", + "version": "1.0.30001129", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001129.tgz", + "integrity": "sha512-9945fTVKS810DZITpsAbuhQG7Lam0tEfVbZlsBaCFZaszepbryrArS05PWmJSBQ6mta+v9iz0pUIAbW1eBILIg==", "dev": true }, "capture-exit": { @@ -5017,9 +5121,9 @@ } }, "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { "is-obj": "^2.0.0" @@ -5136,9 +5240,9 @@ } }, "electron-to-chromium": { - "version": "1.3.540", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.540.tgz", - "integrity": "sha512-IoGiZb8SMqTtkDYJtP8EtCdvv3VMtd1QoTlypO2RUBxRq/Wk0rU5IzhzhMckPaC9XxDqUvWsL0XKOBhTiYVN3w==", + "version": "1.3.567", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.567.tgz", + "integrity": "sha512-1aKkw0Hha1Bw9JA5K5PT5eFXC/TXbkJvUfNSNEciPUMgSIsRJZM1hF2GUEAGZpAbgvd8En21EA+Lv820KOhvqA==", "dev": true }, "elliptic": { @@ -5242,9 +5346,9 @@ } }, "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "version": "1.18.0-next.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.0.tgz", + "integrity": "sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", @@ -5252,8 +5356,9 @@ "has": "^1.0.3", "has-symbols": "^1.0.1", "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", "object-keys": "^1.1.1", "object.assign": "^4.1.0", "string.prototype.trimend": "^1.0.1", @@ -5344,12 +5449,13 @@ } }, "eslint": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.7.0.tgz", - "integrity": "sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.9.0.tgz", + "integrity": "sha512-V6QyhX21+uXp4T+3nrNfI3hQNBDa/P8ga7LoQOenwrlEFXrEnUEE+ok1dMtaS3b6rmLXhT1TkTIsG75HMLbknA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -5359,7 +5465,7 @@ "eslint-scope": "^5.1.0", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^1.3.0", - "espree": "^7.2.0", + "espree": "^7.3.0", "esquery": "^1.2.0", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", @@ -5512,9 +5618,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -5753,12 +5859,12 @@ } }, "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, @@ -5778,12 +5884,12 @@ "dev": true }, "espree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.2.0.tgz", - "integrity": "sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", "dev": true, "requires": { - "acorn": "^7.3.1", + "acorn": "^7.4.0", "acorn-jsx": "^5.2.0", "eslint-visitor-keys": "^1.3.0" } @@ -5812,12 +5918,20 @@ } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "estraverse": { @@ -5911,15 +6025,15 @@ } }, "expect": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.4.1.tgz", - "integrity": "sha512-PnsyF/VmPRH/HAWELjrIAgQ5h+4JLTiomA1A2djx+jXrCQzQ/4egZYBOEx9hShoX+mQLS4enYk6Ouxk8b4kcEw==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.4.2.tgz", + "integrity": "sha512-IlJ3X52Z0lDHm7gjEp+m76uX46ldH5VpqmU0006vqDju/285twh7zaWMRhs67VpQhBwjjMchk+p5aA0VkERCAA==", "dev": true, "requires": { "@jest/types": "^26.3.0", "ansi-styles": "^4.0.0", "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.4.1", + "jest-matcher-utils": "^26.4.2", "jest-message-util": "^26.3.0", "jest-regex-util": "^26.0.0" }, @@ -6176,13 +6290,13 @@ } }, "file-loader": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz", - "integrity": "sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.0.tgz", + "integrity": "sha512-26qPdHyTsArQ6gU4P1HJbAbnFTyT2r0pG7czh1GFAd9TZbj0n94wWbupgixZH/ET/meqi2/5+F7DhW4OAXD+Lg==", "dev": true, "requires": { "loader-utils": "^2.0.0", - "schema-utils": "^2.6.5" + "schema-utils": "^2.7.1" }, "dependencies": { "loader-utils": { @@ -7044,15 +7158,15 @@ "dev": true }, "husky": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz", - "integrity": "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.0.tgz", + "integrity": "sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA==", "dev": true, "requires": { "chalk": "^4.0.0", "ci-info": "^2.0.0", "compare-versions": "^3.6.0", - "cosmiconfig": "^6.0.0", + "cosmiconfig": "^7.0.0", "find-versions": "^3.2.0", "opencollective-postinstall": "^2.0.2", "pkg-dir": "^4.2.0", @@ -7096,19 +7210,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -7122,9 +7223,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -7286,9 +7387,9 @@ "dev": true }, "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.1.tgz", + "integrity": "sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg==", "dev": true }, "is-ci": { @@ -7391,6 +7492,12 @@ "is-extglob": "^2.1.1" } }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -7583,9 +7690,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -7632,14 +7739,14 @@ } }, "jest": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.4.1.tgz", - "integrity": "sha512-q+az+ZXFOTxTlD6BRIMcZC+a33O9lsryV4Wo9gU4D/AI+Y6KKgVRCmyzpc4H2gWv0rn45lACukmMS2uSB7e1LA==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.4.2.tgz", + "integrity": "sha512-LLCjPrUh98Ik8CzW8LLVnSCfLaiY+wbK53U7VxnFSX7Q+kWC4noVeDvGWIFw0Amfq1lq2VfGm7YHWSLBV62MJw==", "dev": true, "requires": { - "@jest/core": "^26.4.1", + "@jest/core": "^26.4.2", "import-local": "^3.0.2", - "jest-cli": "^26.4.1" + "jest-cli": "^26.4.2" }, "dependencies": { "ansi-styles": { @@ -7684,12 +7791,12 @@ "dev": true }, "jest-cli": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.4.1.tgz", - "integrity": "sha512-c6px+IOO0OsZ7X/uSr65wcjZnd7NYNUDWFT5OETyCnJRkkwoTER7gneRDrwgr3Ex5+gCGO7D/IMWxUHB/L624A==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.4.2.tgz", + "integrity": "sha512-zb+lGd/SfrPvoRSC/0LWdaWCnscXc1mGYW//NP4/tmBvRPT3VntZ2jtKUONsRi59zc5JqmsSajA9ewJKFYp8Cw==", "dev": true, "requires": { - "@jest/core": "^26.4.1", + "@jest/core": "^26.4.2", "@jest/test-result": "^26.3.0", "@jest/types": "^26.3.0", "chalk": "^4.0.0", @@ -7697,17 +7804,17 @@ "graceful-fs": "^4.2.4", "import-local": "^3.0.2", "is-ci": "^2.0.0", - "jest-config": "^26.4.1", + "jest-config": "^26.4.2", "jest-util": "^26.3.0", - "jest-validate": "^26.4.0", + "jest-validate": "^26.4.2", "prompts": "^2.0.1", "yargs": "^15.3.1" } }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -7811,13 +7918,13 @@ } }, "jest-config": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.4.1.tgz", - "integrity": "sha512-0kUnVceEax0sYN+wdkNYF7fxjYKbsvmKmjVWwJvsSYA2p94bIL6wSy3oehewev7L9Dp/FDZFhmc9dyOoavdT6A==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.4.2.tgz", + "integrity": "sha512-QBf7YGLuToiM8PmTnJEdRxyYy3mHWLh24LJZKVdXZ2PNdizSe1B/E8bVm+HYcjbEzGuVXDv/di+EzdO/6Gq80A==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.4.1", + "@jest/test-sequencer": "^26.4.2", "@jest/types": "^26.3.0", "babel-jest": "^26.3.0", "chalk": "^4.0.0", @@ -7827,13 +7934,13 @@ "jest-environment-jsdom": "^26.3.0", "jest-environment-node": "^26.3.0", "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.4.1", + "jest-jasmine2": "^26.4.2", "jest-regex-util": "^26.0.0", "jest-resolve": "^26.4.0", "jest-util": "^26.3.0", - "jest-validate": "^26.4.0", + "jest-validate": "^26.4.2", "micromatch": "^4.0.2", - "pretty-format": "^26.4.0" + "pretty-format": "^26.4.2" }, "dependencies": { "ansi-styles": { @@ -7912,9 +8019,9 @@ } }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -7932,15 +8039,15 @@ } }, "jest-diff": { - "version": "26.4.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.4.0.tgz", - "integrity": "sha512-wwC38HlOW+iTq6j5tkj/ZamHn6/nrdcEOc/fKaVILNtN2NLWGdkfRaHWwfNYr5ehaLvuoG2LfCZIcWByVj0gjg==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.4.2.tgz", + "integrity": "sha512-6T1XQY8U28WH0Z5rGpQ+VqZSZz8EN8rZcBtfvXaOkbwxIEeRre6qnuZQlbY1AJ4MKDxQF8EkrCvK+hL/VkyYLQ==", "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^26.3.0", "jest-get-type": "^26.3.0", - "pretty-format": "^26.4.0" + "pretty-format": "^26.4.2" }, "dependencies": { "ansi-styles": { @@ -7985,9 +8092,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -8005,16 +8112,16 @@ } }, "jest-each": { - "version": "26.4.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.4.0.tgz", - "integrity": "sha512-+cyBh1ehs6thVT/bsZVG+WwmRn2ix4Q4noS9yLZgM10yGWPW12/TDvwuOV2VZXn1gi09/ZwJKJWql6YW1C9zNw==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.4.2.tgz", + "integrity": "sha512-p15rt8r8cUcRY0Mvo1fpkOGYm7iI8S6ySxgIdfh3oOIv+gHwrHTy5VWCGOecWUhDsit4Nz8avJWdT07WLpbwDA==", "dev": true, "requires": { "@jest/types": "^26.3.0", "chalk": "^4.0.0", "jest-get-type": "^26.3.0", "jest-util": "^26.3.0", - "pretty-format": "^26.4.0" + "pretty-format": "^26.4.2" }, "dependencies": { "ansi-styles": { @@ -8059,9 +8166,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -8189,9 +8296,9 @@ } }, "jest-jasmine2": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.4.1.tgz", - "integrity": "sha512-GMPqJXyAWpohCg4wfA82lwac65lmgANH4/rOhNNaAN9yjInMAeMExQcWE1xb3fcCgLwibqeAuqVrV83oQl+szg==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.4.2.tgz", + "integrity": "sha512-z7H4EpCldHN1J8fNgsja58QftxBSL+JcwZmaXIvV9WKIM+x49F4GLHu/+BQh2kzRKHAgaN/E82od+8rTOBPyPA==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", @@ -8202,15 +8309,15 @@ "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^26.4.1", + "expect": "^26.4.2", "is-generator-fn": "^2.0.0", - "jest-each": "^26.4.0", - "jest-matcher-utils": "^26.4.1", + "jest-each": "^26.4.2", + "jest-matcher-utils": "^26.4.2", "jest-message-util": "^26.3.0", - "jest-runtime": "^26.4.1", - "jest-snapshot": "^26.4.1", + "jest-runtime": "^26.4.2", + "jest-snapshot": "^26.4.2", "jest-util": "^26.3.0", - "pretty-format": "^26.4.0", + "pretty-format": "^26.4.2", "throat": "^5.0.0" }, "dependencies": { @@ -8256,9 +8363,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -8267,25 +8374,25 @@ } }, "jest-leak-detector": { - "version": "26.4.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.4.0.tgz", - "integrity": "sha512-7EXKKEKnAWUPyiVtGZzJflbPOtYUdlNoevNVOkAcPpdR8xWiYKPGNGA6sz25S+8YhZq3rmkQJYAh3/P0VnoRwA==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.4.2.tgz", + "integrity": "sha512-akzGcxwxtE+9ZJZRW+M2o+nTNnmQZxrHJxX/HjgDaU5+PLmY1qnQPnMjgADPGCRPhB+Yawe1iij0REe+k/aHoA==", "dev": true, "requires": { "jest-get-type": "^26.3.0", - "pretty-format": "^26.4.0" + "pretty-format": "^26.4.2" } }, "jest-matcher-utils": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.4.1.tgz", - "integrity": "sha512-nmHWaOz54R/w6zJju5tuW0bw6+m38Rb1jnDKehKM/bOngDDL0UwtN634cRxpFoUNVRUrX8Wa0Z34xq/f8iuP5A==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.4.2.tgz", + "integrity": "sha512-KcbNqWfWUG24R7tu9WcAOKKdiXiXCbMvQYT6iodZ9k1f7065k0keUOW6XpJMMvah+hTfqkhJhRXmA3r3zMAg0Q==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^26.4.0", + "jest-diff": "^26.4.2", "jest-get-type": "^26.3.0", - "pretty-format": "^26.4.0" + "pretty-format": "^26.4.2" }, "dependencies": { "ansi-styles": { @@ -8330,9 +8437,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -8438,9 +8545,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -8543,9 +8650,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -8554,20 +8661,20 @@ } }, "jest-resolve-dependencies": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.4.1.tgz", - "integrity": "sha512-Gx4JfQ1k/hGb4lqVOOx8TPOkNtyJIQSHcJU68pB+sdyDJi9rbMxD1XXiYyaEq9WXufiZo90k9GTK6z6a5m0SQw==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.4.2.tgz", + "integrity": "sha512-ADHaOwqEcVc71uTfySzSowA/RdxUpCxhxa2FNLiin9vWLB1uLPad3we+JSSROq5+SrL9iYPdZZF8bdKM7XABTQ==", "dev": true, "requires": { "@jest/types": "^26.3.0", "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.4.1" + "jest-snapshot": "^26.4.2" } }, "jest-runner": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.4.1.tgz", - "integrity": "sha512-QcKwn1YNlzFumTtFsocETgIm13KNt2X8sae4wcqsF3JnxGUcYYUGBstCQhtAG4fKD/TKThHkgE/ZgQVKipj7oA==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.4.2.tgz", + "integrity": "sha512-FgjDHeVknDjw1gRAYaoUoShe1K3XUuFMkIaXbdhEys+1O4bEJS8Avmn4lBwoMfL8O5oFTdWYKcf3tEJyyYyk8g==", "dev": true, "requires": { "@jest/console": "^26.3.0", @@ -8579,13 +8686,13 @@ "emittery": "^0.7.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-config": "^26.4.1", + "jest-config": "^26.4.2", "jest-docblock": "^26.0.0", "jest-haste-map": "^26.3.0", - "jest-leak-detector": "^26.4.0", + "jest-leak-detector": "^26.4.2", "jest-message-util": "^26.3.0", "jest-resolve": "^26.4.0", - "jest-runtime": "^26.4.1", + "jest-runtime": "^26.4.2", "jest-util": "^26.3.0", "jest-worker": "^26.3.0", "source-map-support": "^0.5.6", @@ -8634,9 +8741,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -8645,15 +8752,15 @@ } }, "jest-runtime": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.4.1.tgz", - "integrity": "sha512-zXPQBS4iL/CEZtDfX+rDz+oZ/inQK/EYOeVt3uDWu8kwSdP/Cw4yOZtCTPApeNsGtZy6X5WQ1U+fyagN1B/Qkw==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.4.2.tgz", + "integrity": "sha512-4Pe7Uk5a80FnbHwSOk7ojNCJvz3Ks2CNQWT5Z7MJo4tX0jb3V/LThKvD9tKPNVNyeMH98J/nzGlcwc00R2dSHQ==", "dev": true, "requires": { "@jest/console": "^26.3.0", "@jest/environment": "^26.3.0", "@jest/fake-timers": "^26.3.0", - "@jest/globals": "^26.4.1", + "@jest/globals": "^26.4.2", "@jest/source-map": "^26.3.0", "@jest/test-result": "^26.3.0", "@jest/transform": "^26.3.0", @@ -8664,15 +8771,15 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-config": "^26.4.1", + "jest-config": "^26.4.2", "jest-haste-map": "^26.3.0", "jest-message-util": "^26.3.0", "jest-mock": "^26.3.0", "jest-regex-util": "^26.0.0", "jest-resolve": "^26.4.0", - "jest-snapshot": "^26.4.1", + "jest-snapshot": "^26.4.2", "jest-util": "^26.3.0", - "jest-validate": "^26.4.0", + "jest-validate": "^26.4.2", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^15.3.1" @@ -8732,9 +8839,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -8753,25 +8860,25 @@ } }, "jest-snapshot": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.4.1.tgz", - "integrity": "sha512-5DsxbSSuYA8rZ/ynO+l5J65wSIyzDB2AXjuIvep90YmtslrROqDtba2hBgq1Cj6L6A0j/jv6h8JydEe2WYPM/g==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.4.2.tgz", + "integrity": "sha512-N6Uub8FccKlf5SBFnL2Ri/xofbaA68Cc3MGjP/NuwgnsvWh+9hLIR/DhrxbSiKXMY9vUW5dI6EW1eHaDHqe9sg==", "dev": true, "requires": { "@babel/types": "^7.0.0", "@jest/types": "^26.3.0", "@types/prettier": "^2.0.0", "chalk": "^4.0.0", - "expect": "^26.4.1", + "expect": "^26.4.2", "graceful-fs": "^4.2.4", - "jest-diff": "^26.4.0", + "jest-diff": "^26.4.2", "jest-get-type": "^26.3.0", "jest-haste-map": "^26.3.0", - "jest-matcher-utils": "^26.4.1", + "jest-matcher-utils": "^26.4.2", "jest-message-util": "^26.3.0", "jest-resolve": "^26.4.0", "natural-compare": "^1.4.0", - "pretty-format": "^26.4.0", + "pretty-format": "^26.4.2", "semver": "^7.3.2" }, "dependencies": { @@ -8823,9 +8930,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -8923,9 +9030,9 @@ } }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -8943,9 +9050,9 @@ } }, "jest-validate": { - "version": "26.4.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.4.0.tgz", - "integrity": "sha512-t56Z/FRMrLP6mpmje7/YgHy0wOzcuc6i3LBXz6kjmsUWYN62OuMdC86Vg9/dX59SvyitSqqegOrx+h7BkNXeaQ==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.4.2.tgz", + "integrity": "sha512-blft+xDX7XXghfhY0mrsBCYhX365n8K5wNDC4XAcNKqqjEzsRUSXP44m6PL0QJEW2crxQFLLztVnJ4j7oPlQrQ==", "dev": true, "requires": { "@jest/types": "^26.3.0", @@ -8953,7 +9060,7 @@ "chalk": "^4.0.0", "jest-get-type": "^26.3.0", "leven": "^3.1.0", - "pretty-format": "^26.4.0" + "pretty-format": "^26.4.2" }, "dependencies": { "ansi-styles": { @@ -9004,9 +9111,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -9071,9 +9178,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -9099,9 +9206,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -9185,6 +9292,12 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-parser": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/json-parser/-/json-parser-1.1.5.tgz", @@ -9298,20 +9411,20 @@ "dev": true }, "lint-staged": { - "version": "10.2.11", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.2.11.tgz", - "integrity": "sha512-LRRrSogzbixYaZItE2APaS4l2eJMjjf5MbclRZpLJtcQJShcvUzKXsNeZgsLIZ0H0+fg2tL4B59fU9wHIHtFIA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.3.0.tgz", + "integrity": "sha512-an3VgjHqmJk0TORB/sdQl0CTkRg4E5ybYCXTTCSJ5h9jFwZbcgKIx5oVma5e7wp/uKt17s1QYFmYqT9MGVosGw==", "dev": true, "requires": { - "chalk": "^4.0.0", - "cli-truncate": "2.1.0", - "commander": "^5.1.0", - "cosmiconfig": "^6.0.0", + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "commander": "^6.0.0", + "cosmiconfig": "^7.0.0", "debug": "^4.1.1", "dedent": "^0.7.0", - "enquirer": "^2.3.5", - "execa": "^4.0.1", - "listr2": "^2.1.0", + "enquirer": "^2.3.6", + "execa": "^4.0.3", + "listr2": "^2.6.0", "log-symbols": "^4.0.0", "micromatch": "^4.0.2", "normalize-path": "^3.0.0", @@ -9365,24 +9478,11 @@ "dev": true }, "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz", + "integrity": "sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==", "dev": true }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -9503,9 +9603,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -9538,9 +9638,9 @@ "dev": true }, "listr2": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.6.0.tgz", - "integrity": "sha512-nwmqTJYQQ+AsKb4fCXH/6/UmLCEDL1jkRAdSn9M6cEUzoRGrs33YD/3N86gAZQnGZ6hxV18XSdlBcJ1GTmetJA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.6.2.tgz", + "integrity": "sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -9595,9 +9695,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -9764,9 +9864,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -9932,9 +10032,9 @@ "dev": true }, "meow": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.0.tgz", - "integrity": "sha512-kq5F0KVteskZ3JdfyQFivJEj2RaA8NFsS4+r9DaMKLcUHpk5OcHS3Q0XkCXONB1mZRPsu/Y/qImKri0nwSEZog==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", + "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", "dev": true, "requires": { "@types/minimist": "^1.2.0", @@ -10444,9 +10544,9 @@ } }, "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", + "version": "1.1.61", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", + "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==", "dev": true }, "normalize-package-data": { @@ -10634,15 +10734,15 @@ } }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, "object.pick": { @@ -10664,6 +10764,27 @@ "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "once": { @@ -10825,14 +10946,14 @@ "dev": true }, "parse-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", - "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", + "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, @@ -10986,15 +11107,15 @@ "dev": true }, "prettier": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz", + "integrity": "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==", "dev": true }, "pretty-format": { - "version": "26.4.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.4.0.tgz", - "integrity": "sha512-mEEwwpCseqrUtuMbrJG4b824877pM5xald3AkilJ47Po2YLr97/siejYQHqj2oDQBeJNbu+Q0qUuekJ8F0NAPg==", + "version": "26.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.4.2.tgz", + "integrity": "sha512-zK6Gd8zDsEiVydOCGLkoBoZuqv8VTiHyAbKznXe/gaph/DAeZOmit9yMfgIz5adIgAMMs5XfoYSwAX3jcCO1tA==", "dev": true, "requires": { "@jest/types": "^26.3.0", @@ -11636,9 +11757,9 @@ } }, "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -11691,13 +11812,13 @@ } }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, "semver": { @@ -11718,9 +11839,9 @@ "dev": true }, "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "requires": { "randombytes": "^2.1.0" } @@ -12276,6 +12397,27 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "string.prototype.trimend": { @@ -12286,6 +12428,27 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "string.prototype.trimstart": { @@ -12296,6 +12459,27 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "string_decoder": { @@ -12408,9 +12592,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -12684,6 +12868,15 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "ssri": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", @@ -12934,9 +13127,9 @@ } }, "uglify-js": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.1.tgz", - "integrity": "sha512-RjxApKkrPJB6kjJxQS3iZlf///REXWYxYJxO/MpmlQzVkDWVI3PSnCBWezMecmTU/TRkNxrl8bmsfFQCp+LO+Q==", + "version": "3.10.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.4.tgz", + "integrity": "sha512-kBFT3U4Dcj4/pJ52vfjCSfyLyvG9VYYuGYPmrPvAxRw/i7xHiT4VvCev+uiEMcEEiu6UNB6KgWmGtSUYIWScbw==", "dev": true, "optional": true }, @@ -13050,9 +13243,9 @@ "optional": true }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "requires": { "punycode": "^2.1.0" } @@ -13447,22 +13640,14 @@ "dev": true }, "whatwg-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.1.0.tgz", - "integrity": "sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-PcVnO6NiewhkmzV0qn7A+UZ9Xx4maNTI+O+TShmfE4pqjoCMwUMjkvoNhNHPTvgR7QH9Xt3R13iHuWy2sToFxQ==", "dev": true, "requires": { "lodash.sortby": "^4.7.0", "tr46": "^2.0.2", - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } + "webidl-conversions": "^6.1.0" } }, "which": { diff --git a/package.json b/package.json index b5cb54a..aa76184 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "compression-webpack-plugin", - "version": "5.0.2", + "version": "6.0.0", "description": "Prepare compressed versions of assets to serve them with Content-Encoding", "license": "MIT", "repository": "webpack-contrib/compression-webpack-plugin", @@ -43,16 +43,16 @@ "dependencies": { "cacache": "^15.0.5", "find-cache-dir": "^3.3.1", - "schema-utils": "^2.7.0", - "serialize-javascript": "^4.0.0", + "schema-utils": "^2.7.1", + "serialize-javascript": "^5.0.1", "webpack-sources": "^1.4.3" }, "devDependencies": { - "@babel/cli": "^7.10.5", - "@babel/core": "^7.11.4", - "@babel/preset-env": "^7.11.0", - "@commitlint/cli": "^10.0.0", - "@commitlint/config-conventional": "^10.0.0", + "@babel/cli": "^7.11.6", + "@babel/core": "^7.11.6", + "@babel/preset-env": "^7.11.5", + "@commitlint/cli": "^11.0.0", + "@commitlint/config-conventional": "^11.0.0", "@gfx/zopfli": "^1.0.15", "@webpack-contrib/defaults": "^6.3.0", "@webpack-contrib/eslint-config-webpack": "^3.0.0", @@ -60,16 +60,16 @@ "cross-env": "^7.0.2", "del": "^5.1.0", "del-cli": "^3.0.1", - "eslint": "^7.7.0", + "eslint": "^7.9.0", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", - "file-loader": "^6.0.0", - "husky": "^4.2.5", - "jest": "^26.4.1", - "lint-staged": "^10.2.11", + "file-loader": "^6.1.0", + "husky": "^4.3.0", + "jest": "^26.4.2", + "lint-staged": "^10.3.0", "memfs": "^3.2.0", "npm-run-all": "^4.1.5", - "prettier": "^2.0.5", + "prettier": "^2.1.1", "standard-version": "^9.0.0", "webpack": "^4.44.1" }, diff --git a/src/Webpack4Cache.js b/src/Webpack4Cache.js index e53831f..5113ac8 100644 --- a/src/Webpack4Cache.js +++ b/src/Webpack4Cache.js @@ -17,18 +17,18 @@ export default class Webpack4Cache { return findCacheDir({ name: 'compression-webpack-plugin' }) || os.tmpdir(); } - async get(cacheData, sources) { - const weakOutput = this.weakCache.get(cacheData.source); - - if (weakOutput) { - return weakOutput; - } - + async get(cacheData, { RawSource }) { if (!this.cache) { // eslint-disable-next-line no-undefined return undefined; } + const weakOutput = this.weakCache.get(cacheData.inputSource); + + if (weakOutput) { + return weakOutput; + } + // eslint-disable-next-line no-param-reassign cacheData.cacheIdent = cacheData.cacheIdent || serialize(cacheData.cacheKeys); @@ -42,21 +42,19 @@ export default class Webpack4Cache { return undefined; } - return new sources.RawSource( - Buffer.from(JSON.parse(cachedResult.data).data) - ); + return new RawSource(Buffer.from(JSON.parse(cachedResult.data).data)); } async store(cacheData) { - if (!this.weakCache.has(cacheData.source)) { - this.weakCache.set(cacheData.source, cacheData.output); - } - if (!this.cache) { // eslint-disable-next-line no-undefined return undefined; } + if (!this.weakCache.has(cacheData.inputSource)) { + this.weakCache.set(cacheData.inputSource, cacheData.output); + } + const { cacheIdent, output } = cacheData; return cacache.put(this.cache, cacheIdent, JSON.stringify(output.source())); diff --git a/src/Webpack5Cache.js b/src/Webpack5Cache.js index 2b9d32a..1500d71 100644 --- a/src/Webpack5Cache.js +++ b/src/Webpack5Cache.js @@ -6,14 +6,14 @@ export default class Cache { async get(cacheData) { // eslint-disable-next-line no-param-reassign cacheData.eTag = - cacheData.eTag || this.cache.getLazyHashedEtag(cacheData.source); + cacheData.eTag || this.cache.getLazyHashedEtag(cacheData.inputSource); - return this.cache.getPromise(cacheData.assetName, cacheData.eTag); + return this.cache.getPromise(cacheData.name, cacheData.eTag); } async store(cacheData) { return this.cache.storePromise( - cacheData.assetName, + cacheData.name, cacheData.eTag, cacheData.output ); diff --git a/src/index.js b/src/index.js index c20a2c9..1df37bb 100644 --- a/src/index.js +++ b/src/index.js @@ -4,7 +4,6 @@ */ import crypto from 'crypto'; -import url from 'url'; import path from 'path'; import webpack, { @@ -33,7 +32,7 @@ class CompressionPlugin { cache = true, algorithm = 'gzip', compressionOptions = {}, - filename = '[path].gz', + filename = '[base].gz', threshold = 0, minRatio = 0.8, deleteOriginalAssets = false, @@ -74,27 +73,6 @@ class CompressionPlugin { } } - static interpolateName(originalFilename, filename) { - const parse = url.parse(originalFilename); - const { pathname } = parse; - const { dir, name, ext } = path.parse(pathname); - const info = { - file: originalFilename, - path: pathname, - dir: dir ? `${dir}/` : '', - name, - ext, - query: parse.query ? `?${parse.query}` : '', - }; - - return typeof filename === 'function' - ? filename(info) - : filename.replace( - /\[(file|path|query|dir|name|ext)]/g, - (p0, p1) => info[p1] - ); - } - // eslint-disable-next-line consistent-return static getAsset(compilation, name) { // New API @@ -175,12 +153,12 @@ class CompressionPlugin { weakCache ); - for (const assetName of assetNames) { + for (const name of assetNames) { scheduledTasks.push( (async () => { - const { source, info } = CompressionPlugin.getAsset( + const { source: inputSource, info } = CompressionPlugin.getAsset( compilation, - assetName + name ); if (info.compressed) { @@ -207,7 +185,7 @@ class CompressionPlugin { return; } - let input = source.source(); + let input = inputSource.source(); if (!Buffer.isBuffer(input)) { input = Buffer.from(input); @@ -217,7 +195,7 @@ class CompressionPlugin { return; } - const cacheData = { source }; + const cacheData = { inputSource }; if (CompressionPlugin.isWebpack4()) { cacheData.cacheKeys = { @@ -227,11 +205,11 @@ class CompressionPlugin { algorithm: this.algorithm, originalAlgorithm: this.options.algorithm, compressionOptions: this.compressionOptions, - assetName, + name, contentHash: crypto.createHash('md4').update(input).digest('hex'), }; } else { - cacheData.assetName = assetName; + cacheData.name = name; } let output = await cache.get(cacheData, { RawSource }); @@ -254,22 +232,65 @@ class CompressionPlugin { return; } - const newAssetName = CompressionPlugin.interpolateName( - assetName, - this.options.filename + const match = /^([^?#]*)(\?[^#]*)?(#.*)?$/.exec(name); + const [, replacerFile] = match; + const replacerQuery = match[2] || ''; + const replacerFragment = match[3] || ''; + const replacerExt = path.extname(replacerFile); + const replacerBase = path.basename(replacerFile); + const replacerName = replacerBase.slice( + 0, + replacerBase.length - replacerExt.length + ); + const replacerPath = replacerFile.slice( + 0, + replacerFile.length - replacerBase.length ); + const pathData = { + file: replacerFile, + query: replacerQuery, + fragment: replacerFragment, + path: replacerPath, + base: replacerBase, + name: replacerName, + ext: replacerExt || '', + }; + + let newFilename = this.options.filename; + + if (typeof newFilename === 'function') { + newFilename = newFilename(pathData); + } - CompressionPlugin.emitAsset(compilation, newAssetName, output, { - compressed: true, - }); + const newName = newFilename.replace( + /\[(file|query|fragment|path|base|name|ext)]/g, + (p0, p1) => pathData[p1] + ); + + const newInfo = { compressed: true }; + + if (info.immutable && /(\[name]|\[base]|\[file])/.test(newFilename)) { + newInfo.immutable = true; + } + + CompressionPlugin.emitAsset(compilation, newName, output, newInfo); if (this.options.deleteOriginalAssets) { // eslint-disable-next-line no-param-reassign - CompressionPlugin.deleteAsset(compilation, assetName); + CompressionPlugin.deleteAsset(compilation, name); } else { - CompressionPlugin.updateAsset(compilation, assetName, source, { - related: { [relatedName]: newAssetName }, - }); + // TODO `...` required only for webpack@4 + const newOriginalInfo = { + ...info, + related: { [relatedName]: newName }, + }; + + CompressionPlugin.updateAsset( + compilation, + name, + inputSource, + newOriginalInfo + ); } })() ); diff --git a/test/CompressionPlugin.test.js b/test/CompressionPlugin.test.js index 9258b39..dd909fa 100644 --- a/test/CompressionPlugin.test.js +++ b/test/CompressionPlugin.test.js @@ -1,12 +1,17 @@ import zlib from 'zlib'; +import path from 'path'; import webpack from 'webpack'; +import findCacheDir from 'find-cache-dir'; +import cacache from 'cacache'; +import Webpack4Cache from '../src/Webpack4Cache'; import CompressionPlugin from '../src/index'; import { compile, CopyPluginWithAssetInfo, + ModifyExistingAsset, getAssetsNameAndSize, getCompiler, getErrors, @@ -15,9 +20,18 @@ import { removeCache, } from './helpers/index'; +const cacheDir1 = findCacheDir({ name: 'compression-webpack-plugin-cache-1' }); +const cacheDir2 = findCacheDir({ name: 'compression-webpack-plugin-cache-2' }); +const cacheDir3 = findCacheDir({ name: 'compression-webpack-plugin-cache-3' }); + describe('CompressionPlugin', () => { - beforeEach(() => { - return removeCache(); + beforeAll(() => { + return Promise.all([ + removeCache(), + cacache.rm.all(cacheDir1), + cacache.rm.all(cacheDir2), + cacache.rm.all(cacheDir3), + ]); }); it('should work', async () => { @@ -146,23 +160,23 @@ describe('CompressionPlugin', () => { new CompressionPlugin({ algorithm: 'gzip', - filename: '[path].gz', + filename: '[path][base].gz', }).apply(compiler); new CompressionPlugin({ algorithm: 'brotliCompress', - filename: '[path].br', + filename: '[path][base].br', }).apply(compiler); new CompressionPlugin({ algorithm: (input, options, callback) => { return callback(input); }, - filename: '[path].compress', + filename: '[path][base].compress', }).apply(compiler); new CompressionPlugin({ algorithm: (input, options, callback) => { return callback(input); }, - filename: '[path].custom?foo=bar#hash', + filename: '[path][base].custom?foo=bar#hash', }).apply(compiler); const stats = await compile(compiler); @@ -172,8 +186,69 @@ describe('CompressionPlugin', () => { expect(getErrors(stats)).toMatchSnapshot('warnings'); }); - it('should work and use weak cache', async () => { - const compiler = getCompiler('./entry.js'); + it('should work and show compress assets in stats', async () => { + const compiler = getCompiler( + './entry.js', + {}, + { + stats: 'verbose', + output: { + path: `${__dirname}/dist`, + filename: '[name].js', + chunkFilename: '[id].[name].js', + }, + } + ); + + new CompressionPlugin().apply(compiler); + + const stats = await compile(compiler); + const stringStats = stats.toString({ relatedAssets: true }); + const printedCompressed = stringStats.match(/\[compressed]/g); + + expect(printedCompressed ? printedCompressed.length : 0).toBe( + getCompiler.isWebpack4() ? 0 : 3 + ); + expect(getAssetsNameAndSize(stats)).toMatchSnapshot('assets'); + expect(getWarnings(stats)).toMatchSnapshot('errors'); + expect(getErrors(stats)).toMatchSnapshot('warnings'); + }); + + it('should work and keep assets info', async () => { + const compiler = getCompiler( + './entry.js', + {}, + { + stats: 'verbose', + output: { + path: `${__dirname}/dist`, + filename: '[name].[contenthash].js', + chunkFilename: '[id].[name].[contenthash].js', + }, + } + ); + + new CompressionPlugin().apply(compiler); + + const stats = await compile(compiler); + + for (const [, info] of stats.compilation.assetsInfo.entries()) { + expect(info.immutable).toBe(true); + } + + expect(getAssetsNameAndSize(stats)).toMatchSnapshot('assets'); + expect(getWarnings(stats)).toMatchSnapshot('errors'); + expect(getErrors(stats)).toMatchSnapshot('warnings'); + }); + + it('should work and use memory cache without options in the "development" mode', async () => { + const getCacheDirectorySpy = jest + .spyOn(Webpack4Cache, 'getCacheDirectory') + .mockImplementation(() => { + return cacheDir1; + }); + + const compiler = getCompiler('./entry.js', {}, { mode: 'development' }); new CompressionPlugin().apply(compiler); @@ -210,50 +285,89 @@ describe('CompressionPlugin', () => { expect(getWarnings(newStats)).toMatchSnapshot('errors'); expect(getErrors(newStats)).toMatchSnapshot('warnings'); + getCacheDirectorySpy.mockRestore(); + resolve(); }); }); - it('should work and use weak cache when "cache" is "false"', async () => { - if (getCompiler.isWebpack4()) { - expect(true).toBe(true); - } else { - const compiler = getCompiler('./entry.js', { - cache: false, + it('should work and use memory cache when the "cache" option is "true"', async () => { + const getCacheDirectorySpy = jest + .spyOn(Webpack4Cache, 'getCacheDirectory') + .mockImplementation(() => { + return cacheDir2; }); - new CompressionPlugin().apply(compiler); + const compiler = getCompiler( + './entry.js', + {}, + { + cache: true, + output: { + path: path.resolve(__dirname, './outputs'), + filename: '[name].js', + chunkFilename: '[id].js', + }, + } + ); + + new CompressionPlugin().apply(compiler); - const stats = await compile(compiler); + const stats = await compile(compiler); + if (webpack.version[0] === '4') { + expect( + Object.keys(stats.compilation.assets).filter( + (assetName) => stats.compilation.assets[assetName].emitted + ).length + ).toBe(7); + } else { expect(stats.compilation.emittedAssets.size).toBe(7); - expect(getAssetsNameAndSize(stats)).toMatchSnapshot('assets'); - expect(getWarnings(stats)).toMatchSnapshot('errors'); - expect(getErrors(stats)).toMatchSnapshot('warnings'); + } + + expect(getAssetsNameAndSize(stats)).toMatchSnapshot('assets'); + expect(getWarnings(stats)).toMatchSnapshot('errors'); + expect(getErrors(stats)).toMatchSnapshot('warnings'); - await new Promise(async (resolve) => { - const newStats = await compile(compiler); + await new Promise(async (resolve) => { + const newStats = await compile(compiler); + if (webpack.version[0] === '4') { + expect( + Object.keys(newStats.compilation.assets).filter( + (assetName) => newStats.compilation.assets[assetName].emitted + ).length + ).toBe(0); + } else { expect(newStats.compilation.emittedAssets.size).toBe(0); - expect(getAssetsNameAndSize(newStats)).toMatchSnapshot('assets'); - expect(getWarnings(newStats)).toMatchSnapshot('errors'); - expect(getErrors(newStats)).toMatchSnapshot('warnings'); + } - resolve(); - }); - } + expect(getAssetsNameAndSize(newStats)).toMatchSnapshot('assets'); + expect(getWarnings(newStats)).toMatchSnapshot('errors'); + expect(getErrors(newStats)).toMatchSnapshot('warnings'); + + getCacheDirectorySpy.mockRestore(); + + resolve(); + }); }); - it('should work and show compress assets in stats', async () => { + it('should work and use memory cache when the "cache" option is "true" and the asset has been changed', async () => { + const getCacheDirectorySpy = jest + .spyOn(Webpack4Cache, 'getCacheDirectory') + .mockImplementation(() => { + return cacheDir3; + }); + const compiler = getCompiler( './entry.js', {}, { - stats: 'verbose', + cache: true, output: { - path: `${__dirname}/dist`, + path: path.resolve(__dirname, './outputs'), filename: '[name].js', - chunkFilename: '[id].[name].js', + chunkFilename: '[id].js', }, } ); @@ -261,14 +375,100 @@ describe('CompressionPlugin', () => { new CompressionPlugin().apply(compiler); const stats = await compile(compiler); - const stringStats = stats.toString({ relatedAssets: true }); - const printedCompressed = stringStats.match(/\[compressed]/g); - expect(printedCompressed ? printedCompressed.length : 0).toBe( - getCompiler.isWebpack4() ? 0 : 3 + if (webpack.version[0] === '4') { + expect( + Object.keys(stats.compilation.assets).filter( + (assetName) => stats.compilation.assets[assetName].emitted + ).length + ).toBe(7); + } else { + expect(stats.compilation.emittedAssets.size).toBe(7); + } + + expect(getAssetsNameAndSize(stats)).toMatchSnapshot('assets'); + expect(getWarnings(stats)).toMatchSnapshot('errors'); + expect(getErrors(stats)).toMatchSnapshot('warnings'); + + new ModifyExistingAsset({ name: 'main.js' }).apply(compiler); + + await new Promise(async (resolve) => { + const newStats = await compile(compiler); + + if (webpack.version[0] === '4') { + expect( + Object.keys(newStats.compilation.assets).filter( + (assetName) => newStats.compilation.assets[assetName].emitted + ).length + ).toBe(2); + } else { + expect(newStats.compilation.emittedAssets.size).toBe(2); + } + + expect(getAssetsNameAndSize(newStats)).toMatchSnapshot('assets'); + expect(getWarnings(newStats)).toMatchSnapshot('errors'); + expect(getErrors(newStats)).toMatchSnapshot('warnings'); + + getCacheDirectorySpy.mockRestore(); + + resolve(); + }); + }); + + it('should work and do not use memory cache when the "cache" option is "false"', async () => { + const compiler = getCompiler( + './entry.js', + { + name: '[name].[ext]', + }, + { + cache: false, + output: { + path: path.resolve(__dirname, './outputs'), + filename: '[name].js', + chunkFilename: '[id].[name].js', + }, + } ); + + new CompressionPlugin( + webpack.version[0] === '4' ? { cache: false } : {} + ).apply(compiler); + + const stats = await compile(compiler); + + if (webpack.version[0] === '4') { + expect( + Object.keys(stats.compilation.assets).filter( + (assetName) => stats.compilation.assets[assetName].emitted + ).length + ).toBe(7); + } else { + expect(stats.compilation.emittedAssets.size).toBe(7); + } + expect(getAssetsNameAndSize(stats)).toMatchSnapshot('assets'); expect(getWarnings(stats)).toMatchSnapshot('errors'); expect(getErrors(stats)).toMatchSnapshot('warnings'); + + await new Promise(async (resolve) => { + const newStats = await compile(compiler); + + if (webpack.version[0] === '4') { + expect( + Object.keys(newStats.compilation.assets).filter( + (assetName) => newStats.compilation.assets[assetName].emitted + ).length + ).toBe(7); + } else { + expect(newStats.compilation.emittedAssets.size).toBe(7); + } + + expect(getAssetsNameAndSize(newStats)).toMatchSnapshot('assets'); + expect(getWarnings(newStats)).toMatchSnapshot('errors'); + expect(getErrors(newStats)).toMatchSnapshot('warnings'); + + resolve(); + }); }); }); diff --git a/test/__snapshots__/CompressionPlugin.test.js.snap.webpack4 b/test/__snapshots__/CompressionPlugin.test.js.snap.webpack4 index f731d33..05aeffb 100644 --- a/test/__snapshots__/CompressionPlugin.test.js.snap.webpack4 +++ b/test/__snapshots__/CompressionPlugin.test.js.snap.webpack4 @@ -1,5 +1,116 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": assets 1`] = ` +Array [ + Array [ + "async.async.js", + 249, + ], + Array [ + "async.async.js.gz", + 171, + ], + Array [ + "icon.png", + 78117, + ], + Array [ + "icon.svg", + 672, + ], + Array [ + "icon.svg.gz", + 393, + ], + Array [ + "main.js", + 11539, + ], + Array [ + "main.js.gz", + 2910, + ], +] +`; + +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": assets 2`] = ` +Array [ + Array [ + "async.async.js", + 249, + ], + Array [ + "async.async.js.gz", + 171, + ], + Array [ + "icon.png", + 78117, + ], + Array [ + "icon.svg", + 672, + ], + Array [ + "icon.svg.gz", + 393, + ], + Array [ + "main.js", + 11539, + ], + Array [ + "main.js.gz", + 2910, + ], +] +`; + +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": errors 1`] = `Array []`; + +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": errors 2`] = `Array []`; + +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": warnings 1`] = `Array []`; + +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": warnings 2`] = `Array []`; + +exports[`CompressionPlugin should work and keep assets info: assets 1`] = ` +Array [ + Array [ + "09a1a1112c577c2794359715edfcb5ac.png", + 78117, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg", + 672, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg.gz", + 393, + ], + Array [ + "async.async.e6542b36f32f25090488.js", + 249, + ], + Array [ + "async.async.e6542b36f32f25090488.js.gz", + 171, + ], + Array [ + "main.7d96b947e2f0d38f7c7d.js", + 11645, + ], + Array [ + "main.7d96b947e2f0d38f7c7d.js.gz", + 3000, + ], +] +`; + +exports[`CompressionPlugin should work and keep assets info: errors 1`] = `Array []`; + +exports[`CompressionPlugin should work and keep assets info: warnings 1`] = `Array []`; + exports[`CompressionPlugin should work and show compress assets in stats: assets 1`] = ` Array [ Array [ @@ -37,7 +148,155 @@ exports[`CompressionPlugin should work and show compress assets in stats: errors exports[`CompressionPlugin should work and show compress assets in stats: warnings 1`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache: assets 1`] = ` +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: assets 1`] = ` +Array [ + Array [ + "09a1a1112c577c2794359715edfcb5ac.png", + 78117, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg", + 672, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg.gz", + 393, + ], + Array [ + "async.js", + 249, + ], + Array [ + "async.js.gz", + 171, + ], + Array [ + "main.js", + 11549, + ], + Array [ + "main.js.gz", + 2953, + ], +] +`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: assets 2`] = ` +Array [ + Array [ + "09a1a1112c577c2794359715edfcb5ac.png", + 78117, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg", + 672, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg.gz", + 393, + ], + Array [ + "async.js", + 249, + ], + Array [ + "async.js.gz", + 171, + ], + Array [ + "main.js", + 11571, + ], + Array [ + "main.js.gz", + 2961, + ], +] +`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: errors 1`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: errors 2`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: warnings 1`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: warnings 2`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": assets 1`] = ` +Array [ + Array [ + "09a1a1112c577c2794359715edfcb5ac.png", + 78117, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg", + 672, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg.gz", + 393, + ], + Array [ + "async.js", + 249, + ], + Array [ + "async.js.gz", + 171, + ], + Array [ + "main.js", + 11549, + ], + Array [ + "main.js.gz", + 2953, + ], +] +`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": assets 2`] = ` +Array [ + Array [ + "09a1a1112c577c2794359715edfcb5ac.png", + 78117, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg", + 672, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg.gz", + 393, + ], + Array [ + "async.js", + 249, + ], + Array [ + "async.js.gz", + 171, + ], + Array [ + "main.js", + 11549, + ], + Array [ + "main.js.gz", + 2953, + ], +] +`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": errors 1`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": errors 2`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": warnings 1`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": warnings 2`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: assets 1`] = ` Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", @@ -70,7 +329,7 @@ Array [ ] `; -exports[`CompressionPlugin should work and use weak cache: assets 2`] = ` +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: assets 2`] = ` Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", @@ -103,25 +362,28 @@ Array [ ] `; -exports[`CompressionPlugin should work and use weak cache: errors 1`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: errors 1`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache: errors 2`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: errors 2`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache: warnings 1`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: warnings 1`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache: warnings 2`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: warnings 2`] = `Array []`; exports[`CompressionPlugin should work child compilations: assets 1`] = ` Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", 78117, - Object {}, + Object { + "immutable": true, + }, ], Array [ "23fc1d3ac606d117e05a140e0de79806.svg", 672, Object { + "immutable": true, "related": Object { "gziped": "23fc1d3ac606d117e05a140e0de79806.svg.gz", }, @@ -132,6 +394,7 @@ Array [ 393, Object { "compressed": true, + "immutable": true, }, ], Array [ @@ -139,6 +402,7 @@ Array [ 171, Object { "compressed": true, + "immutable": true, }, ], Array [ @@ -173,6 +437,7 @@ Array [ 3001, Object { "compressed": true, + "immutable": true, }, ], Array [ @@ -197,12 +462,15 @@ Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", 78117, - Object {}, + Object { + "immutable": true, + }, ], Array [ "23fc1d3ac606d117e05a140e0de79806.svg", 672, Object { + "immutable": true, "related": Object { "gziped": "23fc1d3ac606d117e05a140e0de79806.svg.gz", }, @@ -213,6 +481,7 @@ Array [ 393, Object { "compressed": true, + "immutable": true, }, ], Array [ @@ -220,6 +489,7 @@ Array [ 220, Object { "compressed": true, + "immutable": true, }, ], Array [ @@ -261,6 +531,7 @@ Array [ 3035, Object { "compressed": true, + "immutable": true, }, ], Array [ @@ -302,12 +573,15 @@ Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", 78117, - Object {}, + Object { + "immutable": true, + }, ], Array [ "23fc1d3ac606d117e05a140e0de79806.svg", 672, Object { + "immutable": true, "related": Object { "brotliCompressed": "23fc1d3ac606d117e05a140e0de79806.svg.br", }, @@ -318,6 +592,7 @@ Array [ 363, Object { "compressed": true, + "immutable": true, }, ], Array [ @@ -325,6 +600,7 @@ Array [ 393, Object { "compressed": true, + "immutable": true, }, ], Array [ @@ -332,6 +608,7 @@ Array [ 141, Object { "compressed": true, + "immutable": true, }, ], Array [ @@ -339,6 +616,7 @@ Array [ 171, Object { "compressed": true, + "immutable": true, }, ], Array [ @@ -356,6 +634,7 @@ Array [ 2588, Object { "compressed": true, + "immutable": true, }, ], Array [ @@ -363,6 +642,7 @@ Array [ 3002, Object { "compressed": true, + "immutable": true, }, ], Array [ diff --git a/test/__snapshots__/CompressionPlugin.test.js.snap.webpack5 b/test/__snapshots__/CompressionPlugin.test.js.snap.webpack5 index 9e1271a..f4b31c9 100644 --- a/test/__snapshots__/CompressionPlugin.test.js.snap.webpack5 +++ b/test/__snapshots__/CompressionPlugin.test.js.snap.webpack5 @@ -1,5 +1,116 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": assets 1`] = ` +Array [ + Array [ + "async.async.js", + 265, + ], + Array [ + "async.async.js.gz", + 179, + ], + Array [ + "icon.png", + 78117, + ], + Array [ + "icon.svg", + 672, + ], + Array [ + "icon.svg.gz", + 393, + ], + Array [ + "main.js", + 14990, + ], + Array [ + "main.js.gz", + 3451, + ], +] +`; + +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": assets 2`] = ` +Array [ + Array [ + "async.async.js", + 265, + ], + Array [ + "async.async.js.gz", + 179, + ], + Array [ + "icon.png", + 78117, + ], + Array [ + "icon.svg", + 672, + ], + Array [ + "icon.svg.gz", + 393, + ], + Array [ + "main.js", + 14990, + ], + Array [ + "main.js.gz", + 3451, + ], +] +`; + +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": errors 1`] = `Array []`; + +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": errors 2`] = `Array []`; + +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": warnings 1`] = `Array []`; + +exports[`CompressionPlugin should work and do not use memory cache when the "cache" option is "false": warnings 2`] = `Array []`; + +exports[`CompressionPlugin should work and keep assets info: assets 1`] = ` +Array [ + Array [ + "09a1a1112c577c2794359715edfcb5ac.png", + 78117, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg", + 672, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg.gz", + 393, + ], + Array [ + "async.async.27b6ff8858c766f77f7c.js", + 265, + ], + Array [ + "async.async.27b6ff8858c766f77f7c.js.gz", + 179, + ], + Array [ + "main.c7afb01b272238013361.js", + 15077, + ], + Array [ + "main.c7afb01b272238013361.js.gz", + 3538, + ], +] +`; + +exports[`CompressionPlugin should work and keep assets info: errors 1`] = `Array []`; + +exports[`CompressionPlugin should work and keep assets info: warnings 1`] = `Array []`; + exports[`CompressionPlugin should work and show compress assets in stats: assets 1`] = ` Array [ Array [ @@ -24,11 +135,11 @@ Array [ ], Array [ "main.js", - 15026, + 15046, ], Array [ "main.js.gz", - 3515, + 3519, ], ] `; @@ -37,7 +148,7 @@ exports[`CompressionPlugin should work and show compress assets in stats: errors exports[`CompressionPlugin should work and show compress assets in stats: warnings 1`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache when "cache" is "false": assets 1`] = ` +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: assets 1`] = ` Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", @@ -52,25 +163,25 @@ Array [ 393, ], Array [ - "async.async.1c2911c7c819fc826fb7.js", + "async.js", 265, ], Array [ - "async.async.1c2911c7c819fc826fb7.js.gz", + "async.js.gz", 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.js", + 15030, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.js.gz", + 3512, ], ] `; -exports[`CompressionPlugin should work and use weak cache when "cache" is "false": assets 2`] = ` +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: assets 2`] = ` Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", @@ -85,33 +196,107 @@ Array [ 393, ], Array [ - "async.async.1c2911c7c819fc826fb7.js", + "async.js", 265, ], Array [ - "async.async.1c2911c7c819fc826fb7.js.gz", + "async.js.gz", 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.js", + 15052, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.js.gz", + 3523, ], ] `; -exports[`CompressionPlugin should work and use weak cache when "cache" is "false": errors 1`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: errors 1`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache when "cache" is "false": errors 2`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: errors 2`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache when "cache" is "false": warnings 1`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: warnings 1`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache when "cache" is "false": warnings 2`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true" and the asset has been changed: warnings 2`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache: assets 1`] = ` +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": assets 1`] = ` +Array [ + Array [ + "09a1a1112c577c2794359715edfcb5ac.png", + 78117, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg", + 672, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg.gz", + 393, + ], + Array [ + "async.js", + 265, + ], + Array [ + "async.js.gz", + 179, + ], + Array [ + "main.js", + 15030, + ], + Array [ + "main.js.gz", + 3512, + ], +] +`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": assets 2`] = ` +Array [ + Array [ + "09a1a1112c577c2794359715edfcb5ac.png", + 78117, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg", + 672, + ], + Array [ + "23fc1d3ac606d117e05a140e0de79806.svg.gz", + 393, + ], + Array [ + "async.js", + 265, + ], + Array [ + "async.js.gz", + 179, + ], + Array [ + "main.js", + 15030, + ], + Array [ + "main.js.gz", + 3512, + ], +] +`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": errors 1`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": errors 2`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": warnings 1`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache when the "cache" option is "true": warnings 2`] = `Array []`; + +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: assets 1`] = ` Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", @@ -134,17 +319,17 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; -exports[`CompressionPlugin should work and use weak cache: assets 2`] = ` +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: assets 2`] = ` Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", @@ -167,23 +352,23 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; -exports[`CompressionPlugin should work and use weak cache: errors 1`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: errors 1`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache: errors 2`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: errors 2`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache: warnings 1`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: warnings 1`] = `Array []`; -exports[`CompressionPlugin should work and use weak cache: warnings 2`] = `Array []`; +exports[`CompressionPlugin should work and use memory cache without options in the "development" mode: warnings 2`] = `Array []`; exports[`CompressionPlugin should work child compilations: assets 1`] = ` Array [ @@ -191,6 +376,7 @@ Array [ "09a1a1112c577c2794359715edfcb5ac.png", 78117, Object { + "immutable": true, "size": 78117, }, ], @@ -198,6 +384,7 @@ Array [ "23fc1d3ac606d117e05a140e0de79806.svg", 672, Object { + "immutable": true, "related": Object { "gziped": "23fc1d3ac606d117e05a140e0de79806.svg.gz", }, @@ -209,6 +396,7 @@ Array [ 393, Object { "compressed": true, + "immutable": true, "size": 393, }, ], @@ -217,14 +405,15 @@ Array [ 179, Object { "compressed": true, + "immutable": true, "size": 179, }, ], Array [ - "async.async.js?ver=3993f67ababcffbe6f05", + "async.async.js?ver=14fadf4633f3cc38b89b", 265, Object { - "fullhash": "3993f67ababcffbe6f05", + "fullhash": "14fadf4633f3cc38b89b", "immutable": true, "related": Object { "gziped": "async.async.js.gz", @@ -253,22 +442,23 @@ Array [ ], Array [ "main.js.gz", - 3558, + 3563, Object { "compressed": true, - "size": 3558, + "immutable": true, + "size": 3563, }, ], Array [ - "main.js?var=3993f67ababcffbe6f05", - 15213, + "main.js?var=14fadf4633f3cc38b89b", + 15233, Object { - "fullhash": "3993f67ababcffbe6f05", + "fullhash": "14fadf4633f3cc38b89b", "immutable": true, "related": Object { "gziped": "main.js.gz", }, - "size": 15213, + "size": 15233, }, ], ] @@ -284,6 +474,7 @@ Array [ "09a1a1112c577c2794359715edfcb5ac.png", 78117, Object { + "immutable": true, "size": 78117, }, ], @@ -291,6 +482,7 @@ Array [ "23fc1d3ac606d117e05a140e0de79806.svg", 672, Object { + "immutable": true, "related": Object { "gziped": "23fc1d3ac606d117e05a140e0de79806.svg.gz", }, @@ -302,19 +494,21 @@ Array [ 393, Object { "compressed": true, + "immutable": true, "size": 393, }, ], Array [ "async.async.js.gz", - 234, + 235, Object { "compressed": true, - "size": 234, + "immutable": true, + "size": 235, }, ], Array [ - "async.async.js.map?ver=18beec7527af02981a38", + "async.async.js.map?ver=bbf6508f271a84a2c39d", 116, Object { "development": true, @@ -322,14 +516,14 @@ Array [ }, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 330, Object { - "fullhash": "18beec7527af02981a38", + "fullhash": "bbf6508f271a84a2c39d", "immutable": true, "related": Object { "gziped": "async.async.js.gz", - "sourceMap": "async.async.js.map?ver=18beec7527af02981a38", + "sourceMap": "async.async.js.map?ver=bbf6508f271a84a2c39d", }, "size": 330, }, @@ -355,42 +549,43 @@ Array [ ], Array [ "main.js.gz", - 3594, + 3598, Object { "compressed": true, - "size": 3594, + "immutable": true, + "size": 3598, }, ], Array [ "main.js.map.gz", - 3564, + 3570, Object { "compressed": true, - "size": 3564, + "size": 3570, }, ], Array [ - "main.js.map?var=18beec7527af02981a38", - 11139, + "main.js.map?var=bbf6508f271a84a2c39d", + 11145, Object { "development": true, "related": Object { "gziped": "main.js.map.gz", }, - "size": 11139, + "size": 11145, }, ], Array [ - "main.js?var=18beec7527af02981a38", - 15274, + "main.js?var=bbf6508f271a84a2c39d", + 15294, Object { - "fullhash": "18beec7527af02981a38", + "fullhash": "bbf6508f271a84a2c39d", "immutable": true, "related": Object { "gziped": "main.js.gz", - "sourceMap": "main.js.map?var=18beec7527af02981a38", + "sourceMap": "main.js.map?var=bbf6508f271a84a2c39d", }, - "size": 15274, + "size": 15294, }, ], ] @@ -406,6 +601,7 @@ Array [ "09a1a1112c577c2794359715edfcb5ac.png", 78117, Object { + "immutable": true, "size": 78117, }, ], @@ -413,6 +609,7 @@ Array [ "23fc1d3ac606d117e05a140e0de79806.svg", 672, Object { + "immutable": true, "related": Object { "brotliCompressed": "23fc1d3ac606d117e05a140e0de79806.svg.br", "compressed": "23fc1d3ac606d117e05a140e0de79806.svg.compress", @@ -427,6 +624,7 @@ Array [ 393, Object { "compressed": true, + "immutable": true, "size": 393, }, ], @@ -435,6 +633,7 @@ Array [ 393, Object { "compressed": true, + "immutable": true, "size": 393, }, ], @@ -443,6 +642,7 @@ Array [ 393, Object { "compressed": true, + "immutable": true, "size": 393, }, ], @@ -451,6 +651,7 @@ Array [ 393, Object { "compressed": true, + "immutable": true, "size": 393, }, ], @@ -459,6 +660,7 @@ Array [ 179, Object { "compressed": true, + "immutable": true, "size": 179, }, ], @@ -467,6 +669,7 @@ Array [ 179, Object { "compressed": true, + "immutable": true, "size": 179, }, ], @@ -475,6 +678,7 @@ Array [ 179, Object { "compressed": true, + "immutable": true, "size": 179, }, ], @@ -483,14 +687,15 @@ Array [ 179, Object { "compressed": true, + "immutable": true, "size": 179, }, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 265, Object { - "fullhash": "18beec7527af02981a38", + "fullhash": "bbf6508f271a84a2c39d", "immutable": true, "related": Object { "brotliCompressed": "async.async.js.br", @@ -503,41 +708,45 @@ Array [ ], Array [ "main.js.br", - 3563, + 3567, Object { "compressed": true, - "size": 3563, + "immutable": true, + "size": 3567, }, ], Array [ "main.js.compress", - 3563, + 3567, Object { "compressed": true, - "size": 3563, + "immutable": true, + "size": 3567, }, ], Array [ "main.js.custom?foo=bar#hash", - 3563, + 3567, Object { "compressed": true, - "size": 3563, + "immutable": true, + "size": 3567, }, ], Array [ "main.js.gz", - 3563, + 3567, Object { "compressed": true, - "size": 3563, + "immutable": true, + "size": 3567, }, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=bbf6508f271a84a2c39d", + 15236, Object { - "fullhash": "18beec7527af02981a38", + "fullhash": "bbf6508f271a84a2c39d", "immutable": true, "related": Object { "brotliCompressed": "main.js.br", @@ -545,7 +754,7 @@ Array [ "customed": "main.js.custom?foo=bar#hash", "gziped": "main.js.gz", }, - "size": 15216, + "size": 15236, }, ], ] @@ -574,16 +783,16 @@ Array [ 179, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 265, ], Array [ "main.js.gz", - 3563, + 3567, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=bbf6508f271a84a2c39d", + 15236, ], ] `; diff --git a/test/__snapshots__/algorithm.test.js.snap.webpack5 b/test/__snapshots__/algorithm.test.js.snap.webpack5 index 4fd2ff8..7b0d430 100644 --- a/test/__snapshots__/algorithm.test.js.snap.webpack5 +++ b/test/__snapshots__/algorithm.test.js.snap.webpack5 @@ -27,12 +27,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; @@ -70,12 +70,12 @@ Array [ 265, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 15057, + "main.33caac5e08ae5fb270ef.js.gz", + 15077, ], ] `; @@ -107,8 +107,8 @@ Array [ 265, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], ] `; diff --git a/test/__snapshots__/cache-option.test.js.snap.webpack5 b/test/__snapshots__/cache-option.test.js.snap.webpack5 index 6644931..7a3c231 100644 --- a/test/__snapshots__/cache-option.test.js.snap.webpack5 +++ b/test/__snapshots__/cache-option.test.js.snap.webpack5 @@ -23,12 +23,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; @@ -56,12 +56,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; @@ -97,12 +97,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; @@ -130,12 +130,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; @@ -171,12 +171,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; @@ -204,12 +204,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; @@ -245,12 +245,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; @@ -278,12 +278,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; diff --git a/test/__snapshots__/compressionOptions-option.test.js.snap.webpack5 b/test/__snapshots__/compressionOptions-option.test.js.snap.webpack5 index 5dc73ea..f32dc62 100644 --- a/test/__snapshots__/compressionOptions-option.test.js.snap.webpack5 +++ b/test/__snapshots__/compressionOptions-option.test.js.snap.webpack5 @@ -27,12 +27,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; @@ -68,12 +68,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; diff --git a/test/__snapshots__/deleteOriginalAssets.test.js.snap.webpack5 b/test/__snapshots__/deleteOriginalAssets.test.js.snap.webpack5 index 0d77233..1aceb77 100644 --- a/test/__snapshots__/deleteOriginalAssets.test.js.snap.webpack5 +++ b/test/__snapshots__/deleteOriginalAssets.test.js.snap.webpack5 @@ -27,12 +27,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; @@ -56,8 +56,8 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; diff --git a/test/__snapshots__/exclude-option.test.js.snap.webpack5 b/test/__snapshots__/exclude-option.test.js.snap.webpack5 index 0c830b9..2ec61d5 100644 --- a/test/__snapshots__/exclude-option.test.js.snap.webpack5 +++ b/test/__snapshots__/exclude-option.test.js.snap.webpack5 @@ -19,16 +19,16 @@ Array [ 179, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 265, ], Array [ "main.js.gz", - 3563, + 3567, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=bbf6508f271a84a2c39d", + 15236, ], ] `; @@ -52,16 +52,16 @@ Array [ 179, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 265, ], Array [ "main.js.gz", - 3563, + 3567, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=bbf6508f271a84a2c39d", + 15236, ], ] `; diff --git a/test/__snapshots__/filename-option.test.js.snap.webpack4 b/test/__snapshots__/filename-option.test.js.snap.webpack4 index 995a2a1..700c7c4 100644 --- a/test/__snapshots__/filename-option.test.js.snap.webpack4 +++ b/test/__snapshots__/filename-option.test.js.snap.webpack4 @@ -1,17 +1,17 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`"filename" option matches snapshot for \`[dir][name].super-compressed.gz[ext][query]\` value ({String}): assets 1`] = ` +exports[`"filename" option matches snapshot for \`[name][ext].super-compressed.gz[query]\` value ({String}): assets 1`] = ` Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", 78117, ], Array [ - "09a1a1112c577c2794359715edfcb5ac.super-compressed.gz.png", + "09a1a1112c577c2794359715edfcb5ac.super-compressed.png.gz", 73160, ], Array [ - "23fc1d3ac606d117e05a140e0de79806.super-compressed.gz.svg", + "23fc1d3ac606d117e05a140e0de79806.super-compressed.svg.gz", 393, ], Array [ @@ -23,7 +23,7 @@ Array [ 249, ], Array [ - "async.async.super-compressed.gz.js?ver=dc74724f7b13a2de5a20", + "async.async.super-compressed.js.gz?ver=dc74724f7b13a2de5a20", 171, ], Array [ @@ -31,17 +31,17 @@ Array [ 11630, ], Array [ - "main.super-compressed.gz.js?var=dc74724f7b13a2de5a20", + "main.super-compressed.js.gz?var=dc74724f7b13a2de5a20", 3002, ], ] `; -exports[`"filename" option matches snapshot for \`[dir][name].super-compressed.gz[ext][query]\` value ({String}): errors 1`] = `Array []`; +exports[`"filename" option matches snapshot for \`[name][ext].super-compressed.gz[query]\` value ({String}): errors 1`] = `Array []`; -exports[`"filename" option matches snapshot for \`[dir][name].super-compressed.gz[ext][query]\` value ({String}): warnings 1`] = `Array []`; +exports[`"filename" option matches snapshot for \`[name][ext].super-compressed.gz[query]\` value ({String}): warnings 1`] = `Array []`; -exports[`"filename" option matches snapshot for \`[path].super-compressed.gz[query]\` value ({String}): assets 1`] = ` +exports[`"filename" option matches snapshot for \`[path][base].super-compressed.gz[query][fragment]\` value ({String}): assets 1`] = ` Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", @@ -60,27 +60,27 @@ Array [ 393, ], Array [ - "async.async.js.super-compressed.gz?ver=dc74724f7b13a2de5a20", + "assets/js/async.async.js.super-compressed.gz?ver=6532e4640290c0b395f3#hash", 171, ], Array [ - "async.async.js?ver=dc74724f7b13a2de5a20", + "assets/js/async.async.js?ver=6532e4640290c0b395f3#hash", 249, ], Array [ - "main.js.super-compressed.gz?var=dc74724f7b13a2de5a20", - 3002, + "assets/js/main.js.super-compressed.gz?var=6532e4640290c0b395f3#hash", + 3015, ], Array [ - "main.js?var=dc74724f7b13a2de5a20", - 11630, + "assets/js/main.js?var=6532e4640290c0b395f3#hash", + 11645, ], ] `; -exports[`"filename" option matches snapshot for \`[path].super-compressed.gz[query]\` value ({String}): errors 1`] = `Array []`; +exports[`"filename" option matches snapshot for \`[path][base].super-compressed.gz[query][fragment]\` value ({String}): errors 1`] = `Array []`; -exports[`"filename" option matches snapshot for \`[path].super-compressed.gz[query]\` value ({String}): warnings 1`] = `Array []`; +exports[`"filename" option matches snapshot for \`[path][base].super-compressed.gz[query][fragment]\` value ({String}): warnings 1`] = `Array []`; exports[`"filename" option matches snapshot for custom function ({Function}): assets 1`] = ` Array [ @@ -101,20 +101,20 @@ Array [ 393, ], Array [ - "async.async.js.gz?ver=dc74724f7b13a2de5a20", + "async.async.js.gz?ver=56cecc99721c0a179d38", 171, ], Array [ - "async.async.js?ver=dc74724f7b13a2de5a20", + "async.async.js?ver=56cecc99721c0a179d38#hash", 249, ], Array [ - "main.js.gz?var=dc74724f7b13a2de5a20", - 3002, + "main.js.gz?var=56cecc99721c0a179d38", + 3007, ], Array [ - "main.js?var=dc74724f7b13a2de5a20", - 11630, + "main.js?var=56cecc99721c0a179d38#hash", + 11635, ], ] `; diff --git a/test/__snapshots__/filename-option.test.js.snap.webpack5 b/test/__snapshots__/filename-option.test.js.snap.webpack5 index cfadaa8..d613919 100644 --- a/test/__snapshots__/filename-option.test.js.snap.webpack5 +++ b/test/__snapshots__/filename-option.test.js.snap.webpack5 @@ -1,17 +1,17 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`"filename" option matches snapshot for \`[dir][name].super-compressed.gz[ext][query]\` value ({String}): assets 1`] = ` +exports[`"filename" option matches snapshot for \`[name][ext].super-compressed.gz[query]\` value ({String}): assets 1`] = ` Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", 78117, ], Array [ - "09a1a1112c577c2794359715edfcb5ac.super-compressed.gz.png", + "09a1a1112c577c2794359715edfcb5ac.super-compressed.png.gz", 73160, ], Array [ - "23fc1d3ac606d117e05a140e0de79806.super-compressed.gz.svg", + "23fc1d3ac606d117e05a140e0de79806.super-compressed.svg.gz", 393, ], Array [ @@ -19,29 +19,29 @@ Array [ 672, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 265, ], Array [ - "async.async.super-compressed.gz.js?ver=18beec7527af02981a38", + "async.async.super-compressed.js.gz?ver=bbf6508f271a84a2c39d", 179, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=bbf6508f271a84a2c39d", + 15236, ], Array [ - "main.super-compressed.gz.js?var=18beec7527af02981a38", - 3563, + "main.super-compressed.js.gz?var=bbf6508f271a84a2c39d", + 3567, ], ] `; -exports[`"filename" option matches snapshot for \`[dir][name].super-compressed.gz[ext][query]\` value ({String}): errors 1`] = `Array []`; +exports[`"filename" option matches snapshot for \`[name][ext].super-compressed.gz[query]\` value ({String}): errors 1`] = `Array []`; -exports[`"filename" option matches snapshot for \`[dir][name].super-compressed.gz[ext][query]\` value ({String}): warnings 1`] = `Array []`; +exports[`"filename" option matches snapshot for \`[name][ext].super-compressed.gz[query]\` value ({String}): warnings 1`] = `Array []`; -exports[`"filename" option matches snapshot for \`[path].super-compressed.gz[query]\` value ({String}): assets 1`] = ` +exports[`"filename" option matches snapshot for \`[path][base].super-compressed.gz[query][fragment]\` value ({String}): assets 1`] = ` Array [ Array [ "09a1a1112c577c2794359715edfcb5ac.png", @@ -60,27 +60,27 @@ Array [ 393, ], Array [ - "async.async.js.super-compressed.gz?ver=18beec7527af02981a38", + "assets/js/async.async.js.super-compressed.gz?ver=d31d295ee8d5ebdf41b4#hash", 179, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "assets/js/async.async.js?ver=d31d295ee8d5ebdf41b4#hash", 265, ], Array [ - "main.js.super-compressed.gz?var=18beec7527af02981a38", - 3563, + "assets/js/main.js.super-compressed.gz?var=d31d295ee8d5ebdf41b4#hash", + 3578, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "assets/js/main.js?var=d31d295ee8d5ebdf41b4#hash", + 15251, ], ] `; -exports[`"filename" option matches snapshot for \`[path].super-compressed.gz[query]\` value ({String}): errors 1`] = `Array []`; +exports[`"filename" option matches snapshot for \`[path][base].super-compressed.gz[query][fragment]\` value ({String}): errors 1`] = `Array []`; -exports[`"filename" option matches snapshot for \`[path].super-compressed.gz[query]\` value ({String}): warnings 1`] = `Array []`; +exports[`"filename" option matches snapshot for \`[path][base].super-compressed.gz[query][fragment]\` value ({String}): warnings 1`] = `Array []`; exports[`"filename" option matches snapshot for custom function ({Function}): assets 1`] = ` Array [ @@ -101,20 +101,20 @@ Array [ 393, ], Array [ - "async.async.js.gz?ver=18beec7527af02981a38", + "async.async.js.gz?ver=e0cd056ace173b6df0d1", 179, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=e0cd056ace173b6df0d1#hash", 265, ], Array [ - "main.js.gz?var=18beec7527af02981a38", - 3563, + "main.js.gz?var=e0cd056ace173b6df0d1", + 3568, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=e0cd056ace173b6df0d1#hash", + 15241, ], ] `; diff --git a/test/__snapshots__/include-option.test.js.snap.webpack5 b/test/__snapshots__/include-option.test.js.snap.webpack5 index f443edb..76ed6ec 100644 --- a/test/__snapshots__/include-option.test.js.snap.webpack5 +++ b/test/__snapshots__/include-option.test.js.snap.webpack5 @@ -15,16 +15,16 @@ Array [ 179, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 265, ], Array [ "main.js.gz", - 3563, + 3567, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=bbf6508f271a84a2c39d", + 15236, ], ] `; @@ -52,16 +52,16 @@ Array [ 179, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 265, ], Array [ "main.js.gz", - 3563, + 3567, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=bbf6508f271a84a2c39d", + 15236, ], ] `; diff --git a/test/__snapshots__/minRatio-option.test.js.snap.webpack5 b/test/__snapshots__/minRatio-option.test.js.snap.webpack5 index 016ae2d..5e3368f 100644 --- a/test/__snapshots__/minRatio-option.test.js.snap.webpack5 +++ b/test/__snapshots__/minRatio-option.test.js.snap.webpack5 @@ -15,8 +15,8 @@ Array [ 265, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], ] `; @@ -52,12 +52,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; diff --git a/test/__snapshots__/test-option.test.js.snap.webpack5 b/test/__snapshots__/test-option.test.js.snap.webpack5 index 9444f28..d3408d2 100644 --- a/test/__snapshots__/test-option.test.js.snap.webpack5 +++ b/test/__snapshots__/test-option.test.js.snap.webpack5 @@ -15,12 +15,12 @@ Array [ 672, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 265, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=bbf6508f271a84a2c39d", + 15236, ], ] `; @@ -48,12 +48,12 @@ Array [ 393, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 265, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=bbf6508f271a84a2c39d", + 15236, ], ] `; @@ -85,16 +85,16 @@ Array [ 179, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 265, ], Array [ "main.js.gz", - 3563, + 3567, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=bbf6508f271a84a2c39d", + 15236, ], ] `; @@ -114,12 +114,12 @@ Array [ 672, ], Array [ - "async.async.js?ver=18beec7527af02981a38", + "async.async.js?ver=bbf6508f271a84a2c39d", 265, ], Array [ - "main.js?var=18beec7527af02981a38", - 15216, + "main.js?var=bbf6508f271a84a2c39d", + 15236, ], ] `; diff --git a/test/__snapshots__/threshold-option.test.js.snap.webpack5 b/test/__snapshots__/threshold-option.test.js.snap.webpack5 index cbdbd40..c89ef90 100644 --- a/test/__snapshots__/threshold-option.test.js.snap.webpack5 +++ b/test/__snapshots__/threshold-option.test.js.snap.webpack5 @@ -27,12 +27,12 @@ Array [ 179, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; @@ -60,12 +60,12 @@ Array [ 265, ], Array [ - "main.c14d5dcb1534759d1d95.js", - 15057, + "main.33caac5e08ae5fb270ef.js", + 15077, ], Array [ - "main.c14d5dcb1534759d1d95.js.gz", - 3537, + "main.33caac5e08ae5fb270ef.js.gz", + 3538, ], ] `; diff --git a/test/cache-option.test.js b/test/cache-option.test.js index a85c87c..c047d27 100644 --- a/test/cache-option.test.js +++ b/test/cache-option.test.js @@ -26,17 +26,7 @@ const uniqueCacheDirectory = findCacheDir({ name: 'unique-cache-directory' }); if (getCompiler.isWebpack4()) { describe('"cache" option', () => { - beforeEach(() => { - return Promise.all([ - cacache.rm.all(falseCacheDirectory), - cacache.rm.all(cacheDir), - cacache.rm.all(otherCacheDir), - cacache.rm.all(uniqueCacheDirectory), - cacache.rm.all(otherOtherCacheDir), - ]); - }); - - afterAll(() => { + beforeAll(() => { return Promise.all([ cacache.rm.all(falseCacheDirectory), cacache.rm.all(cacheDir), @@ -119,7 +109,7 @@ if (getCompiler.isWebpack4()) { const cacheEntryOptions = new Function( `'use strict'\nreturn ${cacheEntry}` )(); - const basename = path.basename(cacheEntryOptions.assetName); + const basename = path.basename(cacheEntryOptions.name); expect([basename, cacheEntryOptions.contentHash]).toMatchSnapshot( basename @@ -184,7 +174,7 @@ if (getCompiler.isWebpack4()) { const cacheEntryOptions = new Function( `'use strict'\nreturn ${cacheEntry}` )(); - const basename = path.basename(cacheEntryOptions.assetName); + const basename = path.basename(cacheEntryOptions.name); expect([basename, cacheEntryOptions.contentHash]).toMatchSnapshot( basename @@ -257,7 +247,7 @@ if (getCompiler.isWebpack4()) { const cacheEntryOptions = new Function( `'use strict'\nreturn ${cacheEntry}` )(); - const basename = path.basename(cacheEntryOptions.assetName); + const basename = path.basename(cacheEntryOptions.name); expect([basename, cacheEntryOptions.contentHash]).toMatchSnapshot( basename diff --git a/test/filename-option.test.js b/test/filename-option.test.js index f1d72f1..3d714f5 100644 --- a/test/filename-option.test.js +++ b/test/filename-option.test.js @@ -1,3 +1,5 @@ +import path from 'path'; + import CompressionPlugin from '../src/index'; import { @@ -13,25 +15,25 @@ describe('"filename" option', () => { let compiler; beforeEach(() => { + return removeCache(); + }); + + it('matches snapshot for `[path][base].super-compressed.gz[query][fragment]` value ({String})', async () => { compiler = getCompiler( './entry.js', {}, { output: { - path: `${__dirname}/dist`, - filename: '[name].js?var=[hash]', - chunkFilename: '[id].[name].js?ver=[hash]', + path: path.resolve(__dirname, './outputs'), + filename: 'assets/js/[name].js?var=[hash]#hash', + chunkFilename: 'assets/js/[id].[name].js?ver=[hash]#hash', }, } ); - return removeCache(); - }); - - it('matches snapshot for `[path].super-compressed.gz[query]` value ({String})', async () => { new CompressionPlugin({ minRatio: 1, - filename: '[path].super-compressed.gz[query]', + filename: '[path][base].super-compressed.gz[query][fragment]', }).apply(compiler); const stats = await compile(compiler); @@ -41,10 +43,22 @@ describe('"filename" option', () => { expect(getErrors(stats)).toMatchSnapshot('warnings'); }); - it('matches snapshot for `[dir][name].super-compressed.gz[ext][query]` value ({String})', async () => { + it('matches snapshot for `[name][ext].super-compressed.gz[query]` value ({String})', async () => { + compiler = getCompiler( + './entry.js', + {}, + { + output: { + path: path.resolve(__dirname, './outputs'), + filename: '[name].js?var=[hash]', + chunkFilename: '[id].[name].js?ver=[hash]', + }, + } + ); + new CompressionPlugin({ minRatio: 1, - filename: '[dir][name].super-compressed.gz[ext][query]', + filename: '[name].super-compressed[ext].gz[query]', }).apply(compiler); const stats = await compile(compiler); @@ -55,10 +69,22 @@ describe('"filename" option', () => { }); it('matches snapshot for custom function ({Function})', async () => { + compiler = getCompiler( + './entry.js', + {}, + { + output: { + path: path.resolve(__dirname, './outputs'), + filename: '[name].js?var=[hash]#hash', + chunkFilename: '[id].[name].js?ver=[hash]#hash', + }, + } + ); + new CompressionPlugin({ minRatio: 1, filename(info) { - return `${info.path}.gz${info.query}`; + return `[name][ext].gz${info.query}`; }, }).apply(compiler); diff --git a/test/helpers/ModifyExistingAsset.js b/test/helpers/ModifyExistingAsset.js new file mode 100644 index 0000000..702fb18 --- /dev/null +++ b/test/helpers/ModifyExistingAsset.js @@ -0,0 +1,28 @@ +import webpack from 'webpack'; + +// webpack 5 exposes the sources property to ensure the right version of webpack-sources is used +const { ConcatSource } = + // eslint-disable-next-line global-require + webpack.sources || require('webpack-sources'); + +export default class ExistingCommentsFile { + constructor(options = {}) { + this.options = options; + } + + apply(compiler) { + const plugin = { name: this.constructor.name }; + + compiler.hooks.thisCompilation.tap(plugin, (compilation) => { + compilation.hooks.additionalAssets.tap(plugin, () => { + // eslint-disable-next-line no-param-reassign + compilation.assets[this.options.name] = new ConcatSource( + `function changed() {} ${ + this.options.comment ? '/*! CHANGED */' : '' + }`, + compilation.assets[this.options.name] + ); + }); + }); + } +} diff --git a/test/helpers/index.js b/test/helpers/index.js index 360f7f6..5ee1dff 100644 --- a/test/helpers/index.js +++ b/test/helpers/index.js @@ -5,6 +5,7 @@ import getAssetsNameAndSize from './getAssetsNameAndSize'; import getCompiler from './getCompiler'; import getErrors from './getErrors'; import getWarnings from './getWarnings'; +import ModifyExistingAsset from './ModifyExistingAsset'; import normalizeErrors from './normalizeErrors'; import readAsset from './readAsset'; import readsAssets from './readAssets'; @@ -18,6 +19,7 @@ export { getCompiler, getErrors, getWarnings, + ModifyExistingAsset, normalizeErrors, readAsset, readsAssets,