fetch-json-cache 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["get.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport get from 'get-remote';\n\nimport update from './update.js';\n\ninterface GetError {\n code?: string;\n}\n\ninterface GetHeaders {\n etag?: string;\n}\n\nexport default function getCache(endpoint, callback) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n fs.readFile(fullPath, (err, contents) => {\n // doesn't exist so create\n if (err) {\n update.call(this, endpoint, (err, json) => {\n err ? callback(err) : callback(null, json);\n });\n }\n // check existing if etag changed and if so, recache\n else {\n const record = JSON.parse(contents.toString());\n get(endpoint).head((err, res) => {\n // not accessible\n if (err) {\n if ((err as GetError).code === 'ENOTFOUND' || err.message.indexOf('routines:SSL23_GET_SERVER_HELLO') >= 0) return callback(null, record.body);\n return callback(err);\n }\n if ((res.headers as GetHeaders).etag === record.headers.etag) return callback(null, record.body);\n update.call(this, endpoint, (err, json) => {\n err ? callback(err) : callback(null, json);\n });\n });\n }\n });\n}\n"],"names":["getCache","endpoint","callback","fullPath","path","join","cacheDirectory","options","hash","fs","readFile","err","contents","update","call","json","record","JSON","parse","toString","get","head","res","code","message","indexOf","body","headers","etag"],"mappings":";;;;+BAcA;;;eAAwBA;;;yDAdT;2DACE;gEACD;6DAEG;;;;;;AAUJ,SAASA,SAASC,QAAQ,EAAEC,QAAQ;;IACjD,IAAMC,WAAWC,aAAI,CAACC,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,AAAC,GAA8B,OAA5B,IAAI,CAACC,OAAO,CAACC,IAAI,CAACP,WAAU;IAC/EQ,WAAE,CAACC,QAAQ,CAACP,UAAU,SAACQ,KAAKC;QAC1B,0BAA0B;QAC1B,IAAID,KAAK;YACPE,eAAM,CAACC,IAAI,QAAOb,UAAU,SAACU,KAAKI;gBAChCJ,MAAMT,SAASS,OAAOT,SAAS,MAAMa;YACvC;QACF,OAEK;YACH,IAAMC,SAASC,KAAKC,KAAK,CAACN,SAASO,QAAQ;YAC3CC,IAAAA,kBAAG,EAACnB,UAAUoB,IAAI,CAAC,SAACV,KAAKW;gBACvB,iBAAiB;gBACjB,IAAIX,KAAK;oBACP,IAAI,AAACA,IAAiBY,IAAI,KAAK,eAAeZ,IAAIa,OAAO,CAACC,OAAO,CAAC,sCAAsC,GAAG,OAAOvB,SAAS,MAAMc,OAAOU,IAAI;oBAC5I,OAAOxB,SAASS;gBAClB;gBACA,IAAI,AAACW,IAAIK,OAAO,CAAgBC,IAAI,KAAKZ,OAAOW,OAAO,CAACC,IAAI,EAAE,OAAO1B,SAAS,MAAMc,OAAOU,IAAI;gBAC/Fb,eAAM,CAACC,IAAI,QAAOb,UAAU,SAACU,KAAKI;oBAChCJ,MAAMT,SAASS,OAAOT,SAAS,MAAMa;gBACvC;YACF;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/fetch-json-cache/src/get.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport get from 'get-remote';\n\nimport update from './update.js';\n\ninterface GetError {\n code?: string;\n}\n\ninterface GetHeaders {\n etag?: string;\n}\n\nexport default function getCache(endpoint, callback) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n fs.readFile(fullPath, (err, contents) => {\n // doesn't exist so create\n if (err) {\n update.call(this, endpoint, (err, json) => {\n err ? callback(err) : callback(null, json);\n });\n }\n // check existing if etag changed and if so, recache\n else {\n const record = JSON.parse(contents.toString());\n get(endpoint).head((err, res) => {\n // not accessible\n if (err) {\n if ((err as GetError).code === 'ENOTFOUND' || err.message.indexOf('routines:SSL23_GET_SERVER_HELLO') >= 0) return callback(null, record.body);\n return callback(err);\n }\n if ((res.headers as GetHeaders).etag === record.headers.etag) return callback(null, record.body);\n update.call(this, endpoint, (err, json) => {\n err ? callback(err) : callback(null, json);\n });\n });\n }\n });\n}\n"],"names":["getCache","endpoint","callback","fullPath","path","join","cacheDirectory","options","hash","fs","readFile","err","contents","update","call","json","record","JSON","parse","toString","get","head","res","code","message","indexOf","body","headers","etag"],"mappings":";;;;+BAcA;;;eAAwBA;;;yDAdT;2DACE;gEACD;6DAEG;;;;;;AAUJ,SAASA,SAASC,QAAQ,EAAEC,QAAQ;;IACjD,IAAMC,WAAWC,aAAI,CAACC,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,AAAC,GAA8B,OAA5B,IAAI,CAACC,OAAO,CAACC,IAAI,CAACP,WAAU;IAC/EQ,WAAE,CAACC,QAAQ,CAACP,UAAU,SAACQ,KAAKC;QAC1B,0BAA0B;QAC1B,IAAID,KAAK;YACPE,eAAM,CAACC,IAAI,QAAOb,UAAU,SAACU,KAAKI;gBAChCJ,MAAMT,SAASS,OAAOT,SAAS,MAAMa;YACvC;QACF,OAEK;YACH,IAAMC,SAASC,KAAKC,KAAK,CAACN,SAASO,QAAQ;YAC3CC,IAAAA,kBAAG,EAACnB,UAAUoB,IAAI,CAAC,SAACV,KAAKW;gBACvB,iBAAiB;gBACjB,IAAIX,KAAK;oBACP,IAAI,AAACA,IAAiBY,IAAI,KAAK,eAAeZ,IAAIa,OAAO,CAACC,OAAO,CAAC,sCAAsC,GAAG,OAAOvB,SAAS,MAAMc,OAAOU,IAAI;oBAC5I,OAAOxB,SAASS;gBAClB;gBACA,IAAI,AAACW,IAAIK,OAAO,CAAgBC,IAAI,KAAKZ,OAAOW,OAAO,CAACC,IAAI,EAAE,OAAO1B,SAAS,MAAMc,OAAOU,IAAI;gBAC/Fb,eAAM,CAACC,IAAI,QAAOb,UAAU,SAACU,KAAKI;oBAChCJ,MAAMT,SAASS,OAAOT,SAAS,MAAMa;gBACvC;YACF;QACF;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["getSync.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nexport default function getCacheAsync(endpoint) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n try {\n const contents = fs.readFileSync(fullPath, 'utf8');\n const record = JSON.parse(contents.toString());\n return record.body;\n } catch (_err) {\n return null;\n }\n}\n"],"names":["getCacheAsync","endpoint","fullPath","path","join","cacheDirectory","options","hash","contents","fs","readFileSync","record","JSON","parse","toString","body","_err"],"mappings":";;;;+BAGA;;;eAAwBA;;;yDAHT;2DACE;;;;;;AAEF,SAASA,cAAcC,QAAQ;IAC5C,IAAMC,WAAWC,aAAI,CAACC,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,AAAC,GAA8B,OAA5B,IAAI,CAACC,OAAO,CAACC,IAAI,CAACN,WAAU;IAC/E,IAAI;QACF,IAAMO,WAAWC,WAAE,CAACC,YAAY,CAACR,UAAU;QAC3C,IAAMS,SAASC,KAAKC,KAAK,CAACL,SAASM,QAAQ;QAC3C,OAAOH,OAAOI,IAAI;IACpB,EAAE,OAAOC,MAAM;QACb,OAAO;IACT;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/fetch-json-cache/src/getSync.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nexport default function getCacheAsync(endpoint) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n try {\n const contents = fs.readFileSync(fullPath, 'utf8');\n const record = JSON.parse(contents.toString());\n return record.body;\n } catch (_err) {\n return null;\n }\n}\n"],"names":["getCacheAsync","endpoint","fullPath","path","join","cacheDirectory","options","hash","contents","fs","readFileSync","record","JSON","parse","toString","body","_err"],"mappings":";;;;+BAGA;;;eAAwBA;;;yDAHT;2DACE;;;;;;AAEF,SAASA,cAAcC,QAAQ;IAC5C,IAAMC,WAAWC,aAAI,CAACC,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,AAAC,GAA8B,OAA5B,IAAI,CAACC,OAAO,CAACC,IAAI,CAACN,WAAU;IAC/E,IAAI;QACF,IAAMO,WAAWC,WAAE,CAACC,YAAY,CAACR,UAAU;QAC3C,IAAMS,SAASC,KAAKC,KAAK,CAACL,SAASM,QAAQ;QAC3C,OAAOH,OAAOI,IAAI;IACpB,EAAE,OAAOC,MAAM;QACb,OAAO;IACT;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["hash.ts"],"sourcesContent":["import crypto from 'crypto';\n\nexport default function hash(data) {\n return crypto.createHash('md5').update(data).digest('hex');\n}\n"],"names":["hash","data","crypto","createHash","update","digest"],"mappings":";;;;+BAEA;;;eAAwBA;;;6DAFL;;;;;;AAEJ,SAASA,KAAKC,IAAI;IAC/B,OAAOC,eAAM,CAACC,UAAU,CAAC,OAAOC,MAAM,CAACH,MAAMI,MAAM,CAAC;AACtD"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/fetch-json-cache/src/hash.ts"],"sourcesContent":["import crypto from 'crypto';\n\nexport default function hash(data) {\n return crypto.createHash('md5').update(data).digest('hex');\n}\n"],"names":["hash","data","crypto","createHash","update","digest"],"mappings":";;;;+BAEA;;;eAAwBA;;;6DAFL;;;;;;AAEJ,SAASA,KAAKC,IAAI;IAC/B,OAAOC,eAAM,CAACC,UAAU,CAAC,OAAOC,MAAM,CAACH,MAAMI,MAAM,CAAC;AACtD"}
package/dist/cjs/index.js CHANGED
@@ -1,4 +1,3 @@
1
- // biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation>
2
1
  "use strict";
