LavaMoat - UI upgrade - secure package naming (#14565)

* lavamoat - update lavamoat-browserify to v15

* lavamoat/ui - unify override across build types

* lavamoat/ui - update policy overrides

* lavamoat - update to lavapack@3 to match lavamoat-browserify@15

* lavamoat - add missing policy

* lavamoat - add missing nanoid policy

* lavamoat - regenerate policy

* deps - update lock

* lavamoat - update policy

* lavamoat - update policy
feature/default_network_editable
kumavis 3 years ago committed by GitHub
parent b0ad0cb1f3
commit 07da8ce589
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      development/build/scripts.js
  2. 76
      lavamoat/browserify/beta/policy-override.json
  3. 8681
      lavamoat/browserify/beta/policy.json
  4. 71
      lavamoat/browserify/flask/policy-override.json
  5. 8744
      lavamoat/browserify/flask/policy.json
  6. 76
      lavamoat/browserify/main/policy-override.json
  7. 8681
      lavamoat/browserify/main/policy.json
  8. 114
      lavamoat/browserify/policy-override.json
  9. 236
      lavamoat/build-system/policy.json
  10. 4
      package.json
  11. 57
      yarn.lock

@ -399,7 +399,7 @@ function createFactoredBuild({
policyName: buildType,
policyOverride: path.resolve(
__dirname,
`../../lavamoat/browserify/${buildType}/policy-override.json`,
`../../lavamoat/browserify/policy-override.json`,
),
writeAutoPolicy: process.env.WRITE_AUTO_POLICY,
};

@ -1,76 +0,0 @@
{
"resources": {
"browser-resolve": {
"packages": {
"core-js": true
}
},
"babel-runtime": {
"packages": {
"@babel/runtime": true
}
},
"keccak": {
"packages": {
"readable-stream": true
}
},
"node-fetch": {
"globals": {
"fetch": true
}
},
"lodash": {
"globals": {
"setTimeout": true,
"clearTimeout": true
}
},
"@ethersproject/random": {
"globals": {
"crypto.getRandomValues": true
}
},
"browser-passworder": {
"globals": {
"crypto": true
}
},
"randombytes": {
"globals": {
"crypto.getRandomValues": true
}
},
"extensionizer": {
"globals": {
"console": true
}
},
"web3": {
"globals": {
"XMLHttpRequest": true
}
},
"storage": {
"globals": {
"localStorage": true
}
},
"react-dom": {
"globals": {
"HTMLIFrameElement": true
}
},
"react-devtools": {
"packages": {
"react-devtools-core": true
}
},
"react-devtools-core": {
"globals": {
"setTimeout": true,
"WebSocket": true
}
}
}
}

File diff suppressed because it is too large Load Diff

@ -1,71 +0,0 @@
{
"resources": {
"browser-resolve": {
"packages": {
"core-js": true
}
},
"babel-runtime": {
"packages": {
"@babel/runtime": true
}
},
"node-fetch": {
"globals": {
"fetch": true
}
},
"lodash": {
"globals": {
"setTimeout": true,
"clearTimeout": true
}
},
"@ethersproject/random": {
"globals": {
"crypto.getRandomValues": true
}
},
"browser-passworder": {
"globals": {
"crypto": true
}
},
"randombytes": {
"globals": {
"crypto.getRandomValues": true
}
},
"extensionizer": {
"globals": {
"console": true
}
},
"web3": {
"globals": {
"XMLHttpRequest": true
}
},
"storage": {
"globals": {
"localStorage": true
}
},
"react-dom": {
"globals": {
"HTMLIFrameElement": true
}
},
"react-devtools": {
"packages": {
"react-devtools-core": true
}
},
"react-devtools-core": {
"globals": {
"setTimeout": true,
"WebSocket": true
}
}
}
}

File diff suppressed because it is too large Load Diff

@ -1,76 +0,0 @@
{
"resources": {
"browser-resolve": {
"packages": {
"core-js": true
}
},
"babel-runtime": {
"packages": {
"@babel/runtime": true
}
},
"keccak": {
"packages": {
"readable-stream": true
}
},
"node-fetch": {
"globals": {
"fetch": true
}
},
"lodash": {
"globals": {
"setTimeout": true,
"clearTimeout": true
}
},
"@ethersproject/random": {
"globals": {
"crypto.getRandomValues": true
}
},
"browser-passworder": {
"globals": {
"crypto": true
}
},
"randombytes": {
"globals": {
"crypto.getRandomValues": true
}
},
"extensionizer": {
"globals": {
"console": true
}
},
"web3": {
"globals": {
"XMLHttpRequest": true
}
},
"storage": {
"globals": {
"localStorage": true
}
},
"react-dom": {
"globals": {
"HTMLIFrameElement": true
}
},
"react-devtools": {
"packages": {
"react-devtools-core": true
}
},
"react-devtools-core": {
"globals": {
"setTimeout": true,
"WebSocket": true
}
}
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,114 @@
{
"resources": {
"browserify>browser-resolve": {
"packages": {
"ethjs-query>babel-runtime>core-js": true
}
},
"ethjs-query>babel-runtime": {
"packages": {
"@babel/runtime": true
}
},
"@metamask/controllers>web3-provider-engine>eth-json-rpc-middleware>node-fetch": {
"globals": {
"fetch": true
}
},
"@metamask/controllers>web3-provider-engine>cross-fetch>node-fetch": {
"globals": {
"fetch": true
}
},
"3box>graphql-request>cross-fetch>node-fetch": {
"globals": {
"fetch": true
}
},
"lodash": {
"globals": {
"setTimeout": true,
"clearTimeout": true
}
},
"ethers>@ethersproject/random": {
"globals": {
"crypto.getRandomValues": true
}
},
"eth-keyring-controller>browser-passworder": {
"globals": {
"crypto": true
}
},
"ethereumjs-wallet>randombytes": {
"globals": {
"crypto.getRandomValues": true
}
},
"web3": {
"globals": {
"XMLHttpRequest": true
}
},
"react-dom": {
"globals": {
"HTMLIFrameElement": true
}
},
"react-devtools": {
"packages": {
"react-devtools>react-devtools-core": true
}
},
"react-devtools>react-devtools-core": {
"globals": {
"setTimeout": true,
"WebSocket": true
}
},
"node-fetch": {
"globals": {
"fetch": true,
"Headers": true,
"Request": true,
"Response": true
}
},
"nanoid": {
"globals": {
"crypto.getRandomValues": true
}
},
"@metamask/iframe-execution-environment-service>nanoid": {
"globals": {
"crypto.getRandomValues": true
}
},
"@metamask/snap-controllers>nanoid": {
"globals": {
"crypto.getRandomValues": true
}
},
"@metamask/controllers>nanoid": {
"globals": {
"crypto.getRandomValues": true
}
},
"@metamask/smart-transactions-controller>@metamask/controllers>nanoid": {
"globals": {
"crypto.getRandomValues": true
}
},
"depcheck>@vue/compiler-sfc>postcss>nanoid": {
"globals": {
"crypto.getRandomValues": true
}
},
"dependency-tree>precinct>detective-postcss>postcss>nanoid": {
"globals": {
"crypto.getRandomValues": true
}
}
}
}

@ -1,5 +1,11 @@
{
"resources": {
"3box>ipfs>superstruct>clone-deep>shallow-clone>mixin-object": {
"packages": {
"3box>ipfs>superstruct>clone-deep>shallow-clone>mixin-object>for-in": true,
"webpack>micromatch>extglob>extend-shallow>is-extendable": true
}
},
"@babel/code-frame": {
"globals": {
"console.warn": true,
@ -934,12 +940,12 @@
},
"packages": {
"@lavamoat/lavapack>combine-source-map": true,
"@lavamoat/lavapack>lavamoat-core": true,
"@lavamoat/lavapack>readable-stream": true,
"@lavamoat/lavapack>umd": true,
"browserify>JSONStream": true,
"lavamoat>json-stable-stringify": true,
"lavamoat>lavamoat-core": true,
"nyc>convert-source-map": true,
"readable-stream": true,
"through2": true
}
},
@ -975,28 +981,23 @@
"@lavamoat/lavapack>combine-source-map>inline-source-map>source-map": true
}
},
"@lavamoat/lavapack>lavamoat-core": {
"@lavamoat/lavapack>readable-stream": {
"builtin": {
"events": true,
"fs.existsSync": true,
"fs.readFileSync": true,
"module.createRequire": true,
"module.createRequireFromPath": true,
"path.extname": true,
"path.join": true,
"path.sep": true
"buffer.Buffer": true,
"events.EventEmitter": true,
"stream": true,
"util": true
},
"globals": {
"__dirname": true,
"console.warn": true,
"define": true
"process.env.READABLE_STREAM": true,
"process.nextTick": true,
"process.stderr": true,
"process.stdout": true
},
"packages": {
"brfs>resolve": true,
"lavamoat-browserify>merge-deep": true,
"lavamoat>json-stable-stringify": true,
"lavamoat>lavamoat-tofu": true,
"nyc>process-on-spawn>fromentries": true
"@storybook/api>util-deprecate": true,
"browserify>string_decoder": true,
"pumpify>inherits": true
}
},
"@metamask/jazzicon>color>color-convert": {
@ -1602,10 +1603,10 @@
"browserify>module-deps>stream-combiner2": true,
"browserify>module-deps>through2": true,
"browserify>parents": true,
"lavamoat-browserify>browser-resolve": true,
"loose-envify": true,
"pumpify>inherits": true,
"readable-stream": true,
"watchify>browserify>browser-resolve": true,
"watchify>defined": true,
"watchify>xtend": true
}
@ -5393,12 +5394,28 @@
},
"packages": {
"@lavamoat/lavapack": true,
"@lavamoat/lavapack>lavamoat-core": true,
"duplexify": true,
"lavamoat-browserify>browser-resolve": true,
"lavamoat-browserify>concat-stream": true,
"lavamoat-browserify>readable-stream": true,
"lavamoat-browserify>through2": true,
"lavamoat>json-stable-stringify": true
"lavamoat>@lavamoat/aa": true,
"lavamoat>json-stable-stringify": true,
"lavamoat>lavamoat-core": true
}
},
"lavamoat-browserify>browser-resolve": {
"builtin": {
"fs.readFile": true,
"fs.readFileSync": true,
"path": true
},
"globals": {
"__dirname": true,
"process.platform": true
},
"packages": {
"brfs>resolve": true
}
},
"lavamoat-browserify>concat-stream": {
@ -5412,70 +5429,6 @@
"pumpify>inherits": true
}
},
"lavamoat-browserify>merge-deep": {
"packages": {
"gulp-zip>plugin-error>arr-union": true,
"lavamoat-browserify>merge-deep>clone-deep": true,
"lavamoat-browserify>merge-deep>kind-of": true
}
},
"lavamoat-browserify>merge-deep>clone-deep": {
"packages": {
"gulp>gulp-cli>liftoff>is-plain-object": true,
"lavamoat-browserify>merge-deep>clone-deep>for-own": true,
"lavamoat-browserify>merge-deep>clone-deep>kind-of": true,
"lavamoat-browserify>merge-deep>clone-deep>lazy-cache": true,
"lavamoat-browserify>merge-deep>clone-deep>shallow-clone": true
}
},
"lavamoat-browserify>merge-deep>clone-deep>for-own": {
"packages": {
"gulp>undertaker>object.reduce>for-own>for-in": true
}
},
"lavamoat-browserify>merge-deep>clone-deep>kind-of": {
"packages": {
"browserify>insert-module-globals>is-buffer": true
}
},
"lavamoat-browserify>merge-deep>clone-deep>lazy-cache": {
"globals": {
"process.env.TRAVIS": true,
"process.env.UNLAZY": true
}
},
"lavamoat-browserify>merge-deep>clone-deep>shallow-clone": {
"packages": {
"lavamoat-browserify>merge-deep>clone-deep>shallow-clone>kind-of": true,
"lavamoat-browserify>merge-deep>clone-deep>shallow-clone>lazy-cache": true,
"lavamoat-browserify>merge-deep>clone-deep>shallow-clone>mixin-object": true,
"webpack>micromatch>extglob>extend-shallow>is-extendable": true
}
},
"lavamoat-browserify>merge-deep>clone-deep>shallow-clone>kind-of": {
"globals": {
"Buffer": true
},
"packages": {
"browserify>insert-module-globals>is-buffer": true
}
},
"lavamoat-browserify>merge-deep>clone-deep>shallow-clone>lazy-cache": {
"globals": {
"process.env.UNLAZY": true
}
},
"lavamoat-browserify>merge-deep>clone-deep>shallow-clone>mixin-object": {
"packages": {
"lavamoat-browserify>merge-deep>clone-deep>shallow-clone>mixin-object>for-in": true,
"webpack>micromatch>extglob>extend-shallow>is-extendable": true
}
},
"lavamoat-browserify>merge-deep>kind-of": {
"packages": {
"browserify>insert-module-globals>is-buffer": true
}
},
"lavamoat-browserify>readable-stream": {
"builtin": {
"buffer.Buffer": true,
@ -5544,11 +5497,108 @@
"mocha>supports-color>has-flag": true
}
},
"lavamoat>@lavamoat/aa": {
"builtin": {
"fs.readFileSync": true,
"fs.statSync": true,
"path.dirname": true,
"path.join": true,
"path.relative": true,
"path.resolve": true
},
"globals": {
"console.error": true,
"performantResolve": true
},
"packages": {
"brfs>resolve": true
}
},
"lavamoat>json-stable-stringify": {
"packages": {
"lavamoat>json-stable-stringify>jsonify": true
}
},
"lavamoat>lavamoat-core": {
"builtin": {
"events": true,
"fs.existsSync": true,
"fs.readFileSync": true,
"path.extname": true,
"path.join": true
},
"globals": {
"__dirname": true,
"console.warn": true,
"define": true,
"packages": true,
"resources": true
},
"packages": {
"lavamoat>json-stable-stringify": true,
"lavamoat>lavamoat-core>merge-deep": true,
"lavamoat>lavamoat-tofu": true,
"nyc>process-on-spawn>fromentries": true
}
},
"lavamoat>lavamoat-core>merge-deep": {
"packages": {
"gulp-zip>plugin-error>arr-union": true,
"lavamoat>lavamoat-core>merge-deep>clone-deep": true,
"lavamoat>lavamoat-core>merge-deep>kind-of": true
}
},
"lavamoat>lavamoat-core>merge-deep>clone-deep": {
"packages": {
"gulp>gulp-cli>liftoff>is-plain-object": true,
"lavamoat>lavamoat-core>merge-deep>clone-deep>for-own": true,
"lavamoat>lavamoat-core>merge-deep>clone-deep>kind-of": true,
"lavamoat>lavamoat-core>merge-deep>clone-deep>lazy-cache": true,
"lavamoat>lavamoat-core>merge-deep>clone-deep>shallow-clone": true
}
},
"lavamoat>lavamoat-core>merge-deep>clone-deep>for-own": {
"packages": {
"gulp>undertaker>object.reduce>for-own>for-in": true
}
},
"lavamoat>lavamoat-core>merge-deep>clone-deep>kind-of": {
"packages": {
"browserify>insert-module-globals>is-buffer": true
}
},
"lavamoat>lavamoat-core>merge-deep>clone-deep>lazy-cache": {
"globals": {
"process.env.TRAVIS": true,
"process.env.UNLAZY": true
}
},
"lavamoat>lavamoat-core>merge-deep>clone-deep>shallow-clone": {
"packages": {
"3box>ipfs>superstruct>clone-deep>shallow-clone>mixin-object": true,
"lavamoat>lavamoat-core>merge-deep>clone-deep>shallow-clone>kind-of": true,
"lavamoat>lavamoat-core>merge-deep>clone-deep>shallow-clone>lazy-cache": true,
"webpack>micromatch>extglob>extend-shallow>is-extendable": true
}
},
"lavamoat>lavamoat-core>merge-deep>clone-deep>shallow-clone>kind-of": {
"globals": {
"Buffer": true
},
"packages": {
"browserify>insert-module-globals>is-buffer": true
}
},
"lavamoat>lavamoat-core>merge-deep>clone-deep>shallow-clone>lazy-cache": {
"globals": {
"process.env.UNLAZY": true
}
},
"lavamoat>lavamoat-core>merge-deep>kind-of": {
"packages": {
"browserify>insert-module-globals>is-buffer": true
}
},
"lavamoat>lavamoat-tofu": {
"globals": {
"console.log": true
@ -7050,20 +7100,6 @@
"fast-glob>picomatch": true
}
},
"watchify>browserify>browser-resolve": {
"builtin": {
"fs.readFile": true,
"fs.readFileSync": true,
"path": true
},
"globals": {
"__dirname": true,
"process.platform": true
},
"packages": {
"brfs>resolve": true
}
},
"watchify>browserify>shasum-object": {
"builtin": {
"crypto.createHash": true

@ -243,7 +243,7 @@
"@babel/preset-typescript": "^7.16.7",
"@babel/register": "^7.5.5",
"@lavamoat/allow-scripts": "^2.0.3",
"@lavamoat/lavapack": "^2.0.4",
"@lavamoat/lavapack": "^3.0.0",
"@metamask/auto-changelog": "^2.1.0",
"@metamask/eslint-config": "^9.0.0",
"@metamask/eslint-config-jest": "^9.0.0",
@ -330,7 +330,7 @@
"jsdom": "^11.2.0",
"koa": "^2.7.0",
"lavamoat": "^6.1.2",
"lavamoat-browserify": "^14.1.0",
"lavamoat-browserify": "^15.1.2",
"lavamoat-viz": "^6.0.9",
"lockfile-lint": "^4.0.0",
"loose-envify": "^1.4.0",

@ -2535,16 +2535,17 @@
"@npmcli/run-script" "^1.8.1"
yargs "^16.2.0"
"@lavamoat/lavapack@^2.0.3", "@lavamoat/lavapack@^2.0.4":
version "2.0.4"
resolved "https://registry.yarnpkg.com/@lavamoat/lavapack/-/lavapack-2.0.4.tgz#504d942837c0141a385141220917d81d9f9f4c95"
integrity sha512-ttaEWUiROG12fGwzFcBlXNr39dzpU4W6Es7rFmS5ihT7j//eT1NrV73S357Lw8cmfZezvz1/ca1fqnZcZvarPw==
"@lavamoat/lavapack@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@lavamoat/lavapack/-/lavapack-3.0.0.tgz#5f5257e52963ceab90022ac7163b30000a0b1f03"
integrity sha512-9L1gRS2fmLL8vLZZtxIPo9f9ricFjPz8k8F8PSHP0ZBPsGqif/V1vGwzwsYwtoYrsSxIAp6y4FBt+OjDH+3Vlw==
dependencies:
JSONStream "^1.3.5"
combine-source-map "^0.8.0"
convert-source-map "^1.7.0"
json-stable-stringify "^1.0.1"
lavamoat-core "^11.0.1"
lavamoat-core "^12.0.0"
readable-stream "^3.6.0"
through2 "^4.0.2"
umd "^3.0.3"
@ -8274,7 +8275,7 @@ clone@^1.0.0, clone@^1.0.2:
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
integrity sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=
clone@^2.0.0, clone@^2.1.1, clone@^2.1.2:
clone@^2.0.0, clone@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
@ -17234,26 +17235,24 @@ latest-version@^5.0.0:
dependencies:
package-json "^6.3.0"
lavamoat-browserify@^14.1.0:
version "14.1.0"
resolved "https://registry.yarnpkg.com/lavamoat-browserify/-/lavamoat-browserify-14.1.0.tgz#bfe11d83e1c4cab295f87a0446c8f5ece7a3b20e"
integrity sha512-Q6DaR5ETmvUkrPnW6p1bXrDZxFh1eJr8aJB903iDozAYT6ftbHnvZL8pOCvCt80LW6Tj72I+tlbo0Ig9xjEzyA==
lavamoat-browserify@^15.1.2:
version "15.1.2"
resolved "https://registry.yarnpkg.com/lavamoat-browserify/-/lavamoat-browserify-15.1.2.tgz#97c2b6ba89af94b6d9d4ac205ffacdb12560f9a8"
integrity sha512-k/rcR7Y2e4g02N3bpYUtY/5HUCX9ZXfDZCiEVMc1otPjOAUCAtiE/vayWfm7TYHrQG+Mi8rcL+yFDLLVBfa5PA==
dependencies:
"@lavamoat/lavapack" "^2.0.3"
JSONStream "^1.3.5"
clone "^2.1.2"
"@babel/code-frame" "^7.16.7"
"@lavamoat/aa" "^3.0.0"
"@lavamoat/lavapack" "^3.0.0"
browser-resolve "^2.0.0"
concat-stream "^2.0.0"
convert-source-map "^1.8.0"
duplexify "^4.1.1"
json-stable-stringify "^1.0.1"
lavamoat-core "^11.0.0"
merge-deep "^3.0.2"
offset-sourcemap-lines "^1.0.1"
lavamoat-core "^12.1.0"
pify "^4.0.1"
readable-stream "^3.6.0"
safe-buffer "^5.1.2"
source-map "^0.7.3"
through2 "^3.0.0"
umd "^3.0.3"
lavamoat-core@^10.0.1:
version "10.0.1"
@ -17266,18 +17265,7 @@ lavamoat-core@^10.0.1:
merge-deep "^3.0.2"
resolve "^1.15.1"
lavamoat-core@^11.0.0, lavamoat-core@^11.0.1:
version "11.0.1"
resolved "https://registry.yarnpkg.com/lavamoat-core/-/lavamoat-core-11.0.1.tgz#7560fdd8442e2ea4956f4b7636fd615b806afc93"
integrity sha512-Mz41jirTV1fiwkPfzkM73uW1bdQYGBUxLcHStERsD4/1XZYo6j3q88vJQvUJGV0yzB2IV/NMesuT/aoW2QxABA==
dependencies:
fromentries "^1.2.0"
json-stable-stringify "^1.0.1"
lavamoat-tofu "^6.0.0"
merge-deep "^3.0.2"
resolve "^1.15.1"
lavamoat-core@^12.1.0:
lavamoat-core@^12.0.0, lavamoat-core@^12.1.0:
version "12.1.0"
resolved "https://registry.yarnpkg.com/lavamoat-core/-/lavamoat-core-12.1.0.tgz#a70be4560b15b7a016e78f218d4ce005bc808f6e"
integrity sha512-M9I1gDwLFN2fuZTyRcMLP82DWDOCJAanSDhZWqQ0la/tSdrOci9o9C7D0URHZI0uEn0yJuf0rHrmbUC/0KPV6A==
@ -17295,7 +17283,7 @@ lavamoat-tofu@^5.1.3:
"@babel/parser" "^7.10.1"
"@babel/traverse" "^7.10.1"
lavamoat-tofu@^6.0.0, lavamoat-tofu@^6.0.1:
lavamoat-tofu@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/lavamoat-tofu/-/lavamoat-tofu-6.0.1.tgz#df3a1d09021790d5a4ccc1039751e9b3c2df85f6"
integrity sha512-QotLOiEcGBlWBJPYSZKDRRFchpwN9s3Ra8DDTuxJ57dGTBKOvvvfA+BpAjH/w1JcEhFkl5Wkc57Hl1oVzE8D2A==
@ -20405,13 +20393,6 @@ observable-webworkers@^1.0.0:
resolved "https://registry.yarnpkg.com/observable-webworkers/-/observable-webworkers-1.0.0.tgz#dcbd484a9644d512accc351962c6e710313fbb68"
integrity sha512-+cECwCR8IEh8UY5nefQVLO9Cydqpk1izO+o7BABmKjXfJZyEOzBWY3ss5jbOPM6KmEa9aQExvAtTW6tVTOsNAQ==
offset-sourcemap-lines@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/offset-sourcemap-lines/-/offset-sourcemap-lines-1.0.1.tgz#5854dff74b73fc06efcb61d7b721a8113d99be92"
integrity sha1-WFTf90tz/Abvy2HXtyGoET2ZvpI=
dependencies:
source-map "^0.5.0"
on-finished@^2.3.0, on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"

Loading…
Cancel
Save