diff options
author | claudiahdz <cghr1990@gmail.com> | 2020-03-31 23:09:27 +0300 |
---|---|---|
committer | isaacs <i@izs.me> | 2020-05-08 04:12:58 +0300 |
commit | e97662e25f92840f7e8a683f8e2cda2f5874d945 (patch) | |
tree | 121568f55a85593e09e6e0e98b7c3b9bc09b086f /node_modules/make-fetch-happen | |
parent | 29be1c9d1845d36c6eb2ef9f2c0ec2132066bb0f (diff) |
chore: rm libcipm
Diffstat (limited to 'node_modules/make-fetch-happen')
42 files changed, 0 insertions, 7098 deletions
diff --git a/node_modules/make-fetch-happen/CHANGELOG.md b/node_modules/make-fetch-happen/CHANGELOG.md deleted file mode 100644 index c73bd4de4..000000000 --- a/node_modules/make-fetch-happen/CHANGELOG.md +++ /dev/null @@ -1,587 +0,0 @@ -# Change Log - -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. - -<a name="5.0.2"></a> -## [5.0.2](https://github.com/zkat/make-fetch-happen/compare/v5.0.1...v5.0.2) (2019-11-14) - - -### Bug Fixes - -* **streams:** only provide a size and not a boolean to highWaterMark & update travis environments ([a367a14](https://github.com/zkat/make-fetch-happen/commit/a367a14)) -* `highWaterMark` bug @ v5 ([#10](https://github.com/zkat/make-fetch-happen/issues/10)) ([4e4f4e0](https://github.com/zkat/make-fetch-happen/commit/4e4f4e0)) - - - -<a name="5.0.1"></a> -## [5.0.1](https://github.com/zkat/make-fetch-happen/compare/v5.0.0...v5.0.1) (2019-10-23) - - - -<a name="5.0.0"></a> -# [5.0.0](https://github.com/zkat/make-fetch-happen/compare/v4.0.2...v5.0.0) (2019-07-15) - - -### Features - -* cacache@12, no need for uid/gid opts ([fdb956f](https://github.com/zkat/make-fetch-happen/commit/fdb956f)) - - -### BREAKING CHANGES - -* cache uid and gid are inferred from the cache folder itself, -not passed in as options. - - - -<a name="4.0.2"></a> -## [4.0.2](https://github.com/zkat/make-fetch-happen/compare/v4.0.1...v4.0.2) (2019-07-02) - - - -<a name="4.0.1"></a> -## [4.0.1](https://github.com/zkat/make-fetch-happen/compare/v4.0.0...v4.0.1) (2018-04-12) - - -### Bug Fixes - -* **integrity:** use new sri.match() for verification ([4f371a0](https://github.com/zkat/make-fetch-happen/commit/4f371a0)) - - - -<a name="4.0.0"></a> -# [4.0.0](https://github.com/zkat/make-fetch-happen/compare/v3.0.0...v4.0.0) (2018-04-09) - - -### meta - -* drop node@4, add node@9 ([7b0191a](https://github.com/zkat/make-fetch-happen/commit/7b0191a)) - - -### BREAKING CHANGES - -* node@4 is no longer supported - - - -<a name="3.0.0"></a> -# [3.0.0](https://github.com/zkat/make-fetch-happen/compare/v2.6.0...v3.0.0) (2018-03-12) - - -### Bug Fixes - -* **license:** switch to ISC ([#49](https://github.com/zkat/make-fetch-happen/issues/49)) ([bf90c6d](https://github.com/zkat/make-fetch-happen/commit/bf90c6d)) -* **standard:** standard@11 update ([ff0aa70](https://github.com/zkat/make-fetch-happen/commit/ff0aa70)) - - -### BREAKING CHANGES - -* **license:** license changed from CC0 to ISC. - - - -<a name="2.6.0"></a> -# [2.6.0](https://github.com/zkat/make-fetch-happen/compare/v2.5.0...v2.6.0) (2017-11-14) - - -### Bug Fixes - -* **integrity:** disable node-fetch compress when checking integrity (#42) ([a7cc74c](https://github.com/zkat/make-fetch-happen/commit/a7cc74c)) - - -### Features - -* **onretry:** Add `options.onRetry` (#48) ([f90ccff](https://github.com/zkat/make-fetch-happen/commit/f90ccff)) - - - -<a name="2.5.0"></a> -# [2.5.0](https://github.com/zkat/make-fetch-happen/compare/v2.4.13...v2.5.0) (2017-08-24) - - -### Bug Fixes - -* **agent:** support timeout durations greater than 30 seconds ([04875ae](https://github.com/zkat/make-fetch-happen/commit/04875ae)), closes [#35](https://github.com/zkat/make-fetch-happen/issues/35) - - -### Features - -* **cache:** export cache deletion functionality (#40) ([3da4250](https://github.com/zkat/make-fetch-happen/commit/3da4250)) - - - -<a name="2.4.13"></a> -## [2.4.13](https://github.com/zkat/make-fetch-happen/compare/v2.4.12...v2.4.13) (2017-06-29) - - -### Bug Fixes - -* **deps:** bump other deps for bugfixes ([eab8297](https://github.com/zkat/make-fetch-happen/commit/eab8297)) -* **proxy:** bump proxy deps with bugfixes (#32) ([632f860](https://github.com/zkat/make-fetch-happen/commit/632f860)), closes [#32](https://github.com/zkat/make-fetch-happen/issues/32) - - - -<a name="2.4.12"></a> -## [2.4.12](https://github.com/zkat/make-fetch-happen/compare/v2.4.11...v2.4.12) (2017-06-06) - - -### Bug Fixes - -* **cache:** encode x-local-cache-etc headers to be header-safe ([dc9fb1b](https://github.com/zkat/make-fetch-happen/commit/dc9fb1b)) - - - -<a name="2.4.11"></a> -## [2.4.11](https://github.com/zkat/make-fetch-happen/compare/v2.4.10...v2.4.11) (2017-06-05) - - -### Bug Fixes - -* **deps:** bump deps with ssri fix ([bef1994](https://github.com/zkat/make-fetch-happen/commit/bef1994)) - - - -<a name="2.4.10"></a> -## [2.4.10](https://github.com/zkat/make-fetch-happen/compare/v2.4.9...v2.4.10) (2017-05-31) - - -### Bug Fixes - -* **deps:** bump dep versions with bugfixes ([0af4003](https://github.com/zkat/make-fetch-happen/commit/0af4003)) -* **proxy:** use auth parameter for proxy authentication (#30) ([c687306](https://github.com/zkat/make-fetch-happen/commit/c687306)) - - - -<a name="2.4.9"></a> -## [2.4.9](https://github.com/zkat/make-fetch-happen/compare/v2.4.8...v2.4.9) (2017-05-25) - - -### Bug Fixes - -* **cache:** use the passed-in promise for resolving cache stuff ([4c46257](https://github.com/zkat/make-fetch-happen/commit/4c46257)) - - - -<a name="2.4.8"></a> -## [2.4.8](https://github.com/zkat/make-fetch-happen/compare/v2.4.7...v2.4.8) (2017-05-25) - - -### Bug Fixes - -* **cache:** pass uid/gid/Promise through to cache ([a847c92](https://github.com/zkat/make-fetch-happen/commit/a847c92)) - - - -<a name="2.4.7"></a> -## [2.4.7](https://github.com/zkat/make-fetch-happen/compare/v2.4.6...v2.4.7) (2017-05-24) - - -### Bug Fixes - -* **deps:** pull in various fixes from deps ([fc2a587](https://github.com/zkat/make-fetch-happen/commit/fc2a587)) - - - -<a name="2.4.6"></a> -## [2.4.6](https://github.com/zkat/make-fetch-happen/compare/v2.4.5...v2.4.6) (2017-05-24) - - -### Bug Fixes - -* **proxy:** choose agent for http(s)-proxy by protocol of destUrl ([ea4832a](https://github.com/zkat/make-fetch-happen/commit/ea4832a)) -* **proxy:** make socks proxy working ([1de810a](https://github.com/zkat/make-fetch-happen/commit/1de810a)) -* **proxy:** revert previous proxy solution ([563b0d8](https://github.com/zkat/make-fetch-happen/commit/563b0d8)) - - - -<a name="2.4.5"></a> -## [2.4.5](https://github.com/zkat/make-fetch-happen/compare/v2.4.4...v2.4.5) (2017-05-24) - - -### Bug Fixes - -* **proxy:** use the destination url when determining agent ([1a714e7](https://github.com/zkat/make-fetch-happen/commit/1a714e7)) - - - -<a name="2.4.4"></a> -## [2.4.4](https://github.com/zkat/make-fetch-happen/compare/v2.4.3...v2.4.4) (2017-05-23) - - -### Bug Fixes - -* **redirect:** handle redirects explicitly (#27) ([4c4af54](https://github.com/zkat/make-fetch-happen/commit/4c4af54)) - - - -<a name="2.4.3"></a> -## [2.4.3](https://github.com/zkat/make-fetch-happen/compare/v2.4.2...v2.4.3) (2017-05-06) - - -### Bug Fixes - -* **redirect:** redirects now delete authorization if hosts fail to match ([c071805](https://github.com/zkat/make-fetch-happen/commit/c071805)) - - - -<a name="2.4.2"></a> -## [2.4.2](https://github.com/zkat/make-fetch-happen/compare/v2.4.1...v2.4.2) (2017-05-04) - - -### Bug Fixes - -* **cache:** reduce race condition window by checking for content ([24544b1](https://github.com/zkat/make-fetch-happen/commit/24544b1)) -* **match:** Rewrite the conditional stream logic (#25) ([66bba4b](https://github.com/zkat/make-fetch-happen/commit/66bba4b)) - - - -<a name="2.4.1"></a> -## [2.4.1](https://github.com/zkat/make-fetch-happen/compare/v2.4.0...v2.4.1) (2017-04-28) - - -### Bug Fixes - -* **memoization:** missed spots + allow passthrough of memo objs ([ac0cd12](https://github.com/zkat/make-fetch-happen/commit/ac0cd12)) - - - -<a name="2.4.0"></a> -# [2.4.0](https://github.com/zkat/make-fetch-happen/compare/v2.3.0...v2.4.0) (2017-04-28) - - -### Bug Fixes - -* **memoize:** cacache had a broken memoizer ([8a9ed4c](https://github.com/zkat/make-fetch-happen/commit/8a9ed4c)) - - -### Features - -* **memoization:** only slurp stuff into memory if opts.memoize is not false ([0744adc](https://github.com/zkat/make-fetch-happen/commit/0744adc)) - - - -<a name="2.3.0"></a> -# [2.3.0](https://github.com/zkat/make-fetch-happen/compare/v2.2.6...v2.3.0) (2017-04-27) - - -### Features - -* **agent:** added opts.strictSSL and opts.localAddress ([c35015a](https://github.com/zkat/make-fetch-happen/commit/c35015a)) -* **proxy:** Added opts.noProxy and NO_PROXY support ([f45c915](https://github.com/zkat/make-fetch-happen/commit/f45c915)) - - - -<a name="2.2.6"></a> -## [2.2.6](https://github.com/zkat/make-fetch-happen/compare/v2.2.5...v2.2.6) (2017-04-26) - - -### Bug Fixes - -* **agent:** check uppercase & lowercase proxy env (#24) ([acf2326](https://github.com/zkat/make-fetch-happen/commit/acf2326)), closes [#22](https://github.com/zkat/make-fetch-happen/issues/22) -* **deps:** switch to node-fetch-npm and stop bundling ([3db603b](https://github.com/zkat/make-fetch-happen/commit/3db603b)) - - - -<a name="2.2.5"></a> -## [2.2.5](https://github.com/zkat/make-fetch-happen/compare/v2.2.4...v2.2.5) (2017-04-23) - - -### Bug Fixes - -* **deps:** bump cacache and use its size feature ([926c1d3](https://github.com/zkat/make-fetch-happen/commit/926c1d3)) - - - -<a name="2.2.4"></a> -## [2.2.4](https://github.com/zkat/make-fetch-happen/compare/v2.2.3...v2.2.4) (2017-04-18) - - -### Bug Fixes - -* **integrity:** hash verification issues fixed ([07f9402](https://github.com/zkat/make-fetch-happen/commit/07f9402)) - - - -<a name="2.2.3"></a> -## [2.2.3](https://github.com/zkat/make-fetch-happen/compare/v2.2.2...v2.2.3) (2017-04-18) - - -### Bug Fixes - -* **staleness:** responses older than 8h were never stale :< ([b54dd75](https://github.com/zkat/make-fetch-happen/commit/b54dd75)) -* **warning:** remove spurious warning, make format more spec-compliant ([2e4f6bb](https://github.com/zkat/make-fetch-happen/commit/2e4f6bb)) - - - -<a name="2.2.2"></a> -## [2.2.2](https://github.com/zkat/make-fetch-happen/compare/v2.2.1...v2.2.2) (2017-04-12) - - -### Bug Fixes - -* **retry:** stop retrying 404s ([6fafd53](https://github.com/zkat/make-fetch-happen/commit/6fafd53)) - - - -<a name="2.2.1"></a> -## [2.2.1](https://github.com/zkat/make-fetch-happen/compare/v2.2.0...v2.2.1) (2017-04-10) - - -### Bug Fixes - -* **deps:** move test-only deps to devDeps ([2daaf80](https://github.com/zkat/make-fetch-happen/commit/2daaf80)) - - - -<a name="2.2.0"></a> -# [2.2.0](https://github.com/zkat/make-fetch-happen/compare/v2.1.0...v2.2.0) (2017-04-09) - - -### Bug Fixes - -* **cache:** treat caches as private ([57b7dc2](https://github.com/zkat/make-fetch-happen/commit/57b7dc2)) - - -### Features - -* **retry:** accept shorthand retry settings ([dfed69d](https://github.com/zkat/make-fetch-happen/commit/dfed69d)) - - - -<a name="2.1.0"></a> -# [2.1.0](https://github.com/zkat/make-fetch-happen/compare/v2.0.4...v2.1.0) (2017-04-09) - - -### Features - -* **cache:** cache now obeys Age and a variety of other things (#13) ([7b9652d](https://github.com/zkat/make-fetch-happen/commit/7b9652d)) - - - -<a name="2.0.4"></a> -## [2.0.4](https://github.com/zkat/make-fetch-happen/compare/v2.0.3...v2.0.4) (2017-04-09) - - -### Bug Fixes - -* **agent:** accept Request as fetch input, not just strings ([b71669a](https://github.com/zkat/make-fetch-happen/commit/b71669a)) - - - -<a name="2.0.3"></a> -## [2.0.3](https://github.com/zkat/make-fetch-happen/compare/v2.0.2...v2.0.3) (2017-04-09) - - -### Bug Fixes - -* **deps:** seriously ([c29e7e7](https://github.com/zkat/make-fetch-happen/commit/c29e7e7)) - - - -<a name="2.0.2"></a> -## [2.0.2](https://github.com/zkat/make-fetch-happen/compare/v2.0.1...v2.0.2) (2017-04-09) - - -### Bug Fixes - -* **deps:** use bundleDeps instead ([c36ebf0](https://github.com/zkat/make-fetch-happen/commit/c36ebf0)) - - - -<a name="2.0.1"></a> -## [2.0.1](https://github.com/zkat/make-fetch-happen/compare/v2.0.0...v2.0.1) (2017-04-09) - - -### Bug Fixes - -* **deps:** make sure node-fetch tarball included in release ([3bf49d1](https://github.com/zkat/make-fetch-happen/commit/3bf49d1)) - - - -<a name="2.0.0"></a> -# [2.0.0](https://github.com/zkat/make-fetch-happen/compare/v1.7.0...v2.0.0) (2017-04-09) - - -### Bug Fixes - -* **deps:** manually pull in newer node-fetch to avoid babel prod dep ([66e5e87](https://github.com/zkat/make-fetch-happen/commit/66e5e87)) -* **retry:** be more specific about when we retry ([a47b782](https://github.com/zkat/make-fetch-happen/commit/a47b782)) - - -### Features - -* **agent:** add ca/cert/key support to auto-agent (#15) ([57585a7](https://github.com/zkat/make-fetch-happen/commit/57585a7)) - - -### BREAKING CHANGES - -* **agent:** pac proxies are no longer supported. -* **retry:** Retry logic has changes. - -* 404s, 420s, and 429s all retry now. -* ENOTFOUND no longer retries. -* Only ECONNRESET, ECONNREFUSED, EADDRINUSE, ETIMEDOUT, and `request-timeout` errors are retried. - - - -<a name="1.7.0"></a> -# [1.7.0](https://github.com/zkat/make-fetch-happen/compare/v1.6.0...v1.7.0) (2017-04-08) - - -### Features - -* **cache:** add useful headers to inform users about cached data ([9bd7b00](https://github.com/zkat/make-fetch-happen/commit/9bd7b00)) - - - -<a name="1.6.0"></a> -# [1.6.0](https://github.com/zkat/make-fetch-happen/compare/v1.5.1...v1.6.0) (2017-04-06) - - -### Features - -* **agent:** better, keepalive-supporting, default http agents ([16277f6](https://github.com/zkat/make-fetch-happen/commit/16277f6)) - - - -<a name="1.5.1"></a> -## [1.5.1](https://github.com/zkat/make-fetch-happen/compare/v1.5.0...v1.5.1) (2017-04-05) - - -### Bug Fixes - -* **cache:** bump cacache for its fixed error messages ([2f2b916](https://github.com/zkat/make-fetch-happen/commit/2f2b916)) -* **cache:** fix handling of errors in cache reads ([5729222](https://github.com/zkat/make-fetch-happen/commit/5729222)) - - - -<a name="1.5.0"></a> -# [1.5.0](https://github.com/zkat/make-fetch-happen/compare/v1.4.0...v1.5.0) (2017-04-04) - - -### Features - -* **retry:** retry requests on 408 timeouts, too ([8d8b5bd](https://github.com/zkat/make-fetch-happen/commit/8d8b5bd)) - - - -<a name="1.4.0"></a> -# [1.4.0](https://github.com/zkat/make-fetch-happen/compare/v1.3.1...v1.4.0) (2017-04-04) - - -### Bug Fixes - -* **cache:** stop relying on BB.catch ([2b04494](https://github.com/zkat/make-fetch-happen/commit/2b04494)) - - -### Features - -* **retry:** report retry attempt number as extra header ([fd50927](https://github.com/zkat/make-fetch-happen/commit/fd50927)) - - - -<a name="1.3.1"></a> -## [1.3.1](https://github.com/zkat/make-fetch-happen/compare/v1.3.0...v1.3.1) (2017-04-04) - - -### Bug Fixes - -* **cache:** pretend cache entry is missing on ENOENT ([9c2bb26](https://github.com/zkat/make-fetch-happen/commit/9c2bb26)) - - - -<a name="1.3.0"></a> -# [1.3.0](https://github.com/zkat/make-fetch-happen/compare/v1.2.1...v1.3.0) (2017-04-04) - - -### Bug Fixes - -* **cache:** if metadata is missing for some odd reason, ignore the entry ([a021a6b](https://github.com/zkat/make-fetch-happen/commit/a021a6b)) - - -### Features - -* **cache:** add special headers when request was loaded straight from cache ([8a7dbd1](https://github.com/zkat/make-fetch-happen/commit/8a7dbd1)) -* **cache:** allow configuring algorithms to be calculated on insertion ([bf4a0f2](https://github.com/zkat/make-fetch-happen/commit/bf4a0f2)) - - - -<a name="1.2.1"></a> -## [1.2.1](https://github.com/zkat/make-fetch-happen/compare/v1.2.0...v1.2.1) (2017-04-03) - - -### Bug Fixes - -* **integrity:** update cacache and ssri and change EBADCHECKSUM -> EINTEGRITY ([b6cf6f6](https://github.com/zkat/make-fetch-happen/commit/b6cf6f6)) - - - -<a name="1.2.0"></a> -# [1.2.0](https://github.com/zkat/make-fetch-happen/compare/v1.1.0...v1.2.0) (2017-04-03) - - -### Features - -* **integrity:** full Subresource Integrity support (#10) ([a590159](https://github.com/zkat/make-fetch-happen/commit/a590159)) - - - -<a name="1.1.0"></a> -# [1.1.0](https://github.com/zkat/make-fetch-happen/compare/v1.0.1...v1.1.0) (2017-04-01) - - -### Features - -* **opts:** fetch.defaults() for default options ([522a65e](https://github.com/zkat/make-fetch-happen/commit/522a65e)) - - - -<a name="1.0.1"></a> -## [1.0.1](https://github.com/zkat/make-fetch-happen/compare/v1.0.0...v1.0.1) (2017-04-01) - - - -<a name="1.0.0"></a> -# 1.0.0 (2017-04-01) - - -### Bug Fixes - -* **cache:** default on cache-control header ([b872a2c](https://github.com/zkat/make-fetch-happen/commit/b872a2c)) -* standard stuff and cache matching ([753f2c2](https://github.com/zkat/make-fetch-happen/commit/753f2c2)) -* **agent:** nudge around things with opts.agent ([ed62b57](https://github.com/zkat/make-fetch-happen/commit/ed62b57)) -* **agent:** {agent: false} has special behavior ([b8cc923](https://github.com/zkat/make-fetch-happen/commit/b8cc923)) -* **cache:** invalidation on non-GET ([fe78fac](https://github.com/zkat/make-fetch-happen/commit/fe78fac)) -* **cache:** make force-cache and only-if-cached work as expected ([f50e9df](https://github.com/zkat/make-fetch-happen/commit/f50e9df)) -* **cache:** more spec compliance ([d5a56db](https://github.com/zkat/make-fetch-happen/commit/d5a56db)) -* **cache:** only cache 200 gets ([0abb25a](https://github.com/zkat/make-fetch-happen/commit/0abb25a)) -* **cache:** only load cache code if cache opt is a string ([250fcd5](https://github.com/zkat/make-fetch-happen/commit/250fcd5)) -* **cache:** oops ([e3fa15a](https://github.com/zkat/make-fetch-happen/commit/e3fa15a)) -* **cache:** refactored warning removal into main file ([5b0a9f9](https://github.com/zkat/make-fetch-happen/commit/5b0a9f9)) -* **cache:** req constructor no longer needed in Cache ([5b74cbc](https://github.com/zkat/make-fetch-happen/commit/5b74cbc)) -* **cache:** standard fetch api calls cacheMode "cache" ([6fba805](https://github.com/zkat/make-fetch-happen/commit/6fba805)) -* **cache:** was using wrong method for non-GET/HEAD cache invalidation ([810763a](https://github.com/zkat/make-fetch-happen/commit/810763a)) -* **caching:** a bunch of cache-related fixes ([8ebda1d](https://github.com/zkat/make-fetch-happen/commit/8ebda1d)) -* **deps:** `cacache[@6](https://github.com/6).3.0` - race condition fixes ([9528442](https://github.com/zkat/make-fetch-happen/commit/9528442)) -* **freshness:** fix regex for cacheControl matching ([070db86](https://github.com/zkat/make-fetch-happen/commit/070db86)) -* **freshness:** fixed default freshness heuristic value ([5d29e88](https://github.com/zkat/make-fetch-happen/commit/5d29e88)) -* **logging:** remove console.log calls ([a1d0a47](https://github.com/zkat/make-fetch-happen/commit/a1d0a47)) -* **method:** node-fetch guarantees uppercase ([a1d68d6](https://github.com/zkat/make-fetch-happen/commit/a1d68d6)) -* **opts:** simplified opts handling ([516fd6e](https://github.com/zkat/make-fetch-happen/commit/516fd6e)) -* **proxy:** pass proxy option directly to ProxyAgent ([3398460](https://github.com/zkat/make-fetch-happen/commit/3398460)) -* **retry:** false -> {retries: 0} ([297fbb6](https://github.com/zkat/make-fetch-happen/commit/297fbb6)) -* **retry:** only retry put if body is not a stream ([a24e599](https://github.com/zkat/make-fetch-happen/commit/a24e599)) -* **retry:** skip retries if body is a stream for ANY method ([780c0f8](https://github.com/zkat/make-fetch-happen/commit/780c0f8)) - - -### Features - -* **api:** initial implementation -- can make and cache requests ([7d55b49](https://github.com/zkat/make-fetch-happen/commit/7d55b49)) -* **fetch:** injectable cache, and retry support ([87b84bf](https://github.com/zkat/make-fetch-happen/commit/87b84bf)) - - -### BREAKING CHANGES - -* **cache:** opts.cache -> opts.cacheManager; opts.cacheMode -> opts.cache -* **fetch:** opts.cache accepts a Cache-like obj or a path. Requests are now retried. -* **api:** actual api implemented diff --git a/node_modules/make-fetch-happen/LICENSE b/node_modules/make-fetch-happen/LICENSE deleted file mode 100644 index 8d28acf86..000000000 --- a/node_modules/make-fetch-happen/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -ISC License - -Copyright (c) npm, Inc. - -Permission to use, copy, modify, and/or distribute this software for -any purpose with or without fee is hereby granted, provided that the -above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS -ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/make-fetch-happen/README.md b/node_modules/make-fetch-happen/README.md deleted file mode 100644 index 4d12d8dae..000000000 --- a/node_modules/make-fetch-happen/README.md +++ /dev/null @@ -1,404 +0,0 @@ -# make-fetch-happen [![npm version](https://img.shields.io/npm/v/make-fetch-happen.svg)](https://npm.im/make-fetch-happen) [![license](https://img.shields.io/npm/l/make-fetch-happen.svg)](https://npm.im/make-fetch-happen) [![Travis](https://img.shields.io/travis/zkat/make-fetch-happen.svg)](https://travis-ci.org/zkat/make-fetch-happen) [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/zkat/make-fetch-happen?svg=true)](https://ci.appveyor.com/project/zkat/make-fetch-happen) [![Coverage Status](https://coveralls.io/repos/github/zkat/make-fetch-happen/badge.svg?branch=latest)](https://coveralls.io/github/zkat/make-fetch-happen?branch=latest) - - -[`make-fetch-happen`](https://github.com/zkat/make-fetch-happen) is a Node.js -library that wraps [`node-fetch-npm`](https://github.com/npm/node-fetch-npm) with additional -features [`node-fetch`](https://github.com/bitinn/node-fetch) doesn't intend to include, including HTTP Cache support, request -pooling, proxies, retries, [and more](#features)! - -## Install - -`$ npm install --save make-fetch-happen` - -## Table of Contents - -* [Example](#example) -* [Features](#features) -* [Contributing](#contributing) -* [API](#api) - * [`fetch`](#fetch) - * [`fetch.defaults`](#fetch-defaults) - * [`node-fetch` options](#node-fetch-options) - * [`make-fetch-happen` options](#extra-options) - * [`opts.cacheManager`](#opts-cache-manager) - * [`opts.cache`](#opts-cache) - * [`opts.proxy`](#opts-proxy) - * [`opts.noProxy`](#opts-no-proxy) - * [`opts.ca, opts.cert, opts.key`](#https-opts) - * [`opts.maxSockets`](#opts-max-sockets) - * [`opts.retry`](#opts-retry) - * [`opts.onRetry`](#opts-onretry) - * [`opts.integrity`](#opts-integrity) -* [Message From Our Sponsors](#wow) - -### Example - -```javascript -const fetch = require('make-fetch-happen').defaults({ - cacheManager: './my-cache' // path where cache will be written (and read) -}) - -fetch('https://registry.npmjs.org/make-fetch-happen').then(res => { - return res.json() // download the body as JSON -}).then(body => { - console.log(`got ${body.name} from web`) - return fetch('https://registry.npmjs.org/make-fetch-happen', { - cache: 'no-cache' // forces a conditional request - }) -}).then(res => { - console.log(res.status) // 304! cache validated! - return res.json().then(body => { - console.log(`got ${body.name} from cache`) - }) -}) -``` - -### Features - -* Builds around [`node-fetch`](https://npm.im/node-fetch) for the core [`fetch` API](https://fetch.spec.whatwg.org) implementation -* Request pooling out of the box -* Quite fast, really -* Automatic HTTP-semantics-aware request retries -* Cache-fallback automatic "offline mode" -* Proxy support (http, https, socks, socks4, socks5) -* Built-in request caching following full HTTP caching rules (`Cache-Control`, `ETag`, `304`s, cache fallback on error, etc). -* Customize cache storage with any [Cache API](https://developer.mozilla.org/en-US/docs/Web/API/Cache)-compliant `Cache` instance. Cache to Redis! -* Node.js Stream support -* Transparent gzip and deflate support -* [Subresource Integrity](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) support -* Literally punches nazis -* (PENDING) Range request caching and resuming - -### Contributing - -The make-fetch-happen team enthusiastically welcomes contributions and project participation! There's a bunch of things you can do if you want to contribute! The [Contributor Guide](CONTRIBUTING.md) has all the information you need for everything from reporting bugs to contributing entire new features. Please don't hesitate to jump in if you'd like to, or even ask us questions if something isn't clear. - -All participants and maintainers in this project are expected to follow [Code of Conduct](CODE_OF_CONDUCT.md), and just generally be excellent to each other. - -Please refer to the [Changelog](CHANGELOG.md) for project history details, too. - -Happy hacking! - -### API - -#### <a name="fetch"></a> `> fetch(uriOrRequest, [opts]) -> Promise<Response>` - -This function implements most of the [`fetch` API](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch): given a `uri` string or a `Request` instance, it will fire off an http request and return a Promise containing the relevant response. - -If `opts` is provided, the [`node-fetch`-specific options](#node-fetch-options) will be passed to that library. There are also [additional options](#extra-options) specific to make-fetch-happen that add various features, such as HTTP caching, integrity verification, proxy support, and more. - -##### Example - -```javascript -fetch('https://google.com').then(res => res.buffer()) -``` - -#### <a name="fetch-defaults"></a> `> fetch.defaults([defaultUrl], [defaultOpts])` - -Returns a new `fetch` function that will call `make-fetch-happen` using `defaultUrl` and `defaultOpts` as default values to any calls. - -A defaulted `fetch` will also have a `.defaults()` method, so they can be chained. - -##### Example - -```javascript -const fetch = require('make-fetch-happen').defaults({ - cacheManager: './my-local-cache' -}) - -fetch('https://registry.npmjs.org/make-fetch-happen') // will always use the cache -``` - -#### <a name="node-fetch-options"></a> `> node-fetch options` - -The following options for `node-fetch` are used as-is: - -* method -* body -* redirect -* follow -* timeout -* compress -* size - -These other options are modified or augmented by make-fetch-happen: - -* headers - Default `User-Agent` set to make-fetch happen. `Connection` is set to `keep-alive` or `close` automatically depending on `opts.agent`. -* agent - * If agent is null, an http or https Agent will be automatically used. By default, these will be `http.globalAgent` and `https.globalAgent`. - * If [`opts.proxy`](#opts-proxy) is provided and `opts.agent` is null, the agent will be set to an appropriate proxy-handling agent. - * If `opts.agent` is an object, it will be used as the request-pooling agent argument for this request. - * If `opts.agent` is `false`, it will be passed as-is to the underlying request library. This causes a new Agent to be spawned for every request. - -For more details, see [the documentation for `node-fetch` itself](https://github.com/bitinn/node-fetch#options). - -#### <a name="extra-options"></a> `> make-fetch-happen options` - -make-fetch-happen augments the `node-fetch` API with additional features available through extra options. The following extra options are available: - -* [`opts.cacheManager`](#opts-cache-manager) - Cache target to read/write -* [`opts.cache`](#opts-cache) - `fetch` cache mode. Controls cache *behavior*. -* [`opts.proxy`](#opts-proxy) - Proxy agent -* [`opts.noProxy`](#opts-no-proxy) - Domain segments to disable proxying for. -* [`opts.ca, opts.cert, opts.key, opts.strictSSL`](#https-opts) -* [`opts.localAddress`](#opts-local-address) -* [`opts.maxSockets`](#opts-max-sockets) -* [`opts.retry`](#opts-retry) - Request retry settings -* [`opts.onRetry`](#opts-onretry) - a function called whenever a retry is attempted -* [`opts.integrity`](#opts-integrity) - [Subresource Integrity](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) metadata. - -#### <a name="opts-cache-manager"></a> `> opts.cacheManager` - -Either a `String` or a `Cache`. If the former, it will be assumed to be a `Path` to be used as the cache root for [`cacache`](https://npm.im/cacache). - -If an object is provided, it will be assumed to be a compliant [`Cache` instance](https://developer.mozilla.org/en-US/docs/Web/API/Cache). Only `Cache.match()`, `Cache.put()`, and `Cache.delete()` are required. Options objects will not be passed in to `match()` or `delete()`. - -By implementing this API, you can customize the storage backend for make-fetch-happen itself -- for example, you could implement a cache that uses `redis` for caching, or simply keeps everything in memory. Most of the caching logic exists entirely on the make-fetch-happen side, so the only thing you need to worry about is reading, writing, and deleting, as well as making sure `fetch.Response` objects are what gets returned. - -You can refer to `cache.js` in the make-fetch-happen source code for a reference implementation. - -**NOTE**: Requests will not be cached unless their response bodies are consumed. You will need to use one of the `res.json()`, `res.buffer()`, etc methods on the response, or drain the `res.body` stream, in order for it to be written. - -The default cache manager also adds the following headers to cached responses: - -* `X-Local-Cache`: Path to the cache the content was found in -* `X-Local-Cache-Key`: Unique cache entry key for this response -* `X-Local-Cache-Hash`: Specific integrity hash for the cached entry -* `X-Local-Cache-Time`: UTCString of the cache insertion time for the entry - -Using [`cacache`](https://npm.im/cacache), a call like this may be used to -manually fetch the cached entry: - -```javascript -const h = response.headers -cacache.get(h.get('x-local-cache'), h.get('x-local-cache-key')) - -// grab content only, directly: -cacache.get.byDigest(h.get('x-local-cache'), h.get('x-local-cache-hash')) -``` - -##### Example - -```javascript -fetch('https://registry.npmjs.org/make-fetch-happen', { - cacheManager: './my-local-cache' -}) // -> 200-level response will be written to disk - -fetch('https://npm.im/cacache', { - cacheManager: new MyCustomRedisCache(process.env.PORT) -}) // -> 200-level response will be written to redis -``` - -A possible (minimal) implementation for `MyCustomRedisCache`: - -```javascript -const bluebird = require('bluebird') -const redis = require("redis") -bluebird.promisifyAll(redis.RedisClient.prototype) -class MyCustomRedisCache { - constructor (opts) { - this.redis = redis.createClient(opts) - } - match (req) { - return this.redis.getAsync(req.url).then(res => { - if (res) { - const parsed = JSON.parse(res) - return new fetch.Response(parsed.body, { - url: req.url, - headers: parsed.headers, - status: 200 - }) - } - }) - } - put (req, res) { - return res.buffer().then(body => { - return this.redis.setAsync(req.url, JSON.stringify({ - body: body, - headers: res.headers.raw() - })) - }).then(() => { - // return the response itself - return res - }) - } - 'delete' (req) { - return this.redis.unlinkAsync(req.url) - } -} -``` - -#### <a name="opts-cache"></a> `> opts.cache` - -This option follows the standard `fetch` API cache option. This option will do nothing if [`opts.cacheManager`](#opts-cache-manager) is null. The following values are accepted (as strings): - -* `default` - Fetch will inspect the HTTP cache on the way to the network. If there is a fresh response it will be used. If there is a stale response a conditional request will be created, and a normal request otherwise. It then updates the HTTP cache with the response. If the revalidation request fails (for example, on a 500 or if you're offline), the stale response will be returned. -* `no-store` - Fetch behaves as if there is no HTTP cache at all. -* `reload` - Fetch behaves as if there is no HTTP cache on the way to the network. Ergo, it creates a normal request and updates the HTTP cache with the response. -* `no-cache` - Fetch creates a conditional request if there is a response in the HTTP cache and a normal request otherwise. It then updates the HTTP cache with the response. -* `force-cache` - Fetch uses any response in the HTTP cache matching the request, not paying attention to staleness. If there was no response, it creates a normal request and updates the HTTP cache with the response. -* `only-if-cached` - Fetch uses any response in the HTTP cache matching the request, not paying attention to staleness. If there was no response, it returns a network error. (Can only be used when request’s mode is "same-origin". Any cached redirects will be followed assuming request’s redirect mode is "follow" and the redirects do not violate request’s mode.) - -(Note: option descriptions are taken from https://fetch.spec.whatwg.org/#http-network-or-cache-fetch) - -##### Example - -```javascript -const fetch = require('make-fetch-happen').defaults({ - cacheManager: './my-cache' -}) - -// Will error with ENOTCACHED if we haven't already cached this url -fetch('https://registry.npmjs.org/make-fetch-happen', { - cache: 'only-if-cached' -}) - -// Will refresh any local content and cache the new response -fetch('https://registry.npmjs.org/make-fetch-happen', { - cache: 'reload' -}) - -// Will use any local data, even if stale. Otherwise, will hit network. -fetch('https://registry.npmjs.org/make-fetch-happen', { - cache: 'force-cache' -}) -``` - -#### <a name="opts-proxy"></a> `> opts.proxy` - -A string or `url.parse`-d URI to proxy through. Different Proxy handlers will be -used depending on the proxy's protocol. - -Additionally, `process.env.HTTP_PROXY`, `process.env.HTTPS_PROXY`, and -`process.env.PROXY` are used if present and no `opts.proxy` value is provided. - -(Pending) `process.env.NO_PROXY` may also be configured to skip proxying requests for all, or specific domains. - -##### Example - -```javascript -fetch('https://registry.npmjs.org/make-fetch-happen', { - proxy: 'https://corporate.yourcompany.proxy:4445' -}) - -fetch('https://registry.npmjs.org/make-fetch-happen', { - proxy: { - protocol: 'https:', - hostname: 'corporate.yourcompany.proxy', - port: 4445 - } -}) -``` - -#### <a name="opts-no-proxy"></a> `> opts.noProxy` - -If present, should be a comma-separated string or an array of domain extensions -that a proxy should _not_ be used for. - -This option may also be provided through `process.env.NO_PROXY`. - -#### <a name="https-opts"></a> `> opts.ca, opts.cert, opts.key, opts.strictSSL` - -These values are passed in directly to the HTTPS agent and will be used for both -proxied and unproxied outgoing HTTPS requests. They mostly correspond to the -same options the `https` module accepts, which will be themselves passed to -`tls.connect()`. `opts.strictSSL` corresponds to `rejectUnauthorized`. - -#### <a name="opts-local-address"></a> `> opts.localAddress` - -Passed directly to `http` and `https` request calls. Determines the local -address to bind to. - -#### <a name="opts-max-sockets"></a> `> opts.maxSockets` - -Default: 15 - -Maximum number of active concurrent sockets to use for the underlying -Http/Https/Proxy agents. This setting applies once per spawned agent. - -15 is probably a _pretty good value_ for most use-cases, and balances speed -with, uh, not knocking out people's routers. 🤓 - -#### <a name="opts-retry"></a> `> opts.retry` - -An object that can be used to tune request retry settings. Retries will only be attempted on the following conditions: - -* Request method is NOT `POST` AND -* Request status is one of: `408`, `420`, `429`, or any status in the 500-range. OR -* Request errored with `ECONNRESET`, `ECONNREFUSED`, `EADDRINUSE`, `ETIMEDOUT`, or the `fetch` error `request-timeout`. - -The following are worth noting as explicitly not retried: - -* `getaddrinfo ENOTFOUND` and will be assumed to be either an unreachable domain or the user will be assumed offline. If a response is cached, it will be returned immediately. -* `ECONNRESET` currently has no support for restarting. It will eventually be supported but requires a bit more juggling due to streaming. - -If `opts.retry` is `false`, it is equivalent to `{retries: 0}` - -If `opts.retry` is a number, it is equivalent to `{retries: num}` - -The following retry options are available if you want more control over it: - -* retries -* factor -* minTimeout -* maxTimeout -* randomize - -For details on what each of these do, refer to the [`retry`](https://npm.im/retry) documentation. - -##### Example - -```javascript -fetch('https://flaky.site.com', { - retry: { - retries: 10, - randomize: true - } -}) - -fetch('http://reliable.site.com', { - retry: false -}) - -fetch('http://one-more.site.com', { - retry: 3 -}) -``` - -#### <a name="opts-onretry"></a> `> opts.onRetry` - -A function called whenever a retry is attempted. - -##### Example - -```javascript -fetch('https://flaky.site.com', { - onRetry() { - console.log('we will retry!') - } -}) -``` - -#### <a name="opts-integrity"></a> `> opts.integrity` - -Matches the response body against the given [Subresource Integrity](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) metadata. If verification fails, the request will fail with an `EINTEGRITY` error. - -`integrity` may either be a string or an [`ssri`](https://npm.im/ssri) `Integrity`-like. - -##### Example - -```javascript -fetch('https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-1.0.0.tgz', { - integrity: 'sha1-o47j7zAYnedYFn1dF/fR9OV3z8Q=' -}) // -> ok - -fetch('https://malicious-registry.org/make-fetch-happen/-/make-fetch-happen-1.0.0.tgz', { - integrity: 'sha1-o47j7zAYnedYFn1dF/fR9OV3z8Q=' -}) // Error: EINTEGRITY -``` - -### <a name="wow"></a> Message From Our Sponsors - -![](stop.gif) - -![](happening.gif) diff --git a/node_modules/make-fetch-happen/agent.js b/node_modules/make-fetch-happen/agent.js deleted file mode 100644 index 55675946a..000000000 --- a/node_modules/make-fetch-happen/agent.js +++ /dev/null @@ -1,171 +0,0 @@ -'use strict' -const LRU = require('lru-cache') -const url = require('url') - -let AGENT_CACHE = new LRU({ max: 50 }) -let HttpsAgent -let HttpAgent - -module.exports = getAgent - -function getAgent (uri, opts) { - const parsedUri = url.parse(typeof uri === 'string' ? uri : uri.url) - const isHttps = parsedUri.protocol === 'https:' - const pxuri = getProxyUri(uri, opts) - - const key = [ - `https:${isHttps}`, - pxuri - ? `proxy:${pxuri.protocol}//${pxuri.host}:${pxuri.port}` - : '>no-proxy<', - `local-address:${opts.localAddress || '>no-local-address<'}`, - `strict-ssl:${isHttps ? !!opts.strictSSL : '>no-strict-ssl<'}`, - `ca:${(isHttps && opts.ca) || '>no-ca<'}`, - `cert:${(isHttps && opts.cert) || '>no-cert<'}`, - `key:${(isHttps && opts.key) || '>no-key<'}` - ].join(':') - - if (opts.agent != null) { // `agent: false` has special behavior! - return opts.agent - } - - if (AGENT_CACHE.peek(key)) { - return AGENT_CACHE.get(key) - } - - if (pxuri) { - const proxy = getProxy(pxuri, opts, isHttps) - AGENT_CACHE.set(key, proxy) - return proxy - } - - if (isHttps && !HttpsAgent) { - HttpsAgent = require('agentkeepalive').HttpsAgent - } else if (!isHttps && !HttpAgent) { - HttpAgent = require('agentkeepalive') - } - - // If opts.timeout is zero, set the agentTimeout to zero as well. A timeout - // of zero disables the timeout behavior (OS limits still apply). Else, if - // opts.timeout is a non-zero value, set it to timeout + 1, to ensure that - // the node-fetch-npm timeout will always fire first, giving us more - // consistent errors. - const agentTimeout = opts.timeout === 0 ? 0 : opts.timeout + 1 - - const agent = isHttps ? new HttpsAgent({ - maxSockets: opts.maxSockets || 15, - ca: opts.ca, - cert: opts.cert, - key: opts.key, - localAddress: opts.localAddress, - rejectUnauthorized: opts.strictSSL, - timeout: agentTimeout - }) : new HttpAgent({ - maxSockets: opts.maxSockets || 15, - localAddress: opts.localAddress, - timeout: agentTimeout - }) - AGENT_CACHE.set(key, agent) - return agent -} - -function checkNoProxy (uri, opts) { - const host = url.parse(uri).hostname.split('.').reverse() - let noproxy = (opts.noProxy || getProcessEnv('no_proxy')) - if (typeof noproxy === 'string') { - noproxy = noproxy.split(/\s*,\s*/g) - } - return noproxy && noproxy.some(no => { - const noParts = no.split('.').filter(x => x).reverse() - if (!noParts.length) { return false } - for (let i = 0; i < noParts.length; i++) { - if (host[i] !== noParts[i]) { - return false - } - } - return true - }) -} - -module.exports.getProcessEnv = getProcessEnv - -function getProcessEnv (env) { - if (!env) { return } - - let value - - if (Array.isArray(env)) { - for (let e of env) { - value = process.env[e] || - process.env[e.toUpperCase()] || - process.env[e.toLowerCase()] - if (typeof value !== 'undefined') { break } - } - } - - if (typeof env === 'string') { - value = process.env[env] || - process.env[env.toUpperCase()] || - process.env[env.toLowerCase()] - } - - return value -} - -function getProxyUri (uri, opts) { - const protocol = url.parse(uri).protocol - - const proxy = opts.proxy || ( - protocol === 'https:' && getProcessEnv('https_proxy') - ) || ( - protocol === 'http:' && getProcessEnv(['https_proxy', 'http_proxy', 'proxy']) - ) - if (!proxy) { return null } - - const parsedProxy = (typeof proxy === 'string') ? url.parse(proxy) : proxy - - return !checkNoProxy(uri, opts) && parsedProxy -} - -let HttpProxyAgent -let HttpsProxyAgent -let SocksProxyAgent -function getProxy (proxyUrl, opts, isHttps) { - let popts = { - host: proxyUrl.hostname, - port: proxyUrl.port, - protocol: proxyUrl.protocol, - path: proxyUrl.path, - auth: proxyUrl.auth, - ca: opts.ca, - cert: opts.cert, - key: opts.key, - timeout: opts.timeout === 0 ? 0 : opts.timeout + 1, - localAddress: opts.localAddress, - maxSockets: opts.maxSockets || 15, - rejectUnauthorized: opts.strictSSL - } - - if (proxyUrl.protocol === 'http:' || proxyUrl.protocol === 'https:') { - if (!isHttps) { - if (!HttpProxyAgent) { - HttpProxyAgent = require('http-proxy-agent') - } - - return new HttpProxyAgent(popts) - } else { - if (!HttpsProxyAgent) { - HttpsProxyAgent = require('https-proxy-agent') - } - - return new HttpsProxyAgent(popts) - } - } - if (proxyUrl.protocol.startsWith('socks')) { - if (!SocksProxyAgent) { - SocksProxyAgent = require('socks-proxy-agent') - } - - return new SocksProxyAgent(popts) - } -} diff --git a/node_modules/make-fetch-happen/cache.js b/node_modules/make-fetch-happen/cache.js deleted file mode 100644 index f00de14a8..000000000 --- a/node_modules/make-fetch-happen/cache.js +++ /dev/null @@ -1,245 +0,0 @@ -'use strict' - -const cacache = require('cacache') -const fetch = require('node-fetch-npm') -const pipe = require('mississippi').pipe -const ssri = require('ssri') -const through = require('mississippi').through -const to = require('mississippi').to -const url = require('url') -const stream = require('stream') - -const MAX_MEM_SIZE = 5 * 1024 * 1024 // 5MB - -function cacheKey (req) { - const parsed = url.parse(req.url) - return `make-fetch-happen:request-cache:${ - url.format({ - protocol: parsed.protocol, - slashes: parsed.slashes, - host: parsed.host, - hostname: parsed.hostname, - pathname: parsed.pathname - }) - }` -} - -// This is a cacache-based implementation of the Cache standard, -// using node-fetch. -// docs: https://developer.mozilla.org/en-US/docs/Web/API/Cache -// -module.exports = class Cache { - constructor (path, opts) { - this._path = path - this.Promise = (opts && opts.Promise) || Promise - } - - // Returns a Promise that resolves to the response associated with the first - // matching request in the Cache object. - match (req, opts) { - opts = opts || {} - const key = cacheKey(req) - return cacache.get.info(this._path, key).then(info => { - return info && cacache.get.hasContent( - this._path, info.integrity, opts - ).then(exists => exists && info) - }).then(info => { - if (info && info.metadata && matchDetails(req, { - url: info.metadata.url, - reqHeaders: new fetch.Headers(info.metadata.reqHeaders), - resHeaders: new fetch.Headers(info.metadata.resHeaders), - cacheIntegrity: info.integrity, - integrity: opts && opts.integrity - })) { - const resHeaders = new fetch.Headers(info.metadata.resHeaders) - addCacheHeaders(resHeaders, this._path, key, info.integrity, info.time) - if (req.method === 'HEAD') { - return new fetch.Response(null, { - url: req.url, - headers: resHeaders, - status: 200 - }) - } - let body - const cachePath = this._path - // avoid opening cache file handles until a user actually tries to - // read from it. - if (opts.memoize !== false && info.size > MAX_MEM_SIZE) { - body = new stream.PassThrough() - const realRead = body._read - body._read = function (size) { - body._read = realRead - pipe( - cacache.get.stream.byDigest(cachePath, info.integrity, { - memoize: opts.memoize - }), - body, - err => body.emit(err)) - return realRead.call(this, size) - } - } else { - let readOnce = false - // cacache is much faster at bulk reads - body = new stream.Readable({ - read () { - if (readOnce) return this.push(null) - readOnce = true - cacache.get.byDigest(cachePath, info.integrity, { - memoize: opts.memoize - }).then(data => { - this.push(data) - this.push(null) - }, err => this.emit('error', err)) - } - }) - } - return this.Promise.resolve(new fetch.Response(body, { - url: req.url, - headers: resHeaders, - status: 200, - size: info.size - })) - } - }) - } - - // Takes both a request and its response and adds it to the given cache. - put (req, response, opts) { - opts = opts || {} - const size = response.headers.get('content-length') - const fitInMemory = !!size && opts.memoize !== false && size < MAX_MEM_SIZE - const ckey = cacheKey(req) - const cacheOpts = { - algorithms: opts.algorithms, - metadata: { - url: req.url, - reqHeaders: req.headers.raw(), - resHeaders: response.headers.raw() - }, - size, - memoize: fitInMemory && opts.memoize - } - if (req.method === 'HEAD' || response.status === 304) { - // Update metadata without writing - return cacache.get.info(this._path, ckey).then(info => { - // Providing these will bypass content write - cacheOpts.integrity = info.integrity - addCacheHeaders( - response.headers, this._path, ckey, info.integrity, info.time - ) - return new this.Promise((resolve, reject) => { - pipe( - cacache.get.stream.byDigest(this._path, info.integrity, cacheOpts), - cacache.put.stream(this._path, cacheKey(req), cacheOpts), - err => err ? reject(err) : resolve(response) - ) - }) - }).then(() => response) - } - let buf = [] - let bufSize = 0 - let cacheTargetStream = false - const cachePath = this._path - let cacheStream = to((chunk, enc, cb) => { - if (!cacheTargetStream) { - if (fitInMemory) { - cacheTargetStream = - to({highWaterMark: MAX_MEM_SIZE}, (chunk, enc, cb) => { - buf.push(chunk) - bufSize += chunk.length - cb() - }, done => { - cacache.put( - cachePath, - cacheKey(req), - Buffer.concat(buf, bufSize), - cacheOpts - ).then( - () => done(), - done - ) - }) - } else { - cacheTargetStream = - cacache.put.stream(cachePath, cacheKey(req), cacheOpts) - } - } - cacheTargetStream.write(chunk, enc, cb) - }, done => { - cacheTargetStream ? cacheTargetStream.end(done) : done() - }) - const oldBody = response.body - const newBody = through({highWaterMark: MAX_MEM_SIZE}) - response.body = newBody - oldBody.once('error', err => newBody.emit('error', err)) - newBody.once('error', err => oldBody.emit('error', err)) - cacheStream.once('error', err => newBody.emit('error', err)) - pipe(oldBody, to((chunk, enc, cb) => { - cacheStream.write(chunk, enc, () => { - newBody.write(chunk, enc, cb) - }) - }, done => { - cacheStream.end(() => { - newBody.end(() => { - done() - }) - }) - }), err => err && newBody.emit('error', err)) - return response - } - - // Finds the Cache entry whose key is the request, and if found, deletes the - // Cache entry and returns a Promise that resolves to true. If no Cache entry - // is found, it returns false. - 'delete' (req, opts) { - opts = opts || {} - if (typeof opts.memoize === 'object') { - if (opts.memoize.reset) { - opts.memoize.reset() - } else if (opts.memoize.clear) { - opts.memoize.clear() - } else { - Object.keys(opts.memoize).forEach(k => { - opts.memoize[k] = null - }) - } - } - return cacache.rm.entry( - this._path, - cacheKey(req) - // TODO - true/false - ).then(() => false) - } -} - -function matchDetails (req, cached) { - const reqUrl = url.parse(req.url) - const cacheUrl = url.parse(cached.url) - const vary = cached.resHeaders.get('Vary') - // https://tools.ietf.org/html/rfc7234#section-4.1 - if (vary) { - if (vary.match(/\*/)) { - return false - } else { - const fieldsMatch = vary.split(/\s*,\s*/).every(field => { - return cached.reqHeaders.get(field) === req.headers.get(field) - }) - if (!fieldsMatch) { - return false - } - } - } - if (cached.integrity) { - return ssri.parse(cached.integrity).match(cached.cacheIntegrity) - } - reqUrl.hash = null - cacheUrl.hash = null - return url.format(reqUrl) === url.format(cacheUrl) -} - -function addCacheHeaders (resHeaders, path, key, hash, time) { - resHeaders.set('X-Local-Cache', encodeURIComponent(path)) - resHeaders.set('X-Local-Cache-Key', encodeURIComponent(key)) - resHeaders.set('X-Local-Cache-Hash', encodeURIComponent(hash)) - resHeaders.set('X-Local-Cache-Time', new Date(time).toUTCString()) -} diff --git a/node_modules/make-fetch-happen/index.js b/node_modules/make-fetch-happen/index.js deleted file mode 100644 index 0f2c164e1..000000000 --- a/node_modules/make-fetch-happen/index.js +++ /dev/null @@ -1,482 +0,0 @@ -'use strict' - -let Cache -const url = require('url') -const CachePolicy = require('http-cache-semantics') -const fetch = require('node-fetch-npm') -const pkg = require('./package.json') -const retry = require('promise-retry') -let ssri -const Stream = require('stream') -const getAgent = require('./agent') -const setWarning = require('./warning') - -const isURL = /^https?:/ -const USER_AGENT = `${pkg.name}/${pkg.version} (+https://npm.im/${pkg.name})` - -const RETRY_ERRORS = [ - 'ECONNRESET', // remote socket closed on us - 'ECONNREFUSED', // remote host refused to open connection - 'EADDRINUSE', // failed to bind to a local port (proxy?) - 'ETIMEDOUT' // someone in the transaction is WAY TOO SLOW - // Known codes we do NOT retry on: - // ENOTFOUND (getaddrinfo failure. Either bad hostname, or offline) -] - -const RETRY_TYPES = [ - 'request-timeout' -] - -// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch -module.exports = cachingFetch -cachingFetch.defaults = function (_uri, _opts) { - const fetch = this - if (typeof _uri === 'object') { - _opts = _uri - _uri = null - } - - function defaultedFetch (uri, opts) { - const finalOpts = Object.assign({}, _opts || {}, opts || {}) - return fetch(uri || _uri, finalOpts) - } - - defaultedFetch.defaults = fetch.defaults - defaultedFetch.delete = fetch.delete - return defaultedFetch -} - -cachingFetch.delete = cacheDelete -function cacheDelete (uri, opts) { - opts = configureOptions(opts) - if (opts.cacheManager) { - const req = new fetch.Request(uri, { - method: opts.method, - headers: opts.headers - }) - return opts.cacheManager.delete(req, opts) - } -} - -function initializeCache (opts) { - if (typeof opts.cacheManager === 'string') { - if (!Cache) { - // Default cacache-based cache - Cache = require('./cache') - } - - opts.cacheManager = new Cache(opts.cacheManager, opts) - } - - opts.cache = opts.cache || 'default' - - if (opts.cache === 'default' && isHeaderConditional(opts.headers)) { - // If header list contains `If-Modified-Since`, `If-None-Match`, - // `If-Unmodified-Since`, `If-Match`, or `If-Range`, fetch will set cache - // mode to "no-store" if it is "default". - opts.cache = 'no-store' - } -} - -function configureOptions (_opts) { - const opts = Object.assign({}, _opts || {}) - opts.method = (opts.method || 'GET').toUpperCase() - - if (opts.retry && typeof opts.retry === 'number') { - opts.retry = { retries: opts.retry } - } - - if (opts.retry === false) { - opts.retry = { retries: 0 } - } - - if (opts.cacheManager) { - initializeCache(opts) - } - - return opts -} - -function initializeSsri () { - if (!ssri) { - ssri = require('ssri') - } -} - -function cachingFetch (uri, _opts) { - const opts = configureOptions(_opts) - - if (opts.integrity) { - initializeSsri() - // if verifying integrity, node-fetch must not decompress - opts.compress = false - } - - const isCachable = (opts.method === 'GET' || opts.method === 'HEAD') && - opts.cacheManager && - opts.cache !== 'no-store' && - opts.cache !== 'reload' - - if (isCachable) { - const req = new fetch.Request(uri, { - method: opts.method, - headers: opts.headers - }) - - return opts.cacheManager.match(req, opts).then(res => { - if (res) { - const warningCode = (res.headers.get('Warning') || '').match(/^\d+/) - if (warningCode && +warningCode >= 100 && +warningCode < 200) { - // https://tools.ietf.org/html/rfc7234#section-4.3.4 - // - // If a stored response is selected for update, the cache MUST: - // - // * delete any Warning header fields in the stored response with - // warn-code 1xx (see Section 5.5); - // - // * retain any Warning header fields in the stored response with - // warn-code 2xx; - // - res.headers.delete('Warning') - } - - if (opts.cache === 'default' && !isStale(req, res)) { - return res - } - - if (opts.cache === 'default' || opts.cache === 'no-cache') { - return conditionalFetch(req, res, opts) - } - - if (opts.cache === 'force-cache' || opts.cache === 'only-if-cached') { - // 112 Disconnected operation - // SHOULD be included if the cache is intentionally disconnected from - // the rest of the network for a period of time. - // (https://tools.ietf.org/html/rfc2616#section-14.46) - setWarning(res, 112, 'Disconnected operation') - return res - } - } - - if (!res && opts.cache === 'only-if-cached') { - const errorMsg = `request to ${ - uri - } failed: cache mode is 'only-if-cached' but no cached response available.` - - const err = new Error(errorMsg) - err.code = 'ENOTCACHED' - throw err - } - - // Missing cache entry, or mode is default (if stale), reload, no-store - return remoteFetch(req.url, opts) - }) - } - - return remoteFetch(uri, opts) -} - -function iterableToObject (iter) { - const obj = {} - for (let k of iter.keys()) { - obj[k] = iter.get(k) - } - return obj -} - -function makePolicy (req, res) { - const _req = { - url: req.url, - method: req.method, - headers: iterableToObject(req.headers) - } - const _res = { - status: res.status, - headers: iterableToObject(res.headers) - } - - return new CachePolicy(_req, _res, { shared: false }) -} - -// https://tools.ietf.org/html/rfc7234#section-4.2 -function isStale (req, res) { - if (!res) { - return null - } - - const _req = { - url: req.url, - method: req.method, - headers: iterableToObject(req.headers) - } - - const policy = makePolicy(req, res) - - const responseTime = res.headers.get('x-local-cache-time') || - res.headers.get('date') || - 0 - - policy._responseTime = new Date(responseTime) - - const bool = !policy.satisfiesWithoutRevalidation(_req) - return bool -} - -function mustRevalidate (res) { - return (res.headers.get('cache-control') || '').match(/must-revalidate/i) -} - -function conditionalFetch (req, cachedRes, opts) { - const _req = { - url: req.url, - method: req.method, - headers: Object.assign({}, opts.headers || {}) - } - - const policy = makePolicy(req, cachedRes) - opts.headers = policy.revalidationHeaders(_req) - - return remoteFetch(req.url, opts) - .then(condRes => { - const revalidatedPolicy = policy.revalidatedPolicy(_req, { - status: condRes.status, - headers: iterableToObject(condRes.headers) - }) - - if (condRes.status >= 500 && !mustRevalidate(cachedRes)) { - // 111 Revalidation failed - // MUST be included if a cache returns a stale response because an - // attempt to revalidate the response failed, due to an inability to - // reach the server. - // (https://tools.ietf.org/html/rfc2616#section-14.46) - setWarning(cachedRes, 111, 'Revalidation failed') - return cachedRes - } - - if (condRes.status === 304) { // 304 Not Modified - condRes.body = cachedRes.body - return opts.cacheManager.put(req, condRes, opts) - .then(newRes => { - newRes.headers = new fetch.Headers(revalidatedPolicy.policy.responseHeaders()) - return newRes - }) - } - - return condRes - }) - .then(res => res) - .catch(err => { - if (mustRevalidate(cachedRes)) { - throw err - } else { - // 111 Revalidation failed - // MUST be included if a cache returns a stale response because an - // attempt to revalidate the response failed, due to an inability to - // reach the server. - // (https://tools.ietf.org/html/rfc2616#section-14.46) - setWarning(cachedRes, 111, 'Revalidation failed') - // 199 Miscellaneous warning - // The warning text MAY include arbitrary information to be presented to - // a human user, or logged. A system receiving this warning MUST NOT take - // any automated action, besides presenting the warning to the user. - // (https://tools.ietf.org/html/rfc2616#section-14.46) - setWarning( - cachedRes, - 199, - `Miscellaneous Warning ${err.code}: ${err.message}` - ) - - return cachedRes - } - }) -} - -function remoteFetchHandleIntegrity (res, integrity) { - const oldBod = res.body - const newBod = ssri.integrityStream({ - integrity - }) - oldBod.pipe(newBod) - res.body = newBod - oldBod.once('error', err => { - newBod.emit('error', err) - }) - newBod.once('error', err => { - oldBod.emit('error', err) - }) -} - -function remoteFetch (uri, opts) { - const agent = getAgent(uri, opts) - const headers = Object.assign({ - 'connection': agent ? 'keep-alive' : 'close', - 'user-agent': USER_AGENT - }, opts.headers || {}) - - const reqOpts = { - agent, - body: opts.body, - compress: opts.compress, - follow: opts.follow, - headers: new fetch.Headers(headers), - method: opts.method, - redirect: 'manual', - size: opts.size, - counter: opts.counter, - timeout: opts.timeout - } - - return retry( - (retryHandler, attemptNum) => { - const req = new fetch.Request(uri, reqOpts) - return fetch(req) - .then(res => { - res.headers.set('x-fetch-attempts', attemptNum) - - if (opts.integrity) { - remoteFetchHandleIntegrity(res, opts.integrity) - } - - const isStream = req.body instanceof Stream - - if (opts.cacheManager) { - const isMethodGetHead = req.method === 'GET' || - req.method === 'HEAD' - - const isCachable = opts.cache !== 'no-store' && - isMethodGetHead && - makePolicy(req, res).storable() && - res.status === 200 // No other statuses should be stored! - - if (isCachable) { - return opts.cacheManager.put(req, res, opts) - } - - if (!isMethodGetHead) { - return opts.cacheManager.delete(req).then(() => { - if (res.status >= 500 && req.method !== 'POST' && !isStream) { - if (typeof opts.onRetry === 'function') { - opts.onRetry(res) - } - - return retryHandler(res) - } - - return res - }) - } - } - - const isRetriable = req.method !== 'POST' && - !isStream && ( - res.status === 408 || // Request Timeout - res.status === 420 || // Enhance Your Calm (usually Twitter rate-limit) - res.status === 429 || // Too Many Requests ("standard" rate-limiting) - res.status >= 500 // Assume server errors are momentary hiccups - ) - - if (isRetriable) { - if (typeof opts.onRetry === 'function') { - opts.onRetry(res) - } - - return retryHandler(res) - } - - if (!fetch.isRedirect(res.status) || opts.redirect === 'manual') { - return res - } - - // handle redirects - matches behavior of npm-fetch: https://github.com/bitinn/node-fetch - if (opts.redirect === 'error') { - const err = new Error(`redirect mode is set to error: ${uri}`) - err.code = 'ENOREDIRECT' - throw err - } - - if (!res.headers.get('location')) { - const err = new Error(`redirect location header missing at: ${uri}`) - err.code = 'EINVALIDREDIRECT' - throw err - } - - if (req.counter >= req.follow) { - const err = new Error(`maximum redirect reached at: ${uri}`) - err.code = 'EMAXREDIRECT' - throw err - } - - const resolvedUrl = url.resolve(req.url, res.headers.get('location')) - let redirectURL = url.parse(resolvedUrl) - - if (isURL.test(res.headers.get('location'))) { - redirectURL = url.parse(res.headers.get('location')) - } - - // Remove authorization if changing hostnames (but not if just - // changing ports or protocols). This matches the behavior of request: - // https://github.com/request/request/blob/b12a6245/lib/redirect.js#L134-L138 - if (url.parse(req.url).hostname !== redirectURL.hostname) { - req.headers.delete('authorization') - } - - // for POST request with 301/302 response, or any request with 303 response, - // use GET when following redirect - if (res.status === 303 || - ((res.status === 301 || res.status === 302) && req.method === 'POST')) { - opts.method = 'GET' - opts.body = null - req.headers.delete('content-length') - } - - opts.headers = {} - req.headers.forEach((value, name) => { - opts.headers[name] = value - }) - - opts.counter = ++req.counter - return cachingFetch(resolvedUrl, opts) - }) - .catch(err => { - const code = err.code === 'EPROMISERETRY' ? err.retried.code : err.code - - const isRetryError = RETRY_ERRORS.indexOf(code) === -1 && - RETRY_TYPES.indexOf(err.type) === -1 - - if (req.method === 'POST' || isRetryError) { - throw err - } - - if (typeof opts.onRetry === 'function') { - opts.onRetry(err) - } - - return retryHandler(err) - }) - }, - opts.retry - ).catch(err => { - if (err.status >= 400) { - return err - } - - throw err - }) -} - -function isHeaderConditional (headers) { - if (!headers || typeof headers !== 'object') { - return false - } - - const modifiers = [ - 'if-modified-since', - 'if-none-match', - 'if-unmodified-since', - 'if-match', - 'if-range' - ] - - return Object.keys(headers) - .some(h => modifiers.indexOf(h.toLowerCase()) !== -1) -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/CHANGELOG.md b/node_modules/make-fetch-happen/node_modules/cacache/CHANGELOG.md deleted file mode 100644 index f67fbc8b4..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/CHANGELOG.md +++ /dev/null @@ -1,657 +0,0 @@ -# Changelog - -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. - -### [12.0.3](https://github.com/npm/cacache/compare/v12.0.2...v12.0.3) (2019-08-19) - - -### Bug Fixes - -* do not chown if not running as root ([2d80af9](https://github.com/npm/cacache/commit/2d80af9)) - - - -### [12.0.2](https://github.com/npm/cacache/compare/v12.0.1...v12.0.2) (2019-07-19) - - - -### [12.0.1](https://github.com/npm/cacache/compare/v12.0.0...v12.0.1) (2019-07-19) - -* **deps** Abstracted out `lib/util/infer-owner.js` to - [@npmcli/infer-owner](https://www.npmjs.com/package/@npmcli/infer-owner) - so that it could be more easily used in other parts of the npm CLI. - - -## [12.0.0](https://github.com/npm/cacache/compare/v11.3.3...v12.0.0) (2019-07-15) - - -### Features - -* infer uid/gid instead of accepting as options ([ac84d14](https://github.com/npm/cacache/commit/ac84d14)) -* **i18n:** add another error message ([676cb32](https://github.com/npm/cacache/commit/676cb32)) - - -### BREAKING CHANGES - -* the uid gid options are no longer respected or -necessary. As of this change, cacache will always match the cache -contents to the ownership of the cache directory (or its parent -directory), regardless of what the caller passes in. - -Reasoning: - -The number one reason to use a uid or gid option was to keep root-owned -files from causing problems in the cache. In npm's case, this meant -that CLI's ./lib/command.js had to work out the appropriate uid and gid, -then pass it to the libnpmcommand module, which had to in turn pass the -uid and gid to npm-registry-fetch, which then passed it to -make-fetch-happen, which passed it to cacache. (For package fetching, -pacote would be in that mix as well.) - -Added to that, `cacache.rm()` will actually _write_ a file into the -cache index, but has no way to accept an option so that its call to -entry-index.js will write the index with the appropriate uid/gid. -Little ownership bugs were all over the place, and tricky to trace -through. (Why should make-fetch-happen even care about accepting or -passing uids and gids? It's an http library.) - -This change allows us to keep the cache from having mixed ownership in -any situation. - -Of course, this _does_ mean that if you have a root-owned but -user-writable folder (for example, `/tmp`), then the cache will try to -chown everything to root. - -The solution is for the user to create a folder, make it user-owned, and -use that, rather than relying on cacache to create the root cache folder. - -If we decide to restore the uid/gid opts, and use ownership inferrence -only when uid/gid are unset, then take care to also make rm take an -option object, and pass it through to entry-index.js. - - - -### [11.3.3](https://github.com/npm/cacache/compare/v11.3.2...v11.3.3) (2019-06-17) - - -### Bug Fixes - -* **audit:** npm audit fix ([200a6d5](https://github.com/npm/cacache/commit/200a6d5)) -* **config:** Add ssri config 'error' option ([#146](https://github.com/npm/cacache/issues/146)) ([47de8f5](https://github.com/npm/cacache/commit/47de8f5)) -* **deps:** npm audit fix ([481a7dc](https://github.com/npm/cacache/commit/481a7dc)) -* **standard:** standard --fix ([7799149](https://github.com/npm/cacache/commit/7799149)) -* **write:** avoid another cb never called situation ([5156561](https://github.com/npm/cacache/commit/5156561)) - - - -<a name="11.3.2"></a> -## [11.3.2](https://github.com/npm/cacache/compare/v11.3.1...v11.3.2) (2018-12-21) - - -### Bug Fixes - -* **get:** make sure to handle errors in the .then ([b10bcd0](https://github.com/npm/cacache/commit/b10bcd0)) - - - -<a name="11.3.1"></a> -## [11.3.1](https://github.com/npm/cacache/compare/v11.3.0...v11.3.1) (2018-11-05) - - -### Bug Fixes - -* **get:** export hasContent.sync properly ([d76c920](https://github.com/npm/cacache/commit/d76c920)) - - - -<a name="11.3.0"></a> -# [11.3.0](https://github.com/npm/cacache/compare/v11.2.0...v11.3.0) (2018-11-05) - - -### Features - -* **get:** add sync API for reading ([db1e094](https://github.com/npm/cacache/commit/db1e094)) - - - -<a name="11.2.0"></a> -# [11.2.0](https://github.com/npm/cacache/compare/v11.1.0...v11.2.0) (2018-08-08) - - -### Features - -* **read:** add sync support to other internal read.js fns ([fe638b6](https://github.com/npm/cacache/commit/fe638b6)) - - - -<a name="11.1.0"></a> -# [11.1.0](https://github.com/npm/cacache/compare/v11.0.3...v11.1.0) (2018-08-01) - - -### Features - -* **read:** add sync support for low-level content read ([b43af83](https://github.com/npm/cacache/commit/b43af83)) - - - -<a name="11.0.3"></a> -## [11.0.3](https://github.com/npm/cacache/compare/v11.0.2...v11.0.3) (2018-08-01) - - -### Bug Fixes - -* **config:** add ssri config options ([#136](https://github.com/npm/cacache/issues/136)) ([10d5d9a](https://github.com/npm/cacache/commit/10d5d9a)) -* **perf:** refactor content.read to avoid lstats ([c5ac10e](https://github.com/npm/cacache/commit/c5ac10e)) -* **test:** oops when removing safe-buffer ([1950490](https://github.com/npm/cacache/commit/1950490)) - - - -<a name="11.0.2"></a> -## [11.0.2](https://github.com/npm/cacache/compare/v11.0.1...v11.0.2) (2018-05-07) - - -### Bug Fixes - -* **verify:** size param no longer lost in a verify ([#131](https://github.com/npm/cacache/issues/131)) ([c614a19](https://github.com/npm/cacache/commit/c614a19)), closes [#130](https://github.com/npm/cacache/issues/130) - - - -<a name="11.0.1"></a> -## [11.0.1](https://github.com/npm/cacache/compare/v11.0.0...v11.0.1) (2018-04-10) - - - -<a name="11.0.0"></a> -# [11.0.0](https://github.com/npm/cacache/compare/v10.0.4...v11.0.0) (2018-04-09) - - -### Features - -* **opts:** use figgy-pudding for opts ([#128](https://github.com/npm/cacache/issues/128)) ([33d4eed](https://github.com/npm/cacache/commit/33d4eed)) - - -### meta - -* drop support for node@4 ([529f347](https://github.com/npm/cacache/commit/529f347)) - - -### BREAKING CHANGES - -* node@4 is no longer supported - - - -<a name="10.0.4"></a> -## [10.0.4](https://github.com/npm/cacache/compare/v10.0.3...v10.0.4) (2018-02-16) - - - -<a name="10.0.3"></a> -## [10.0.3](https://github.com/npm/cacache/compare/v10.0.2...v10.0.3) (2018-02-16) - - -### Bug Fixes - -* **content:** rethrow aggregate errors as ENOENT ([fa918f5](https://github.com/npm/cacache/commit/fa918f5)) - - - -<a name="10.0.2"></a> -## [10.0.2](https://github.com/npm/cacache/compare/v10.0.1...v10.0.2) (2018-01-07) - - -### Bug Fixes - -* **ls:** deleted entries could cause a premature stream EOF ([347dc36](https://github.com/npm/cacache/commit/347dc36)) - - - -<a name="10.0.1"></a> -## [10.0.1](https://github.com/npm/cacache/compare/v10.0.0...v10.0.1) (2017-11-15) - - -### Bug Fixes - -* **move-file:** actually use the fallback to `move-concurrently` (#110) ([073fbe1](https://github.com/npm/cacache/commit/073fbe1)) - - - -<a name="10.0.0"></a> -# [10.0.0](https://github.com/npm/cacache/compare/v9.3.0...v10.0.0) (2017-10-23) - - -### Features - -* **license:** relicense to ISC (#111) ([fdbb4e5](https://github.com/npm/cacache/commit/fdbb4e5)) - - -### Performance Improvements - -* more copyFile benchmarks ([63787bb](https://github.com/npm/cacache/commit/63787bb)) - - -### BREAKING CHANGES - -* **license:** the license has been changed from CC0-1.0 to ISC. - - - -<a name="9.3.0"></a> -# [9.3.0](https://github.com/npm/cacache/compare/v9.2.9...v9.3.0) (2017-10-07) - - -### Features - -* **copy:** added cacache.get.copy api for fast copies (#107) ([067b5f6](https://github.com/npm/cacache/commit/067b5f6)) - - - -<a name="9.2.9"></a> -## [9.2.9](https://github.com/npm/cacache/compare/v9.2.8...v9.2.9) (2017-06-17) - - - -<a name="9.2.8"></a> -## [9.2.8](https://github.com/npm/cacache/compare/v9.2.7...v9.2.8) (2017-06-05) - - -### Bug Fixes - -* **ssri:** bump ssri for bugfix ([c3232ea](https://github.com/npm/cacache/commit/c3232ea)) - - - -<a name="9.2.7"></a> -## [9.2.7](https://github.com/npm/cacache/compare/v9.2.6...v9.2.7) (2017-06-05) - - -### Bug Fixes - -* **content:** make verified content completely read-only (#96) ([4131196](https://github.com/npm/cacache/commit/4131196)) - - - -<a name="9.2.6"></a> -## [9.2.6](https://github.com/npm/cacache/compare/v9.2.5...v9.2.6) (2017-05-31) - - -### Bug Fixes - -* **node:** update ssri to prevent old node 4 crash ([5209ffe](https://github.com/npm/cacache/commit/5209ffe)) - - - -<a name="9.2.5"></a> -## [9.2.5](https://github.com/npm/cacache/compare/v9.2.4...v9.2.5) (2017-05-25) - - -### Bug Fixes - -* **deps:** fix lockfile issues and bump ssri ([84e1d7e](https://github.com/npm/cacache/commit/84e1d7e)) - - - -<a name="9.2.4"></a> -## [9.2.4](https://github.com/npm/cacache/compare/v9.2.3...v9.2.4) (2017-05-24) - - -### Bug Fixes - -* **deps:** bumping deps ([bbccb12](https://github.com/npm/cacache/commit/bbccb12)) - - - -<a name="9.2.3"></a> -## [9.2.3](https://github.com/npm/cacache/compare/v9.2.2...v9.2.3) (2017-05-24) - - -### Bug Fixes - -* **rm:** stop crashing if content is missing on rm ([ac90bc0](https://github.com/npm/cacache/commit/ac90bc0)) - - - -<a name="9.2.2"></a> -## [9.2.2](https://github.com/npm/cacache/compare/v9.2.1...v9.2.2) (2017-05-14) - - -### Bug Fixes - -* **i18n:** lets pretend this didn't happen ([519b4ee](https://github.com/npm/cacache/commit/519b4ee)) - - - -<a name="9.2.1"></a> -## [9.2.1](https://github.com/npm/cacache/compare/v9.2.0...v9.2.1) (2017-05-14) - - -### Bug Fixes - -* **docs:** fixing translation messup ([bb9e4f9](https://github.com/npm/cacache/commit/bb9e4f9)) - - - -<a name="9.2.0"></a> -# [9.2.0](https://github.com/npm/cacache/compare/v9.1.0...v9.2.0) (2017-05-14) - - -### Features - -* **i18n:** add Spanish translation for API ([531f9a4](https://github.com/npm/cacache/commit/531f9a4)) - - - -<a name="9.1.0"></a> -# [9.1.0](https://github.com/npm/cacache/compare/v9.0.0...v9.1.0) (2017-05-14) - - -### Features - -* **i18n:** Add Spanish translation and i18n setup (#91) ([323b90c](https://github.com/npm/cacache/commit/323b90c)) - - - -<a name="9.0.0"></a> -# [9.0.0](https://github.com/npm/cacache/compare/v8.0.0...v9.0.0) (2017-04-28) - - -### Bug Fixes - -* **memoization:** actually use the LRU ([0e55dc9](https://github.com/npm/cacache/commit/0e55dc9)) - - -### Features - -* **memoization:** memoizers can be injected through opts.memoize (#90) ([e5614c7](https://github.com/npm/cacache/commit/e5614c7)) - - -### BREAKING CHANGES - -* **memoization:** If you were passing an object to opts.memoize, it will now be used as an injected memoization object. If you were only passing booleans and other non-objects through that option, no changes are needed. - - - -<a name="8.0.0"></a> -# [8.0.0](https://github.com/npm/cacache/compare/v7.1.0...v8.0.0) (2017-04-22) - - -### Features - -* **read:** change hasContent to return {sri, size} (#88) ([bad6c49](https://github.com/npm/cacache/commit/bad6c49)), closes [#87](https://github.com/npm/cacache/issues/87) - - -### BREAKING CHANGES - -* **read:** hasContent now returns an object with `{sri, size}` instead of `sri`. Use `result.sri` anywhere that needed the old return value. - - - -<a name="7.1.0"></a> -# [7.1.0](https://github.com/npm/cacache/compare/v7.0.5...v7.1.0) (2017-04-20) - - -### Features - -* **size:** handle content size info (#49) ([91230af](https://github.com/npm/cacache/commit/91230af)) - - - -<a name="7.0.5"></a> -## [7.0.5](https://github.com/npm/cacache/compare/v7.0.4...v7.0.5) (2017-04-18) - - -### Bug Fixes - -* **integrity:** new ssri with fixed integrity stream ([6d13e8e](https://github.com/npm/cacache/commit/6d13e8e)) -* **write:** wrap stuff in promises to improve errors ([3624fc5](https://github.com/npm/cacache/commit/3624fc5)) - - - -<a name="7.0.4"></a> -## [7.0.4](https://github.com/npm/cacache/compare/v7.0.3...v7.0.4) (2017-04-15) - - -### Bug Fixes - -* **fix-owner:** throw away ENOENTs on chownr ([d49bbcd](https://github.com/npm/cacache/commit/d49bbcd)) - - - -<a name="7.0.3"></a> -## [7.0.3](https://github.com/npm/cacache/compare/v7.0.2...v7.0.3) (2017-04-05) - - -### Bug Fixes - -* **read:** fixing error message for integrity verification failures ([9d4f0a5](https://github.com/npm/cacache/commit/9d4f0a5)) - - - -<a name="7.0.2"></a> -## [7.0.2](https://github.com/npm/cacache/compare/v7.0.1...v7.0.2) (2017-04-03) - - -### Bug Fixes - -* **integrity:** use EINTEGRITY error code and update ssri ([8dc2e62](https://github.com/npm/cacache/commit/8dc2e62)) - - - -<a name="7.0.1"></a> -## [7.0.1](https://github.com/npm/cacache/compare/v7.0.0...v7.0.1) (2017-04-03) - - -### Bug Fixes - -* **docs:** fix header name conflict in readme ([afcd456](https://github.com/npm/cacache/commit/afcd456)) - - - -<a name="7.0.0"></a> -# [7.0.0](https://github.com/npm/cacache/compare/v6.3.0...v7.0.0) (2017-04-03) - - -### Bug Fixes - -* **test:** fix content.write tests when running in docker ([d2e9b6a](https://github.com/npm/cacache/commit/d2e9b6a)) - - -### Features - -* **integrity:** subresource integrity support (#78) ([b1e731f](https://github.com/npm/cacache/commit/b1e731f)) - - -### BREAKING CHANGES - -* **integrity:** The entire API has been overhauled to use SRI hashes instead of digest/hashAlgorithm pairs. SRI hashes follow the Subresource Integrity standard and support strings and objects compatible with [`ssri`](https://npm.im/ssri). - -* This change bumps the index version, which will invalidate all previous index entries. Content entries will remain intact, and existing caches will automatically reuse any content from before this breaking change. - -* `cacache.get.info()`, `cacache.ls()`, and `cacache.ls.stream()` will now return objects that looks like this: - -``` -{ - key: String, - integrity: '<algorithm>-<base64hash>', - path: ContentPath, - time: Date<ms>, - metadata: Any -} -``` - -* `opts.digest` and `opts.hashAlgorithm` are obsolete for any API calls that used them. - -* Anywhere `opts.digest` was accepted, `opts.integrity` is now an option. Any valid SRI hash is accepted here -- multiple hash entries will be resolved according to the standard: first, the "strongest" hash algorithm will be picked, and then each of the entries for that algorithm will be matched against the content. Content will be validated if *any* of the entries match (so, a single integrity string can be used for multiple "versions" of the same document/data). - -* `put.byDigest()`, `put.stream.byDigest`, `get.byDigest()` and `get.stream.byDigest()` now expect an SRI instead of a `digest` + `opts.hashAlgorithm` pairing. - -* `get.hasContent()` now expects an integrity hash instead of a digest. If content exists, it will return the specific single integrity hash that was found in the cache. - -* `verify()` has learned to handle integrity-based caches, and forgotten how to handle old-style cache indices due to the format change. - -* `cacache.rm.content()` now expects an integrity hash instead of a hex digest. - - - -<a name="6.3.0"></a> -# [6.3.0](https://github.com/npm/cacache/compare/v6.2.0...v6.3.0) (2017-04-01) - - -### Bug Fixes - -* **fixOwner:** ignore EEXIST race condition from mkdirp ([4670e9b](https://github.com/npm/cacache/commit/4670e9b)) -* **index:** ignore index removal races when inserting ([b9d2fa2](https://github.com/npm/cacache/commit/b9d2fa2)) -* **memo:** use lru-cache for better mem management (#75) ([d8ac5aa](https://github.com/npm/cacache/commit/d8ac5aa)) - - -### Features - -* **dependencies:** Switch to move-concurrently (#77) ([dc6482d](https://github.com/npm/cacache/commit/dc6482d)) - - - -<a name="6.2.0"></a> -# [6.2.0](https://github.com/npm/cacache/compare/v6.1.2...v6.2.0) (2017-03-15) - - -### Bug Fixes - -* **index:** additional bucket entry verification with checksum (#72) ([f8e0f25](https://github.com/npm/cacache/commit/f8e0f25)) -* **verify:** return fixOwner.chownr promise ([6818521](https://github.com/npm/cacache/commit/6818521)) - - -### Features - -* **tmp:** safe tmp dir creation/management util (#73) ([c42da71](https://github.com/npm/cacache/commit/c42da71)) - - - -<a name="6.1.2"></a> -## [6.1.2](https://github.com/npm/cacache/compare/v6.1.1...v6.1.2) (2017-03-13) - - -### Bug Fixes - -* **index:** set default hashAlgorithm ([d6eb2f0](https://github.com/npm/cacache/commit/d6eb2f0)) - - - -<a name="6.1.1"></a> -## [6.1.1](https://github.com/npm/cacache/compare/v6.1.0...v6.1.1) (2017-03-13) - - -### Bug Fixes - -* **coverage:** bumping coverage for verify (#71) ([0b7faf6](https://github.com/npm/cacache/commit/0b7faf6)) -* **deps:** glob should have been a regular dep :< ([0640bc4](https://github.com/npm/cacache/commit/0640bc4)) - - - -<a name="6.1.0"></a> -# [6.1.0](https://github.com/npm/cacache/compare/v6.0.2...v6.1.0) (2017-03-12) - - -### Bug Fixes - -* **coverage:** more coverage for content reads (#70) ([ef4f70a](https://github.com/npm/cacache/commit/ef4f70a)) -* **tests:** use safe-buffer because omfg (#69) ([6ab8132](https://github.com/npm/cacache/commit/6ab8132)) - - -### Features - -* **rm:** limited rm.all and fixed bugs (#66) ([d5d25ba](https://github.com/npm/cacache/commit/d5d25ba)), closes [#66](https://github.com/npm/cacache/issues/66) -* **verify:** tested, working cache verifier/gc (#68) ([45ad77a](https://github.com/npm/cacache/commit/45ad77a)) - - - -<a name="6.0.2"></a> -## [6.0.2](https://github.com/npm/cacache/compare/v6.0.1...v6.0.2) (2017-03-11) - - -### Bug Fixes - -* **index:** segment cache items with another subbucket (#64) ([c3644e5](https://github.com/npm/cacache/commit/c3644e5)) - - - -<a name="6.0.1"></a> -## [6.0.1](https://github.com/npm/cacache/compare/v6.0.0...v6.0.1) (2017-03-05) - - -### Bug Fixes - -* **docs:** Missed spots in README ([8ffb7fa](https://github.com/npm/cacache/commit/8ffb7fa)) - - - -<a name="6.0.0"></a> -# [6.0.0](https://github.com/npm/cacache/compare/v5.0.3...v6.0.0) (2017-03-05) - - -### Bug Fixes - -* **api:** keep memo cache mostly-internal ([2f72d0a](https://github.com/npm/cacache/commit/2f72d0a)) -* **content:** use the rest of the string, not the whole string ([fa8f3c3](https://github.com/npm/cacache/commit/fa8f3c3)) -* **deps:** removed `format-number@2.0.2` ([1187791](https://github.com/npm/cacache/commit/1187791)) -* **deps:** removed inflight@1.0.6 ([0d1819c](https://github.com/npm/cacache/commit/0d1819c)) -* **deps:** rimraf@2.6.1 ([9efab6b](https://github.com/npm/cacache/commit/9efab6b)) -* **deps:** standard@9.0.0 ([4202cba](https://github.com/npm/cacache/commit/4202cba)) -* **deps:** tap@10.3.0 ([aa03088](https://github.com/npm/cacache/commit/aa03088)) -* **deps:** weallcontribute@1.0.8 ([ad4f4dc](https://github.com/npm/cacache/commit/ad4f4dc)) -* **docs:** add security note to hashKey ([03f81ba](https://github.com/npm/cacache/commit/03f81ba)) -* **hashes:** change default hashAlgorithm to sha512 ([ea00ba6](https://github.com/npm/cacache/commit/ea00ba6)) -* **hashes:** missed a spot for hashAlgorithm defaults ([45997d8](https://github.com/npm/cacache/commit/45997d8)) -* **index:** add length header before JSON for verification ([fb8cb4d](https://github.com/npm/cacache/commit/fb8cb4d)) -* **index:** change index filenames to sha1s of keys ([bbc5fca](https://github.com/npm/cacache/commit/bbc5fca)) -* **index:** who cares about race conditions anyway ([b1d3888](https://github.com/npm/cacache/commit/b1d3888)) -* **perf:** bulk-read get+read for massive speed ([d26cdf9](https://github.com/npm/cacache/commit/d26cdf9)) -* **perf:** use bulk file reads for index reads ([79a8891](https://github.com/npm/cacache/commit/79a8891)) -* **put-stream:** remove tmp file on stream insert error ([65f6632](https://github.com/npm/cacache/commit/65f6632)) -* **put-stream:** robustified and predictibilized ([daf9e08](https://github.com/npm/cacache/commit/daf9e08)) -* **put-stream:** use new promise API for moves ([1d36013](https://github.com/npm/cacache/commit/1d36013)) -* **readme:** updated to reflect new default hashAlgo ([c60a2fa](https://github.com/npm/cacache/commit/c60a2fa)) -* **verify:** tiny typo fix ([db22d05](https://github.com/npm/cacache/commit/db22d05)) - - -### Features - -* **api:** converted external api ([7bf032f](https://github.com/npm/cacache/commit/7bf032f)) -* **cacache:** exported clearMemoized() utility ([8d2c5b6](https://github.com/npm/cacache/commit/8d2c5b6)) -* **cache:** add versioning to content and index ([31bc549](https://github.com/npm/cacache/commit/31bc549)) -* **content:** collate content files into subdirs ([c094d9f](https://github.com/npm/cacache/commit/c094d9f)) -* **deps:** `@npmcorp/move@1.0.0` ([bdd00bf](https://github.com/npm/cacache/commit/bdd00bf)) -* **deps:** `bluebird@3.4.7` ([3a17aff](https://github.com/npm/cacache/commit/3a17aff)) -* **deps:** `promise-inflight@1.0.1` ([a004fe6](https://github.com/npm/cacache/commit/a004fe6)) -* **get:** added memoization support for get ([c77d794](https://github.com/npm/cacache/commit/c77d794)) -* **get:** export hasContent ([2956ec3](https://github.com/npm/cacache/commit/2956ec3)) -* **index:** add hashAlgorithm and format insert ret val ([b639746](https://github.com/npm/cacache/commit/b639746)) -* **index:** collate index files into subdirs ([e8402a5](https://github.com/npm/cacache/commit/e8402a5)) -* **index:** promisify entry index ([cda3335](https://github.com/npm/cacache/commit/cda3335)) -* **memo:** added memoization lib ([da07b92](https://github.com/npm/cacache/commit/da07b92)) -* **memo:** export memoization api ([954b1b3](https://github.com/npm/cacache/commit/954b1b3)) -* **move-file:** add move fallback for weird errors ([5cf4616](https://github.com/npm/cacache/commit/5cf4616)) -* **perf:** bulk content write api ([51b536e](https://github.com/npm/cacache/commit/51b536e)) -* **put:** added memoization support to put ([b613a70](https://github.com/npm/cacache/commit/b613a70)) -* **read:** switched to promises ([a869362](https://github.com/npm/cacache/commit/a869362)) -* **rm:** added memoization support to rm ([4205cf0](https://github.com/npm/cacache/commit/4205cf0)) -* **rm:** switched to promises ([a000d24](https://github.com/npm/cacache/commit/a000d24)) -* **util:** promise-inflight ownership fix requests ([9517cd7](https://github.com/npm/cacache/commit/9517cd7)) -* **util:** use promises for api ([ae204bb](https://github.com/npm/cacache/commit/ae204bb)) -* **verify:** converted to Promises ([f0b3974](https://github.com/npm/cacache/commit/f0b3974)) - - -### BREAKING CHANGES - -* cache: index/content directories are now versioned. Previous caches are no longer compatible and cannot be migrated. -* util: fix-owner now uses Promises instead of callbacks -* index: Previously-generated index entries are no longer compatible and the index must be regenerated. -* index: The index format has changed and previous caches are no longer compatible. Existing caches will need to be regenerated. -* hashes: Default hashAlgorithm changed from sha1 to sha512. If you -rely on the prior setting, pass `opts.hashAlgorithm` in explicitly. -* content: Previously-generated content directories are no longer compatible -and must be regenerated. -* verify: API is now promise-based -* read: Switches to a Promise-based API and removes callback stuff -* rm: Switches to a Promise-based API and removes callback stuff -* index: this changes the API to work off promises instead of callbacks -* api: this means we are going all in on promises now diff --git a/node_modules/make-fetch-happen/node_modules/cacache/LICENSE.md b/node_modules/make-fetch-happen/node_modules/cacache/LICENSE.md deleted file mode 100644 index 8d28acf86..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/LICENSE.md +++ /dev/null @@ -1,16 +0,0 @@ -ISC License - -Copyright (c) npm, Inc. - -Permission to use, copy, modify, and/or distribute this software for -any purpose with or without fee is hereby granted, provided that the -above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS -ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/make-fetch-happen/node_modules/cacache/README.es.md b/node_modules/make-fetch-happen/node_modules/cacache/README.es.md deleted file mode 100644 index 55007e20d..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/README.es.md +++ /dev/null @@ -1,628 +0,0 @@ -# cacache [![npm version](https://img.shields.io/npm/v/cacache.svg)](https://npm.im/cacache) [![license](https://img.shields.io/npm/l/cacache.svg)](https://npm.im/cacache) [![Travis](https://img.shields.io/travis/zkat/cacache.svg)](https://travis-ci.org/zkat/cacache) [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/zkat/cacache?svg=true)](https://ci.appveyor.com/project/zkat/cacache) [![Coverage Status](https://coveralls.io/repos/github/zkat/cacache/badge.svg?branch=latest)](https://coveralls.io/github/zkat/cacache?branch=latest) - -[`cacache`](https://github.com/zkat/cacache) es una librería de Node.js para -manejar caches locales en disco, con acceso tanto con claves únicas como -direcciones de contenido (hashes/hacheos). Es súper rápida, excelente con el -acceso concurrente, y jamás te dará datos incorrectos, aún si se corrompen o -manipulan directamente los ficheros del cache. - -El propósito original era reemplazar el caché local de -[npm](https://npm.im/npm), pero se puede usar por su propia cuenta. - -_Traducciones: [English](README.md)_ - -## Instalación - -`$ npm install --save cacache` - -## Índice - -* [Ejemplo](#ejemplo) -* [Características](#características) -* [Cómo Contribuir](#cómo-contribuir) -* [API](#api) - * [Usando el API en español](#localized-api) - * Leer - * [`ls`](#ls) - * [`ls.flujo`](#ls-stream) - * [`saca`](#get-data) - * [`saca.flujo`](#get-stream) - * [`saca.info`](#get-info) - * [`saca.tieneDatos`](#get-hasContent) - * Escribir - * [`mete`](#put-data) - * [`mete.flujo`](#put-stream) - * [opciones para `mete*`](#put-options) - * [`rm.todo`](#rm-all) - * [`rm.entrada`](#rm-entry) - * [`rm.datos`](#rm-content) - * Utilidades - * [`ponLenguaje`](#set-locale) - * [`limpiaMemoizado`](#clear-memoized) - * [`tmp.hazdir`](#tmp-mkdir) - * [`tmp.conTmp`](#with-tmp) - * Integridad - * [Subresource Integrity](#integrity) - * [`verifica`](#verify) - * [`verifica.ultimaVez`](#verify-last-run) - -### Ejemplo - -```javascript -const cacache = require('cacache/es') -const fs = require('fs') - -const tarbol = '/ruta/a/mi-tar.tgz' -const rutaCache = '/tmp/my-toy-cache' -const clave = 'mi-clave-única-1234' - -// ¡Añádelo al caché! Usa `rutaCache` como raíz del caché. -cacache.mete(rutaCache, clave, '10293801983029384').then(integrity => { - console.log(`Saved content to ${rutaCache}.`) -}) - -const destino = '/tmp/mytar.tgz' - -// Copia el contenido del caché a otro fichero, pero esta vez con flujos. -cacache.saca.flujo( - rutaCache, clave -).pipe( - fs.createWriteStream(destino) -).on('finish', () => { - console.log('extracción completada') -}) - -// La misma cosa, pero accesando el contenido directamente, sin tocar el índice. -cacache.saca.porHacheo(rutaCache, integridad).then(datos => { - fs.writeFile(destino, datos, err => { - console.log('datos del tarbol sacados basado en su sha512, y escrito a otro fichero') - }) -}) -``` - -### Características - -* Extracción por clave o por dirección de contenido (shasum, etc) -* Usa el estándard de web, [Subresource Integrity](#integrity) -* Compatible con multiples algoritmos - usa sha1, sha512, etc, en el mismo caché sin problema -* Entradas con contenido idéntico comparten ficheros -* Tolerancia de fallas (inmune a corrupción, ficheros parciales, carreras de proceso, etc) -* Verificación completa de datos cuando (escribiendo y leyendo) -* Concurrencia rápida, segura y "lockless" -* Compatible con `stream`s (flujos) -* Compatible con `Promise`s (promesas) -* Bastante rápida -- acceso, incluyendo verificación, en microsegundos -* Almacenaje de metadatos arbitrarios -* Colección de basura y verificación adicional fuera de banda -* Cobertura rigurosa de pruebas -* Probablente hay un "Bloom filter" por ahí en algún lado. Eso le mola a la gente, ¿Verdad? 🤔 - -### Cómo Contribuir - -El equipo de cacache felizmente acepta contribuciones de código y otras maneras de participación. ¡Hay muchas formas diferentes de contribuir! La [Guía de Colaboradores](CONTRIBUTING.md) (en inglés) tiene toda la información que necesitas para cualquier tipo de contribución: todo desde cómo reportar errores hasta cómo someter parches con nuevas características. Con todo y eso, no se preocupe por si lo que haces está exáctamente correcto: no hay ningún problema en hacer preguntas si algo no está claro, o no lo encuentras. - -El equipo de cacache tiene miembros hispanohablantes: es completamente aceptable crear `issues` y `pull requests` en español/castellano. - -Todos los participantes en este proyecto deben obedecer el [Código de Conducta](CODE_OF_CONDUCT.md) (en inglés), y en general actuar de forma amable y respetuosa mientras participan en esta comunidad. - -Por favor refiérase al [Historial de Cambios](CHANGELOG.md) (en inglés) para detalles sobre cambios importantes incluídos en cada versión. - -Finalmente, cacache tiene un sistema de localización de lenguaje. Si te interesa añadir lenguajes o mejorar los que existen, mira en el directorio `./locales` para comenzar. - -Happy hacking! - -### API - -#### <a name="localized-api"></a> Usando el API en español - -cacache incluye una traducción completa de su API al castellano, con las mismas -características. Para usar el API como está documentado en este documento, usa -`require('cacache/es')` - -cacache también tiene otros lenguajes: encuéntralos bajo `./locales`, y podrás -usar el API en ese lenguaje con `require('cacache/<lenguaje>')` - -#### <a name="ls"></a> `> cacache.ls(cache) -> Promise<Object>` - -Enumera todas las entradas en el caché, dentro de un solo objeto. Cada entrada -en el objeto tendrá como clave la clave única usada para el índice, el valor -siendo un objeto de [`saca.info`](#get-info). - -##### Ejemplo - -```javascript -cacache.ls(rutaCache).then(console.log) -// Salida -{ - 'my-thing': { - key: 'my-thing', - integrity: 'sha512-BaSe64/EnCoDED+HAsh==' - path: '.testcache/content/deadbeef', // unido con `rutaCache` - time: 12345698490, - size: 4023948, - metadata: { - name: 'blah', - version: '1.2.3', - description: 'this was once a package but now it is my-thing' - } - }, - 'other-thing': { - key: 'other-thing', - integrity: 'sha1-ANothER+hasH=', - path: '.testcache/content/bada55', - time: 11992309289, - size: 111112 - } -} -``` - -#### <a name="ls-stream"></a> `> cacache.ls.flujo(cache) -> Readable` - -Enumera todas las entradas en el caché, emitiendo un objeto de -[`saca.info`](#get-info) por cada evento de `data` en el flujo. - -##### Ejemplo - -```javascript -cacache.ls.flujo(rutaCache).on('data', console.log) -// Salida -{ - key: 'my-thing', - integrity: 'sha512-BaSe64HaSh', - path: '.testcache/content/deadbeef', // unido con `rutaCache` - time: 12345698490, - size: 13423, - metadata: { - name: 'blah', - version: '1.2.3', - description: 'this was once a package but now it is my-thing' - } -} - -{ - key: 'other-thing', - integrity: 'whirlpool-WoWSoMuchSupport', - path: '.testcache/content/bada55', - time: 11992309289, - size: 498023984029 -} - -{ - ... -} -``` - -#### <a name="get-data"></a> `> cacache.saca(cache, clave, [ops]) -> Promise({data, metadata, integrity})` - -Devuelve un objeto con los datos, hacheo de integridad y metadatos identificados -por la `clave`. La propiedad `data` de este objeto será una instancia de -`Buffer` con los datos almacenados en el caché. to do with it! cacache just -won't care. - -`integrity` es un `string` de [Subresource Integrity](#integrity). Dígase, un -`string` que puede ser usado para verificar a la `data`, que tiene como formato -`<algoritmo>-<hacheo-integridad-base64>`. - -So no existe ninguna entrada identificada por `clave`, o se los datos -almacenados localmente fallan verificación, el `Promise` fallará. - -Una sub-función, `saca.porHacheo`, tiene casi el mismo comportamiento, excepto -que busca entradas usando el hacheo de integridad, sin tocar el índice general. -Esta versión *sólo* devuelve `data`, sin ningún objeto conteniéndola. - -##### Nota - -Esta función lee la entrada completa a la memoria antes de devolverla. Si estás -almacenando datos Muy Grandes, es posible que [`saca.flujo`](#get-stream) sea -una mejor solución. - -##### Ejemplo - -```javascript -// Busca por clave -cache.saca(rutaCache, 'my-thing').then(console.log) -// Salida: -{ - metadata: { - thingName: 'my' - }, - integrity: 'sha512-BaSe64HaSh', - data: Buffer#<deadbeef>, - size: 9320 -} - -// Busca por hacheo -cache.saca.porHacheo(rutaCache, 'sha512-BaSe64HaSh').then(console.log) -// Salida: -Buffer#<deadbeef> -``` - -#### <a name="get-stream"></a> `> cacache.saca.flujo(cache, clave, [ops]) -> Readable` - -Devuelve un [Readable -Stream](https://nodejs.org/api/stream.html#stream_readable_streams) de los datos -almacenados bajo `clave`. - -So no existe ninguna entrada identificada por `clave`, o se los datos -almacenados localmente fallan verificación, el `Promise` fallará. - -`metadata` y `integrity` serán emitidos como eventos antes de que el flujo -cierre. - -Una sub-función, `saca.flujo.porHacheo`, tiene casi el mismo comportamiento, -excepto que busca entradas usando el hacheo de integridad, sin tocar el índice -general. Esta versión no emite eventos de `metadata` o `integrity`. - -##### Ejemplo - -```javascript -// Busca por clave -cache.saca.flujo( - rutaCache, 'my-thing' -).on('metadata', metadata => { - console.log('metadata:', metadata) -}).on('integrity', integrity => { - console.log('integrity:', integrity) -}).pipe( - fs.createWriteStream('./x.tgz') -) -// Salidas: -metadata: { ... } -integrity: 'sha512-SoMeDIGest+64==' - -// Busca por hacheo -cache.saca.flujo.porHacheo( - rutaCache, 'sha512-SoMeDIGest+64==' -).pipe( - fs.createWriteStream('./x.tgz') -) -``` - -#### <a name="get-info"></a> `> cacache.saca.info(cache, clave) -> Promise` - -Busca la `clave` en el índice del caché, devolviendo información sobre la -entrada si existe. - -##### Campos - -* `key` - Clave de la entrada. Igual al argumento `clave`. -* `integrity` - [hacheo de Subresource Integrity](#integrity) del contenido al que se refiere esta entrada. -* `path` - Dirección del fichero de datos almacenados, unida al argumento `cache`. -* `time` - Hora de creación de la entrada -* `metadata` - Metadatos asignados a esta entrada por el usuario - -##### Ejemplo - -```javascript -cacache.saca.info(rutaCache, 'my-thing').then(console.log) - -// Salida -{ - key: 'my-thing', - integrity: 'sha256-MUSTVERIFY+ALL/THINGS==' - path: '.testcache/content/deadbeef', - time: 12345698490, - size: 849234, - metadata: { - name: 'blah', - version: '1.2.3', - description: 'this was once a package but now it is my-thing' - } -} -``` - -#### <a name="get-hasContent"></a> `> cacache.saca.tieneDatos(cache, integrity) -> Promise` - -Busca un [hacheo Subresource Integrity](#integrity) en el caché. Si existe el -contenido asociado con `integrity`, devuelve un objeto con dos campos: el hacheo -_específico_ que se usó para la búsqueda, `sri`, y el tamaño total del -contenido, `size`. Si no existe ningún contenido asociado con `integrity`, -devuelve `false`. - -##### Ejemplo - -```javascript -cacache.saca.tieneDatos(rutaCache, 'sha256-MUSTVERIFY+ALL/THINGS==').then(console.log) - -// Salida -{ - sri: { - source: 'sha256-MUSTVERIFY+ALL/THINGS==', - algorithm: 'sha256', - digest: 'MUSTVERIFY+ALL/THINGS==', - options: [] - }, - size: 9001 -} - -cacache.saca.tieneDatos(rutaCache, 'sha521-NOT+IN/CACHE==').then(console.log) - -// Salida -false -``` - -#### <a name="put-data"></a> `> cacache.mete(cache, clave, datos, [ops]) -> Promise` - -Inserta `datos` en el caché. El `Promise` devuelto se resuelve con un hacheo -(generado conforme a [`ops.algorithms`](#optsalgorithms)) después que la entrada -haya sido escrita en completo. - -##### Ejemplo - -```javascript -fetch( - 'https://registry.npmjs.org/cacache/-/cacache-1.0.0.tgz' -).then(datos => { - return cacache.mete(rutaCache, 'registry.npmjs.org|cacache@1.0.0', datos) -}).then(integridad => { - console.log('el hacheo de integridad es', integridad) -}) -``` - -#### <a name="put-stream"></a> `> cacache.mete.flujo(cache, clave, [ops]) -> Writable` - -Devuelve un [Writable -Stream](https://nodejs.org/api/stream.html#stream_writable_streams) que inserta -al caché los datos escritos a él. Emite un evento `integrity` con el hacheo del -contenido escrito, cuando completa. - -##### Ejemplo - -```javascript -request.get( - 'https://registry.npmjs.org/cacache/-/cacache-1.0.0.tgz' -).pipe( - cacache.mete.flujo( - rutaCache, 'registry.npmjs.org|cacache@1.0.0' - ).on('integrity', d => console.log(`integrity digest is ${d}`)) -) -``` - -#### <a name="put-options"></a> `> opciones para cacache.mete` - -La funciones `cacache.mete` tienen un número de opciones en común. - -##### `ops.metadata` - -Metadatos del usuario que se almacenarán con la entrada. - -##### `ops.size` - -El tamaño declarado de los datos que se van a insertar. Si es proveído, cacache -verificará que los datos escritos sean de ese tamaño, o si no, fallará con un -error con código `EBADSIZE`. - -##### `ops.integrity` - -El hacheo de integridad de los datos siendo escritos. - -Si es proveído, y los datos escritos no le corresponden, la operación fallará -con un error con código `EINTEGRITY`. - -`ops.algorithms` no tiene ningún efecto si esta opción está presente. - -##### `ops.algorithms` - -Por Defecto: `['sha512']` - -Algoritmos que se deben usar cuando se calcule el hacheo de [subresource -integrity](#integrity) para los datos insertados. Puede usar cualquier algoritmo -enumerado en `crypto.getHashes()`. - -Por el momento, sólo se acepta un algoritmo (dígase, un array con exáctamente un -valor). No tiene ningún efecto si `ops.integrity` también ha sido proveido. - -##### `ops.uid`/`ops.gid` - -Si están presentes, cacache hará todo lo posible para asegurarse que todos los -ficheros creados en el proceso de sus operaciones en el caché usen esta -combinación en particular. - -##### `ops.memoize` - -Por Defecto: `null` - -Si es verdad, cacache tratará de memoizar los datos de la entrada en memoria. La -próxima vez que el proceso corriente trate de accesar los datos o entrada, -cacache buscará en memoria antes de buscar en disco. - -Si `ops.memoize` es un objeto regular o un objeto como `Map` (es decir, un -objeto con métodos `get()` y `set()`), este objeto en sí sera usado en vez del -caché de memoria global. Esto permite tener lógica específica a tu aplicación -encuanto al almacenaje en memoria de tus datos. - -Si quieres asegurarte que los datos se lean del disco en vez de memoria, usa -`memoize: false` cuando uses funciones de `cacache.saca`. - -#### <a name="rm-all"></a> `> cacache.rm.todo(cache) -> Promise` - -Borra el caché completo, incluyendo ficheros temporeros, ficheros de datos, y el -índice del caché. - -##### Ejemplo - -```javascript -cacache.rm.todo(rutaCache).then(() => { - console.log('THE APOCALYPSE IS UPON US 😱') -}) -``` - -#### <a name="rm-entry"></a> `> cacache.rm.entrada(cache, clave) -> Promise` - -Alias: `cacache.rm` - -Borra la entrada `clave` del índuce. El contenido asociado con esta entrada -seguirá siendo accesible por hacheo usando -[`saca.flujo.porHacheo`](#get-stream). - -Para borrar el contenido en sí, usa [`rm.datos`](#rm-content). Si quieres hacer -esto de manera más segura (pues ficheros de contenido pueden ser usados por -multiples entradas), usa [`verifica`](#verify) para borrar huérfanos. - -##### Ejemplo - -```javascript -cacache.rm.entrada(rutaCache, 'my-thing').then(() => { - console.log('I did not like it anyway') -}) -``` - -#### <a name="rm-content"></a> `> cacache.rm.datos(cache, integrity) -> Promise` - -Borra el contenido identificado por `integrity`. Cualquier entrada que se -refiera a este contenido quedarán huérfanas y se invalidarán si se tratan de -accesar, al menos que contenido idéntico sea añadido bajo `integrity`. - -##### Ejemplo - -```javascript -cacache.rm.datos(rutaCache, 'sha512-SoMeDIGest/IN+BaSE64==').then(() => { - console.log('los datos para `mi-cosa` se borraron') -}) -``` - -#### <a name="set-locale"></a> `> cacache.ponLenguaje(locale)` - -Configura el lenguaje usado para mensajes y errores de cacache. La lista de -lenguajes disponibles está en el directorio `./locales` del proyecto. - -_Te interesa añadir más lenguajes? [Somete un PR](CONTRIBUTING.md)!_ - -#### <a name="clear-memoized"></a> `> cacache.limpiaMemoizado()` - -Completamente reinicializa el caché de memoria interno. Si estás usando tu -propio objecto con `ops.memoize`, debes hacer esto de manera específica a él. - -#### <a name="tmp-mkdir"></a> `> tmp.hazdir(cache, ops) -> Promise<Path>` - -Alias: `tmp.mkdir` - -Devuelve un directorio único dentro del directorio `tmp` del caché. - -Una vez tengas el directorio, es responsabilidad tuya asegurarte que todos los -ficheros escrito a él sean creados usando los permisos y `uid`/`gid` concordante -con el caché. Si no, puedes pedirle a cacache que lo haga llamando a -[`cacache.tmp.fix()`](#tmp-fix). Esta función arreglará todos los permisos en el -directorio tmp. - -Si quieres que cacache limpie el directorio automáticamente cuando termines, usa -[`cacache.tmp.conTmp()`](#with-tpm). - -##### Ejemplo - -```javascript -cacache.tmp.mkdir(cache).then(dir => { - fs.writeFile(path.join(dir, 'blablabla'), Buffer#<1234>, ...) -}) -``` - -#### <a name="with-tmp"></a> `> tmp.conTmp(cache, ops, cb) -> Promise` - -Crea un directorio temporero con [`tmp.mkdir()`](#tmp-mkdir) y ejecuta `cb` con -él como primer argumento. El directorio creado será removido automáticamente -cuando el valor devolvido por `cb()` se resuelva. - -Las mismas advertencias aplican en cuanto a manejando permisos para los ficheros -dentro del directorio. - -##### Ejemplo - -```javascript -cacache.tmp.conTmp(cache, dir => { - return fs.writeFileAsync(path.join(dir, 'blablabla'), Buffer#<1234>, ...) -}).then(() => { - // `dir` no longer exists -}) -``` - -#### <a name="integrity"></a> Hacheos de Subresource Integrity - -cacache usa strings que siguen la especificación de [Subresource Integrity -spec](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity). - -Es decir, donde quiera cacache espera un argumento o opción `integrity`, ese -string debería usar el formato `<algoritmo>-<hacheo-base64>`. - -Una variación importante sobre los hacheos que cacache acepta es que acepta el -nombre de cualquier algoritmo aceptado por el proceso de Node.js donde se usa. -Puedes usar `crypto.getHashes()` para ver cuales están disponibles. - -##### Generando tus propios hacheos - -Si tienes un `shasum`, en general va a estar en formato de string hexadecimal -(es decir, un `sha1` se vería como algo así: -`5f5513f8822fdbe5145af33b64d8d970dcf95c6e`). - -Para ser compatible con cacache, necesitas convertir esto a su equivalente en -subresource integrity. Por ejemplo, el hacheo correspondiente al ejemplo -anterior sería: `sha1-X1UT+IIv2+UUWvM7ZNjZcNz5XG4=`. - -Puedes usar código así para generarlo por tu cuenta: - -```javascript -const crypto = require('crypto') -const algoritmo = 'sha512' -const datos = 'foobarbaz' - -const integrity = ( - algorithm + - '-' + - crypto.createHash(algoritmo).update(datos).digest('base64') -) -``` - -También puedes usar [`ssri`](https://npm.im/ssri) para deferir el trabajo a otra -librería que garantiza que todo esté correcto, pues maneja probablemente todas -las operaciones que tendrías que hacer con SRIs, incluyendo convirtiendo entre -hexadecimal y el formato SRI. - -#### <a name="verify"></a> `> cacache.verifica(cache, ops) -> Promise` - -Examina y arregla tu caché: - -* Limpia entradas inválidas, huérfanas y corrompidas -* Te deja filtrar cuales entradas retener, con tu propio filtro -* Reclama cualquier ficheros de contenido sin referencias en el índice -* Verifica integridad de todos los ficheros de contenido y remueve los malos -* Arregla permisos del caché -* Remieve el directorio `tmp` en el caché, y todo su contenido. - -Cuando termine, devuelve un objeto con varias estadísticas sobre el proceso de -verificación, por ejemplo la cantidad de espacio de disco reclamado, el número -de entradas válidas, número de entradas removidas, etc. - -##### Opciones - -* `ops.uid` - uid para asignarle al caché y su contenido -* `ops.gid` - gid para asignarle al caché y su contenido -* `ops.filter` - recibe una entrada como argumento. Devuelve falso para removerla. Nota: es posible que esta función sea invocada con la misma entrada más de una vez. - -##### Example - -```sh -echo somegarbage >> $RUTACACHE/content/deadbeef -``` - -```javascript -cacache.verifica(rutaCache).then(stats => { - // deadbeef collected, because of invalid checksum. - console.log('cache is much nicer now! stats:', stats) -}) -``` - -#### <a name="verify-last-run"></a> `> cacache.verifica.ultimaVez(cache) -> Promise` - -Alias: `últimaVez` - -Devuelve un `Date` que representa la última vez que `cacache.verifica` fue -ejecutada en `cache`. - -##### Example - -```javascript -cacache.verifica(rutaCache).then(() => { - cacache.verifica.ultimaVez(rutaCache).then(última => { - console.log('La última vez que se usó cacache.verifica() fue ' + última) - }) -}) -``` diff --git a/node_modules/make-fetch-happen/node_modules/cacache/README.md b/node_modules/make-fetch-happen/node_modules/cacache/README.md deleted file mode 100644 index 7f8ec5eec..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/README.md +++ /dev/null @@ -1,641 +0,0 @@ -# cacache [![npm version](https://img.shields.io/npm/v/cacache.svg)](https://npm.im/cacache) [![license](https://img.shields.io/npm/l/cacache.svg)](https://npm.im/cacache) [![Travis](https://img.shields.io/travis/npm/cacache.svg)](https://travis-ci.org/npm/cacache) [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/npm/cacache?svg=true)](https://ci.appveyor.com/project/npm/cacache) [![Coverage Status](https://coveralls.io/repos/github/npm/cacache/badge.svg?branch=latest)](https://coveralls.io/github/npm/cacache?branch=latest) - -[`cacache`](https://github.com/npm/cacache) is a Node.js library for managing -local key and content address caches. It's really fast, really good at -concurrency, and it will never give you corrupted data, even if cache files -get corrupted or manipulated. - -On systems that support user and group settings on files, cacache will -match the `uid` and `gid` values to the folder where the cache lives, even -when running as `root`. - -It was written to be used as [npm](https://npm.im)'s local cache, but can -just as easily be used on its own. - -_Translations: [español](README.es.md)_ - -## Install - -`$ npm install --save cacache` - -## Table of Contents - -* [Example](#example) -* [Features](#features) -* [Contributing](#contributing) -* [API](#api) - * [Using localized APIs](#localized-api) - * Reading - * [`ls`](#ls) - * [`ls.stream`](#ls-stream) - * [`get`](#get-data) - * [`get.stream`](#get-stream) - * [`get.info`](#get-info) - * [`get.hasContent`](#get-hasContent) - * Writing - * [`put`](#put-data) - * [`put.stream`](#put-stream) - * [`put*` opts](#put-options) - * [`rm.all`](#rm-all) - * [`rm.entry`](#rm-entry) - * [`rm.content`](#rm-content) - * Utilities - * [`setLocale`](#set-locale) - * [`clearMemoized`](#clear-memoized) - * [`tmp.mkdir`](#tmp-mkdir) - * [`tmp.withTmp`](#with-tmp) - * Integrity - * [Subresource Integrity](#integrity) - * [`verify`](#verify) - * [`verify.lastRun`](#verify-last-run) - -### Example - -```javascript -const cacache = require('cacache/en') -const fs = require('fs') - -const tarball = '/path/to/mytar.tgz' -const cachePath = '/tmp/my-toy-cache' -const key = 'my-unique-key-1234' - -// Cache it! Use `cachePath` as the root of the content cache -cacache.put(cachePath, key, '10293801983029384').then(integrity => { - console.log(`Saved content to ${cachePath}.`) -}) - -const destination = '/tmp/mytar.tgz' - -// Copy the contents out of the cache and into their destination! -// But this time, use stream instead! -cacache.get.stream( - cachePath, key -).pipe( - fs.createWriteStream(destination) -).on('finish', () => { - console.log('done extracting!') -}) - -// The same thing, but skip the key index. -cacache.get.byDigest(cachePath, integrityHash).then(data => { - fs.writeFile(destination, data, err => { - console.log('tarball data fetched based on its sha512sum and written out!') - }) -}) -``` - -### Features - -* Extraction by key or by content address (shasum, etc) -* [Subresource Integrity](#integrity) web standard support -* Multi-hash support - safely host sha1, sha512, etc, in a single cache -* Automatic content deduplication -* Fault tolerance (immune to corruption, partial writes, process races, etc) -* Consistency guarantees on read and write (full data verification) -* Lockless, high-concurrency cache access -* Streaming support -* Promise support -* Pretty darn fast -- sub-millisecond reads and writes including verification -* Arbitrary metadata storage -* Garbage collection and additional offline verification -* Thorough test coverage -* There's probably a bloom filter in there somewhere. Those are cool, right? 🤔 - -### Contributing - -The cacache team enthusiastically welcomes contributions and project participation! There's a bunch of things you can do if you want to contribute! The [Contributor Guide](CONTRIBUTING.md) has all the information you need for everything from reporting bugs to contributing entire new features. Please don't hesitate to jump in if you'd like to, or even ask us questions if something isn't clear. - -All participants and maintainers in this project are expected to follow [Code of Conduct](CODE_OF_CONDUCT.md), and just generally be excellent to each other. - -Please refer to the [Changelog](CHANGELOG.md) for project history details, too. - -Happy hacking! - -### API - -#### <a name="localized-api"></a> Using localized APIs - -cacache includes a complete API in English, with the same features as other -translations. To use the English API as documented in this README, use -`require('cacache/en')`. This is also currently the default if you do -`require('cacache')`, but may change in the future. - -cacache also supports other languages! You can find the list of currently -supported ones by looking in `./locales` in the source directory. You can use -the API in that language with `require('cacache/<lang>')`. - -Want to add support for a new language? Please go ahead! You should be able to -copy `./locales/en.js` and `./locales/en.json` and fill them in. Translating the -`README.md` is a bit more work, but also appreciated if you get around to it. 👍🏼 - -#### <a name="ls"></a> `> cacache.ls(cache) -> Promise<Object>` - -Lists info for all entries currently in the cache as a single large object. Each -entry in the object will be keyed by the unique index key, with corresponding -[`get.info`](#get-info) objects as the values. - -##### Example - -```javascript -cacache.ls(cachePath).then(console.log) -// Output -{ - 'my-thing': { - key: 'my-thing', - integrity: 'sha512-BaSe64/EnCoDED+HAsh==' - path: '.testcache/content/deadbeef', // joined with `cachePath` - time: 12345698490, - size: 4023948, - metadata: { - name: 'blah', - version: '1.2.3', - description: 'this was once a package but now it is my-thing' - } - }, - 'other-thing': { - key: 'other-thing', - integrity: 'sha1-ANothER+hasH=', - path: '.testcache/content/bada55', - time: 11992309289, - size: 111112 - } -} -``` - -#### <a name="ls-stream"></a> `> cacache.ls.stream(cache) -> Readable` - -Lists info for all entries currently in the cache as a single large object. - -This works just like [`ls`](#ls), except [`get.info`](#get-info) entries are -returned as `'data'` events on the returned stream. - -##### Example - -```javascript -cacache.ls.stream(cachePath).on('data', console.log) -// Output -{ - key: 'my-thing', - integrity: 'sha512-BaSe64HaSh', - path: '.testcache/content/deadbeef', // joined with `cachePath` - time: 12345698490, - size: 13423, - metadata: { - name: 'blah', - version: '1.2.3', - description: 'this was once a package but now it is my-thing' - } -} - -{ - key: 'other-thing', - integrity: 'whirlpool-WoWSoMuchSupport', - path: '.testcache/content/bada55', - time: 11992309289, - size: 498023984029 -} - -{ - ... -} -``` - -#### <a name="get-data"></a> `> cacache.get(cache, key, [opts]) -> Promise({data, metadata, integrity})` - -Returns an object with the cached data, digest, and metadata identified by -`key`. The `data` property of this object will be a `Buffer` instance that -presumably holds some data that means something to you. I'm sure you know what -to do with it! cacache just won't care. - -`integrity` is a [Subresource -Integrity](#integrity) -string. That is, a string that can be used to verify `data`, which looks like -`<hash-algorithm>-<base64-integrity-hash>`. - -If there is no content identified by `key`, or if the locally-stored data does -not pass the validity checksum, the promise will be rejected. - -A sub-function, `get.byDigest` may be used for identical behavior, except lookup -will happen by integrity hash, bypassing the index entirely. This version of the -function *only* returns `data` itself, without any wrapper. - -##### Note - -This function loads the entire cache entry into memory before returning it. If -you're dealing with Very Large data, consider using [`get.stream`](#get-stream) -instead. - -##### Example - -```javascript -// Look up by key -cache.get(cachePath, 'my-thing').then(console.log) -// Output: -{ - metadata: { - thingName: 'my' - }, - integrity: 'sha512-BaSe64HaSh', - data: Buffer#<deadbeef>, - size: 9320 -} - -// Look up by digest -cache.get.byDigest(cachePath, 'sha512-BaSe64HaSh').then(console.log) -// Output: -Buffer#<deadbeef> -``` - -#### <a name="get-stream"></a> `> cacache.get.stream(cache, key, [opts]) -> Readable` - -Returns a [Readable Stream](https://nodejs.org/api/stream.html#stream_readable_streams) of the cached data identified by `key`. - -If there is no content identified by `key`, or if the locally-stored data does -not pass the validity checksum, an error will be emitted. - -`metadata` and `integrity` events will be emitted before the stream closes, if -you need to collect that extra data about the cached entry. - -A sub-function, `get.stream.byDigest` may be used for identical behavior, -except lookup will happen by integrity hash, bypassing the index entirely. This -version does not emit the `metadata` and `integrity` events at all. - -##### Example - -```javascript -// Look up by key -cache.get.stream( - cachePath, 'my-thing' -).on('metadata', metadata => { - console.log('metadata:', metadata) -}).on('integrity', integrity => { - console.log('integrity:', integrity) -}).pipe( - fs.createWriteStream('./x.tgz') -) -// Outputs: -metadata: { ... } -integrity: 'sha512-SoMeDIGest+64==' - -// Look up by digest -cache.get.stream.byDigest( - cachePath, 'sha512-SoMeDIGest+64==' -).pipe( - fs.createWriteStream('./x.tgz') -) -``` - -#### <a name="get-info"></a> `> cacache.get.info(cache, key) -> Promise` - -Looks up `key` in the cache index, returning information about the entry if -one exists. - -##### Fields - -* `key` - Key the entry was looked up under. Matches the `key` argument. -* `integrity` - [Subresource Integrity hash](#integrity) for the content this entry refers to. -* `path` - Filesystem path where content is stored, joined with `cache` argument. -* `time` - Timestamp the entry was first added on. -* `metadata` - User-assigned metadata associated with the entry/content. - -##### Example - -```javascript -cacache.get.info(cachePath, 'my-thing').then(console.log) - -// Output -{ - key: 'my-thing', - integrity: 'sha256-MUSTVERIFY+ALL/THINGS==' - path: '.testcache/content/deadbeef', - time: 12345698490, - size: 849234, - metadata: { - name: 'blah', - version: '1.2.3', - description: 'this was once a package but now it is my-thing' - } -} -``` - -#### <a name="get-hasContent"></a> `> cacache.get.hasContent(cache, integrity) -> Promise` - -Looks up a [Subresource Integrity hash](#integrity) in the cache. If content -exists for this `integrity`, it will return an object, with the specific single integrity hash -that was found in `sri` key, and the size of the found content as `size`. If no content exists for this integrity, it will return `false`. - -##### Example - -```javascript -cacache.get.hasContent(cachePath, 'sha256-MUSTVERIFY+ALL/THINGS==').then(console.log) - -// Output -{ - sri: { - source: 'sha256-MUSTVERIFY+ALL/THINGS==', - algorithm: 'sha256', - digest: 'MUSTVERIFY+ALL/THINGS==', - options: [] - }, - size: 9001 -} - -cacache.get.hasContent(cachePath, 'sha521-NOT+IN/CACHE==').then(console.log) - -// Output -false -``` - -#### <a name="put-data"></a> `> cacache.put(cache, key, data, [opts]) -> Promise` - -Inserts data passed to it into the cache. The returned Promise resolves with a -digest (generated according to [`opts.algorithms`](#optsalgorithms)) after the -cache entry has been successfully written. - -##### Example - -```javascript -fetch( - 'https://registry.npmjs.org/cacache/-/cacache-1.0.0.tgz' -).then(data => { - return cacache.put(cachePath, 'registry.npmjs.org|cacache@1.0.0', data) -}).then(integrity => { - console.log('integrity hash is', integrity) -}) -``` - -#### <a name="put-stream"></a> `> cacache.put.stream(cache, key, [opts]) -> Writable` - -Returns a [Writable -Stream](https://nodejs.org/api/stream.html#stream_writable_streams) that inserts -data written to it into the cache. Emits an `integrity` event with the digest of -written contents when it succeeds. - -##### Example - -```javascript -request.get( - 'https://registry.npmjs.org/cacache/-/cacache-1.0.0.tgz' -).pipe( - cacache.put.stream( - cachePath, 'registry.npmjs.org|cacache@1.0.0' - ).on('integrity', d => console.log(`integrity digest is ${d}`)) -) -``` - -#### <a name="put-options"></a> `> cacache.put options` - -`cacache.put` functions have a number of options in common. - -##### `opts.metadata` - -Arbitrary metadata to be attached to the inserted key. - -##### `opts.size` - -If provided, the data stream will be verified to check that enough data was -passed through. If there's more or less data than expected, insertion will fail -with an `EBADSIZE` error. - -##### `opts.integrity` - -If present, the pre-calculated digest for the inserted content. If this option -if provided and does not match the post-insertion digest, insertion will fail -with an `EINTEGRITY` error. - -`algorithms` has no effect if this option is present. - -##### `opts.algorithms` - -Default: ['sha512'] - -Hashing algorithms to use when calculating the [subresource integrity -digest](#integrity) -for inserted data. Can use any algorithm listed in `crypto.getHashes()` or -`'omakase'`/`'お任せします'` to pick a random hash algorithm on each insertion. You -may also use any anagram of `'modnar'` to use this feature. - -Currently only supports one algorithm at a time (i.e., an array length of -exactly `1`). Has no effect if `opts.integrity` is present. - -##### `opts.memoize` - -Default: null - -If provided, cacache will memoize the given cache insertion in memory, bypassing -any filesystem checks for that key or digest in future cache fetches. Nothing -will be written to the in-memory cache unless this option is explicitly truthy. - -If `opts.memoize` is an object or a `Map`-like (that is, an object with `get` -and `set` methods), it will be written to instead of the global memoization -cache. - -Reading from disk data can be forced by explicitly passing `memoize: false` to -the reader functions, but their default will be to read from memory. - -#### <a name="rm-all"></a> `> cacache.rm.all(cache) -> Promise` - -Clears the entire cache. Mainly by blowing away the cache directory itself. - -##### Example - -```javascript -cacache.rm.all(cachePath).then(() => { - console.log('THE APOCALYPSE IS UPON US 😱') -}) -``` - -#### <a name="rm-entry"></a> `> cacache.rm.entry(cache, key) -> Promise` - -Alias: `cacache.rm` - -Removes the index entry for `key`. Content will still be accessible if -requested directly by content address ([`get.stream.byDigest`](#get-stream)). - -To remove the content itself (which might still be used by other entries), use -[`rm.content`](#rm-content). Or, to safely vacuum any unused content, use -[`verify`](#verify). - -##### Example - -```javascript -cacache.rm.entry(cachePath, 'my-thing').then(() => { - console.log('I did not like it anyway') -}) -``` - -#### <a name="rm-content"></a> `> cacache.rm.content(cache, integrity) -> Promise` - -Removes the content identified by `integrity`. Any index entries referring to it -will not be usable again until the content is re-added to the cache with an -identical digest. - -##### Example - -```javascript -cacache.rm.content(cachePath, 'sha512-SoMeDIGest/IN+BaSE64==').then(() => { - console.log('data for my-thing is gone!') -}) -``` - -#### <a name="set-locale"></a> `> cacache.setLocale(locale)` - -Configure the language/locale used for messages and errors coming from cacache. -The list of available locales is in the `./locales` directory in the project -root. - -_Interested in contributing more languages! [Submit a PR](CONTRIBUTING.md)!_ - -#### <a name="clear-memoized"></a> `> cacache.clearMemoized()` - -Completely resets the in-memory entry cache. - -#### <a name="tmp-mkdir"></a> `> tmp.mkdir(cache, opts) -> Promise<Path>` - -Returns a unique temporary directory inside the cache's `tmp` dir. This -directory will use the same safe user assignment that all the other stuff use. - -Once the directory is made, it's the user's responsibility that all files -within are given the appropriate `gid`/`uid` ownership settings to match -the rest of the cache. If not, you can ask cacache to do it for you by -calling [`tmp.fix()`](#tmp-fix), which will fix all tmp directory -permissions. - -If you want automatic cleanup of this directory, use -[`tmp.withTmp()`](#with-tpm) - -##### Example - -```javascript -cacache.tmp.mkdir(cache).then(dir => { - fs.writeFile(path.join(dir, 'blablabla'), Buffer#<1234>, ...) -}) -``` - -#### <a name="tmp-fix"></a> `> tmp.fix(cache) -> Promise` - -Sets the `uid` and `gid` properties on all files and folders within the tmp -folder to match the rest of the cache. - -Use this after manually writing files into [`tmp.mkdir`](#tmp-mkdir) or -[`tmp.withTmp`](#with-tmp). - -##### Example - -```javascript -cacache.tmp.mkdir(cache).then(dir => { - writeFile(path.join(dir, 'file'), someData).then(() => { - // make sure we didn't just put a root-owned file in the cache - cacache.tmp.fix().then(() => { - // all uids and gids match now - }) - }) -}) -``` - -#### <a name="with-tmp"></a> `> tmp.withTmp(cache, opts, cb) -> Promise` - -Creates a temporary directory with [`tmp.mkdir()`](#tmp-mkdir) and calls `cb` -with it. The created temporary directory will be removed when the return value -of `cb()` resolves -- that is, if you return a Promise from `cb()`, the tmp -directory will be automatically deleted once that promise completes. - -The same caveats apply when it comes to managing permissions for the tmp dir's -contents. - -##### Example - -```javascript -cacache.tmp.withTmp(cache, dir => { - return fs.writeFileAsync(path.join(dir, 'blablabla'), Buffer#<1234>, ...) -}).then(() => { - // `dir` no longer exists -}) -``` - -#### <a name="integrity"></a> Subresource Integrity Digests - -For content verification and addressing, cacache uses strings following the -[Subresource -Integrity spec](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity). -That is, any time cacache expects an `integrity` argument or option, it -should be in the format `<hashAlgorithm>-<base64-hash>`. - -One deviation from the current spec is that cacache will support any hash -algorithms supported by the underlying Node.js process. You can use -`crypto.getHashes()` to see which ones you can use. - -##### Generating Digests Yourself - -If you have an existing content shasum, they are generally formatted as a -hexadecimal string (that is, a sha1 would look like: -`5f5513f8822fdbe5145af33b64d8d970dcf95c6e`). In order to be compatible with -cacache, you'll need to convert this to an equivalent subresource integrity -string. For this example, the corresponding hash would be: -`sha1-X1UT+IIv2+UUWvM7ZNjZcNz5XG4=`. - -If you want to generate an integrity string yourself for existing data, you can -use something like this: - -```javascript -const crypto = require('crypto') -const hashAlgorithm = 'sha512' -const data = 'foobarbaz' - -const integrity = ( - hashAlgorithm + - '-' + - crypto.createHash(hashAlgorithm).update(data).digest('base64') -) -``` - -You can also use [`ssri`](https://npm.im/ssri) to have a richer set of functionality -around SRI strings, including generation, parsing, and translating from existing -hex-formatted strings. - -#### <a name="verify"></a> `> cacache.verify(cache, opts) -> Promise` - -Checks out and fixes up your cache: - -* Cleans up corrupted or invalid index entries. -* Custom entry filtering options. -* Garbage collects any content entries not referenced by the index. -* Checks integrity for all content entries and removes invalid content. -* Fixes cache ownership. -* Removes the `tmp` directory in the cache and all its contents. - -When it's done, it'll return an object with various stats about the verification -process, including amount of storage reclaimed, number of valid entries, number -of entries removed, etc. - -##### Options - -* `opts.filter` - receives a formatted entry. Return false to remove it. - Note: might be called more than once on the same entry. - -##### Example - -```sh -echo somegarbage >> $CACHEPATH/content/deadbeef -``` - -```javascript -cacache.verify(cachePath).then(stats => { - // deadbeef collected, because of invalid checksum. - console.log('cache is much nicer now! stats:', stats) -}) -``` - -#### <a name="verify-last-run"></a> `> cacache.verify.lastRun(cache) -> Promise` - -Returns a `Date` representing the last time `cacache.verify` was run on `cache`. - -##### Example - -```javascript -cacache.verify(cachePath).then(() => { - cacache.verify.lastRun(cachePath).then(lastTime => { - console.log('cacache.verify was last called on' + lastTime) - }) -}) -``` diff --git a/node_modules/make-fetch-happen/node_modules/cacache/en.js b/node_modules/make-fetch-happen/node_modules/cacache/en.js deleted file mode 100644 index a3db581c9..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/en.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict' - -module.exports = require('./locales/en.js') diff --git a/node_modules/make-fetch-happen/node_modules/cacache/es.js b/node_modules/make-fetch-happen/node_modules/cacache/es.js deleted file mode 100644 index 6282363c3..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/es.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict' - -module.exports = require('./locales/es.js') diff --git a/node_modules/make-fetch-happen/node_modules/cacache/get.js b/node_modules/make-fetch-happen/node_modules/cacache/get.js deleted file mode 100644 index 008cb83a9..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/get.js +++ /dev/null @@ -1,247 +0,0 @@ -'use strict' - -const BB = require('bluebird') - -const figgyPudding = require('figgy-pudding') -const fs = require('fs') -const index = require('./lib/entry-index') -const memo = require('./lib/memoization') -const pipe = require('mississippi').pipe -const pipeline = require('mississippi').pipeline -const read = require('./lib/content/read') -const through = require('mississippi').through - -const GetOpts = figgyPudding({ - integrity: {}, - memoize: {}, - size: {} -}) - -module.exports = function get (cache, key, opts) { - return getData(false, cache, key, opts) -} -module.exports.byDigest = function getByDigest (cache, digest, opts) { - return getData(true, cache, digest, opts) -} -function getData (byDigest, cache, key, opts) { - opts = GetOpts(opts) - const memoized = ( - byDigest - ? memo.get.byDigest(cache, key, opts) - : memo.get(cache, key, opts) - ) - if (memoized && opts.memoize !== false) { - return BB.resolve(byDigest ? memoized : { - metadata: memoized.entry.metadata, - data: memoized.data, - integrity: memoized.entry.integrity, - size: memoized.entry.size - }) - } - return ( - byDigest ? BB.resolve(null) : index.find(cache, key, opts) - ).then(entry => { - if (!entry && !byDigest) { - throw new index.NotFoundError(cache, key) - } - return read(cache, byDigest ? key : entry.integrity, { - integrity: opts.integrity, - size: opts.size - }).then(data => byDigest ? data : { - metadata: entry.metadata, - data: data, - size: entry.size, - integrity: entry.integrity - }).then(res => { - if (opts.memoize && byDigest) { - memo.put.byDigest(cache, key, res, opts) - } else if (opts.memoize) { - memo.put(cache, entry, res.data, opts) - } - return res - }) - }) -} - -module.exports.sync = function get (cache, key, opts) { - return getDataSync(false, cache, key, opts) -} -module.exports.sync.byDigest = function getByDigest (cache, digest, opts) { - return getDataSync(true, cache, digest, opts) -} -function getDataSync (byDigest, cache, key, opts) { - opts = GetOpts(opts) - const memoized = ( - byDigest - ? memo.get.byDigest(cache, key, opts) - : memo.get(cache, key, opts) - ) - if (memoized && opts.memoize !== false) { - return byDigest ? memoized : { - metadata: memoized.entry.metadata, - data: memoized.data, - integrity: memoized.entry.integrity, - size: memoized.entry.size - } - } - const entry = !byDigest && index.find.sync(cache, key, opts) - if (!entry && !byDigest) { - throw new index.NotFoundError(cache, key) - } - const data = read.sync( - cache, - byDigest ? key : entry.integrity, - { - integrity: opts.integrity, - size: opts.size - } - ) - const res = byDigest - ? data - : { - metadata: entry.metadata, - data: data, - size: entry.size, - integrity: entry.integrity - } - if (opts.memoize && byDigest) { - memo.put.byDigest(cache, key, res, opts) - } else if (opts.memoize) { - memo.put(cache, entry, res.data, opts) - } - return res -} - -module.exports.stream = getStream -function getStream (cache, key, opts) { - opts = GetOpts(opts) - let stream = through() - const memoized = memo.get(cache, key, opts) - if (memoized && opts.memoize !== false) { - stream.on('newListener', function (ev, cb) { - ev === 'metadata' && cb(memoized.entry.metadata) - ev === 'integrity' && cb(memoized.entry.integrity) - ev === 'size' && cb(memoized.entry.size) - }) - stream.write(memoized.data, () => stream.end()) - return stream - } - index.find(cache, key).then(entry => { - if (!entry) { - return stream.emit( - 'error', new index.NotFoundError(cache, key) - ) - } - let memoStream - if (opts.memoize) { - let memoData = [] - let memoLength = 0 - memoStream = through((c, en, cb) => { - memoData && memoData.push(c) - memoLength += c.length - cb(null, c, en) - }, cb => { - memoData && memo.put(cache, entry, Buffer.concat(memoData, memoLength), opts) - cb() - }) - } else { - memoStream = through() - } - stream.emit('metadata', entry.metadata) - stream.emit('integrity', entry.integrity) - stream.emit('size', entry.size) - stream.on('newListener', function (ev, cb) { - ev === 'metadata' && cb(entry.metadata) - ev === 'integrity' && cb(entry.integrity) - ev === 'size' && cb(entry.size) - }) - pipe( - read.readStream(cache, entry.integrity, opts.concat({ - size: opts.size == null ? entry.size : opts.size - })), - memoStream, - stream - ) - }).catch(err => stream.emit('error', err)) - return stream -} - -module.exports.stream.byDigest = getStreamDigest -function getStreamDigest (cache, integrity, opts) { - opts = GetOpts(opts) - const memoized = memo.get.byDigest(cache, integrity, opts) - if (memoized && opts.memoize !== false) { - const stream = through() - stream.write(memoized, () => stream.end()) - return stream - } else { - let stream = read.readStream(cache, integrity, opts) - if (opts.memoize) { - let memoData = [] - let memoLength = 0 - const memoStream = through((c, en, cb) => { - memoData && memoData.push(c) - memoLength += c.length - cb(null, c, en) - }, cb => { - memoData && memo.put.byDigest( - cache, - integrity, - Buffer.concat(memoData, memoLength), - opts - ) - cb() - }) - stream = pipeline(stream, memoStream) - } - return stream - } -} - -module.exports.info = info -function info (cache, key, opts) { - opts = GetOpts(opts) - const memoized = memo.get(cache, key, opts) - if (memoized && opts.memoize !== false) { - return BB.resolve(memoized.entry) - } else { - return index.find(cache, key) - } -} - -module.exports.hasContent = read.hasContent - -module.exports.copy = function cp (cache, key, dest, opts) { - return copy(false, cache, key, dest, opts) -} -module.exports.copy.byDigest = function cpDigest (cache, digest, dest, opts) { - return copy(true, cache, digest, dest, opts) -} -function copy (byDigest, cache, key, dest, opts) { - opts = GetOpts(opts) - if (read.copy) { - return ( - byDigest ? BB.resolve(null) : index.find(cache, key, opts) - ).then(entry => { - if (!entry && !byDigest) { - throw new index.NotFoundError(cache, key) - } - return read.copy( - cache, byDigest ? key : entry.integrity, dest, opts - ).then(() => byDigest ? key : { - metadata: entry.metadata, - size: entry.size, - integrity: entry.integrity - }) - }) - } else { - return getData(byDigest, cache, key, opts).then(res => { - return fs.writeFileAsync(dest, byDigest ? res : res.data) - .then(() => byDigest ? key : { - metadata: res.metadata, - size: res.size, - integrity: res.integrity - }) - }) - } -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/index.js b/node_modules/make-fetch-happen/node_modules/cacache/index.js deleted file mode 100644 index a3db581c9..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict' - -module.exports = require('./locales/en.js') diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/content/path.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/content/path.js deleted file mode 100644 index c67c28061..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/content/path.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict' - -const contentVer = require('../../package.json')['cache-version'].content -const hashToSegments = require('../util/hash-to-segments') -const path = require('path') -const ssri = require('ssri') - -// Current format of content file path: -// -// sha512-BaSE64Hex= -> -// ~/.my-cache/content-v2/sha512/ba/da/55deadbeefc0ffee -// -module.exports = contentPath -function contentPath (cache, integrity) { - const sri = ssri.parse(integrity, { single: true }) - // contentPath is the *strongest* algo given - return path.join.apply(path, [ - contentDir(cache), - sri.algorithm - ].concat(hashToSegments(sri.hexDigest()))) -} - -module.exports._contentDir = contentDir -function contentDir (cache) { - return path.join(cache, `content-v${contentVer}`) -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/content/read.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/content/read.js deleted file mode 100644 index 7929524f8..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/content/read.js +++ /dev/null @@ -1,195 +0,0 @@ -'use strict' - -const BB = require('bluebird') - -const contentPath = require('./path') -const figgyPudding = require('figgy-pudding') -const fs = require('graceful-fs') -const PassThrough = require('stream').PassThrough -const pipe = BB.promisify(require('mississippi').pipe) -const ssri = require('ssri') -const Y = require('../util/y.js') - -const lstatAsync = BB.promisify(fs.lstat) -const readFileAsync = BB.promisify(fs.readFile) - -const ReadOpts = figgyPudding({ - size: {} -}) - -module.exports = read -function read (cache, integrity, opts) { - opts = ReadOpts(opts) - return withContentSri(cache, integrity, (cpath, sri) => { - return readFileAsync(cpath, null).then(data => { - if (typeof opts.size === 'number' && opts.size !== data.length) { - throw sizeError(opts.size, data.length) - } else if (ssri.checkData(data, sri)) { - return data - } else { - throw integrityError(sri, cpath) - } - }) - }) -} - -module.exports.sync = readSync -function readSync (cache, integrity, opts) { - opts = ReadOpts(opts) - return withContentSriSync(cache, integrity, (cpath, sri) => { - const data = fs.readFileSync(cpath) - if (typeof opts.size === 'number' && opts.size !== data.length) { - throw sizeError(opts.size, data.length) - } else if (ssri.checkData(data, sri)) { - return data - } else { - throw integrityError(sri, cpath) - } - }) -} - -module.exports.stream = readStream -module.exports.readStream = readStream -function readStream (cache, integrity, opts) { - opts = ReadOpts(opts) - const stream = new PassThrough() - withContentSri(cache, integrity, (cpath, sri) => { - return lstatAsync(cpath).then(stat => ({ cpath, sri, stat })) - }).then(({ cpath, sri, stat }) => { - return pipe( - fs.createReadStream(cpath), - ssri.integrityStream({ - integrity: sri, - size: opts.size - }), - stream - ) - }).catch(err => { - stream.emit('error', err) - }) - return stream -} - -let copyFileAsync -if (fs.copyFile) { - module.exports.copy = copy - module.exports.copy.sync = copySync - copyFileAsync = BB.promisify(fs.copyFile) -} - -function copy (cache, integrity, dest, opts) { - opts = ReadOpts(opts) - return withContentSri(cache, integrity, (cpath, sri) => { - return copyFileAsync(cpath, dest) - }) -} - -function copySync (cache, integrity, dest, opts) { - opts = ReadOpts(opts) - return withContentSriSync(cache, integrity, (cpath, sri) => { - return fs.copyFileSync(cpath, dest) - }) -} - -module.exports.hasContent = hasContent -function hasContent (cache, integrity) { - if (!integrity) { return BB.resolve(false) } - return withContentSri(cache, integrity, (cpath, sri) => { - return lstatAsync(cpath).then(stat => ({ size: stat.size, sri, stat })) - }).catch(err => { - if (err.code === 'ENOENT') { return false } - if (err.code === 'EPERM') { - if (process.platform !== 'win32') { - throw err - } else { - return false - } - } - }) -} - -module.exports.hasContent.sync = hasContentSync -function hasContentSync (cache, integrity) { - if (!integrity) { return false } - return withContentSriSync(cache, integrity, (cpath, sri) => { - try { - const stat = fs.lstatSync(cpath) - return { size: stat.size, sri, stat } - } catch (err) { - if (err.code === 'ENOENT') { return false } - if (err.code === 'EPERM') { - if (process.platform !== 'win32') { - throw err - } else { - return false - } - } - } - }) -} - -function withContentSri (cache, integrity, fn) { - return BB.try(() => { - const sri = ssri.parse(integrity) - // If `integrity` has multiple entries, pick the first digest - // with available local data. - const algo = sri.pickAlgorithm() - const digests = sri[algo] - if (digests.length <= 1) { - const cpath = contentPath(cache, digests[0]) - return fn(cpath, digests[0]) - } else { - return BB.any(sri[sri.pickAlgorithm()].map(meta => { - return withContentSri(cache, meta, fn) - }, { concurrency: 1 })) - .catch(err => { - if ([].some.call(err, e => e.code === 'ENOENT')) { - throw Object.assign( - new Error('No matching content found for ' + sri.toString()), - { code: 'ENOENT' } - ) - } else { - throw err[0] - } - }) - } - }) -} - -function withContentSriSync (cache, integrity, fn) { - const sri = ssri.parse(integrity) - // If `integrity` has multiple entries, pick the first digest - // with available local data. - const algo = sri.pickAlgorithm() - const digests = sri[algo] - if (digests.length <= 1) { - const cpath = contentPath(cache, digests[0]) - return fn(cpath, digests[0]) - } else { - let lastErr = null - for (const meta of sri[sri.pickAlgorithm()]) { - try { - return withContentSriSync(cache, meta, fn) - } catch (err) { - lastErr = err - } - } - if (lastErr) { throw lastErr } - } -} - -function sizeError (expected, found) { - var err = new Error(Y`Bad data size: expected inserted data to be ${expected} bytes, but got ${found} instead`) - err.expected = expected - err.found = found - err.code = 'EBADSIZE' - return err -} - -function integrityError (sri, path) { - var err = new Error(Y`Integrity verification failed for ${sri} (${path})`) - err.code = 'EINTEGRITY' - err.sri = sri - err.path = path - return err -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/content/rm.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/content/rm.js deleted file mode 100644 index 12cf15823..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/content/rm.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict' - -const BB = require('bluebird') - -const contentPath = require('./path') -const hasContent = require('./read').hasContent -const rimraf = BB.promisify(require('rimraf')) - -module.exports = rm -function rm (cache, integrity) { - return hasContent(cache, integrity).then(content => { - if (content) { - const sri = content.sri - if (sri) { - return rimraf(contentPath(cache, sri)).then(() => true) - } - } else { - return false - } - }) -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/content/write.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/content/write.js deleted file mode 100644 index 4d96a3cff..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/content/write.js +++ /dev/null @@ -1,164 +0,0 @@ -'use strict' - -const BB = require('bluebird') - -const contentPath = require('./path') -const fixOwner = require('../util/fix-owner') -const fs = require('graceful-fs') -const moveFile = require('../util/move-file') -const PassThrough = require('stream').PassThrough -const path = require('path') -const pipe = BB.promisify(require('mississippi').pipe) -const rimraf = BB.promisify(require('rimraf')) -const ssri = require('ssri') -const to = require('mississippi').to -const uniqueFilename = require('unique-filename') -const Y = require('../util/y.js') - -const writeFileAsync = BB.promisify(fs.writeFile) - -module.exports = write -function write (cache, data, opts) { - opts = opts || {} - if (opts.algorithms && opts.algorithms.length > 1) { - throw new Error( - Y`opts.algorithms only supports a single algorithm for now` - ) - } - if (typeof opts.size === 'number' && data.length !== opts.size) { - return BB.reject(sizeError(opts.size, data.length)) - } - const sri = ssri.fromData(data, { - algorithms: opts.algorithms - }) - if (opts.integrity && !ssri.checkData(data, opts.integrity, opts)) { - return BB.reject(checksumError(opts.integrity, sri)) - } - return BB.using(makeTmp(cache, opts), tmp => ( - writeFileAsync( - tmp.target, data, { flag: 'wx' } - ).then(() => ( - moveToDestination(tmp, cache, sri, opts) - )) - )).then(() => ({ integrity: sri, size: data.length })) -} - -module.exports.stream = writeStream -function writeStream (cache, opts) { - opts = opts || {} - const inputStream = new PassThrough() - let inputErr = false - function errCheck () { - if (inputErr) { throw inputErr } - } - - let allDone - const ret = to((c, n, cb) => { - if (!allDone) { - allDone = handleContent(inputStream, cache, opts, errCheck) - } - inputStream.write(c, n, cb) - }, cb => { - inputStream.end(() => { - if (!allDone) { - const e = new Error(Y`Cache input stream was empty`) - e.code = 'ENODATA' - return ret.emit('error', e) - } - allDone.then(res => { - res.integrity && ret.emit('integrity', res.integrity) - res.size !== null && ret.emit('size', res.size) - cb() - }, e => { - ret.emit('error', e) - }) - }) - }) - ret.once('error', e => { - inputErr = e - }) - return ret -} - -function handleContent (inputStream, cache, opts, errCheck) { - return BB.using(makeTmp(cache, opts), tmp => { - errCheck() - return pipeToTmp( - inputStream, cache, tmp.target, opts, errCheck - ).then(res => { - return moveToDestination( - tmp, cache, res.integrity, opts, errCheck - ).then(() => res) - }) - }) -} - -function pipeToTmp (inputStream, cache, tmpTarget, opts, errCheck) { - return BB.resolve().then(() => { - let integrity - let size - const hashStream = ssri.integrityStream({ - integrity: opts.integrity, - algorithms: opts.algorithms, - size: opts.size - }).on('integrity', s => { - integrity = s - }).on('size', s => { - size = s - }) - const outStream = fs.createWriteStream(tmpTarget, { - flags: 'wx' - }) - errCheck() - return pipe(inputStream, hashStream, outStream).then(() => { - return { integrity, size } - }).catch(err => { - return rimraf(tmpTarget).then(() => { throw err }) - }) - }) -} - -function makeTmp (cache, opts) { - const tmpTarget = uniqueFilename(path.join(cache, 'tmp'), opts.tmpPrefix) - return fixOwner.mkdirfix( - cache, path.dirname(tmpTarget) - ).then(() => ({ - target: tmpTarget, - moved: false - })).disposer(tmp => (!tmp.moved && rimraf(tmp.target))) -} - -function moveToDestination (tmp, cache, sri, opts, errCheck) { - errCheck && errCheck() - const destination = contentPath(cache, sri) - const destDir = path.dirname(destination) - - return fixOwner.mkdirfix( - cache, destDir - ).then(() => { - errCheck && errCheck() - return moveFile(tmp.target, destination) - }).then(() => { - errCheck && errCheck() - tmp.moved = true - return fixOwner.chownr(cache, destination) - }) -} - -function sizeError (expected, found) { - var err = new Error(Y`Bad data size: expected inserted data to be ${expected} bytes, but got ${found} instead`) - err.expected = expected - err.found = found - err.code = 'EBADSIZE' - return err -} - -function checksumError (expected, found) { - var err = new Error(Y`Integrity check failed: - Wanted: ${expected} - Found: ${found}`) - err.code = 'EINTEGRITY' - err.expected = expected - err.found = found - return err -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/entry-index.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/entry-index.js deleted file mode 100644 index dee1824b1..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/entry-index.js +++ /dev/null @@ -1,288 +0,0 @@ -'use strict' - -const BB = require('bluebird') - -const contentPath = require('./content/path') -const crypto = require('crypto') -const figgyPudding = require('figgy-pudding') -const fixOwner = require('./util/fix-owner') -const fs = require('graceful-fs') -const hashToSegments = require('./util/hash-to-segments') -const ms = require('mississippi') -const path = require('path') -const ssri = require('ssri') -const Y = require('./util/y.js') - -const indexV = require('../package.json')['cache-version'].index - -const appendFileAsync = BB.promisify(fs.appendFile) -const readFileAsync = BB.promisify(fs.readFile) -const readdirAsync = BB.promisify(fs.readdir) -const concat = ms.concat -const from = ms.from - -module.exports.NotFoundError = class NotFoundError extends Error { - constructor (cache, key) { - super(Y`No cache entry for \`${key}\` found in \`${cache}\``) - this.code = 'ENOENT' - this.cache = cache - this.key = key - } -} - -const IndexOpts = figgyPudding({ - metadata: {}, - size: {} -}) - -module.exports.insert = insert -function insert (cache, key, integrity, opts) { - opts = IndexOpts(opts) - const bucket = bucketPath(cache, key) - const entry = { - key, - integrity: integrity && ssri.stringify(integrity), - time: Date.now(), - size: opts.size, - metadata: opts.metadata - } - return fixOwner.mkdirfix( - cache, path.dirname(bucket) - ).then(() => { - const stringified = JSON.stringify(entry) - // NOTE - Cleverness ahoy! - // - // This works because it's tremendously unlikely for an entry to corrupt - // another while still preserving the string length of the JSON in - // question. So, we just slap the length in there and verify it on read. - // - // Thanks to @isaacs for the whiteboarding session that ended up with this. - return appendFileAsync( - bucket, `\n${hashEntry(stringified)}\t${stringified}` - ) - }).then( - () => fixOwner.chownr(cache, bucket) - ).catch({ code: 'ENOENT' }, () => { - // There's a class of race conditions that happen when things get deleted - // during fixOwner, or between the two mkdirfix/chownr calls. - // - // It's perfectly fine to just not bother in those cases and lie - // that the index entry was written. Because it's a cache. - }).then(() => { - return formatEntry(cache, entry) - }) -} - -module.exports.insert.sync = insertSync -function insertSync (cache, key, integrity, opts) { - opts = IndexOpts(opts) - const bucket = bucketPath(cache, key) - const entry = { - key, - integrity: integrity && ssri.stringify(integrity), - time: Date.now(), - size: opts.size, - metadata: opts.metadata - } - fixOwner.mkdirfix.sync(cache, path.dirname(bucket)) - const stringified = JSON.stringify(entry) - fs.appendFileSync( - bucket, `\n${hashEntry(stringified)}\t${stringified}` - ) - try { - fixOwner.chownr.sync(cache, bucket) - } catch (err) { - if (err.code !== 'ENOENT') { - throw err - } - } - return formatEntry(cache, entry) -} - -module.exports.find = find -function find (cache, key) { - const bucket = bucketPath(cache, key) - return bucketEntries(bucket).then(entries => { - return entries.reduce((latest, next) => { - if (next && next.key === key) { - return formatEntry(cache, next) - } else { - return latest - } - }, null) - }).catch(err => { - if (err.code === 'ENOENT') { - return null - } else { - throw err - } - }) -} - -module.exports.find.sync = findSync -function findSync (cache, key) { - const bucket = bucketPath(cache, key) - try { - return bucketEntriesSync(bucket).reduce((latest, next) => { - if (next && next.key === key) { - return formatEntry(cache, next) - } else { - return latest - } - }, null) - } catch (err) { - if (err.code === 'ENOENT') { - return null - } else { - throw err - } - } -} - -module.exports.delete = del -function del (cache, key, opts) { - return insert(cache, key, null, opts) -} - -module.exports.delete.sync = delSync -function delSync (cache, key, opts) { - return insertSync(cache, key, null, opts) -} - -module.exports.lsStream = lsStream -function lsStream (cache) { - const indexDir = bucketDir(cache) - const stream = from.obj() - - // "/cachename/*" - readdirOrEmpty(indexDir).map(bucket => { - const bucketPath = path.join(indexDir, bucket) - - // "/cachename/<bucket 0xFF>/*" - return readdirOrEmpty(bucketPath).map(subbucket => { - const subbucketPath = path.join(bucketPath, subbucket) - - // "/cachename/<bucket 0xFF>/<bucket 0xFF>/*" - return readdirOrEmpty(subbucketPath).map(entry => { - const getKeyToEntry = bucketEntries( - path.join(subbucketPath, entry) - ).reduce((acc, entry) => { - acc.set(entry.key, entry) - return acc - }, new Map()) - - return getKeyToEntry.then(reduced => { - for (let entry of reduced.values()) { - const formatted = formatEntry(cache, entry) - formatted && stream.push(formatted) - } - }).catch({ code: 'ENOENT' }, nop) - }) - }) - }).then(() => { - stream.push(null) - }, err => { - stream.emit('error', err) - }) - - return stream -} - -module.exports.ls = ls -function ls (cache) { - return BB.fromNode(cb => { - lsStream(cache).on('error', cb).pipe(concat(entries => { - cb(null, entries.reduce((acc, xs) => { - acc[xs.key] = xs - return acc - }, {})) - })) - }) -} - -function bucketEntries (bucket, filter) { - return readFileAsync( - bucket, 'utf8' - ).then(data => _bucketEntries(data, filter)) -} - -function bucketEntriesSync (bucket, filter) { - const data = fs.readFileSync(bucket, 'utf8') - return _bucketEntries(data, filter) -} - -function _bucketEntries (data, filter) { - let entries = [] - data.split('\n').forEach(entry => { - if (!entry) { return } - const pieces = entry.split('\t') - if (!pieces[1] || hashEntry(pieces[1]) !== pieces[0]) { - // Hash is no good! Corruption or malice? Doesn't matter! - // EJECT EJECT - return - } - let obj - try { - obj = JSON.parse(pieces[1]) - } catch (e) { - // Entry is corrupted! - return - } - if (obj) { - entries.push(obj) - } - }) - return entries -} - -module.exports._bucketDir = bucketDir -function bucketDir (cache) { - return path.join(cache, `index-v${indexV}`) -} - -module.exports._bucketPath = bucketPath -function bucketPath (cache, key) { - const hashed = hashKey(key) - return path.join.apply(path, [bucketDir(cache)].concat( - hashToSegments(hashed) - )) -} - -module.exports._hashKey = hashKey -function hashKey (key) { - return hash(key, 'sha256') -} - -module.exports._hashEntry = hashEntry -function hashEntry (str) { - return hash(str, 'sha1') -} - -function hash (str, digest) { - return crypto - .createHash(digest) - .update(str) - .digest('hex') -} - -function formatEntry (cache, entry) { - // Treat null digests as deletions. They'll shadow any previous entries. - if (!entry.integrity) { return null } - return { - key: entry.key, - integrity: entry.integrity, - path: contentPath(cache, entry.integrity), - size: entry.size, - time: entry.time, - metadata: entry.metadata - } -} - -function readdirOrEmpty (dir) { - return readdirAsync(dir) - .catch({ code: 'ENOENT' }, () => []) - .catch({ code: 'ENOTDIR' }, () => []) -} - -function nop () { -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/memoization.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/memoization.js deleted file mode 100644 index 92179c7ac..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/memoization.js +++ /dev/null @@ -1,69 +0,0 @@ -'use strict' - -const LRU = require('lru-cache') - -const MAX_SIZE = 50 * 1024 * 1024 // 50MB -const MAX_AGE = 3 * 60 * 1000 - -let MEMOIZED = new LRU({ - max: MAX_SIZE, - maxAge: MAX_AGE, - length: (entry, key) => { - if (key.startsWith('key:')) { - return entry.data.length - } else if (key.startsWith('digest:')) { - return entry.length - } - } -}) - -module.exports.clearMemoized = clearMemoized -function clearMemoized () { - const old = {} - MEMOIZED.forEach((v, k) => { - old[k] = v - }) - MEMOIZED.reset() - return old -} - -module.exports.put = put -function put (cache, entry, data, opts) { - pickMem(opts).set(`key:${cache}:${entry.key}`, { entry, data }) - putDigest(cache, entry.integrity, data, opts) -} - -module.exports.put.byDigest = putDigest -function putDigest (cache, integrity, data, opts) { - pickMem(opts).set(`digest:${cache}:${integrity}`, data) -} - -module.exports.get = get -function get (cache, key, opts) { - return pickMem(opts).get(`key:${cache}:${key}`) -} - -module.exports.get.byDigest = getDigest -function getDigest (cache, integrity, opts) { - return pickMem(opts).get(`digest:${cache}:${integrity}`) -} - -class ObjProxy { - constructor (obj) { - this.obj = obj - } - get (key) { return this.obj[key] } - set (key, val) { this.obj[key] = val } -} - -function pickMem (opts) { - if (!opts || !opts.memoize) { - return MEMOIZED - } else if (opts.memoize.get && opts.memoize.set) { - return opts.memoize - } else if (typeof opts.memoize === 'object') { - return new ObjProxy(opts.memoize) - } else { - return MEMOIZED - } -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/util/fix-owner.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/util/fix-owner.js deleted file mode 100644 index f5c33db5f..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/util/fix-owner.js +++ /dev/null @@ -1,128 +0,0 @@ -'use strict' - -const BB = require('bluebird') - -const chownr = BB.promisify(require('chownr')) -const mkdirp = BB.promisify(require('mkdirp')) -const inflight = require('promise-inflight') -const inferOwner = require('infer-owner') - -// Memoize getuid()/getgid() calls. -// patch process.setuid/setgid to invalidate cached value on change -const self = { uid: null, gid: null } -const getSelf = () => { - if (typeof self.uid !== 'number') { - self.uid = process.getuid() - const setuid = process.setuid - process.setuid = (uid) => { - self.uid = null - process.setuid = setuid - return process.setuid(uid) - } - } - if (typeof self.gid !== 'number') { - self.gid = process.getgid() - const setgid = process.setgid - process.setgid = (gid) => { - self.gid = null - process.setgid = setgid - return process.setgid(gid) - } - } -} - -module.exports.chownr = fixOwner -function fixOwner (cache, filepath) { - if (!process.getuid) { - // This platform doesn't need ownership fixing - return BB.resolve() - } - - getSelf() - if (self.uid !== 0) { - // almost certainly can't chown anyway - return BB.resolve() - } - - return BB.resolve(inferOwner(cache)).then(owner => { - const { uid, gid } = owner - - // No need to override if it's already what we used. - if (self.uid === uid && self.gid === gid) { - return - } - - return inflight( - 'fixOwner: fixing ownership on ' + filepath, - () => chownr( - filepath, - typeof uid === 'number' ? uid : self.uid, - typeof gid === 'number' ? gid : self.gid - ).catch({ code: 'ENOENT' }, () => null) - ) - }) -} - -module.exports.chownr.sync = fixOwnerSync -function fixOwnerSync (cache, filepath) { - if (!process.getuid) { - // This platform doesn't need ownership fixing - return - } - const { uid, gid } = inferOwner.sync(cache) - getSelf() - if (self.uid === uid && self.gid === gid) { - // No need to override if it's already what we used. - return - } - try { - chownr.sync( - filepath, - typeof uid === 'number' ? uid : self.uid, - typeof gid === 'number' ? gid : self.gid - ) - } catch (err) { - // only catch ENOENT, any other error is a problem. - if (err.code === 'ENOENT') { - return null - } - throw err - } -} - -module.exports.mkdirfix = mkdirfix -function mkdirfix (cache, p, cb) { - // we have to infer the owner _before_ making the directory, even though - // we aren't going to use the results, since the cache itself might not - // exist yet. If we mkdirp it, then our current uid/gid will be assumed - // to be correct if it creates the cache folder in the process. - return BB.resolve(inferOwner(cache)).then(() => { - return mkdirp(p).then(made => { - if (made) { - return fixOwner(cache, made).then(() => made) - } - }).catch({ code: 'EEXIST' }, () => { - // There's a race in mkdirp! - return fixOwner(cache, p).then(() => null) - }) - }) -} - -module.exports.mkdirfix.sync = mkdirfixSync -function mkdirfixSync (cache, p) { - try { - inferOwner.sync(cache) - const made = mkdirp.sync(p) - if (made) { - fixOwnerSync(cache, made) - return made - } - } catch (err) { - if (err.code === 'EEXIST') { - fixOwnerSync(cache, p) - return null - } else { - throw err - } - } -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/util/hash-to-segments.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/util/hash-to-segments.js deleted file mode 100644 index 192be2a6d..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/util/hash-to-segments.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict' - -module.exports = hashToSegments - -function hashToSegments (hash) { - return [ - hash.slice(0, 2), - hash.slice(2, 4), - hash.slice(4) - ] -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/util/move-file.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/util/move-file.js deleted file mode 100644 index b43744b3d..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/util/move-file.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') -const BB = require('bluebird') -const chmod = BB.promisify(fs.chmod) -const unlink = BB.promisify(fs.unlink) -let move -let pinflight - -module.exports = moveFile -function moveFile (src, dest) { - // This isn't quite an fs.rename -- the assumption is that - // if `dest` already exists, and we get certain errors while - // trying to move it, we should just not bother. - // - // In the case of cache corruption, users will receive an - // EINTEGRITY error elsewhere, and can remove the offending - // content their own way. - // - // Note that, as the name suggests, this strictly only supports file moves. - return BB.fromNode(cb => { - fs.link(src, dest, err => { - if (err) { - if (err.code === 'EEXIST' || err.code === 'EBUSY') { - // file already exists, so whatever - } else if (err.code === 'EPERM' && process.platform === 'win32') { - // file handle stayed open even past graceful-fs limits - } else { - return cb(err) - } - } - return cb() - }) - }).then(() => { - // content should never change for any reason, so make it read-only - return BB.join(unlink(src), process.platform !== 'win32' && chmod(dest, '0444')) - }).catch(() => { - if (!pinflight) { pinflight = require('promise-inflight') } - return pinflight('cacache-move-file:' + dest, () => { - return BB.promisify(fs.stat)(dest).catch(err => { - if (err.code !== 'ENOENT') { - // Something else is wrong here. Bail bail bail - throw err - } - // file doesn't already exist! let's try a rename -> copy fallback - if (!move) { move = require('move-concurrently') } - return move(src, dest, { BB, fs }) - }) - }) - }) -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/util/tmp.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/util/tmp.js deleted file mode 100644 index 78494b8ea..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/util/tmp.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict' - -const BB = require('bluebird') - -const figgyPudding = require('figgy-pudding') -const fixOwner = require('./fix-owner') -const path = require('path') -const rimraf = BB.promisify(require('rimraf')) -const uniqueFilename = require('unique-filename') - -const TmpOpts = figgyPudding({ - tmpPrefix: {} -}) - -module.exports.mkdir = mktmpdir -function mktmpdir (cache, opts) { - opts = TmpOpts(opts) - const tmpTarget = uniqueFilename(path.join(cache, 'tmp'), opts.tmpPrefix) - return fixOwner.mkdirfix(cache, tmpTarget).then(() => { - return tmpTarget - }) -} - -module.exports.withTmp = withTmp -function withTmp (cache, opts, cb) { - if (!cb) { - cb = opts - opts = null - } - opts = TmpOpts(opts) - return BB.using(mktmpdir(cache, opts).disposer(rimraf), cb) -} - -module.exports.fix = fixtmpdir -function fixtmpdir (cache) { - return fixOwner(cache, path.join(cache, 'tmp')) -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/util/y.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/util/y.js deleted file mode 100644 index d62bedacb..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/util/y.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict' - -const path = require('path') -const y18n = require('y18n')({ - directory: path.join(__dirname, '../../locales'), - locale: 'en', - updateFiles: process.env.CACACHE_UPDATE_LOCALE_FILES === 'true' -}) - -module.exports = yTag -function yTag (parts) { - let str = '' - parts.forEach((part, i) => { - const arg = arguments[i + 1] - str += part - if (arg) { - str += '%s' - } - }) - return y18n.__.apply(null, [str].concat([].slice.call(arguments, 1))) -} - -module.exports.setLocale = locale => { - y18n.setLocale(locale) -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/lib/verify.js b/node_modules/make-fetch-happen/node_modules/cacache/lib/verify.js deleted file mode 100644 index 617d38db1..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/lib/verify.js +++ /dev/null @@ -1,227 +0,0 @@ -'use strict' - -const BB = require('bluebird') - -const contentPath = require('./content/path') -const figgyPudding = require('figgy-pudding') -const finished = BB.promisify(require('mississippi').finished) -const fixOwner = require('./util/fix-owner') -const fs = require('graceful-fs') -const glob = BB.promisify(require('glob')) -const index = require('./entry-index') -const path = require('path') -const rimraf = BB.promisify(require('rimraf')) -const ssri = require('ssri') - -BB.promisifyAll(fs) - -const VerifyOpts = figgyPudding({ - concurrency: { - default: 20 - }, - filter: {}, - log: { - default: { silly () {} } - } -}) - -module.exports = verify -function verify (cache, opts) { - opts = VerifyOpts(opts) - opts.log.silly('verify', 'verifying cache at', cache) - return BB.reduce([ - markStartTime, - fixPerms, - garbageCollect, - rebuildIndex, - cleanTmp, - writeVerifile, - markEndTime - ], (stats, step, i) => { - const label = step.name || `step #${i}` - const start = new Date() - return BB.resolve(step(cache, opts)).then(s => { - s && Object.keys(s).forEach(k => { - stats[k] = s[k] - }) - const end = new Date() - if (!stats.runTime) { stats.runTime = {} } - stats.runTime[label] = end - start - return stats - }) - }, {}).tap(stats => { - stats.runTime.total = stats.endTime - stats.startTime - opts.log.silly('verify', 'verification finished for', cache, 'in', `${stats.runTime.total}ms`) - }) -} - -function markStartTime (cache, opts) { - return { startTime: new Date() } -} - -function markEndTime (cache, opts) { - return { endTime: new Date() } -} - -function fixPerms (cache, opts) { - opts.log.silly('verify', 'fixing cache permissions') - return fixOwner.mkdirfix(cache, cache).then(() => { - // TODO - fix file permissions too - return fixOwner.chownr(cache, cache) - }).then(() => null) -} - -// Implements a naive mark-and-sweep tracing garbage collector. -// -// The algorithm is basically as follows: -// 1. Read (and filter) all index entries ("pointers") -// 2. Mark each integrity value as "live" -// 3. Read entire filesystem tree in `content-vX/` dir -// 4. If content is live, verify its checksum and delete it if it fails -// 5. If content is not marked as live, rimraf it. -// -function garbageCollect (cache, opts) { - opts.log.silly('verify', 'garbage collecting content') - const indexStream = index.lsStream(cache) - const liveContent = new Set() - indexStream.on('data', entry => { - if (opts.filter && !opts.filter(entry)) { return } - liveContent.add(entry.integrity.toString()) - }) - return finished(indexStream).then(() => { - const contentDir = contentPath._contentDir(cache) - return glob(path.join(contentDir, '**'), { - follow: false, - nodir: true, - nosort: true - }).then(files => { - return BB.resolve({ - verifiedContent: 0, - reclaimedCount: 0, - reclaimedSize: 0, - badContentCount: 0, - keptSize: 0 - }).tap((stats) => BB.map(files, (f) => { - const split = f.split(/[/\\]/) - const digest = split.slice(split.length - 3).join('') - const algo = split[split.length - 4] - const integrity = ssri.fromHex(digest, algo) - if (liveContent.has(integrity.toString())) { - return verifyContent(f, integrity).then(info => { - if (!info.valid) { - stats.reclaimedCount++ - stats.badContentCount++ - stats.reclaimedSize += info.size - } else { - stats.verifiedContent++ - stats.keptSize += info.size - } - return stats - }) - } else { - // No entries refer to this content. We can delete. - stats.reclaimedCount++ - return fs.statAsync(f).then(s => { - return rimraf(f).then(() => { - stats.reclaimedSize += s.size - return stats - }) - }) - } - }, { concurrency: opts.concurrency })) - }) - }) -} - -function verifyContent (filepath, sri) { - return fs.statAsync(filepath).then(stat => { - const contentInfo = { - size: stat.size, - valid: true - } - return ssri.checkStream( - fs.createReadStream(filepath), - sri - ).catch(err => { - if (err.code !== 'EINTEGRITY') { throw err } - return rimraf(filepath).then(() => { - contentInfo.valid = false - }) - }).then(() => contentInfo) - }).catch({ code: 'ENOENT' }, () => ({ size: 0, valid: false })) -} - -function rebuildIndex (cache, opts) { - opts.log.silly('verify', 'rebuilding index') - return index.ls(cache).then(entries => { - const stats = { - missingContent: 0, - rejectedEntries: 0, - totalEntries: 0 - } - const buckets = {} - for (let k in entries) { - if (entries.hasOwnProperty(k)) { - const hashed = index._hashKey(k) - const entry = entries[k] - const excluded = opts.filter && !opts.filter(entry) - excluded && stats.rejectedEntries++ - if (buckets[hashed] && !excluded) { - buckets[hashed].push(entry) - } else if (buckets[hashed] && excluded) { - // skip - } else if (excluded) { - buckets[hashed] = [] - buckets[hashed]._path = index._bucketPath(cache, k) - } else { - buckets[hashed] = [entry] - buckets[hashed]._path = index._bucketPath(cache, k) - } - } - } - return BB.map(Object.keys(buckets), key => { - return rebuildBucket(cache, buckets[key], stats, opts) - }, { concurrency: opts.concurrency }).then(() => stats) - }) -} - -function rebuildBucket (cache, bucket, stats, opts) { - return fs.truncateAsync(bucket._path).then(() => { - // This needs to be serialized because cacache explicitly - // lets very racy bucket conflicts clobber each other. - return BB.mapSeries(bucket, entry => { - const content = contentPath(cache, entry.integrity) - return fs.statAsync(content).then(() => { - return index.insert(cache, entry.key, entry.integrity, { - metadata: entry.metadata, - size: entry.size - }).then(() => { stats.totalEntries++ }) - }).catch({ code: 'ENOENT' }, () => { - stats.rejectedEntries++ - stats.missingContent++ - }) - }) - }) -} - -function cleanTmp (cache, opts) { - opts.log.silly('verify', 'cleaning tmp directory') - return rimraf(path.join(cache, 'tmp')) -} - -function writeVerifile (cache, opts) { - const verifile = path.join(cache, '_lastverified') - opts.log.silly('verify', 'writing verifile to ' + verifile) - try { - return fs.writeFileAsync(verifile, '' + (+(new Date()))) - } finally { - fixOwner.chownr.sync(cache, verifile) - } -} - -module.exports.lastRun = lastRun -function lastRun (cache) { - return fs.readFileAsync( - path.join(cache, '_lastverified'), 'utf8' - ).then(data => new Date(+data)) -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/locales/en.js b/node_modules/make-fetch-happen/node_modules/cacache/locales/en.js deleted file mode 100644 index 1715fdb53..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/locales/en.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict' - -const ls = require('../ls.js') -const get = require('../get.js') -const put = require('../put.js') -const rm = require('../rm.js') -const verify = require('../verify.js') -const setLocale = require('../lib/util/y.js').setLocale -const clearMemoized = require('../lib/memoization.js').clearMemoized -const tmp = require('../lib/util/tmp.js') - -setLocale('en') - -const x = module.exports - -x.ls = cache => ls(cache) -x.ls.stream = cache => ls.stream(cache) - -x.get = (cache, key, opts) => get(cache, key, opts) -x.get.byDigest = (cache, hash, opts) => get.byDigest(cache, hash, opts) -x.get.sync = (cache, key, opts) => get.sync(cache, key, opts) -x.get.sync.byDigest = (cache, key, opts) => get.sync.byDigest(cache, key, opts) -x.get.stream = (cache, key, opts) => get.stream(cache, key, opts) -x.get.stream.byDigest = (cache, hash, opts) => get.stream.byDigest(cache, hash, opts) -x.get.copy = (cache, key, dest, opts) => get.copy(cache, key, dest, opts) -x.get.copy.byDigest = (cache, hash, dest, opts) => get.copy.byDigest(cache, hash, dest, opts) -x.get.info = (cache, key) => get.info(cache, key) -x.get.hasContent = (cache, hash) => get.hasContent(cache, hash) -x.get.hasContent.sync = (cache, hash) => get.hasContent.sync(cache, hash) - -x.put = (cache, key, data, opts) => put(cache, key, data, opts) -x.put.stream = (cache, key, opts) => put.stream(cache, key, opts) - -x.rm = (cache, key) => rm.entry(cache, key) -x.rm.all = cache => rm.all(cache) -x.rm.entry = x.rm -x.rm.content = (cache, hash) => rm.content(cache, hash) - -x.setLocale = lang => setLocale(lang) -x.clearMemoized = () => clearMemoized() - -x.tmp = {} -x.tmp.mkdir = (cache, opts) => tmp.mkdir(cache, opts) -x.tmp.withTmp = (cache, opts, cb) => tmp.withTmp(cache, opts, cb) - -x.verify = (cache, opts) => verify(cache, opts) -x.verify.lastRun = cache => verify.lastRun(cache) diff --git a/node_modules/make-fetch-happen/node_modules/cacache/locales/en.json b/node_modules/make-fetch-happen/node_modules/cacache/locales/en.json deleted file mode 100644 index 4f1452884..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/locales/en.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "No cache entry for `%s` found in `%s`": "No cache entry for %s found in %s", - "Integrity verification failed for %s (%s)": "Integrity verification failed for %s (%s)", - "Bad data size: expected inserted data to be %s bytes, but got %s instead": "Bad data size: expected inserted data to be %s bytes, but got %s instead", - "Cache input stream was empty": "Cache input stream was empty", - "Integrity check failed:\n Wanted: %s\n Found: %s": "Integrity check failed:\n Wanted: %s\n Found: %s" -}
\ No newline at end of file diff --git a/node_modules/make-fetch-happen/node_modules/cacache/locales/es.js b/node_modules/make-fetch-happen/node_modules/cacache/locales/es.js deleted file mode 100644 index ac4e4cfe7..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/locales/es.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict' - -const ls = require('../ls.js') -const get = require('../get.js') -const put = require('../put.js') -const rm = require('../rm.js') -const verify = require('../verify.js') -const setLocale = require('../lib/util/y.js').setLocale -const clearMemoized = require('../lib/memoization.js').clearMemoized -const tmp = require('../lib/util/tmp.js') - -setLocale('es') - -const x = module.exports - -x.ls = cache => ls(cache) -x.ls.flujo = cache => ls.stream(cache) - -x.saca = (cache, clave, ops) => get(cache, clave, ops) -x.saca.porHacheo = (cache, hacheo, ops) => get.byDigest(cache, hacheo, ops) -x.saca.sinc = (cache, clave, ops) => get.sync(cache, clave, ops) -x.saca.sinc.porHacheo = (cache, hacheo, ops) => get.sync.byDigest(cache, hacheo, ops) -x.saca.flujo = (cache, clave, ops) => get.stream(cache, clave, ops) -x.saca.flujo.porHacheo = (cache, hacheo, ops) => get.stream.byDigest(cache, hacheo, ops) -x.sava.copia = (cache, clave, destino, opts) => get.copy(cache, clave, destino, opts) -x.sava.copia.porHacheo = (cache, hacheo, destino, opts) => get.copy.byDigest(cache, hacheo, destino, opts) -x.saca.info = (cache, clave) => get.info(cache, clave) -x.saca.tieneDatos = (cache, hacheo) => get.hasContent(cache, hacheo) -x.saca.tieneDatos.sinc = (cache, hacheo) => get.hasContent.sync(cache, hacheo) - -x.mete = (cache, clave, datos, ops) => put(cache, clave, datos, ops) -x.mete.flujo = (cache, clave, ops) => put.stream(cache, clave, ops) - -x.rm = (cache, clave) => rm.entry(cache, clave) -x.rm.todo = cache => rm.all(cache) -x.rm.entrada = x.rm -x.rm.datos = (cache, hacheo) => rm.content(cache, hacheo) - -x.ponLenguaje = lang => setLocale(lang) -x.limpiaMemoizado = () => clearMemoized() - -x.tmp = {} -x.tmp.mkdir = (cache, ops) => tmp.mkdir(cache, ops) -x.tmp.hazdir = x.tmp.mkdir -x.tmp.conTmp = (cache, ops, cb) => tmp.withTmp(cache, ops, cb) - -x.verifica = (cache, ops) => verify(cache, ops) -x.verifica.ultimaVez = cache => verify.lastRun(cache) -x.verifica.últimaVez = x.verifica.ultimaVez diff --git a/node_modules/make-fetch-happen/node_modules/cacache/locales/es.json b/node_modules/make-fetch-happen/node_modules/cacache/locales/es.json deleted file mode 100644 index a91d76225..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/locales/es.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "No cache entry for `%s` found in `%s`": "No existe ninguna entrada para «%s» en «%s»", - "Integrity verification failed for %s (%s)": "Verificación de integridad falló para «%s» (%s)", - "Bad data size: expected inserted data to be %s bytes, but got %s instead": "Tamaño incorrecto de datos: los datos insertados debieron haber sido %s octetos, pero fueron %s", - "Cache input stream was empty": "El stream de entrada al caché estaba vacío" -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/ls.js b/node_modules/make-fetch-happen/node_modules/cacache/ls.js deleted file mode 100644 index 9f49b388a..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/ls.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict' - -var index = require('./lib/entry-index') - -module.exports = index.ls -module.exports.stream = index.lsStream diff --git a/node_modules/make-fetch-happen/node_modules/cacache/package.json b/node_modules/make-fetch-happen/node_modules/cacache/package.json deleted file mode 100644 index 4da8d17fd..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/package.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "_from": "cacache@^12.0.0", - "_id": "cacache@12.0.3", - "_inBundle": false, - "_integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", - "_location": "/make-fetch-happen/cacache", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "cacache@^12.0.0", - "name": "cacache", - "escapedName": "cacache", - "rawSpec": "^12.0.0", - "saveSpec": null, - "fetchSpec": "^12.0.0" - }, - "_requiredBy": [ - "/make-fetch-happen" - ], - "_resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "_shasum": "be99abba4e1bf5df461cd5a2c1071fc432573390", - "_spec": "cacache@^12.0.0", - "_where": "/Users/claudiahdz/npm/cli/node_modules/make-fetch-happen", - "author": { - "name": "Kat Marchán", - "email": "kzm@sykosomatic.org" - }, - "bugs": { - "url": "https://github.com/npm/cacache/issues" - }, - "bundleDependencies": false, - "cache-version": { - "content": "2", - "index": "5" - }, - "config": { - "nyc": { - "exclude": [ - "node_modules/**", - "test/**" - ] - } - }, - "contributors": [ - { - "name": "Charlotte Spencer", - "email": "charlottelaspencer@gmail.com" - }, - { - "name": "Rebecca Turner", - "email": "me@re-becca.org" - } - ], - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "deprecated": false, - "description": "Fast, fault-tolerant, cross-platform, disk-based, data-agnostic, content-addressable cache.", - "devDependencies": { - "benchmark": "^2.1.4", - "chalk": "^2.4.2", - "cross-env": "^5.1.4", - "require-inject": "^1.4.4", - "standard": "^12.0.1", - "standard-version": "^6.0.1", - "tacks": "^1.3.0", - "tap": "^12.7.0", - "weallbehave": "^1.2.0", - "weallcontribute": "^1.0.9" - }, - "files": [ - "*.js", - "lib", - "locales" - ], - "homepage": "https://github.com/npm/cacache#readme", - "keywords": [ - "cache", - "caching", - "content-addressable", - "sri", - "sri hash", - "subresource integrity", - "cache", - "storage", - "store", - "file store", - "filesystem", - "disk cache", - "disk storage" - ], - "license": "ISC", - "main": "index.js", - "name": "cacache", - "repository": { - "type": "git", - "url": "git+https://github.com/npm/cacache.git" - }, - "scripts": { - "benchmarks": "node test/benchmarks", - "postrelease": "npm publish && git push --follow-tags", - "prerelease": "npm t", - "pretest": "standard", - "release": "standard-version -s", - "test": "cross-env CACACHE_UPDATE_LOCALE_FILES=true tap --coverage --nyc-arg=--all -J test/*.js", - "test-docker": "docker run -it --rm --name pacotest -v \"$PWD\":/tmp -w /tmp node:latest npm test", - "update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'", - "update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'" - }, - "version": "12.0.3" -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/put.js b/node_modules/make-fetch-happen/node_modules/cacache/put.js deleted file mode 100644 index a40063930..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/put.js +++ /dev/null @@ -1,86 +0,0 @@ -'use strict' - -const figgyPudding = require('figgy-pudding') -const index = require('./lib/entry-index') -const memo = require('./lib/memoization') -const write = require('./lib/content/write') -const to = require('mississippi').to - -const PutOpts = figgyPudding({ - algorithms: { - default: ['sha512'] - }, - integrity: {}, - memoize: {}, - metadata: {}, - pickAlgorithm: {}, - size: {}, - tmpPrefix: {}, - single: {}, - sep: {}, - error: {}, - strict: {} -}) - -module.exports = putData -function putData (cache, key, data, opts) { - opts = PutOpts(opts) - return write(cache, data, opts).then(res => { - return index.insert( - cache, key, res.integrity, opts.concat({ size: res.size }) - ).then(entry => { - if (opts.memoize) { - memo.put(cache, entry, data, opts) - } - return res.integrity - }) - }) -} - -module.exports.stream = putStream -function putStream (cache, key, opts) { - opts = PutOpts(opts) - let integrity - let size - const contentStream = write.stream( - cache, opts - ).on('integrity', int => { - integrity = int - }).on('size', s => { - size = s - }) - let memoData - let memoTotal = 0 - const stream = to((chunk, enc, cb) => { - contentStream.write(chunk, enc, () => { - if (opts.memoize) { - if (!memoData) { memoData = [] } - memoData.push(chunk) - memoTotal += chunk.length - } - cb() - }) - }, cb => { - contentStream.end(() => { - index.insert(cache, key, integrity, opts.concat({ size })).then(entry => { - if (opts.memoize) { - memo.put(cache, entry, Buffer.concat(memoData, memoTotal), opts) - } - stream.emit('integrity', integrity) - cb() - }) - }) - }) - let erred = false - stream.once('error', err => { - if (erred) { return } - erred = true - contentStream.emit('error', err) - }) - contentStream.once('error', err => { - if (erred) { return } - erred = true - stream.emit('error', err) - }) - return stream -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/rm.js b/node_modules/make-fetch-happen/node_modules/cacache/rm.js deleted file mode 100644 index e71a1d27b..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/rm.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict' - -const BB = require('bluebird') - -const index = require('./lib/entry-index') -const memo = require('./lib/memoization') -const path = require('path') -const rimraf = BB.promisify(require('rimraf')) -const rmContent = require('./lib/content/rm') - -module.exports = entry -module.exports.entry = entry -function entry (cache, key) { - memo.clearMemoized() - return index.delete(cache, key) -} - -module.exports.content = content -function content (cache, integrity) { - memo.clearMemoized() - return rmContent(cache, integrity) -} - -module.exports.all = all -function all (cache) { - memo.clearMemoized() - return rimraf(path.join(cache, '*(content-*|index-*)')) -} diff --git a/node_modules/make-fetch-happen/node_modules/cacache/verify.js b/node_modules/make-fetch-happen/node_modules/cacache/verify.js deleted file mode 100644 index db7763d7a..000000000 --- a/node_modules/make-fetch-happen/node_modules/cacache/verify.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict' - -module.exports = require('./lib/verify') diff --git a/node_modules/make-fetch-happen/node_modules/ssri/CHANGELOG.md b/node_modules/make-fetch-happen/node_modules/ssri/CHANGELOG.md deleted file mode 100644 index d4c589790..000000000 --- a/node_modules/make-fetch-happen/node_modules/ssri/CHANGELOG.md +++ /dev/null @@ -1,286 +0,0 @@ -# Change Log - -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. - -<a name="6.0.1"></a> -## [6.0.1](https://github.com/zkat/ssri/compare/v6.0.0...v6.0.1) (2018-08-27) - - -### Bug Fixes - -* **opts:** use figgy-pudding to specify consumed opts ([cf86553](https://github.com/zkat/ssri/commit/cf86553)) - - - -<a name="6.0.0"></a> -# [6.0.0](https://github.com/zkat/ssri/compare/v5.3.0...v6.0.0) (2018-04-09) - - -### Bug Fixes - -* **docs:** minor typo ([b71ef17](https://github.com/zkat/ssri/commit/b71ef17)) - - -### meta - -* drop support for node@4 ([d9bf359](https://github.com/zkat/ssri/commit/d9bf359)) - - -### BREAKING CHANGES - -* node@4 is no longer supported - - - -<a name="5.3.0"></a> -# [5.3.0](https://github.com/zkat/ssri/compare/v5.2.4...v5.3.0) (2018-03-13) - - -### Features - -* **checkData:** optionally throw when checkData fails ([bf26b84](https://github.com/zkat/ssri/commit/bf26b84)) - - - -<a name="5.2.4"></a> -## [5.2.4](https://github.com/zkat/ssri/compare/v5.2.3...v5.2.4) (2018-02-16) - - - -<a name="5.2.3"></a> -## [5.2.3](https://github.com/zkat/ssri/compare/v5.2.2...v5.2.3) (2018-02-16) - - -### Bug Fixes - -* **hashes:** filter hash priority list by available hashes ([2fa30b8](https://github.com/zkat/ssri/commit/2fa30b8)) -* **integrityStream:** dedupe algorithms to generate ([d56c654](https://github.com/zkat/ssri/commit/d56c654)) - - - -<a name="5.2.2"></a> -## [5.2.2](https://github.com/zkat/ssri/compare/v5.2.1...v5.2.2) (2018-02-14) - - -### Bug Fixes - -* **security:** tweak strict SRI regex ([#10](https://github.com/zkat/ssri/issues/10)) ([d0ebcdc](https://github.com/zkat/ssri/commit/d0ebcdc)) - - - -<a name="5.2.1"></a> -## [5.2.1](https://github.com/zkat/ssri/compare/v5.2.0...v5.2.1) (2018-02-06) - - - -<a name="5.2.0"></a> -# [5.2.0](https://github.com/zkat/ssri/compare/v5.1.0...v5.2.0) (2018-02-06) - - -### Features - -* **match:** add integrity.match() ([3c49cc4](https://github.com/zkat/ssri/commit/3c49cc4)) - - - -<a name="5.1.0"></a> -# [5.1.0](https://github.com/zkat/ssri/compare/v5.0.0...v5.1.0) (2018-01-18) - - -### Bug Fixes - -* **checkStream:** integrityStream now takes opts.integrity algos into account ([d262910](https://github.com/zkat/ssri/commit/d262910)) - - -### Features - -* **sha3:** do some guesswork about upcoming sha3 ([7fdd9df](https://github.com/zkat/ssri/commit/7fdd9df)) - - - -<a name="5.0.0"></a> -# [5.0.0](https://github.com/zkat/ssri/compare/v4.1.6...v5.0.0) (2017-10-23) - - -### Features - -* **license:** relicense to ISC (#9) ([c82983a](https://github.com/zkat/ssri/commit/c82983a)) - - -### BREAKING CHANGES - -* **license:** the license has been changed from CC0-1.0 to ISC. - - - -<a name="4.1.6"></a> -## [4.1.6](https://github.com/zkat/ssri/compare/v4.1.5...v4.1.6) (2017-06-07) - - -### Bug Fixes - -* **checkStream:** make sure to pass all opts through ([0b1bcbe](https://github.com/zkat/ssri/commit/0b1bcbe)) - - - -<a name="4.1.5"></a> -## [4.1.5](https://github.com/zkat/ssri/compare/v4.1.4...v4.1.5) (2017-06-05) - - -### Bug Fixes - -* **integrityStream:** stop crashing if opts.algorithms and opts.integrity have an algo mismatch ([fb1293e](https://github.com/zkat/ssri/commit/fb1293e)) - - - -<a name="4.1.4"></a> -## [4.1.4](https://github.com/zkat/ssri/compare/v4.1.3...v4.1.4) (2017-05-31) - - -### Bug Fixes - -* **node:** older versions of node[@4](https://github.com/4) do not support base64buffer string parsing ([513df4e](https://github.com/zkat/ssri/commit/513df4e)) - - - -<a name="4.1.3"></a> -## [4.1.3](https://github.com/zkat/ssri/compare/v4.1.2...v4.1.3) (2017-05-24) - - -### Bug Fixes - -* **check:** handle various bad hash corner cases better ([c2c262b](https://github.com/zkat/ssri/commit/c2c262b)) - - - -<a name="4.1.2"></a> -## [4.1.2](https://github.com/zkat/ssri/compare/v4.1.1...v4.1.2) (2017-04-18) - - -### Bug Fixes - -* **stream:** _flush can be called multiple times. use on("end") ([b1c4805](https://github.com/zkat/ssri/commit/b1c4805)) - - - -<a name="4.1.1"></a> -## [4.1.1](https://github.com/zkat/ssri/compare/v4.1.0...v4.1.1) (2017-04-12) - - -### Bug Fixes - -* **pickAlgorithm:** error if pickAlgorithm() is used in an empty Integrity ([fab470e](https://github.com/zkat/ssri/commit/fab470e)) - - - -<a name="4.1.0"></a> -# [4.1.0](https://github.com/zkat/ssri/compare/v4.0.0...v4.1.0) (2017-04-07) - - -### Features - -* adding ssri.create for a crypto style interface (#2) ([96f52ad](https://github.com/zkat/ssri/commit/96f52ad)) - - - -<a name="4.0.0"></a> -# [4.0.0](https://github.com/zkat/ssri/compare/v3.0.2...v4.0.0) (2017-04-03) - - -### Bug Fixes - -* **integrity:** should have changed the error code before. oops ([8381afa](https://github.com/zkat/ssri/commit/8381afa)) - - -### BREAKING CHANGES - -* **integrity:** EBADCHECKSUM -> EINTEGRITY for verification errors - - - -<a name="3.0.2"></a> -## [3.0.2](https://github.com/zkat/ssri/compare/v3.0.1...v3.0.2) (2017-04-03) - - - -<a name="3.0.1"></a> -## [3.0.1](https://github.com/zkat/ssri/compare/v3.0.0...v3.0.1) (2017-04-03) - - -### Bug Fixes - -* **package.json:** really should have these in the keywords because search ([a6ac6d0](https://github.com/zkat/ssri/commit/a6ac6d0)) - - - -<a name="3.0.0"></a> -# [3.0.0](https://github.com/zkat/ssri/compare/v2.0.0...v3.0.0) (2017-04-03) - - -### Bug Fixes - -* **hashes:** IntegrityMetadata -> Hash ([d04aa1f](https://github.com/zkat/ssri/commit/d04aa1f)) - - -### Features - -* **check:** return IntegrityMetadata on check success ([2301e74](https://github.com/zkat/ssri/commit/2301e74)) -* **fromHex:** ssri.fromHex to make it easier to generate them from hex valus ([049b89e](https://github.com/zkat/ssri/commit/049b89e)) -* **hex:** utility function for getting hex version of digest ([a9f021c](https://github.com/zkat/ssri/commit/a9f021c)) -* **hexDigest:** added hexDigest method to Integrity objects too ([85208ba](https://github.com/zkat/ssri/commit/85208ba)) -* **integrity:** add .isIntegrity and .isIntegrityMetadata ([1b29e6f](https://github.com/zkat/ssri/commit/1b29e6f)) -* **integrityStream:** new stream that can both generate and check streamed data ([fd23e1b](https://github.com/zkat/ssri/commit/fd23e1b)) -* **parse:** allow parsing straight into a single IntegrityMetadata object ([c8ddf48](https://github.com/zkat/ssri/commit/c8ddf48)) -* **pickAlgorithm:** Intergrity#pickAlgorithm() added ([b97a796](https://github.com/zkat/ssri/commit/b97a796)) -* **size:** calculate and update stream sizes ([02ed1ad](https://github.com/zkat/ssri/commit/02ed1ad)) - - -### BREAKING CHANGES - -* **hashes:** `.isIntegrityMetadata` is now `.isHash`. Also, any references to `IntegrityMetadata` now refer to `Hash`. -* **integrityStream:** createCheckerStream has been removed and replaced with a general-purpose integrityStream. - -To convert existing createCheckerStream code, move the `sri` argument into `opts.integrity` in integrityStream. All other options should be the same. -* **check:** `checkData`, `checkStream`, and `createCheckerStream` now yield a whole IntegrityMetadata instance representing the first successful hash match. - - - -<a name="2.0.0"></a> -# [2.0.0](https://github.com/zkat/ssri/compare/v1.0.0...v2.0.0) (2017-03-24) - - -### Bug Fixes - -* **strict-mode:** make regexes more rigid ([122a32c](https://github.com/zkat/ssri/commit/122a32c)) - - -### Features - -* **api:** added serialize alias for unparse ([999b421](https://github.com/zkat/ssri/commit/999b421)) -* **concat:** add Integrity#concat() ([cae12c7](https://github.com/zkat/ssri/commit/cae12c7)) -* **pickAlgo:** pick the strongest algorithm provided, by default ([58c18f7](https://github.com/zkat/ssri/commit/58c18f7)) -* **strict-mode:** strict SRI support ([3f0b64c](https://github.com/zkat/ssri/commit/3f0b64c)) -* **stringify:** replaced unparse/serialize with stringify ([4acad30](https://github.com/zkat/ssri/commit/4acad30)) -* **verification:** add opts.pickAlgorithm ([f72e658](https://github.com/zkat/ssri/commit/f72e658)) - - -### BREAKING CHANGES - -* **pickAlgo:** ssri will prioritize specific hashes now -* **stringify:** serialize and unparse have been removed. Use ssri.stringify instead. -* **strict-mode:** functions that accepted an optional `sep` argument now expect `opts.sep`. - - - -<a name="1.0.0"></a> -# 1.0.0 (2017-03-23) - - -### Features - -* **api:** implemented initial api ([4fbb16b](https://github.com/zkat/ssri/commit/4fbb16b)) - - -### BREAKING CHANGES - -* **api:** Initial API established. diff --git a/node_modules/make-fetch-happen/node_modules/ssri/LICENSE.md b/node_modules/make-fetch-happen/node_modules/ssri/LICENSE.md deleted file mode 100644 index 8d28acf86..000000000 --- a/node_modules/make-fetch-happen/node_modules/ssri/LICENSE.md +++ /dev/null @@ -1,16 +0,0 @@ -ISC License - -Copyright (c) npm, Inc. - -Permission to use, copy, modify, and/or distribute this software for -any purpose with or without fee is hereby granted, provided that the -above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS -ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/make-fetch-happen/node_modules/ssri/README.md b/node_modules/make-fetch-happen/node_modules/ssri/README.md deleted file mode 100644 index c250961bd..000000000 --- a/node_modules/make-fetch-happen/node_modules/ssri/README.md +++ /dev/null @@ -1,488 +0,0 @@ -# ssri [![npm version](https://img.shields.io/npm/v/ssri.svg)](https://npm.im/ssri) [![license](https://img.shields.io/npm/l/ssri.svg)](https://npm.im/ssri) [![Travis](https://img.shields.io/travis/zkat/ssri.svg)](https://travis-ci.org/zkat/ssri) [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/zkat/ssri?svg=true)](https://ci.appveyor.com/project/zkat/ssri) [![Coverage Status](https://coveralls.io/repos/github/zkat/ssri/badge.svg?branch=latest)](https://coveralls.io/github/zkat/ssri?branch=latest) - -[`ssri`](https://github.com/zkat/ssri), short for Standard Subresource -Integrity, is a Node.js utility for parsing, manipulating, serializing, -generating, and verifying [Subresource -Integrity](https://w3c.github.io/webappsec/specs/subresourceintegrity/) hashes. - -## Install - -`$ npm install --save ssri` - -## Table of Contents - -* [Example](#example) -* [Features](#features) -* [Contributing](#contributing) -* [API](#api) - * Parsing & Serializing - * [`parse`](#parse) - * [`stringify`](#stringify) - * [`Integrity#concat`](#integrity-concat) - * [`Integrity#toString`](#integrity-to-string) - * [`Integrity#toJSON`](#integrity-to-json) - * [`Integrity#match`](#integrity-match) - * [`Integrity#pickAlgorithm`](#integrity-pick-algorithm) - * [`Integrity#hexDigest`](#integrity-hex-digest) - * Integrity Generation - * [`fromHex`](#from-hex) - * [`fromData`](#from-data) - * [`fromStream`](#from-stream) - * [`create`](#create) - * Integrity Verification - * [`checkData`](#check-data) - * [`checkStream`](#check-stream) - * [`integrityStream`](#integrity-stream) - -### Example - -```javascript -const ssri = require('ssri') - -const integrity = 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo' - -// Parsing and serializing -const parsed = ssri.parse(integrity) -ssri.stringify(parsed) // === integrity (works on non-Integrity objects) -parsed.toString() // === integrity - -// Async stream functions -ssri.checkStream(fs.createReadStream('./my-file'), integrity).then(...) -ssri.fromStream(fs.createReadStream('./my-file')).then(sri => { - sri.toString() === integrity -}) -fs.createReadStream('./my-file').pipe(ssri.createCheckerStream(sri)) - -// Sync data functions -ssri.fromData(fs.readFileSync('./my-file')) // === parsed -ssri.checkData(fs.readFileSync('./my-file'), integrity) // => 'sha512' -``` - -### Features - -* Parses and stringifies SRI strings. -* Generates SRI strings from raw data or Streams. -* Strict standard compliance. -* `?foo` metadata option support. -* Multiple entries for the same algorithm. -* Object-based integrity hash manipulation. -* Small footprint: no dependencies, concise implementation. -* Full test coverage. -* Customizable algorithm picker. - -### Contributing - -The ssri team enthusiastically welcomes contributions and project participation! -There's a bunch of things you can do if you want to contribute! The [Contributor -Guide](CONTRIBUTING.md) has all the information you need for everything from -reporting bugs to contributing entire new features. Please don't hesitate to -jump in if you'd like to, or even ask us questions if something isn't clear. - -### API - -#### <a name="parse"></a> `> ssri.parse(sri, [opts]) -> Integrity` - -Parses `sri` into an `Integrity` data structure. `sri` can be an integrity -string, an `Hash`-like with `digest` and `algorithm` fields and an optional -`options` field, or an `Integrity`-like object. The resulting object will be an -`Integrity` instance that has this shape: - -```javascript -{ - 'sha1': [{algorithm: 'sha1', digest: 'deadbeef', options: []}], - 'sha512': [ - {algorithm: 'sha512', digest: 'c0ffee', options: []}, - {algorithm: 'sha512', digest: 'bad1dea', options: ['foo']} - ], -} -``` - -If `opts.single` is truthy, a single `Hash` object will be returned. That is, a -single object that looks like `{algorithm, digest, options}`, as opposed to a -larger object with multiple of these. - -If `opts.strict` is truthy, the resulting object will be filtered such that -it strictly follows the Subresource Integrity spec, throwing away any entries -with any invalid components. This also means a restricted set of algorithms -will be used -- the spec limits them to `sha256`, `sha384`, and `sha512`. - -Strict mode is recommended if the integrity strings are intended for use in -browsers, or in other situations where strict adherence to the spec is needed. - -##### Example - -```javascript -ssri.parse('sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo') // -> Integrity object -``` - -#### <a name="stringify"></a> `> ssri.stringify(sri, [opts]) -> String` - -This function is identical to [`Integrity#toString()`](#integrity-to-string), -except it can be used on _any_ object that [`parse`](#parse) can handle -- that -is, a string, an `Hash`-like, or an `Integrity`-like. - -The `opts.sep` option defines the string to use when joining multiple entries -together. To be spec-compliant, this _must_ be whitespace. The default is a -single space (`' '`). - -If `opts.strict` is true, the integrity string will be created using strict -parsing rules. See [`ssri.parse`](#parse). - -##### Example - -```javascript -// Useful for cleaning up input SRI strings: -ssri.stringify('\n\rsha512-foo\n\t\tsha384-bar') -// -> 'sha512-foo sha384-bar' - -// Hash-like: only a single entry. -ssri.stringify({ - algorithm: 'sha512', - digest:'9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==', - options: ['foo'] -}) -// -> -// 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo' - -// Integrity-like: full multi-entry syntax. Similar to output of `ssri.parse` -ssri.stringify({ - 'sha512': [ - { - algorithm: 'sha512', - digest:'9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==', - options: ['foo'] - } - ] -}) -// -> -// 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo' -``` - -#### <a name="integrity-concat"></a> `> Integrity#concat(otherIntegrity, [opts]) -> Integrity` - -Concatenates an `Integrity` object with another IntegrityLike, or an integrity -string. - -This is functionally equivalent to concatenating the string format of both -integrity arguments, and calling [`ssri.parse`](#ssri-parse) on the new string. - -If `opts.strict` is true, the new `Integrity` will be created using strict -parsing rules. See [`ssri.parse`](#parse). - -##### Example - -```javascript -// This will combine the integrity checks for two different versions of -// your index.js file so you can use a single integrity string and serve -// either of these to clients, from a single `<script>` tag. -const desktopIntegrity = ssri.fromData(fs.readFileSync('./index.desktop.js')) -const mobileIntegrity = ssri.fromData(fs.readFileSync('./index.mobile.js')) - -// Note that browsers (and ssri) will succeed as long as ONE of the entries -// for the *prioritized* algorithm succeeds. That is, in order for this fallback -// to work, both desktop and mobile *must* use the same `algorithm` values. -desktopIntegrity.concat(mobileIntegrity) -``` - -#### <a name="integrity-to-string"></a> `> Integrity#toString([opts]) -> String` - -Returns the string representation of an `Integrity` object. All hash entries -will be concatenated in the string by `opts.sep`, which defaults to `' '`. - -If you want to serialize an object that didn't come from an `ssri` function, -use [`ssri.stringify()`](#stringify). - -If `opts.strict` is true, the integrity string will be created using strict -parsing rules. See [`ssri.parse`](#parse). - -##### Example - -```javascript -const integrity = 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo' - -ssri.parse(integrity).toString() === integrity -``` - -#### <a name="integrity-to-json"></a> `> Integrity#toJSON() -> String` - -Returns the string representation of an `Integrity` object. All hash entries -will be concatenated in the string by `' '`. - -This is a convenience method so you can pass an `Integrity` object directly to `JSON.stringify`. -For more info check out [toJSON() behavior on mdn](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON%28%29_behavior). - -##### Example - -```javascript -const integrity = '"sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo"' - -JSON.stringify(ssri.parse(integrity)) === integrity -``` - -#### <a name="integrity-match"></a> `> Integrity#match(sri, [opts]) -> Hash | false` - -Returns the matching (truthy) hash if `Integrity` matches the argument passed as -`sri`, which can be anything that [`parse`](#parse) will accept. `opts` will be -passed through to `parse` and [`pickAlgorithm()`](#integrity-pick-algorithm). - -##### Example - -```javascript -const integrity = 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==' - -ssri.parse(integrity).match(integrity) -// Hash { -// digest: '9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==' -// algorithm: 'sha512' -// } - -ssri.parse(integrity).match('sha1-deadbeef') -// false -``` - -#### <a name="integrity-pick-algorithm"></a> `> Integrity#pickAlgorithm([opts]) -> String` - -Returns the "best" algorithm from those available in the integrity object. - -If `opts.pickAlgorithm` is provided, it will be passed two algorithms as -arguments. ssri will prioritize whichever of the two algorithms is returned by -this function. Note that the function may be called multiple times, and it -**must** return one of the two algorithms provided. By default, ssri will make -a best-effort to pick the strongest/most reliable of the given algorithms. It -may intentionally deprioritize algorithms with known vulnerabilities. - -##### Example - -```javascript -ssri.parse('sha1-WEakDigEST sha512-yzd8ELD1piyANiWnmdnpCL5F52f10UfUdEkHywVZeqTt0ymgrxR63Qz0GB7TKPoeeZQmWCaz7T1').pickAlgorithm() // sha512 -``` - -#### <a name="integrity-hex-digest"></a> `> Integrity#hexDigest() -> String` - -`Integrity` is assumed to be either a single-hash `Integrity` instance, or a -`Hash` instance. Returns its `digest`, converted to a hex representation of the -base64 data. - -##### Example - -```javascript -ssri.parse('sha1-deadbeef').hexDigest() // '75e69d6de79f' -``` - -#### <a name="from-hex"></a> `> ssri.fromHex(hexDigest, algorithm, [opts]) -> Integrity` - -Creates an `Integrity` object with a single entry, based on a hex-formatted -hash. This is a utility function to help convert existing shasums to the -Integrity format, and is roughly equivalent to something like: - -```javascript -algorithm + '-' + Buffer.from(hexDigest, 'hex').toString('base64') -``` - -`opts.options` may optionally be passed in: it must be an array of option -strings that will be added to all generated integrity hashes generated by -`fromData`. This is a loosely-specified feature of SRIs, and currently has no -specified semantics besides being `?`-separated. Use at your own risk, and -probably avoid if your integrity strings are meant to be used with browsers. - -If `opts.strict` is true, the integrity object will be created using strict -parsing rules. See [`ssri.parse`](#parse). - -If `opts.single` is true, a single `Hash` object will be returned. - -##### Example - -```javascript -ssri.fromHex('75e69d6de79f', 'sha1').toString() // 'sha1-deadbeef' -``` - -#### <a name="from-data"></a> `> ssri.fromData(data, [opts]) -> Integrity` - -Creates an `Integrity` object from either string or `Buffer` data, calculating -all the requested hashes and adding any specified options to the object. - -`opts.algorithms` determines which algorithms to generate hashes for. All -results will be included in a single `Integrity` object. The default value for -`opts.algorithms` is `['sha512']`. All algorithm strings must be hashes listed -in `crypto.getHashes()` for the host Node.js platform. - -`opts.options` may optionally be passed in: it must be an array of option -strings that will be added to all generated integrity hashes generated by -`fromData`. This is a loosely-specified feature of SRIs, and currently has no -specified semantics besides being `?`-separated. Use at your own risk, and -probably avoid if your integrity strings are meant to be used with browsers. - -If `opts.strict` is true, the integrity object will be created using strict -parsing rules. See [`ssri.parse`](#parse). - -##### Example - -```javascript -const integrityObj = ssri.fromData('foobarbaz', { - algorithms: ['sha256', 'sha384', 'sha512'] -}) -integrity.toString('\n') -// -> -// sha256-l981iLWj8kurw4UbNy8Lpxqdzd7UOxS50Glhv8FwfZ0= -// sha384-irnCxQ0CfQhYGlVAUdwTPC9bF3+YWLxlaDGM4xbYminxpbXEq+D+2GCEBTxcjES9 -// sha512-yzd8ELD1piyANiWnmdnpCL5F52f10UfUdEkHywVZeqTt0ymgrxR63Qz0GB7TKPoeeZQmWCaz7T1+9vBnypkYWg== -``` - -#### <a name="from-stream"></a> `> ssri.fromStream(stream, [opts]) -> Promise<Integrity>` - -Returns a Promise of an Integrity object calculated by reading data from -a given `stream`. - -It accepts both `opts.algorithms` and `opts.options`, which are documented as -part of [`ssri.fromData`](#from-data). - -Additionally, `opts.Promise` may be passed in to inject a Promise library of -choice. By default, ssri will use Node's built-in Promises. - -If `opts.strict` is true, the integrity object will be created using strict -parsing rules. See [`ssri.parse`](#parse). - -##### Example - -```javascript -ssri.fromStream(fs.createReadStream('index.js'), { - algorithms: ['sha1', 'sha512'] -}).then(integrity => { - return ssri.checkStream(fs.createReadStream('index.js'), integrity) -}) // succeeds -``` - -#### <a name="create"></a> `> ssri.create([opts]) -> <Hash>` - -Returns a Hash object with `update(<Buffer or string>[,enc])` and `digest()` methods. - - -The Hash object provides the same methods as [crypto class Hash](https://nodejs.org/dist/latest-v6.x/docs/api/crypto.html#crypto_class_hash). -`digest()` accepts no arguments and returns an Integrity object calculated by reading data from -calls to update. - -It accepts both `opts.algorithms` and `opts.options`, which are documented as -part of [`ssri.fromData`](#from-data). - -If `opts.strict` is true, the integrity object will be created using strict -parsing rules. See [`ssri.parse`](#parse). - -##### Example - -```javascript -const integrity = ssri.create().update('foobarbaz').digest() -integrity.toString() -// -> -// sha512-yzd8ELD1piyANiWnmdnpCL5F52f10UfUdEkHywVZeqTt0ymgrxR63Qz0GB7TKPoeeZQmWCaz7T1+9vBnypkYWg== -``` - -#### <a name="check-data"></a> `> ssri.checkData(data, sri, [opts]) -> Hash|false` - -Verifies `data` integrity against an `sri` argument. `data` may be either a -`String` or a `Buffer`, and `sri` can be any subresource integrity -representation that [`ssri.parse`](#parse) can handle. - -If verification succeeds, `checkData` will return the name of the algorithm that -was used for verification (a truthy value). Otherwise, it will return `false`. - -If `opts.pickAlgorithm` is provided, it will be used by -[`Integrity#pickAlgorithm`](#integrity-pick-algorithm) when deciding which of -the available digests to match against. - -If `opts.error` is true, and verification fails, `checkData` will throw either -an `EBADSIZE` or an `EINTEGRITY` error, instead of just returning false. - -##### Example - -```javascript -const data = fs.readFileSync('index.js') -ssri.checkData(data, ssri.fromData(data)) // -> 'sha512' -ssri.checkData(data, 'sha256-l981iLWj8kurw4UbNy8Lpxqdzd7UOxS50Glhv8FwfZ0') -ssri.checkData(data, 'sha1-BaDDigEST') // -> false -ssri.checkData(data, 'sha1-BaDDigEST', {error: true}) // -> Error! EINTEGRITY -``` - -#### <a name="check-stream"></a> `> ssri.checkStream(stream, sri, [opts]) -> Promise<Hash>` - -Verifies the contents of `stream` against an `sri` argument. `stream` will be -consumed in its entirety by this process. `sri` can be any subresource integrity -representation that [`ssri.parse`](#parse) can handle. - -`checkStream` will return a Promise that either resolves to the -`Hash` that succeeded verification, or, if the verification fails -or an error happens with `stream`, the Promise will be rejected. - -If the Promise is rejected because verification failed, the returned error will -have `err.code` as `EINTEGRITY`. - -If `opts.size` is given, it will be matched against the stream size. An error -with `err.code` `EBADSIZE` will be returned by a rejection if the expected size -and actual size fail to match. - -If `opts.pickAlgorithm` is provided, it will be used by -[`Integrity#pickAlgorithm`](#integrity-pick-algorithm) when deciding which of -the available digests to match against. - -##### Example - -```javascript -const integrity = ssri.fromData(fs.readFileSync('index.js')) - -ssri.checkStream( - fs.createReadStream('index.js'), - integrity -) -// -> -// Promise<{ -// algorithm: 'sha512', -// digest: 'sha512-yzd8ELD1piyANiWnmdnpCL5F52f10UfUdEkHywVZeqTt0ymgrxR63Qz0GB7TKPoeeZQmWCaz7T1' -// }> - -ssri.checkStream( - fs.createReadStream('index.js'), - 'sha256-l981iLWj8kurw4UbNy8Lpxqdzd7UOxS50Glhv8FwfZ0' -) // -> Promise<Hash> - -ssri.checkStream( - fs.createReadStream('index.js'), - 'sha1-BaDDigEST' -) // -> Promise<Error<{code: 'EINTEGRITY'}>> -``` - -#### <a name="integrity-stream"></a> `> integrityStream([opts]) -> IntegrityStream` - -Returns a `Transform` stream that data can be piped through in order to generate -and optionally check data integrity for piped data. When the stream completes -successfully, it emits `size` and `integrity` events, containing the total -number of bytes processed and a calculated `Integrity` instance based on stream -data, respectively. - -If `opts.algorithms` is passed in, the listed algorithms will be calculated when -generating the final `Integrity` instance. The default is `['sha512']`. - -If `opts.single` is passed in, a single `Hash` instance will be returned. - -If `opts.integrity` is passed in, it should be an `integrity` value understood -by [`parse`](#parse) that the stream will check the data against. If -verification succeeds, the integrity stream will emit a `verified` event whose -value is a single `Hash` object that is the one that succeeded verification. If -verification fails, the stream will error with an `EINTEGRITY` error code. - -If `opts.size` is given, it will be matched against the stream size. An error -with `err.code` `EBADSIZE` will be emitted by the stream if the expected size -and actual size fail to match. - -If `opts.pickAlgorithm` is provided, it will be passed two algorithms as -arguments. ssri will prioritize whichever of the two algorithms is returned by -this function. Note that the function may be called multiple times, and it -**must** return one of the two algorithms provided. By default, ssri will make -a best-effort to pick the strongest/most reliable of the given algorithms. It -may intentionally deprioritize algorithms with known vulnerabilities. - -##### Example - -```javascript -const integrity = ssri.fromData(fs.readFileSync('index.js')) -fs.createReadStream('index.js') -.pipe(ssri.integrityStream({integrity})) -``` diff --git a/node_modules/make-fetch-happen/node_modules/ssri/index.js b/node_modules/make-fetch-happen/node_modules/ssri/index.js deleted file mode 100644 index e102892b0..000000000 --- a/node_modules/make-fetch-happen/node_modules/ssri/index.js +++ /dev/null @@ -1,395 +0,0 @@ -'use strict' - -const crypto = require('crypto') -const figgyPudding = require('figgy-pudding') -const Transform = require('stream').Transform - -const SPEC_ALGORITHMS = ['sha256', 'sha384', 'sha512'] - -const BASE64_REGEX = /^[a-z0-9+/]+(?:=?=?)$/i -const SRI_REGEX = /^([^-]+)-([^?]+)([?\S*]*)$/ -const STRICT_SRI_REGEX = /^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/ -const VCHAR_REGEX = /^[\x21-\x7E]+$/ - -const SsriOpts = figgyPudding({ - algorithms: {default: ['sha512']}, - error: {default: false}, - integrity: {}, - options: {default: []}, - pickAlgorithm: {default: () => getPrioritizedHash}, - Promise: {default: () => Promise}, - sep: {default: ' '}, - single: {default: false}, - size: {}, - strict: {default: false} -}) - -class Hash { - get isHash () { return true } - constructor (hash, opts) { - opts = SsriOpts(opts) - const strict = !!opts.strict - this.source = hash.trim() - // 3.1. Integrity metadata (called "Hash" by ssri) - // https://w3c.github.io/webappsec-subresource-integrity/#integrity-metadata-description - const match = this.source.match( - strict - ? STRICT_SRI_REGEX - : SRI_REGEX - ) - if (!match) { return } - if (strict && !SPEC_ALGORITHMS.some(a => a === match[1])) { return } - this.algorithm = match[1] - this.digest = match[2] - - const rawOpts = match[3] - this.options = rawOpts ? rawOpts.slice(1).split('?') : [] - } - hexDigest () { - return this.digest && Buffer.from(this.digest, 'base64').toString('hex') - } - toJSON () { - return this.toString() - } - toString (opts) { - opts = SsriOpts(opts) - if (opts.strict) { - // Strict mode enforces the standard as close to the foot of the - // letter as it can. - if (!( - // The spec has very restricted productions for algorithms. - // https://www.w3.org/TR/CSP2/#source-list-syntax - SPEC_ALGORITHMS.some(x => x === this.algorithm) && - // Usually, if someone insists on using a "different" base64, we - // leave it as-is, since there's multiple standards, and the - // specified is not a URL-safe variant. - // https://www.w3.org/TR/CSP2/#base64_value - this.digest.match(BASE64_REGEX) && - // Option syntax is strictly visual chars. - // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-option-expression - // https://tools.ietf.org/html/rfc5234#appendix-B.1 - (this.options || []).every(opt => opt.match(VCHAR_REGEX)) - )) { - return '' - } - } - const options = this.options && this.options.length - ? `?${this.options.join('?')}` - : '' - return `${this.algorithm}-${this.digest}${options}` - } -} - -class Integrity { - get isIntegrity () { return true } - toJSON () { - return this.toString() - } - toString (opts) { - opts = SsriOpts(opts) - let sep = opts.sep || ' ' - if (opts.strict) { - // Entries must be separated by whitespace, according to spec. - sep = sep.replace(/\S+/g, ' ') - } - return Object.keys(this).map(k => { - return this[k].map(hash => { - return Hash.prototype.toString.call(hash, opts) - }).filter(x => x.length).join(sep) - }).filter(x => x.length).join(sep) - } - concat (integrity, opts) { - opts = SsriOpts(opts) - const other = typeof integrity === 'string' - ? integrity - : stringify(integrity, opts) - return parse(`${this.toString(opts)} ${other}`, opts) - } - hexDigest () { - return parse(this, {single: true}).hexDigest() - } - match (integrity, opts) { - opts = SsriOpts(opts) - const other = parse(integrity, opts) - const algo = other.pickAlgorithm(opts) - return ( - this[algo] && - other[algo] && - this[algo].find(hash => - other[algo].find(otherhash => - hash.digest === otherhash.digest - ) - ) - ) || false - } - pickAlgorithm (opts) { - opts = SsriOpts(opts) - const pickAlgorithm = opts.pickAlgorithm - const keys = Object.keys(this) - if (!keys.length) { - throw new Error(`No algorithms available for ${ - JSON.stringify(this.toString()) - }`) - } - return keys.reduce((acc, algo) => { - return pickAlgorithm(acc, algo) || acc - }) - } -} - -module.exports.parse = parse -function parse (sri, opts) { - opts = SsriOpts(opts) - if (typeof sri === 'string') { - return _parse(sri, opts) - } else if (sri.algorithm && sri.digest) { - const fullSri = new Integrity() - fullSri[sri.algorithm] = [sri] - return _parse(stringify(fullSri, opts), opts) - } else { - return _parse(stringify(sri, opts), opts) - } -} - -function _parse (integrity, opts) { - // 3.4.3. Parse metadata - // https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata - if (opts.single) { - return new Hash(integrity, opts) - } - return integrity.trim().split(/\s+/).reduce((acc, string) => { - const hash = new Hash(string, opts) - if (hash.algorithm && hash.digest) { - const algo = hash.algorithm - if (!acc[algo]) { acc[algo] = [] } - acc[algo].push(hash) - } - return acc - }, new Integrity()) -} - -module.exports.stringify = stringify -function stringify (obj, opts) { - opts = SsriOpts(opts) - if (obj.algorithm && obj.digest) { - return Hash.prototype.toString.call(obj, opts) - } else if (typeof obj === 'string') { - return stringify(parse(obj, opts), opts) - } else { - return Integrity.prototype.toString.call(obj, opts) - } -} - -module.exports.fromHex = fromHex -function fromHex (hexDigest, algorithm, opts) { - opts = SsriOpts(opts) - const optString = opts.options && opts.options.length - ? `?${opts.options.join('?')}` - : '' - return parse( - `${algorithm}-${ - Buffer.from(hexDigest, 'hex').toString('base64') - }${optString}`, opts - ) -} - -module.exports.fromData = fromData -function fromData (data, opts) { - opts = SsriOpts(opts) - const algorithms = opts.algorithms - const optString = opts.options && opts.options.length - ? `?${opts.options.join('?')}` - : '' - return algorithms.reduce((acc, algo) => { - const digest = crypto.createHash(algo).update(data).digest('base64') - const hash = new Hash( - `${algo}-${digest}${optString}`, - opts - ) - if (hash.algorithm && hash.digest) { - const algo = hash.algorithm - if (!acc[algo]) { acc[algo] = [] } - acc[algo].push(hash) - } - return acc - }, new Integrity()) -} - -module.exports.fromStream = fromStream -function fromStream (stream, opts) { - opts = SsriOpts(opts) - const P = opts.Promise || Promise - const istream = integrityStream(opts) - return new P((resolve, reject) => { - stream.pipe(istream) - stream.on('error', reject) - istream.on('error', reject) - let sri - istream.on('integrity', s => { sri = s }) - istream.on('end', () => resolve(sri)) - istream.on('data', () => {}) - }) -} - -module.exports.checkData = checkData -function checkData (data, sri, opts) { - opts = SsriOpts(opts) - sri = parse(sri, opts) - if (!Object.keys(sri).length) { - if (opts.error) { - throw Object.assign( - new Error('No valid integrity hashes to check against'), { - code: 'EINTEGRITY' - } - ) - } else { - return false - } - } - const algorithm = sri.pickAlgorithm(opts) - const digest = crypto.createHash(algorithm).update(data).digest('base64') - const newSri = parse({algorithm, digest}) - const match = newSri.match(sri, opts) - if (match || !opts.error) { - return match - } else if (typeof opts.size === 'number' && (data.length !== opts.size)) { - const err = new Error(`data size mismatch when checking ${sri}.\n Wanted: ${opts.size}\n Found: ${data.length}`) - err.code = 'EBADSIZE' - err.found = data.length - err.expected = opts.size - err.sri = sri - throw err - } else { - const err = new Error(`Integrity checksum failed when using ${algorithm}: Wanted ${sri}, but got ${newSri}. (${data.length} bytes)`) - err.code = 'EINTEGRITY' - err.found = newSri - err.expected = sri - err.algorithm = algorithm - err.sri = sri - throw err - } -} - -module.exports.checkStream = checkStream -function checkStream (stream, sri, opts) { - opts = SsriOpts(opts) - const P = opts.Promise || Promise - const checker = integrityStream(opts.concat({ - integrity: sri - })) - return new P((resolve, reject) => { - stream.pipe(checker) - stream.on('error', reject) - checker.on('error', reject) - let sri - checker.on('verified', s => { sri = s }) - checker.on('end', () => resolve(sri)) - checker.on('data', () => {}) - }) -} - -module.exports.integrityStream = integrityStream -function integrityStream (opts) { - opts = SsriOpts(opts) - // For verification - const sri = opts.integrity && parse(opts.integrity, opts) - const goodSri = sri && Object.keys(sri).length - const algorithm = goodSri && sri.pickAlgorithm(opts) - const digests = goodSri && sri[algorithm] - // Calculating stream - const algorithms = Array.from( - new Set(opts.algorithms.concat(algorithm ? [algorithm] : [])) - ) - const hashes = algorithms.map(crypto.createHash) - let streamSize = 0 - const stream = new Transform({ - transform (chunk, enc, cb) { - streamSize += chunk.length - hashes.forEach(h => h.update(chunk, enc)) - cb(null, chunk, enc) - } - }).on('end', () => { - const optString = (opts.options && opts.options.length) - ? `?${opts.options.join('?')}` - : '' - const newSri = parse(hashes.map((h, i) => { - return `${algorithms[i]}-${h.digest('base64')}${optString}` - }).join(' '), opts) - // Integrity verification mode - const match = goodSri && newSri.match(sri, opts) - if (typeof opts.size === 'number' && streamSize !== opts.size) { - const err = new Error(`stream size mismatch when checking ${sri}.\n Wanted: ${opts.size}\n Found: ${streamSize}`) - err.code = 'EBADSIZE' - err.found = streamSize - err.expected = opts.size - err.sri = sri - stream.emit('error', err) - } else if (opts.integrity && !match) { - const err = new Error(`${sri} integrity checksum failed when using ${algorithm}: wanted ${digests} but got ${newSri}. (${streamSize} bytes)`) - err.code = 'EINTEGRITY' - err.found = newSri - err.expected = digests - err.algorithm = algorithm - err.sri = sri - stream.emit('error', err) - } else { - stream.emit('size', streamSize) - stream.emit('integrity', newSri) - match && stream.emit('verified', match) - } - }) - return stream -} - -module.exports.create = createIntegrity -function createIntegrity (opts) { - opts = SsriOpts(opts) - const algorithms = opts.algorithms - const optString = opts.options.length - ? `?${opts.options.join('?')}` - : '' - - const hashes = algorithms.map(crypto.createHash) - - return { - update: function (chunk, enc) { - hashes.forEach(h => h.update(chunk, enc)) - return this - }, - digest: function (enc) { - const integrity = algorithms.reduce((acc, algo) => { - const digest = hashes.shift().digest('base64') - const hash = new Hash( - `${algo}-${digest}${optString}`, - opts - ) - if (hash.algorithm && hash.digest) { - const algo = hash.algorithm - if (!acc[algo]) { acc[algo] = [] } - acc[algo].push(hash) - } - return acc - }, new Integrity()) - - return integrity - } - } -} - -const NODE_HASHES = new Set(crypto.getHashes()) - -// This is a Best Effort™ at a reasonable priority for hash algos -const DEFAULT_PRIORITY = [ - 'md5', 'whirlpool', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', - // TODO - it's unclear _which_ of these Node will actually use as its name - // for the algorithm, so we guesswork it based on the OpenSSL names. - 'sha3', - 'sha3-256', 'sha3-384', 'sha3-512', - 'sha3_256', 'sha3_384', 'sha3_512' -].filter(algo => NODE_HASHES.has(algo)) - -function getPrioritizedHash (algo1, algo2) { - return DEFAULT_PRIORITY.indexOf(algo1.toLowerCase()) >= DEFAULT_PRIORITY.indexOf(algo2.toLowerCase()) - ? algo1 - : algo2 -} diff --git a/node_modules/make-fetch-happen/node_modules/ssri/package.json b/node_modules/make-fetch-happen/node_modules/ssri/package.json deleted file mode 100644 index 1bcb8ae14..000000000 --- a/node_modules/make-fetch-happen/node_modules/ssri/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_from": "ssri@^6.0.0", - "_id": "ssri@6.0.1", - "_inBundle": false, - "_integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "_location": "/make-fetch-happen/ssri", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "ssri@^6.0.0", - "name": "ssri", - "escapedName": "ssri", - "rawSpec": "^6.0.0", - "saveSpec": null, - "fetchSpec": "^6.0.0" - }, - "_requiredBy": [ - "/make-fetch-happen" - ], - "_resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "_shasum": "2a3c41b28dd45b62b63676ecb74001265ae9edd8", - "_spec": "ssri@^6.0.0", - "_where": "/Users/claudiahdz/npm/cli/node_modules/make-fetch-happen", - "author": { - "name": "Kat Marchán", - "email": "kzm@sykosomatic.org" - }, - "bugs": { - "url": "https://github.com/zkat/ssri/issues" - }, - "bundleDependencies": false, - "config": { - "nyc": { - "exclude": [ - "node_modules/**", - "test/**" - ] - } - }, - "dependencies": { - "figgy-pudding": "^3.5.1" - }, - "deprecated": false, - "description": "Standard Subresource Integrity library -- parses, serializes, generates, and verifies integrity metadata according to the SRI spec.", - "devDependencies": { - "nyc": "^11.4.1", - "standard": "^10.0.3", - "standard-version": "^4.3.0", - "tap": "^11.1.0", - "weallbehave": "^1.2.0", - "weallcontribute": "^1.0.8" - }, - "files": [ - "*.js" - ], - "homepage": "https://github.com/zkat/ssri#readme", - "keywords": [ - "w3c", - "web", - "security", - "integrity", - "checksum", - "hashing", - "subresource integrity", - "sri", - "sri hash", - "sri string", - "sri generator", - "html" - ], - "license": "ISC", - "main": "index.js", - "name": "ssri", - "repository": { - "type": "git", - "url": "git+https://github.com/zkat/ssri.git" - }, - "scripts": { - "postrelease": "npm publish && git push --follow-tags", - "prerelease": "npm t", - "pretest": "standard", - "release": "standard-version -s", - "test": "tap -J --coverage test/*.js", - "update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'", - "update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'" - }, - "version": "6.0.1" -} diff --git a/node_modules/make-fetch-happen/package.json b/node_modules/make-fetch-happen/package.json deleted file mode 100644 index a2c7397bc..000000000 --- a/node_modules/make-fetch-happen/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_from": "make-fetch-happen@5.0.2", - "_id": "make-fetch-happen@5.0.2", - "_inBundle": false, - "_integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", - "_location": "/make-fetch-happen", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "make-fetch-happen@5.0.2", - "name": "make-fetch-happen", - "escapedName": "make-fetch-happen", - "rawSpec": "5.0.2", - "saveSpec": null, - "fetchSpec": "5.0.2" - }, - "_requiredBy": [ - "#USER", - "/", - "/npm-registry-fetch", - "/pacote" - ], - "_resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", - "_shasum": "aa8387104f2687edca01c8687ee45013d02d19bd", - "_spec": "make-fetch-happen@5.0.2", - "_where": "/Users/claudiahdz/npm/cli", - "author": { - "name": "Kat Marchán", - "email": "kzm@zkat.tech" - }, - "bugs": { - "url": "https://github.com/zkat/make-fetch-happen/issues" - }, - "bundleDependencies": false, - "dependencies": { - "agentkeepalive": "^3.4.1", - "cacache": "^12.0.0", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" - }, - "deprecated": false, - "description": "Opinionated, caching, retrying fetch client", - "devDependencies": { - "bluebird": "^3.5.1", - "mkdirp": "^0.5.1", - "nock": "^9.2.3", - "npmlog": "^4.1.2", - "require-inject": "^1.4.2", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.1", - "standard": "^11.0.1", - "standard-version": "^4.3.0", - "tacks": "^1.2.6", - "tap": "^12.7.0", - "weallbehave": "^1.0.0", - "weallcontribute": "^1.0.7" - }, - "files": [ - "*.js", - "lib" - ], - "homepage": "https://github.com/zkat/make-fetch-happen#readme", - "keywords": [ - "http", - "request", - "fetch", - "mean girls", - "caching", - "cache", - "subresource integrity" - ], - "license": "ISC", - "main": "index.js", - "name": "make-fetch-happen", - "repository": { - "type": "git", - "url": "git+https://github.com/zkat/make-fetch-happen.git" - }, - "scripts": { - "postrelease": "npm publish --tag=legacy && git push --follow-tags", - "prerelease": "npm t", - "pretest": "standard", - "release": "standard-version -s", - "test": "tap --coverage --nyc-arg=--all --timeout=35 -J test/*.js", - "update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'", - "update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'" - }, - "version": "5.0.2" -} diff --git a/node_modules/make-fetch-happen/warning.js b/node_modules/make-fetch-happen/warning.js deleted file mode 100644 index b8f13cf83..000000000 --- a/node_modules/make-fetch-happen/warning.js +++ /dev/null @@ -1,24 +0,0 @@ -const url = require('url') - -module.exports = setWarning - -function setWarning (reqOrRes, code, message, replace) { - // Warning = "Warning" ":" 1#warning-value - // warning-value = warn-code SP warn-agent SP warn-text [SP warn-date] - // warn-code = 3DIGIT - // warn-agent = ( host [ ":" port ] ) | pseudonym - // ; the name or pseudonym of the server adding - // ; the Warning header, for use in debugging - // warn-text = quoted-string - // warn-date = <"> HTTP-date <"> - // (https://tools.ietf.org/html/rfc2616#section-14.46) - const host = url.parse(reqOrRes.url).host - const jsonMessage = JSON.stringify(message) - const jsonDate = JSON.stringify(new Date().toUTCString()) - const header = replace ? 'set' : 'append' - - reqOrRes.headers[header]( - 'Warning', - `${code} ${host} ${jsonMessage} ${jsonDate}` - ) -} |