3
2
  Object.defineProperty(exports, "__esModule", {
4
3
  value: true
@@ -9,7 +8,6 @@ Object.defineProperty(exports, "default", {
9
8
  return Cache;
10
9
  }
11
10
  });
12
- var _pinkiepromise = /*#__PURE__*/ _interop_require_default(require("pinkie-promise"));
13
11
  var _rimraf2 = /*#__PURE__*/ _interop_require_default(require("rimraf2"));
14
12
  var _get = /*#__PURE__*/ _interop_require_default(require("./get.js"));
15
13
  var _getSync = /*#__PURE__*/ _interop_require_default(require("./getSync.js"));
@@ -52,7 +50,7 @@ var Cache = /*#__PURE__*/ function() {
52
50
  }
53
51
  options = options || {};
54
52
  if (typeof callback === 'function') return options.force ? _update.default.call(this, endpoint, callback) : _get.default.call(this, endpoint, callback);
55
- return new _pinkiepromise.default(function(resolve, reject) {
53
+ return new Promise(function(resolve, reject) {
56
54
  _this.get(endpoint, options, function(err, json) {
57
55
  err ? reject(err) : resolve(json);
58
56
  });
@@ -70,7 +68,7 @@ var Cache = /*#__PURE__*/ function() {
70
68
  _err = null; // ignore errors since it is fine to delete a directory that doesn't exist from a cache standpoint
71
69
  callback();
72
70
  });
73
- return new _pinkiepromise.default(function(resolve, reject) {
71
+ return new Promise(function(resolve, reject) {
74
72
  _this.clear(function(err) {
75
73
  err ? reject(err) : resolve(undefined);
76
74
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"sourcesContent":["// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation>\nimport Promise from 'pinkie-promise';\nimport rimraf2 from 'rimraf2';\n\nimport get from './get.js';\nimport getSync from './getSync.js';\nimport hash from './hash.js';\nimport update from './update.js';\n\nexport interface CacheOptions {\n hash?: (string: string) => string;\n}\n\nexport interface GetOptions {\n force?: boolean;\n}\nexport type GetCallback = (error?: Error, json?: object) => void;\nexport type ClearCallback = (error?: Error) => void;\n\nexport default class Cache {\n cacheDirectory: string;\n options: CacheOptions;\n\n constructor(cacheDirectory: string, options: CacheOptions = {}) {\n if (!(this instanceof Cache)) throw new Error('Cache needs to be called with new');\n if (!cacheDirectory) throw new Error('Cache needs cacheDirectory');\n this.cacheDirectory = cacheDirectory;\n this.options = options;\n if (!this.options.hash) this.options.hash = hash;\n }\n\n get(endpoint: string, options?: GetOptions | GetCallback, callback?: GetCallback): undefined | Promise<object | null> {\n if (typeof options === 'function') {\n callback = options as GetCallback;\n options = null;\n }\n options = options || {};\n\n if (typeof callback === 'function') return (options as GetOptions).force ? update.call(this, endpoint, callback) : get.call(this, endpoint, callback);\n return new Promise((resolve, reject) => {\n this.get(endpoint, options, (err, json) => {\n err ? reject(err) : resolve(json);\n });\n });\n }\n\n getSync(endpoint: string): object | null {\n // TODO: add async fetching\n return getSync.call(this, endpoint);\n }\n\n clear(callback?: ClearCallback): undefined | Promise<undefined> {\n if (typeof callback === 'function')\n return rimraf2(this.cacheDirectory, { disableGlob: true }, (_err) => {\n _err = null; // ignore errors since it is fine to delete a directory that doesn't exist from a cache standpoint\n callback();\n });\n return new Promise((resolve, reject) => {\n this.clear((err) => {\n err ? reject(err) : resolve(undefined);\n });\n });\n }\n}\n"],"names":["Cache","cacheDirectory","options","Error","hash","get","endpoint","callback","force","update","call","Promise","resolve","reject","err","json","getSync","clear","rimraf2","disableGlob","_err","undefined"],"mappings":"AAAA,sEAAsE;;;;;;;;eAmBjDA;;;oEAlBD;8DACA;0DAEJ;8DACI;2DACH;6DACE;;;;;;;;;;;;;;;;;;AAYJ,IAAA,AAAMA,sBAAN;;aAAMA,MAIPC,cAAsB;YAAEC,UAAAA,iEAAwB,CAAC;gCAJ1CF;QAKjB,IAAI,CAAE,AAAI,YAAJ,IAAI,EALOA,QAKa,MAAM,IAAIG,MAAM;QAC9C,IAAI,CAACF,gBAAgB,MAAM,IAAIE,MAAM;QACrC,IAAI,CAACF,cAAc,GAAGA;QACtB,IAAI,CAACC,OAAO,GAAGA;QACf,IAAI,CAAC,IAAI,CAACA,OAAO,CAACE,IAAI,EAAE,IAAI,CAACF,OAAO,CAACE,IAAI,GAAGA,aAAI;;iBAT/BJ;IAYnBK,OAAAA,GAaC,GAbDA,SAAAA,IAAIC,QAAgB,EAAEJ,OAAkC,EAAEK,QAAsB;;QAC9E,IAAI,OAAOL,YAAY,YAAY;YACjCK,WAAWL;YACXA,UAAU;QACZ;QACAA,UAAUA,WAAW,CAAC;QAEtB,IAAI,OAAOK,aAAa,YAAY,OAAO,AAACL,QAAuBM,KAAK,GAAGC,eAAM,CAACC,IAAI,CAAC,IAAI,EAAEJ,UAAUC,YAAYF,YAAG,CAACK,IAAI,CAAC,IAAI,EAAEJ,UAAUC;QAC5I,OAAO,IAAII,sBAAO,CAAC,SAACC,SAASC;YAC3B,MAAKR,GAAG,CAACC,UAAUJ,SAAS,SAACY,KAAKC;gBAChCD,MAAMD,OAAOC,OAAOF,QAAQG;YAC9B;QACF;IACF;IAEAC,OAAAA,OAGC,GAHDA,SAAAA,QAAQV,QAAgB;QACtB,2BAA2B;QAC3B,OAAOU,gBAAO,CAACN,IAAI,CAAC,IAAI,EAAEJ;IAC5B;IAEAW,OAAAA,KAWC,GAXDA,SAAAA,MAAMV,QAAwB;;QAC5B,IAAI,OAAOA,aAAa,YACtB,OAAOW,IAAAA,gBAAO,EAAC,IAAI,CAACjB,cAAc,EAAE;YAAEkB,aAAa;QAAK,GAAG,SAACC;YAC1DA,OAAO,MAAM,kGAAkG;YAC/Gb;QACF;QACF,OAAO,IAAII,sBAAO,CAAC,SAACC,SAASC;YAC3B,MAAKI,KAAK,CAAC,SAACH;gBACVA,MAAMD,OAAOC,OAAOF,QAAQS;YAC9B;QACF;IACF;WA3CmBrB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/fetch-json-cache/src/index.ts"],"sourcesContent":["import rimraf2 from 'rimraf2';\n\nimport get from './get.js';\nimport getSync from './getSync.js';\nimport hash from './hash.js';\nimport update from './update.js';\n\nexport interface CacheOptions {\n hash?: (string: string) => string;\n}\n\nexport interface GetOptions {\n force?: boolean;\n}\nexport type GetCallback = (error?: Error, json?: object) => void;\nexport type ClearCallback = (error?: Error) => void;\n\nexport default class Cache {\n cacheDirectory: string;\n options: CacheOptions;\n\n constructor(cacheDirectory: string, options: CacheOptions = {}) {\n if (!(this instanceof Cache)) throw new Error('Cache needs to be called with new');\n if (!cacheDirectory) throw new Error('Cache needs cacheDirectory');\n this.cacheDirectory = cacheDirectory;\n this.options = options;\n if (!this.options.hash) this.options.hash = hash;\n }\n\n get(endpoint: string, options?: GetOptions | GetCallback, callback?: GetCallback): undefined | Promise<object | null> {\n if (typeof options === 'function') {\n callback = options as GetCallback;\n options = null;\n }\n options = options || {};\n\n if (typeof callback === 'function') return (options as GetOptions).force ? update.call(this, endpoint, callback) : get.call(this, endpoint, callback);\n return new Promise((resolve, reject) => {\n this.get(endpoint, options, (err, json) => {\n err ? reject(err) : resolve(json);\n });\n });\n }\n\n getSync(endpoint: string): object | null {\n // TODO: add async fetching\n return getSync.call(this, endpoint);\n }\n\n clear(callback?: ClearCallback): undefined | Promise<undefined> {\n if (typeof callback === 'function')\n return rimraf2(this.cacheDirectory, { disableGlob: true }, (_err) => {\n _err = null; // ignore errors since it is fine to delete a directory that doesn't exist from a cache standpoint\n callback();\n });\n return new Promise((resolve, reject) => {\n this.clear((err) => {\n err ? reject(err) : resolve(undefined);\n });\n });\n }\n}\n"],"names":["Cache","cacheDirectory","options","Error","hash","get","endpoint","callback","force","update","call","Promise","resolve","reject","err","json","getSync","clear","rimraf2","disableGlob","_err","undefined"],"mappings":";;;;;;;eAiBqBA;;;8DAjBD;0DAEJ;8DACI;2DACH;6DACE;;;;;;;;;;;;;;;;;;AAYJ,IAAA,AAAMA,sBAAN;;aAAMA,MAIPC,cAAsB;YAAEC,UAAAA,iEAAwB,CAAC;gCAJ1CF;QAKjB,IAAI,CAAE,AAAI,YAAJ,IAAI,EALOA,QAKa,MAAM,IAAIG,MAAM;QAC9C,IAAI,CAACF,gBAAgB,MAAM,IAAIE,MAAM;QACrC,IAAI,CAACF,cAAc,GAAGA;QACtB,IAAI,CAACC,OAAO,GAAGA;QACf,IAAI,CAAC,IAAI,CAACA,OAAO,CAACE,IAAI,EAAE,IAAI,CAACF,OAAO,CAACE,IAAI,GAAGA,aAAI;;iBAT/BJ;IAYnBK,OAAAA,GAaC,GAbDA,SAAAA,IAAIC,QAAgB,EAAEJ,OAAkC,EAAEK,QAAsB;;QAC9E,IAAI,OAAOL,YAAY,YAAY;YACjCK,WAAWL;YACXA,UAAU;QACZ;QACAA,UAAUA,WAAW,CAAC;QAEtB,IAAI,OAAOK,aAAa,YAAY,OAAO,AAACL,QAAuBM,KAAK,GAAGC,eAAM,CAACC,IAAI,CAAC,IAAI,EAAEJ,UAAUC,YAAYF,YAAG,CAACK,IAAI,CAAC,IAAI,EAAEJ,UAAUC;QAC5I,OAAO,IAAII,QAAQ,SAACC,SAASC;YAC3B,MAAKR,GAAG,CAACC,UAAUJ,SAAS,SAACY,KAAKC;gBAChCD,MAAMD,OAAOC,OAAOF,QAAQG;YAC9B;QACF;IACF;IAEAC,OAAAA,OAGC,GAHDA,SAAAA,QAAQV,QAAgB;QACtB,2BAA2B;QAC3B,OAAOU,gBAAO,CAACN,IAAI,CAAC,IAAI,EAAEJ;IAC5B;IAEAW,OAAAA,KAWC,GAXDA,SAAAA,MAAMV,QAAwB;;QAC5B,IAAI,OAAOA,aAAa,YACtB,OAAOW,IAAAA,gBAAO,EAAC,IAAI,CAACjB,cAAc,EAAE;YAAEkB,aAAa;QAAK,GAAG,SAACC;YAC1DA,OAAO,MAAM,kGAAkG;YAC/Gb;QACF;QACF,OAAO,IAAII,QAAQ,SAACC,SAASC;YAC3B,MAAKI,KAAK,CAAC,SAACH;gBACVA,MAAMD,OAAOC,OAAOF,QAAQS;YAC9B;QACF;IACF;WA3CmBrB"}
@@ -8,10 +8,13 @@ Object.defineProperty(exports, "default", {
8
8
  return update;
9
9
  }
10
10
  });
11
+ var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
11
12
  var _path = /*#__PURE__*/ _interop_require_default(require("path"));
12
13
  var _getremote = /*#__PURE__*/ _interop_require_default(require("get-remote"));
13
14
  var _mkdirpclassic = /*#__PURE__*/ _interop_require_default(require("mkdirp-classic"));
14
- var _writefileatomic = /*#__PURE__*/ _interop_require_default(require("write-file-atomic"));
15
+ var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
16
+ var _rimraf2 = /*#__PURE__*/ _interop_require_default(require("rimraf2"));
17
+ var _tempsuffix = /*#__PURE__*/ _interop_require_default(require("temp-suffix"));
15
18
  function _interop_require_default(obj) {
16
19
  return obj && obj.__esModule ? obj : {
17
20
  default: obj
@@ -27,8 +30,21 @@ function update(endpoint, callback) {
27
30
  headers: res.headers,
28
31
  body: res.body
29
32
  };
30
- (0, _writefileatomic.default)(fullPath, JSON.stringify(record), 'utf8', function(err) {
31
- err ? callback(err) : callback(null, record.body);
33
+ var tempFile = "".concat(fullPath, "-").concat((0, _tempsuffix.default)());
34
+ var queue = new _queuecb.default(1);
35
+ queue.defer(_fs.default.writeFile.bind(null, tempFile, JSON.stringify(record), 'utf8'));
36
+ queue.defer(function(cb) {
37
+ return (0, _rimraf2.default)(fullPath, {
38
+ disableGlob: true
39
+ }, cb.bind(null, null));
40
+ });
41
+ queue.defer(_fs.default.rename.bind(null, tempFile, fullPath));
42
+ queue.await(function(err) {
43
+ if (!err) return callback(null, record.body);
44
+ // cleanup the temp file if the operation failed
45
+ (0, _rimraf2.default)(tempFile, {
46
+ disableGlob: true
47
+ }, callback.bind(err));
32
48
  });
33
49
  });
34
50
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["update.ts"],"sourcesContent":["import path from 'path';\nimport get from 'get-remote';\nimport mkdirp from 'mkdirp-classic';\nimport writeFile from 'write-file-atomic';\n\nexport default function update(endpoint, callback) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n\n mkdirp(this.cacheDirectory, (err) => {\n if (err && err.code !== 'EEXIST') return callback(err);\n\n get(endpoint).json((err, res) => {\n if (err) return callback(err);\n\n const record = { headers: res.headers, body: res.body };\n writeFile(fullPath, JSON.stringify(record), 'utf8', (err) => {\n err ? callback(err) : callback(null, record.body);\n });\n });\n });\n}\n"],"names":["update","endpoint","callback","fullPath","path","join","cacheDirectory","options","hash","mkdirp","err","code","get","json","res","record","headers","body","writeFile","JSON","stringify"],"mappings":";;;;+BAKA;;;eAAwBA;;;2DALP;gEACD;oEACG;sEACG;;;;;;AAEP,SAASA,OAAOC,QAAQ,EAAEC,QAAQ;IAC/C,IAAMC,WAAWC,aAAI,CAACC,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,AAAC,GAA8B,OAA5B,IAAI,CAACC,OAAO,CAACC,IAAI,CAACP,WAAU;IAE/EQ,IAAAA,sBAAM,EAAC,IAAI,CAACH,cAAc,EAAE,SAACI;QAC3B,IAAIA,OAAOA,IAAIC,IAAI,KAAK,UAAU,OAAOT,SAASQ;QAElDE,IAAAA,kBAAG,EAACX,UAAUY,IAAI,CAAC,SAACH,KAAKI;YACvB,IAAIJ,KAAK,OAAOR,SAASQ;YAEzB,IAAMK,SAAS;gBAAEC,SAASF,IAAIE,OAAO;gBAAEC,MAAMH,IAAIG,IAAI;YAAC;YACtDC,IAAAA,wBAAS,EAACf,UAAUgB,KAAKC,SAAS,CAACL,SAAS,QAAQ,SAACL;gBACnDA,MAAMR,SAASQ,OAAOR,SAAS,MAAMa,OAAOE,IAAI;YAClD;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/fetch-json-cache/src/update.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport get from 'get-remote';\nimport mkdirp from 'mkdirp-classic';\nimport Queue from 'queue-cb';\nimport rimraf2 from 'rimraf2';\nimport tempSuffix from 'temp-suffix';\n\nexport default function update(endpoint, callback) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n\n mkdirp(this.cacheDirectory, (err) => {\n if (err && err.code !== 'EEXIST') return callback(err);\n\n get(endpoint).json((err, res) => {\n if (err) return callback(err);\n const record = { headers: res.headers, body: res.body };\n const tempFile = `${fullPath}-${tempSuffix()}`;\n\n const queue = new Queue(1);\n queue.defer(fs.writeFile.bind(null, tempFile, JSON.stringify(record), 'utf8'));\n queue.defer((cb) => rimraf2(fullPath, { disableGlob: true }, cb.bind(null, null)));\n queue.defer(fs.rename.bind(null, tempFile, fullPath));\n queue.await((err) => {\n if (!err) return callback(null, record.body);\n // cleanup the temp file if the operation failed\n rimraf2(tempFile, { disableGlob: true }, callback.bind(err));\n });\n });\n });\n}\n"],"names":["update","endpoint","callback","fullPath","path","join","cacheDirectory","options","hash","mkdirp","err","code","get","json","res","record","headers","body","tempFile","tempSuffix","queue","Queue","defer","fs","writeFile","bind","JSON","stringify","cb","rimraf2","disableGlob","rename","await"],"mappings":";;;;+BAQA;;;eAAwBA;;;yDART;2DACE;gEACD;oEACG;8DACD;8DACE;iEACG;;;;;;AAER,SAASA,OAAOC,QAAQ,EAAEC,QAAQ;IAC/C,IAAMC,WAAWC,aAAI,CAACC,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,AAAC,GAA8B,OAA5B,IAAI,CAACC,OAAO,CAACC,IAAI,CAACP,WAAU;IAE/EQ,IAAAA,sBAAM,EAAC,IAAI,CAACH,cAAc,EAAE,SAACI;QAC3B,IAAIA,OAAOA,IAAIC,IAAI,KAAK,UAAU,OAAOT,SAASQ;QAElDE,IAAAA,kBAAG,EAACX,UAAUY,IAAI,CAAC,SAACH,KAAKI;YACvB,IAAIJ,KAAK,OAAOR,SAASQ;YACzB,IAAMK,SAAS;gBAAEC,SAASF,IAAIE,OAAO;gBAAEC,MAAMH,IAAIG,IAAI;YAAC;YACtD,IAAMC,WAAW,AAAC,GAAcC,OAAZhB,UAAS,KAAgB,OAAbgB,IAAAA,mBAAU;YAE1C,IAAMC,QAAQ,IAAIC,gBAAK,CAAC;YACxBD,MAAME,KAAK,CAACC,WAAE,CAACC,SAAS,CAACC,IAAI,CAAC,MAAMP,UAAUQ,KAAKC,SAAS,CAACZ,SAAS;YACtEK,MAAME,KAAK,CAAC,SAACM;uBAAOC,IAAAA,gBAAO,EAAC1B,UAAU;oBAAE2B,aAAa;gBAAK,GAAGF,GAAGH,IAAI,CAAC,MAAM;;YAC3EL,MAAME,KAAK,CAACC,WAAE,CAACQ,MAAM,CAACN,IAAI,CAAC,MAAMP,UAAUf;YAC3CiB,MAAMY,KAAK,CAAC,SAACtB;gBACX,IAAI,CAACA,KAAK,OAAOR,SAAS,MAAMa,OAAOE,IAAI;gBAC3C,gDAAgD;gBAChDY,IAAAA,gBAAO,EAACX,UAAU;oBAAEY,aAAa;gBAAK,GAAG5B,SAASuB,IAAI,CAACf;YACzD;QACF;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["get.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport get from 'get-remote';\n\nimport update from './update.js';\n\ninterface GetError {\n code?: string;\n}\n\ninterface GetHeaders {\n etag?: string;\n}\n\nexport default function getCache(endpoint, callback) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n fs.readFile(fullPath, (err, contents) => {\n // doesn't exist so create\n if (err) {\n update.call(this, endpoint, (err, json) => {\n err ? callback(err) : callback(null, json);\n });\n }\n // check existing if etag changed and if so, recache\n else {\n const record = JSON.parse(contents.toString());\n get(endpoint).head((err, res) => {\n // not accessible\n if (err) {\n if ((err as GetError).code === 'ENOTFOUND' || err.message.indexOf('routines:SSL23_GET_SERVER_HELLO') >= 0) return callback(null, record.body);\n return callback(err);\n }\n if ((res.headers as GetHeaders).etag === record.headers.etag) return callback(null, record.body);\n update.call(this, endpoint, (err, json) => {\n err ? callback(err) : callback(null, json);\n });\n });\n }\n });\n}\n"],"names":["fs","path","get","update","getCache","endpoint","callback","fullPath","join","cacheDirectory","options","hash","readFile","err","contents","call","json","record","JSON","parse","toString","head","res","code","message","indexOf","body","headers","etag"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,SAAS,aAAa;AAE7B,OAAOC,YAAY,cAAc;AAUjC,eAAe,SAASC,SAASC,QAAQ,EAAEC,QAAQ;IACjD,MAAMC,WAAWN,KAAKO,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,GAAG,IAAI,CAACC,OAAO,CAACC,IAAI,CAACN,UAAU,KAAK,CAAC;IACrFL,GAAGY,QAAQ,CAACL,UAAU,CAACM,KAAKC;QAC1B,0BAA0B;QAC1B,IAAID,KAAK;YACPV,OAAOY,IAAI,CAAC,IAAI,EAAEV,UAAU,CAACQ,KAAKG;gBAChCH,MAAMP,SAASO,OAAOP,SAAS,MAAMU;YACvC;QACF,OAEK;YACH,MAAMC,SAASC,KAAKC,KAAK,CAACL,SAASM,QAAQ;YAC3ClB,IAAIG,UAAUgB,IAAI,CAAC,CAACR,KAAKS;gBACvB,iBAAiB;gBACjB,IAAIT,KAAK;oBACP,IAAI,AAACA,IAAiBU,IAAI,KAAK,eAAeV,IAAIW,OAAO,CAACC,OAAO,CAAC,sCAAsC,GAAG,OAAOnB,SAAS,MAAMW,OAAOS,IAAI;oBAC5I,OAAOpB,SAASO;gBAClB;gBACA,IAAI,AAACS,IAAIK,OAAO,CAAgBC,IAAI,KAAKX,OAAOU,OAAO,CAACC,IAAI,EAAE,OAAOtB,SAAS,MAAMW,OAAOS,IAAI;gBAC/FvB,OAAOY,IAAI,CAAC,IAAI,EAAEV,UAAU,CAACQ,KAAKG;oBAChCH,MAAMP,SAASO,OAAOP,SAAS,MAAMU;gBACvC;YACF;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/fetch-json-cache/src/get.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport get from 'get-remote';\n\nimport update from './update.js';\n\ninterface GetError {\n code?: string;\n}\n\ninterface GetHeaders {\n etag?: string;\n}\n\nexport default function getCache(endpoint, callback) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n fs.readFile(fullPath, (err, contents) => {\n // doesn't exist so create\n if (err) {\n update.call(this, endpoint, (err, json) => {\n err ? callback(err) : callback(null, json);\n });\n }\n // check existing if etag changed and if so, recache\n else {\n const record = JSON.parse(contents.toString());\n get(endpoint).head((err, res) => {\n // not accessible\n if (err) {\n if ((err as GetError).code === 'ENOTFOUND' || err.message.indexOf('routines:SSL23_GET_SERVER_HELLO') >= 0) return callback(null, record.body);\n return callback(err);\n }\n if ((res.headers as GetHeaders).etag === record.headers.etag) return callback(null, record.body);\n update.call(this, endpoint, (err, json) => {\n err ? callback(err) : callback(null, json);\n });\n });\n }\n });\n}\n"],"names":["fs","path","get","update","getCache","endpoint","callback","fullPath","join","cacheDirectory","options","hash","readFile","err","contents","call","json","record","JSON","parse","toString","head","res","code","message","indexOf","body","headers","etag"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,SAAS,aAAa;AAE7B,OAAOC,YAAY,cAAc;AAUjC,eAAe,SAASC,SAASC,QAAQ,EAAEC,QAAQ;IACjD,MAAMC,WAAWN,KAAKO,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,GAAG,IAAI,CAACC,OAAO,CAACC,IAAI,CAACN,UAAU,KAAK,CAAC;IACrFL,GAAGY,QAAQ,CAACL,UAAU,CAACM,KAAKC;QAC1B,0BAA0B;QAC1B,IAAID,KAAK;YACPV,OAAOY,IAAI,CAAC,IAAI,EAAEV,UAAU,CAACQ,KAAKG;gBAChCH,MAAMP,SAASO,OAAOP,SAAS,MAAMU;YACvC;QACF,OAEK;YACH,MAAMC,SAASC,KAAKC,KAAK,CAACL,SAASM,QAAQ;YAC3ClB,IAAIG,UAAUgB,IAAI,CAAC,CAACR,KAAKS;gBACvB,iBAAiB;gBACjB,IAAIT,KAAK;oBACP,IAAI,AAACA,IAAiBU,IAAI,KAAK,eAAeV,IAAIW,OAAO,CAACC,OAAO,CAAC,sCAAsC,GAAG,OAAOnB,SAAS,MAAMW,OAAOS,IAAI;oBAC5I,OAAOpB,SAASO;gBAClB;gBACA,IAAI,AAACS,IAAIK,OAAO,CAAgBC,IAAI,KAAKX,OAAOU,OAAO,CAACC,IAAI,EAAE,OAAOtB,SAAS,MAAMW,OAAOS,IAAI;gBAC/FvB,OAAOY,IAAI,CAAC,IAAI,EAAEV,UAAU,CAACQ,KAAKG;oBAChCH,MAAMP,SAASO,OAAOP,SAAS,MAAMU;gBACvC;YACF;QACF;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["getSync.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nexport default function getCacheAsync(endpoint) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n try {\n const contents = fs.readFileSync(fullPath, 'utf8');\n const record = JSON.parse(contents.toString());\n return record.body;\n } catch (_err) {\n return null;\n }\n}\n"],"names":["fs","path","getCacheAsync","endpoint","fullPath","join","cacheDirectory","options","hash","contents","readFileSync","record","JSON","parse","toString","body","_err"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AAExB,eAAe,SAASC,cAAcC,QAAQ;IAC5C,MAAMC,WAAWH,KAAKI,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,GAAG,IAAI,CAACC,OAAO,CAACC,IAAI,CAACL,UAAU,KAAK,CAAC;IACrF,IAAI;QACF,MAAMM,WAAWT,GAAGU,YAAY,CAACN,UAAU;QAC3C,MAAMO,SAASC,KAAKC,KAAK,CAACJ,SAASK,QAAQ;QAC3C,OAAOH,OAAOI,IAAI;IACpB,EAAE,OAAOC,MAAM;QACb,OAAO;IACT;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/fetch-json-cache/src/getSync.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nexport default function getCacheAsync(endpoint) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n try {\n const contents = fs.readFileSync(fullPath, 'utf8');\n const record = JSON.parse(contents.toString());\n return record.body;\n } catch (_err) {\n return null;\n }\n}\n"],"names":["fs","path","getCacheAsync","endpoint","fullPath","join","cacheDirectory","options","hash","contents","readFileSync","record","JSON","parse","toString","body","_err"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AAExB,eAAe,SAASC,cAAcC,QAAQ;IAC5C,MAAMC,WAAWH,KAAKI,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,GAAG,IAAI,CAACC,OAAO,CAACC,IAAI,CAACL,UAAU,KAAK,CAAC;IACrF,IAAI;QACF,MAAMM,WAAWT,GAAGU,YAAY,CAACN,UAAU;QAC3C,MAAMO,SAASC,KAAKC,KAAK,CAACJ,SAASK,QAAQ;QAC3C,OAAOH,OAAOI,IAAI;IACpB,EAAE,OAAOC,MAAM;QACb,OAAO;IACT;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["hash.ts"],"sourcesContent":["import crypto from 'crypto';\n\nexport default function hash(data) {\n return crypto.createHash('md5').update(data).digest('hex');\n}\n"],"names":["crypto","hash","data","createHash","update","digest"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAE5B,eAAe,SAASC,KAAKC,IAAI;IAC/B,OAAOF,OAAOG,UAAU,CAAC,OAAOC,MAAM,CAACF,MAAMG,MAAM,CAAC;AACtD"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/fetch-json-cache/src/hash.ts"],"sourcesContent":["import crypto from 'crypto';\n\nexport default function hash(data) {\n return crypto.createHash('md5').update(data).digest('hex');\n}\n"],"names":["crypto","hash","data","createHash","update","digest"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAE5B,eAAe,SAASC,KAAKC,IAAI;IAC/B,OAAOF,OAAOG,UAAU,CAAC,OAAOC,MAAM,CAACF,MAAMG,MAAM,CAAC;AACtD"}
@@ -1,5 +1,3 @@
1
- // biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation>
2
- import Promise from 'pinkie-promise';
3
1
  import rimraf2 from 'rimraf2';
4
2
  import get from './get.mjs';
5
3
  import getSync from './getSync.mjs';
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"sourcesContent":["// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation>\nimport Promise from 'pinkie-promise';\nimport rimraf2 from 'rimraf2';\n\nimport get from './get.js';\nimport getSync from './getSync.js';\nimport hash from './hash.js';\nimport update from './update.js';\n\nexport interface CacheOptions {\n hash?: (string: string) => string;\n}\n\nexport interface GetOptions {\n force?: boolean;\n}\nexport type GetCallback = (error?: Error, json?: object) => void;\nexport type ClearCallback = (error?: Error) => void;\n\nexport default class Cache {\n cacheDirectory: string;\n options: CacheOptions;\n\n constructor(cacheDirectory: string, options: CacheOptions = {}) {\n if (!(this instanceof Cache)) throw new Error('Cache needs to be called with new');\n if (!cacheDirectory) throw new Error('Cache needs cacheDirectory');\n this.cacheDirectory = cacheDirectory;\n this.options = options;\n if (!this.options.hash) this.options.hash = hash;\n }\n\n get(endpoint: string, options?: GetOptions | GetCallback, callback?: GetCallback): undefined | Promise<object | null> {\n if (typeof options === 'function') {\n callback = options as GetCallback;\n options = null;\n }\n options = options || {};\n\n if (typeof callback === 'function') return (options as GetOptions).force ? update.call(this, endpoint, callback) : get.call(this, endpoint, callback);\n return new Promise((resolve, reject) => {\n this.get(endpoint, options, (err, json) => {\n err ? reject(err) : resolve(json);\n });\n });\n }\n\n getSync(endpoint: string): object | null {\n // TODO: add async fetching\n return getSync.call(this, endpoint);\n }\n\n clear(callback?: ClearCallback): undefined | Promise<undefined> {\n if (typeof callback === 'function')\n return rimraf2(this.cacheDirectory, { disableGlob: true }, (_err) => {\n _err = null; // ignore errors since it is fine to delete a directory that doesn't exist from a cache standpoint\n callback();\n });\n return new Promise((resolve, reject) => {\n this.clear((err) => {\n err ? reject(err) : resolve(undefined);\n });\n });\n }\n}\n"],"names":["Promise","rimraf2","get","getSync","hash","update","Cache","endpoint","options","callback","force","call","resolve","reject","err","json","clear","cacheDirectory","disableGlob","_err","undefined","constructor","Error"],"mappings":"AAAA,sEAAsE;AACtE,OAAOA,aAAa,iBAAiB;AACrC,OAAOC,aAAa,UAAU;AAE9B,OAAOC,SAAS,WAAW;AAC3B,OAAOC,aAAa,eAAe;AACnC,OAAOC,UAAU,YAAY;AAC7B,OAAOC,YAAY,cAAc;AAYlB,IAAA,AAAMC,QAAN,MAAMA;IAYnBJ,IAAIK,QAAgB,EAAEC,OAAkC,EAAEC,QAAsB,EAAsC;QACpH,IAAI,OAAOD,YAAY,YAAY;YACjCC,WAAWD;YACXA,UAAU;QACZ;QACAA,UAAUA,WAAW,CAAC;QAEtB,IAAI,OAAOC,aAAa,YAAY,OAAO,AAACD,QAAuBE,KAAK,GAAGL,OAAOM,IAAI,CAAC,IAAI,EAAEJ,UAAUE,YAAYP,IAAIS,IAAI,CAAC,IAAI,EAAEJ,UAAUE;QAC5I,OAAO,IAAIT,QAAQ,CAACY,SAASC;YAC3B,IAAI,CAACX,GAAG,CAACK,UAAUC,SAAS,CAACM,KAAKC;gBAChCD,MAAMD,OAAOC,OAAOF,QAAQG;YAC9B;QACF;IACF;IAEAZ,QAAQI,QAAgB,EAAiB;QACvC,2BAA2B;QAC3B,OAAOJ,QAAQQ,IAAI,CAAC,IAAI,EAAEJ;IAC5B;IAEAS,MAAMP,QAAwB,EAAkC;QAC9D,IAAI,OAAOA,aAAa,YACtB,OAAOR,QAAQ,IAAI,CAACgB,cAAc,EAAE;YAAEC,aAAa;QAAK,GAAG,CAACC;YAC1DA,OAAO,MAAM,kGAAkG;YAC/GV;QACF;QACF,OAAO,IAAIT,QAAQ,CAACY,SAASC;YAC3B,IAAI,CAACG,KAAK,CAAC,CAACF;gBACVA,MAAMD,OAAOC,OAAOF,QAAQQ;YAC9B;QACF;IACF;IAvCAC,YAAYJ,cAAsB,EAAET,UAAwB,CAAC,CAAC,CAAE;QAC9D,IAAI,CAAE,CAAA,IAAI,YAAYF,KAAI,GAAI,MAAM,IAAIgB,MAAM;QAC9C,IAAI,CAACL,gBAAgB,MAAM,IAAIK,MAAM;QACrC,IAAI,CAACL,cAAc,GAAGA;QACtB,IAAI,CAACT,OAAO,GAAGA;QACf,IAAI,CAAC,IAAI,CAACA,OAAO,CAACJ,IAAI,EAAE,IAAI,CAACI,OAAO,CAACJ,IAAI,GAAGA;IAC9C;AAkCF;AA5CA,SAAqBE,mBA4CpB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/fetch-json-cache/src/index.ts"],"sourcesContent":["import rimraf2 from 'rimraf2';\n\nimport get from './get.js';\nimport getSync from './getSync.js';\nimport hash from './hash.js';\nimport update from './update.js';\n\nexport interface CacheOptions {\n hash?: (string: string) => string;\n}\n\nexport interface GetOptions {\n force?: boolean;\n}\nexport type GetCallback = (error?: Error, json?: object) => void;\nexport type ClearCallback = (error?: Error) => void;\n\nexport default class Cache {\n cacheDirectory: string;\n options: CacheOptions;\n\n constructor(cacheDirectory: string, options: CacheOptions = {}) {\n if (!(this instanceof Cache)) throw new Error('Cache needs to be called with new');\n if (!cacheDirectory) throw new Error('Cache needs cacheDirectory');\n this.cacheDirectory = cacheDirectory;\n this.options = options;\n if (!this.options.hash) this.options.hash = hash;\n }\n\n get(endpoint: string, options?: GetOptions | GetCallback, callback?: GetCallback): undefined | Promise<object | null> {\n if (typeof options === 'function') {\n callback = options as GetCallback;\n options = null;\n }\n options = options || {};\n\n if (typeof callback === 'function') return (options as GetOptions).force ? update.call(this, endpoint, callback) : get.call(this, endpoint, callback);\n return new Promise((resolve, reject) => {\n this.get(endpoint, options, (err, json) => {\n err ? reject(err) : resolve(json);\n });\n });\n }\n\n getSync(endpoint: string): object | null {\n // TODO: add async fetching\n return getSync.call(this, endpoint);\n }\n\n clear(callback?: ClearCallback): undefined | Promise<undefined> {\n if (typeof callback === 'function')\n return rimraf2(this.cacheDirectory, { disableGlob: true }, (_err) => {\n _err = null; // ignore errors since it is fine to delete a directory that doesn't exist from a cache standpoint\n callback();\n });\n return new Promise((resolve, reject) => {\n this.clear((err) => {\n err ? reject(err) : resolve(undefined);\n });\n });\n }\n}\n"],"names":["rimraf2","get","getSync","hash","update","Cache","endpoint","options","callback","force","call","Promise","resolve","reject","err","json","clear","cacheDirectory","disableGlob","_err","undefined","constructor","Error"],"mappings":"AAAA,OAAOA,aAAa,UAAU;AAE9B,OAAOC,SAAS,WAAW;AAC3B,OAAOC,aAAa,eAAe;AACnC,OAAOC,UAAU,YAAY;AAC7B,OAAOC,YAAY,cAAc;AAYlB,IAAA,AAAMC,QAAN,MAAMA;IAYnBJ,IAAIK,QAAgB,EAAEC,OAAkC,EAAEC,QAAsB,EAAsC;QACpH,IAAI,OAAOD,YAAY,YAAY;YACjCC,WAAWD;YACXA,UAAU;QACZ;QACAA,UAAUA,WAAW,CAAC;QAEtB,IAAI,OAAOC,aAAa,YAAY,OAAO,AAACD,QAAuBE,KAAK,GAAGL,OAAOM,IAAI,CAAC,IAAI,EAAEJ,UAAUE,YAAYP,IAAIS,IAAI,CAAC,IAAI,EAAEJ,UAAUE;QAC5I,OAAO,IAAIG,QAAQ,CAACC,SAASC;YAC3B,IAAI,CAACZ,GAAG,CAACK,UAAUC,SAAS,CAACO,KAAKC;gBAChCD,MAAMD,OAAOC,OAAOF,QAAQG;YAC9B;QACF;IACF;IAEAb,QAAQI,QAAgB,EAAiB;QACvC,2BAA2B;QAC3B,OAAOJ,QAAQQ,IAAI,CAAC,IAAI,EAAEJ;IAC5B;IAEAU,MAAMR,QAAwB,EAAkC;QAC9D,IAAI,OAAOA,aAAa,YACtB,OAAOR,QAAQ,IAAI,CAACiB,cAAc,EAAE;YAAEC,aAAa;QAAK,GAAG,CAACC;YAC1DA,OAAO,MAAM,kGAAkG;YAC/GX;QACF;QACF,OAAO,IAAIG,QAAQ,CAACC,SAASC;YAC3B,IAAI,CAACG,KAAK,CAAC,CAACF;gBACVA,MAAMD,OAAOC,OAAOF,QAAQQ;YAC9B;QACF;IACF;IAvCAC,YAAYJ,cAAsB,EAAEV,UAAwB,CAAC,CAAC,CAAE;QAC9D,IAAI,CAAE,CAAA,IAAI,YAAYF,KAAI,GAAI,MAAM,IAAIiB,MAAM;QAC9C,IAAI,CAACL,gBAAgB,MAAM,IAAIK,MAAM;QACrC,IAAI,CAACL,cAAc,GAAGA;QACtB,IAAI,CAACV,OAAO,GAAGA;QACf,IAAI,CAAC,IAAI,CAACA,OAAO,CAACJ,IAAI,EAAE,IAAI,CAACI,OAAO,CAACJ,IAAI,GAAGA;IAC9C;AAkCF;AA5CA,SAAqBE,mBA4CpB"}
@@ -1 +1 @@
1
- {"type":"module"}
1
+ {"type":"commonjs"}
@@ -1,7 +1,10 @@
1
+ import fs from 'fs';
1
2
  import path from 'path';
2
3
  import get from 'get-remote';
3
4
  import mkdirp from 'mkdirp-classic';
4
- import writeFile from 'write-file-atomic';
5
+ import Queue from 'queue-cb';
6
+ import rimraf2 from 'rimraf2';
7
+ import tempSuffix from 'temp-suffix';
5
8
  export default function update(endpoint, callback) {
6
9
  const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);
7
10
  mkdirp(this.cacheDirectory, (err)=>{
@@ -12,8 +15,19 @@ export default function update(endpoint, callback) {
12
15
  headers: res.headers,
13
16
  body: res.body
14
17
  };
15
- writeFile(fullPath, JSON.stringify(record), 'utf8', (err)=>{
16
- err ? callback(err) : callback(null, record.body);
18
+ const tempFile = `${fullPath}-${tempSuffix()}`;
19
+ const queue = new Queue(1);
20
+ queue.defer(fs.writeFile.bind(null, tempFile, JSON.stringify(record), 'utf8'));
21
+ queue.defer((cb)=>rimraf2(fullPath, {
22
+ disableGlob: true
23
+ }, cb.bind(null, null)));
24
+ queue.defer(fs.rename.bind(null, tempFile, fullPath));
25
+ queue.await((err)=>{
26
+ if (!err) return callback(null, record.body);
27
+ // cleanup the temp file if the operation failed
28
+ rimraf2(tempFile, {
29
+ disableGlob: true
30
+ }, callback.bind(err));
17
31
  });
18
32
  });
19
33
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["update.ts"],"sourcesContent":["import path from 'path';\nimport get from 'get-remote';\nimport mkdirp from 'mkdirp-classic';\nimport writeFile from 'write-file-atomic';\n\nexport default function update(endpoint, callback) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n\n mkdirp(this.cacheDirectory, (err) => {\n if (err && err.code !== 'EEXIST') return callback(err);\n\n get(endpoint).json((err, res) => {\n if (err) return callback(err);\n\n const record = { headers: res.headers, body: res.body };\n writeFile(fullPath, JSON.stringify(record), 'utf8', (err) => {\n err ? callback(err) : callback(null, record.body);\n });\n });\n });\n}\n"],"names":["path","get","mkdirp","writeFile","update","endpoint","callback","fullPath","join","cacheDirectory","options","hash","err","code","json","res","record","headers","body","JSON","stringify"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,SAAS,aAAa;AAC7B,OAAOC,YAAY,iBAAiB;AACpC,OAAOC,eAAe,oBAAoB;AAE1C,eAAe,SAASC,OAAOC,QAAQ,EAAEC,QAAQ;IAC/C,MAAMC,WAAWP,KAAKQ,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,GAAG,IAAI,CAACC,OAAO,CAACC,IAAI,CAACN,UAAU,KAAK,CAAC;IAErFH,OAAO,IAAI,CAACO,cAAc,EAAE,CAACG;QAC3B,IAAIA,OAAOA,IAAIC,IAAI,KAAK,UAAU,OAAOP,SAASM;QAElDX,IAAII,UAAUS,IAAI,CAAC,CAACF,KAAKG;YACvB,IAAIH,KAAK,OAAON,SAASM;YAEzB,MAAMI,SAAS;gBAAEC,SAASF,IAAIE,OAAO;gBAAEC,MAAMH,IAAIG,IAAI;YAAC;YACtDf,UAAUI,UAAUY,KAAKC,SAAS,CAACJ,SAAS,QAAQ,CAACJ;gBACnDA,MAAMN,SAASM,OAAON,SAAS,MAAMU,OAAOE,IAAI;YAClD;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/fetch-json-cache/src/update.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport get from 'get-remote';\nimport mkdirp from 'mkdirp-classic';\nimport Queue from 'queue-cb';\nimport rimraf2 from 'rimraf2';\nimport tempSuffix from 'temp-suffix';\n\nexport default function update(endpoint, callback) {\n const fullPath = path.join(this.cacheDirectory, `${this.options.hash(endpoint)}.json`);\n\n mkdirp(this.cacheDirectory, (err) => {\n if (err && err.code !== 'EEXIST') return callback(err);\n\n get(endpoint).json((err, res) => {\n if (err) return callback(err);\n const record = { headers: res.headers, body: res.body };\n const tempFile = `${fullPath}-${tempSuffix()}`;\n\n const queue = new Queue(1);\n queue.defer(fs.writeFile.bind(null, tempFile, JSON.stringify(record), 'utf8'));\n queue.defer((cb) => rimraf2(fullPath, { disableGlob: true }, cb.bind(null, null)));\n queue.defer(fs.rename.bind(null, tempFile, fullPath));\n queue.await((err) => {\n if (!err) return callback(null, record.body);\n // cleanup the temp file if the operation failed\n rimraf2(tempFile, { disableGlob: true }, callback.bind(err));\n });\n });\n });\n}\n"],"names":["fs","path","get","mkdirp","Queue","rimraf2","tempSuffix","update","endpoint","callback","fullPath","join","cacheDirectory","options","hash","err","code","json","res","record","headers","body","tempFile","queue","defer","writeFile","bind","JSON","stringify","cb","disableGlob","rename","await"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,SAAS,aAAa;AAC7B,OAAOC,YAAY,iBAAiB;AACpC,OAAOC,WAAW,WAAW;AAC7B,OAAOC,aAAa,UAAU;AAC9B,OAAOC,gBAAgB,cAAc;AAErC,eAAe,SAASC,OAAOC,QAAQ,EAAEC,QAAQ;IAC/C,MAAMC,WAAWT,KAAKU,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,GAAG,IAAI,CAACC,OAAO,CAACC,IAAI,CAACN,UAAU,KAAK,CAAC;IAErFL,OAAO,IAAI,CAACS,cAAc,EAAE,CAACG;QAC3B,IAAIA,OAAOA,IAAIC,IAAI,KAAK,UAAU,OAAOP,SAASM;QAElDb,IAAIM,UAAUS,IAAI,CAAC,CAACF,KAAKG;YACvB,IAAIH,KAAK,OAAON,SAASM;YACzB,MAAMI,SAAS;gBAAEC,SAASF,IAAIE,OAAO;gBAAEC,MAAMH,IAAIG,IAAI;YAAC;YACtD,MAAMC,WAAW,GAAGZ,SAAS,CAAC,EAAEJ,cAAc;YAE9C,MAAMiB,QAAQ,IAAInB,MAAM;YACxBmB,MAAMC,KAAK,CAACxB,GAAGyB,SAAS,CAACC,IAAI,CAAC,MAAMJ,UAAUK,KAAKC,SAAS,CAACT,SAAS;YACtEI,MAAMC,KAAK,CAAC,CAACK,KAAOxB,QAAQK,UAAU;oBAAEoB,aAAa;gBAAK,GAAGD,GAAGH,IAAI,CAAC,MAAM;YAC3EH,MAAMC,KAAK,CAACxB,GAAG+B,MAAM,CAACL,IAAI,CAAC,MAAMJ,UAAUZ;YAC3Ca,MAAMS,KAAK,CAAC,CAACjB;gBACX,IAAI,CAACA,KAAK,OAAON,SAAS,MAAMU,OAAOE,IAAI;gBAC3C,gDAAgD;gBAChDhB,QAAQiB,UAAU;oBAAEQ,aAAa;gBAAK,GAAGrB,SAASiB,IAAI,CAACX;YACzD;QACF;IACF;AACF"}
@@ -1,4 +1,3 @@
1
- import Promise from 'pinkie-promise';
2
1
  export interface CacheOptions {
3
2
  hash?: (string: string) => string;
4
3
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fetch-json-cache",
3
- "version": "1.2.2",
3
+ "version": "1.2.4",
4
4
  "description": "Caches fetched json. Updates when etag changes and is uses cache regardless if endpoint unreachable. Uses write-file-atomic for safe updates",
5
5
  "keywords": [
6
6
  "every",
@@ -39,21 +39,20 @@
39
39
  "version": "tsds version"
40
40
  },
41
41
  "dependencies": {
42
- "get-remote": "^1.2.3",
42
+ "get-remote": "^1.3.1",
43
43
  "mkdirp-classic": "^0.5.3",
44
- "pinkie-promise": "^2.0.1",
44
+ "queue-cb": "^1.4.4",
45
45
  "rimraf2": "^2.8.2",
46
- "write-file-atomic": "^1.3.4"
46
+ "temp-suffix": "^0.1.1"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@biomejs/biome": "^1.9.4",
50
50
  "@types/mocha": "^10.0.10",
51
51
  "@types/node": "^22.10.2",
52
52
  "depcheck": "^1.4.7",
53
- "fs-access-sync-compat": "^1.0.2",
54
- "ts-dev-stack": "^1.5.3"
53
+ "fs-exists-sync": "^0.1.0",
54
+ "pinkie-promise": "^2.0.1"
55
55
  },
56
- "packageManager": "npm@11.0.0+sha512.11dff29565d2297c74e7c594a9762581bde969f0aa5cbe6f5b3644bf008a16c065ece61094d9ffbb81125be38df8e1ba43eb8244b3d30c61eb797e9a2440e3ec",
57
56
  "engines": {
58
57
  "node": ">=0.8"
59
58
  },