@gorgonjs/gorgon 1.5.0 → 1.5.1

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.
package/CHANGELOG.md CHANGED
@@ -7,16 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.5.0] - 2023-09-11
11
+
12
+ ### Added
13
+
14
+ - Added a hook system to the cache
15
+
10
16
  ## [1.4.0] - 2022-11-19
11
17
 
12
18
  ### Added
19
+
13
20
  - added a file provider at @gorgon/file-provider
21
+
14
22
  ### Fixed
23
+
15
24
  - fixed a bug where when you cached something permanently (false) with the non default cache it would use the default provider
16
25
 
17
26
  ## [1.3.1] - 2022-11-14
18
27
 
19
28
  ### Added
29
+
20
30
  - added more library type support for older require syntax
21
31
 
22
32
  ## [1.3.0] - 2022-11-13
@@ -34,5 +44,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
34
44
  ## [1.2.0] - 2022-11-12
35
45
 
36
46
  ### Added
47
+
37
48
  - initial release to the public; migrated from @mikevalstar/gorgon
38
49
  - code is based off of medusa.js
package/dist/index.d.ts CHANGED
@@ -40,8 +40,8 @@ declare const Gorgon: {
40
40
  addHook: (key: GorgonHookKey, hook: GorgonHook | Array<GorgonHook>) => void;
41
41
  addProvider: (name: string, provider: IGorgonCacheProvider) => void;
42
42
  put: <R>(key: string, value: R, policy?: GorgonPolicyInput) => Promise<R>;
43
- clear: (key: string, provider?: string) => Promise<boolean | boolean[]>;
44
- clearAll: (provider?: string) => Promise<boolean>;
43
+ clear: (key: string, provider?: string, hookIdentifier?: string) => Promise<boolean | boolean[]>;
44
+ clearAll: (provider?: string, hookIdentifier?: string) => Promise<boolean>;
45
45
  overwrite: (key: string, asyncFunc: asyncFunction, policy?: GorgonPolicyInput) => Promise<any>;
46
46
  get: <R_1>(key: string, asyncFunc: () => R_1, policy?: GorgonPolicyInput) => Promise<R_1>;
47
47
  };
package/dist/index.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  const g = () => {
2
- const o = {}, u = o.hasOwnProperty, n = {
2
+ const o = {}, u = o.hasOwnProperty, i = {
3
3
  init: async () => {
4
4
  },
5
5
  get: async (s) => {
@@ -7,10 +7,10 @@ const g = () => {
7
7
  return o[s].val;
8
8
  },
9
9
  set: async (s, t, r) => {
10
- await n.clear(s);
10
+ await i.clear(s);
11
11
  var e = !1;
12
12
  return r && r.expiry && r.expiry > 0 && (e = setTimeout(function() {
13
- n.clear(s);
13
+ i.clear(s);
14
14
  }, r.expiry)), o[s] = {
15
15
  policy: r,
16
16
  val: t,
@@ -21,23 +21,23 @@ const g = () => {
21
21
  clear: async (s) => {
22
22
  if (!s) {
23
23
  for (var t in o)
24
- n._clear(t);
24
+ i._clear(t);
25
25
  return !0;
26
26
  }
27
- return n._clear(s);
27
+ return i._clear(s);
28
28
  },
29
29
  _clear: (s) => u.call(o, s) ? (o[s].to && clearTimeout(o[s].to), o[s] = null, delete o[s], !0) : !1
30
30
  };
31
- return n;
31
+ return i;
32
32
  }, m = (() => {
33
- const o = {}, u = o.hasOwnProperty, n = {
33
+ const o = {}, u = o.hasOwnProperty, i = {
34
34
  debug: !1,
35
35
  defaultProvider: "memory",
36
36
  retry: 5e3
37
37
  }, s = function(r) {
38
38
  const e = {
39
39
  expiry: !1,
40
- provider: n.defaultProvider
40
+ provider: i.defaultProvider
41
41
  };
42
42
  if (!r)
43
43
  return e;
@@ -54,17 +54,17 @@ const g = () => {
54
54
  hooks: {},
55
55
  _callHooks: (r, e, a) => {
56
56
  if (u.call(t.hooks, r)) {
57
- for (var i in t.hooks[r])
58
- if (typeof t.hooks[r][i] == "function")
57
+ for (var n in t.hooks[r])
58
+ if (typeof t.hooks[r][n] == "function")
59
59
  try {
60
- t.hooks[r][i](r, e, a);
60
+ t.hooks[r][n](r, e, a);
61
61
  } catch (l) {
62
62
  console.error("[Gorgon] Hook error for hook: " + r, l);
63
63
  }
64
64
  }
65
65
  },
66
66
  // Allows for settings on the gorgon cache
67
- settings: (r) => (r && (Object.assign(n, r), t._callHooks("settings", r, n)), n),
67
+ settings: (r) => (r && (Object.assign(i, r), t._callHooks("settings", r, i)), i),
68
68
  // add a hook or array of hooks
69
69
  addHook: (r, e) => {
70
70
  u.call(t.hooks, r) || (t.hooks[r] = []), Array.isArray(e) ? t.hooks[r] = t.hooks[r].concat(e) : t.hooks[r].push(e);
@@ -76,31 +76,31 @@ const g = () => {
76
76
  // Place an item into the cache
77
77
  put: async (r, e, a) => {
78
78
  a = s(a);
79
- var i = t.providers[a.provider];
80
- return t._callHooks("put", { key: r, value: e, policy: a }, e), i.set(r, e, s(a));
79
+ var n = t.providers[a.provider];
80
+ return t._callHooks("put", { key: r, value: e, policy: a }, e), n.set(r, e, s(a));
81
81
  },
82
82
  // Clear one or all items in the cache
83
- clear: async (r, e) => {
84
- var a = t.providers[e || n.defaultProvider];
85
- return t._callHooks("clear", { key: r, provider: e }), r && r.indexOf("*") > -1 ? a.keys().then(function(i) {
86
- var l = i.filter(function(f) {
87
- return new RegExp("^" + r.split("*").join(".*") + "$").test(f);
88
- }), d = l.map(a.clear);
89
- return d.push(a.clear(r)), Promise.all(d);
90
- }) : a.clear(r);
83
+ clear: async (r, e, a) => {
84
+ var n = t.providers[e || i.defaultProvider];
85
+ return t._callHooks("clear", { key: r, provider: e, identifier: a }), r && r.indexOf("*") > -1 ? n.keys().then(function(l) {
86
+ var v = l.filter(function(h) {
87
+ return new RegExp("^" + r.split("*").join(".*") + "$").test(h);
88
+ }), f = v.map(n.clear);
89
+ return f.push(n.clear(r)), Promise.all(f);
90
+ }) : n.clear(r);
91
91
  },
92
92
  // Clear all keys/values in the cache
93
- clearAll: async (r) => {
94
- var e = t.providers[r || n.defaultProvider];
95
- return t._callHooks("clearAll", { provider: r }), e.clear();
93
+ clearAll: async (r, e) => {
94
+ var a = t.providers[r || i.defaultProvider];
95
+ return t._callHooks("clearAll", { provider: r, identifier: e }), a.clear();
96
96
  },
97
97
  // Allows you to instantly overwite a cache object
98
98
  overwrite: async (r, e, a) => {
99
99
  try {
100
- const i = await e(), l = await t.put(r, i, s(a));
100
+ const n = await e(), l = await t.put(r, n, s(a));
101
101
  return t._callHooks("overwrite", { key: r, asyncFunc: e, policy: a }, l), l;
102
- } catch (i) {
103
- throw i;
102
+ } catch (n) {
103
+ throw n;
104
104
  }
105
105
  },
106
106
  // Allows you to get from the cache or pull from the promise
@@ -108,17 +108,17 @@ const g = () => {
108
108
  a = s(a);
109
109
  const l = await t.providers[a.provider].get(r);
110
110
  if (l !== void 0)
111
- return n.debug && console.info("[Gorgon] Cache hit for key: " + r, l), t._callHooks("get", { key: r, asyncFunc: e, policy: a, cacheHit: !0, queued: !1 }, l), l;
111
+ return i.debug && console.info("[Gorgon] Cache hit for key: " + r, l), t._callHooks("get", { key: r, asyncFunc: e, policy: a, cacheHit: !0, queued: !1 }, l), l;
112
112
  if (u.call(o, r) && Array.isArray(o[r]) && o[r].length > 0) {
113
- var d = !1;
113
+ var v = !1;
114
114
  for (var f in o[r])
115
- o[r][f].queued < new Date(Date.now() - n.retry) && (d = !0);
116
- if (!d) {
117
- n.debug && console.info("[Gorgon] Cache miss, in progress, adding to current queue for key: " + r);
118
- var h = new Promise(function(c, v) {
115
+ o[r][f].queued < new Date(Date.now() - i.retry) && (v = !0);
116
+ if (!v) {
117
+ i.debug && console.info("[Gorgon] Cache miss, in progress, adding to current queue for key: " + r);
118
+ var h = new Promise(function(c, d) {
119
119
  o[r].push({
120
120
  res: c,
121
- rej: v,
121
+ rej: d,
122
122
  queued: /* @__PURE__ */ new Date()
123
123
  });
124
124
  });
@@ -127,15 +127,15 @@ const g = () => {
127
127
  } else
128
128
  o[r] = [{ queued: /* @__PURE__ */ new Date() }];
129
129
  try {
130
- n.debug && console.info("[Gorgon] Cache miss, resolving item for: " + r);
130
+ i.debug && console.info("[Gorgon] Cache miss, resolving item for: " + r);
131
131
  const c = e();
132
132
  t._callHooks("get", { key: r, asyncFunc: e, policy: a, cacheHit: !1, queued: !1 }, c);
133
- const v = await c;
134
- n.debug && console.info("[Gorgon] Cache resolved, resolved item for: " + r, v);
135
- const p = await t.put(r, v, s(a));
133
+ const d = await c;
134
+ i.debug && console.info("[Gorgon] Cache resolved, resolved item for: " + r, d);
135
+ const p = await t.put(r, d, s(a));
136
136
  if (u.call(o, r)) {
137
137
  for (var f in o[r])
138
- o[r][f].res && (n.debug && console.info("[Gorgon] Cache queue resolved for: " + r, v), o[r][f].res(p));
138
+ o[r][f].res && (i.debug && console.info("[Gorgon] Cache queue resolved for: " + r, d), o[r][f].res(p));
139
139
  o[r] = [], delete o[r];
140
140
  }
141
141
  return p;
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../provider/memory.ts","../index.ts"],"sourcesContent":["import {IGorgonCacheProvider, GorgonPolicySanitized} from '../index';\n\ninterface IGorgonMemoryCacheProvider extends IGorgonCacheProvider {\n _clear: (key:string) => boolean;\n}\n\n// Created as a function to allow for multiple instances of the memory cache, if needed\nconst MemoryCacheCreator = ():IGorgonMemoryCacheProvider =>{\n\n const cache = {};\n const hOP = cache.hasOwnProperty;\n\n// Memory cache is about the simplist cache possible, use it as an example\n const memoryCache = {\n\n init: async() => {\n // This should be used to update the cache on boot,\n // memory cache will be blank on boot by default\n return;\n },\n\n get: async(key:string) => {\n\n if (hOP.call(cache, key) && cache[key].val) {\n // The cached item exists, return it\n return cache[key].val;\n } else {\n // The cached item does not exist reject\n return undefined;\n }\n\n },\n\n set: async(key:string, value:any, policy: GorgonPolicySanitized) => {\n\n // Clear in case it exists\n await memoryCache.clear(key);\n\n // Set a timemout to self-remove from the cache if in policy\n var to = false as boolean | number;\n\n if (policy && policy.expiry && policy.expiry > 0) {\n to = setTimeout(function() {\n memoryCache.clear(key);\n }, policy.expiry);\n }\n\n // Store the cached item\n cache[key] = {\n policy: policy,\n val: value,\n to: to,\n };\n\n return value;\n\n },\n\n keys: async() => {\n return Object.keys(cache);\n },\n\n clear: async(key?:string) => {\n\n // Clears a single key or complete clear on empty\n // Clear all items in the cache\n if (!key) {\n for (var i in cache) {\n memoryCache._clear(i);\n }\n return true;\n }\n\n return memoryCache._clear(key);\n },\n\n _clear: (key:string) => {\n // Clear a single item, making sure to remove the extra timeout\n if (hOP.call(cache, key)) {\n if (cache[key].to) {\n clearTimeout(cache[key].to);\n }\n\n cache[key] = null;\n delete cache[key];\n return true;\n }\n\n return false;\n },\n\n };\n\n return memoryCache;\n\n}\n\nexport default MemoryCacheCreator;\n","import MemoryCache from './provider/memory';\n\nexport type asyncFunction = () => Promise<any> | (() => any);\nexport type GorgonHookKey =\n | 'settings'\n | 'addProvider'\n | 'put'\n | 'clear'\n | 'clearAll'\n | 'overwrite'\n | 'get'\n | 'valueError';\nexport type GorgonHook = (key: GorgonHookKey, input?: any, output?: any) => void;\nexport type GorgonSettings = {\n debug: boolean;\n defaultProvider: string;\n retry: number;\n};\nexport type GorgonSettingsInput = {\n debug?: boolean;\n defaultProvider?: string;\n retry?: number;\n};\nexport type GorgonPolicy = {\n expiry: number | Date | false;\n provider: string;\n};\nexport type GorgonPolicyInput = GorgonPolicy | number | Date;\nexport type GorgonPolicySanitized = {\n expiry: number | false;\n provider: string;\n};\ntype GorgonCurrentTaskItem = Array<{\n res?: any;\n rej?: any;\n queued: Date;\n}>;\nexport interface IGorgonCacheProvider {\n init: () => Promise<void>;\n get: (key: string) => Promise<any>;\n set: <R>(key: string, value: R, policy: GorgonPolicySanitized) => Promise<R>;\n clear: (key?: string) => Promise<boolean>;\n keys: () => Promise<string[]>;\n}\n\nconst Gorgon = (() => {\n const currentTasks = {} as { [key: string]: GorgonCurrentTaskItem };\n const hOP = currentTasks.hasOwnProperty;\n\n const settings = {\n debug: false,\n defaultProvider: 'memory',\n retry: 5000,\n } as GorgonSettings;\n\n const policyMaker = function (incPolicy?: GorgonPolicyInput) {\n const outPolicy = {\n expiry: false,\n provider: settings.defaultProvider,\n } as GorgonPolicySanitized;\n\n // Blank policy, false, or no policy. lets store forever\n if (!incPolicy) {\n return outPolicy;\n }\n\n // Type is a full policy object\n if (incPolicy instanceof Date) {\n var d = new Date();\n\n outPolicy.expiry = Math.ceil((incPolicy.getTime() - d.getTime()) / 1000);\n } else if (typeof incPolicy === 'object' && incPolicy.expiry) {\n if (incPolicy.expiry instanceof Date) {\n outPolicy.expiry = Math.ceil((incPolicy.expiry.getTime() - d.getTime()) / 1000);\n } else {\n outPolicy.expiry = incPolicy.expiry;\n }\n outPolicy.provider = incPolicy.provider || outPolicy.provider;\n } else if (typeof incPolicy === 'object') {\n outPolicy.provider = incPolicy.provider || outPolicy.provider;\n } else if (typeof incPolicy === 'number') {\n outPolicy.expiry = incPolicy;\n }\n\n // Number is too small, negative or not a number\n outPolicy.expiry = outPolicy.expiry && outPolicy.expiry > 0 ? outPolicy.expiry : false;\n\n return outPolicy;\n };\n\n const gorgonCore = {\n // Providers available for use\n providers: {} as { [key: string]: IGorgonCacheProvider },\n\n // Hooks\n hooks: {} as { [key: string]: Array<GorgonHook> },\n\n _callHooks: (key: GorgonHookKey, input?: any, output?: any) => {\n if (hOP.call(gorgonCore.hooks, key)) {\n for (var i in gorgonCore.hooks[key]) {\n if (typeof gorgonCore.hooks[key][i] === 'function') {\n try {\n gorgonCore.hooks[key][i](key, input, output);\n } catch (e) {\n console.error('[Gorgon] Hook error for hook: ' + key, e);\n }\n }\n }\n }\n },\n\n // Allows for settings on the gorgon cache\n settings: (newSettings?: GorgonSettingsInput) => {\n if (!newSettings) {\n return settings;\n }\n\n Object.assign(settings, newSettings); // only overwrite ones sent in; keep others at existing\n\n gorgonCore._callHooks('settings', newSettings, settings);\n\n return settings;\n },\n\n // add a hook or array of hooks\n addHook: (key: GorgonHookKey, hook: GorgonHook | Array<GorgonHook>) => {\n if (!hOP.call(gorgonCore.hooks, key)) {\n gorgonCore.hooks[key] = [];\n }\n\n if (Array.isArray(hook)) {\n gorgonCore.hooks[key] = gorgonCore.hooks[key].concat(hook);\n } else {\n gorgonCore.hooks[key].push(hook);\n }\n },\n\n // Add a provider\n addProvider: (name: string, provider: IGorgonCacheProvider) => {\n provider.init(); // Trigger for provider to clear any old cache items or any other cleanup\n gorgonCore.providers[name] = provider;\n\n gorgonCore._callHooks('addProvider', { name, provider });\n },\n\n // Place an item into the cache\n put: async <R>(key: string, value: R, policy?: GorgonPolicyInput): Promise<R> => {\n policy = policyMaker(policy);\n var prov = gorgonCore.providers[policy.provider];\n\n gorgonCore._callHooks('put', { key, value, policy }, value);\n\n return prov.set(key, value, policyMaker(policy));\n },\n\n // Clear one or all items in the cache\n clear: async (key: string, provider?: string) => {\n var prov = gorgonCore.providers[provider || settings.defaultProvider];\n\n gorgonCore._callHooks('clear', { key, provider });\n\n // Clear a wildcard search of objects\n if (key && key.indexOf('*') > -1) {\n return prov.keys().then(function (keys) {\n var cacheMatchKeys = keys.filter(function (str) {\n return new RegExp('^' + key.split('*').join('.*') + '$').test(str);\n });\n\n var clearPromises = cacheMatchKeys.map(prov.clear);\n // Incase someone somehow used a wildcard in their cached key (don't do this)\n\n clearPromises.push(prov.clear(key));\n return Promise.all(clearPromises);\n });\n }\n\n // Not a special clear\n return prov.clear(key);\n },\n\n // Clear all keys/values in the cache\n clearAll: async (provider?: string) => {\n var prov = gorgonCore.providers[provider || settings.defaultProvider];\n\n gorgonCore._callHooks('clearAll', { provider });\n\n return prov.clear();\n },\n\n // Allows you to instantly overwite a cache object\n overwrite: async (key: string, asyncFunc: asyncFunction, policy?: GorgonPolicyInput) => {\n try {\n const resolvedData = await asyncFunc();\n\n const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));\n\n gorgonCore._callHooks('overwrite', { key, asyncFunc, policy }, val);\n\n return val;\n } catch (e) {\n throw e;\n }\n },\n\n // Allows you to get from the cache or pull from the promise\n get: async <R>(key: string, asyncFunc: () => R, policy?: GorgonPolicyInput): Promise<R> => {\n policy = policyMaker(policy);\n const prov = gorgonCore.providers[policy.provider];\n\n const currentVal = await prov.get(key); // Most providers will only lookup by key and return false on not found\n\n // If we have a current value sent it out; cache hit!\n if (currentVal !== undefined) {\n if (settings.debug) {\n console.info('[Gorgon] Cache hit for key: ' + key, currentVal);\n }\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: true, queued: false }, currentVal);\n\n return currentVal;\n }\n\n // Are we currently already running this cache item?\n if (hOP.call(currentTasks, key) && Array.isArray(currentTasks[key]) && currentTasks[key].length > 0) {\n // Add to the current task, but ignore if any items is below retry anyway threshold\n var oldQueue = false;\n\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].queued < new Date(Date.now() - settings.retry)) {\n oldQueue = true;\n }\n }\n\n // Add to the current queue\n if (!oldQueue) {\n if (settings.debug) {\n console.info('[Gorgon] Cache miss, in progress, adding to current queue for key: ' + key);\n }\n\n var concurent = new Promise(function (resolve: (value: R) => void, reject) {\n currentTasks[key].push({\n res: resolve,\n rej: reject,\n queued: new Date(),\n });\n });\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: true }, concurent);\n\n return concurent;\n }\n } else {\n // Add current task to list, this is the first one so the primary\n currentTasks[key] = [{ queued: new Date() }];\n }\n\n try {\n if (settings.debug) {\n console.info('[Gorgon] Cache miss, resolving item for: ' + key);\n }\n\n // This is the primary item\n const resolver = asyncFunc();\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: false }, resolver);\n\n // wait for it to finish then push it out\n const resolvedData = await resolver;\n\n if (settings.debug) {\n console.info('[Gorgon] Cache resolved, resolved item for: ' + key, resolvedData);\n }\n\n const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));\n\n if (hOP.call(currentTasks, key)) {\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].res) {\n if (settings.debug) {\n console.info('[Gorgon] Cache queue resolved for: ' + key, resolvedData);\n }\n\n currentTasks[key][i].res(val);\n }\n }\n\n currentTasks[key] = [];\n delete currentTasks[key];\n }\n\n return val;\n } catch (e) {\n if (hOP.call(currentTasks, key)) {\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].rej) {\n currentTasks[key][i].rej(e);\n }\n }\n\n gorgonCore._callHooks('valueError', { key, asyncFunc, policy, cacheHit: false, queued: false }, e);\n\n currentTasks[key] = [];\n delete currentTasks[key];\n }\n\n throw e;\n }\n },\n };\n\n gorgonCore.addProvider('memory', MemoryCache()); // Default provider, light weight and simple\n\n return gorgonCore;\n})();\n\nexport { MemoryCache };\nexport default Gorgon;\n"],"names":["MemoryCacheCreator","cache","hOP","memoryCache","key","value","policy","to","i","Gorgon","currentTasks","settings","policyMaker","incPolicy","outPolicy","d","gorgonCore","input","output","e","newSettings","hook","name","provider","prov","keys","cacheMatchKeys","str","clearPromises","asyncFunc","resolvedData","val","currentVal","oldQueue","concurent","resolve","reject","resolver","MemoryCache"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../provider/memory.ts","../index.ts"],"sourcesContent":["import {IGorgonCacheProvider, GorgonPolicySanitized} from '../index';\n\ninterface IGorgonMemoryCacheProvider extends IGorgonCacheProvider {\n _clear: (key:string) => boolean;\n}\n\n// Created as a function to allow for multiple instances of the memory cache, if needed\nconst MemoryCacheCreator = ():IGorgonMemoryCacheProvider =>{\n\n const cache = {};\n const hOP = cache.hasOwnProperty;\n\n// Memory cache is about the simplist cache possible, use it as an example\n const memoryCache = {\n\n init: async() => {\n // This should be used to update the cache on boot,\n // memory cache will be blank on boot by default\n return;\n },\n\n get: async(key:string) => {\n\n if (hOP.call(cache, key) && cache[key].val) {\n // The cached item exists, return it\n return cache[key].val;\n } else {\n // The cached item does not exist reject\n return undefined;\n }\n\n },\n\n set: async(key:string, value:any, policy: GorgonPolicySanitized) => {\n\n // Clear in case it exists\n await memoryCache.clear(key);\n\n // Set a timemout to self-remove from the cache if in policy\n var to = false as boolean | number;\n\n if (policy && policy.expiry && policy.expiry > 0) {\n to = setTimeout(function() {\n memoryCache.clear(key);\n }, policy.expiry);\n }\n\n // Store the cached item\n cache[key] = {\n policy: policy,\n val: value,\n to: to,\n };\n\n return value;\n\n },\n\n keys: async() => {\n return Object.keys(cache);\n },\n\n clear: async(key?:string) => {\n\n // Clears a single key or complete clear on empty\n // Clear all items in the cache\n if (!key) {\n for (var i in cache) {\n memoryCache._clear(i);\n }\n return true;\n }\n\n return memoryCache._clear(key);\n },\n\n _clear: (key:string) => {\n // Clear a single item, making sure to remove the extra timeout\n if (hOP.call(cache, key)) {\n if (cache[key].to) {\n clearTimeout(cache[key].to);\n }\n\n cache[key] = null;\n delete cache[key];\n return true;\n }\n\n return false;\n },\n\n };\n\n return memoryCache;\n\n}\n\nexport default MemoryCacheCreator;\n","import MemoryCache from './provider/memory';\n\nexport type asyncFunction = () => Promise<any> | (() => any);\nexport type GorgonHookKey =\n | 'settings'\n | 'addProvider'\n | 'put'\n | 'clear'\n | 'clearAll'\n | 'overwrite'\n | 'get'\n | 'valueError';\nexport type GorgonHook = (key: GorgonHookKey, input?: any, output?: any) => void;\nexport type GorgonSettings = {\n debug: boolean;\n defaultProvider: string;\n retry: number;\n};\nexport type GorgonSettingsInput = {\n debug?: boolean;\n defaultProvider?: string;\n retry?: number;\n};\nexport type GorgonPolicy = {\n expiry: number | Date | false;\n provider: string;\n};\nexport type GorgonPolicyInput = GorgonPolicy | number | Date;\nexport type GorgonPolicySanitized = {\n expiry: number | false;\n provider: string;\n};\ntype GorgonCurrentTaskItem = Array<{\n res?: any;\n rej?: any;\n queued: Date;\n}>;\nexport interface IGorgonCacheProvider {\n init: () => Promise<void>;\n get: (key: string) => Promise<any>;\n set: <R>(key: string, value: R, policy: GorgonPolicySanitized) => Promise<R>;\n clear: (key?: string) => Promise<boolean>;\n keys: () => Promise<string[]>;\n}\n\nconst Gorgon = (() => {\n const currentTasks = {} as { [key: string]: GorgonCurrentTaskItem };\n const hOP = currentTasks.hasOwnProperty;\n\n const settings = {\n debug: false,\n defaultProvider: 'memory',\n retry: 5000,\n } as GorgonSettings;\n\n const policyMaker = function (incPolicy?: GorgonPolicyInput) {\n const outPolicy = {\n expiry: false,\n provider: settings.defaultProvider,\n } as GorgonPolicySanitized;\n\n // Blank policy, false, or no policy. lets store forever\n if (!incPolicy) {\n return outPolicy;\n }\n\n // Type is a full policy object\n if (incPolicy instanceof Date) {\n var d = new Date();\n\n outPolicy.expiry = Math.ceil((incPolicy.getTime() - d.getTime()) / 1000);\n } else if (typeof incPolicy === 'object' && incPolicy.expiry) {\n if (incPolicy.expiry instanceof Date) {\n outPolicy.expiry = Math.ceil((incPolicy.expiry.getTime() - d.getTime()) / 1000);\n } else {\n outPolicy.expiry = incPolicy.expiry;\n }\n outPolicy.provider = incPolicy.provider || outPolicy.provider;\n } else if (typeof incPolicy === 'object') {\n outPolicy.provider = incPolicy.provider || outPolicy.provider;\n } else if (typeof incPolicy === 'number') {\n outPolicy.expiry = incPolicy;\n }\n\n // Number is too small, negative or not a number\n outPolicy.expiry = outPolicy.expiry && outPolicy.expiry > 0 ? outPolicy.expiry : false;\n\n return outPolicy;\n };\n\n const gorgonCore = {\n // Providers available for use\n providers: {} as { [key: string]: IGorgonCacheProvider },\n\n // Hooks\n hooks: {} as { [key: string]: Array<GorgonHook> },\n\n _callHooks: (key: GorgonHookKey, input?: any, output?: any) => {\n if (hOP.call(gorgonCore.hooks, key)) {\n for (var i in gorgonCore.hooks[key]) {\n if (typeof gorgonCore.hooks[key][i] === 'function') {\n try {\n gorgonCore.hooks[key][i](key, input, output);\n } catch (e) {\n console.error('[Gorgon] Hook error for hook: ' + key, e);\n }\n }\n }\n }\n },\n\n // Allows for settings on the gorgon cache\n settings: (newSettings?: GorgonSettingsInput) => {\n if (!newSettings) {\n return settings;\n }\n\n Object.assign(settings, newSettings); // only overwrite ones sent in; keep others at existing\n\n gorgonCore._callHooks('settings', newSettings, settings);\n\n return settings;\n },\n\n // add a hook or array of hooks\n addHook: (key: GorgonHookKey, hook: GorgonHook | Array<GorgonHook>) => {\n if (!hOP.call(gorgonCore.hooks, key)) {\n gorgonCore.hooks[key] = [];\n }\n\n if (Array.isArray(hook)) {\n gorgonCore.hooks[key] = gorgonCore.hooks[key].concat(hook);\n } else {\n gorgonCore.hooks[key].push(hook);\n }\n },\n\n // Add a provider\n addProvider: (name: string, provider: IGorgonCacheProvider) => {\n provider.init(); // Trigger for provider to clear any old cache items or any other cleanup\n gorgonCore.providers[name] = provider;\n\n gorgonCore._callHooks('addProvider', { name, provider });\n },\n\n // Place an item into the cache\n put: async <R>(key: string, value: R, policy?: GorgonPolicyInput): Promise<R> => {\n policy = policyMaker(policy);\n var prov = gorgonCore.providers[policy.provider];\n\n gorgonCore._callHooks('put', { key, value, policy }, value);\n\n return prov.set(key, value, policyMaker(policy));\n },\n\n // Clear one or all items in the cache\n clear: async (key: string, provider?: string, hookIdentifier?: string) => {\n var prov = gorgonCore.providers[provider || settings.defaultProvider];\n\n gorgonCore._callHooks('clear', { key, provider, identifier: hookIdentifier });\n\n // Clear a wildcard search of objects\n if (key && key.indexOf('*') > -1) {\n return prov.keys().then(function (keys) {\n var cacheMatchKeys = keys.filter(function (str) {\n return new RegExp('^' + key.split('*').join('.*') + '$').test(str);\n });\n\n var clearPromises = cacheMatchKeys.map(prov.clear);\n // Incase someone somehow used a wildcard in their cached key (don't do this)\n\n clearPromises.push(prov.clear(key));\n return Promise.all(clearPromises);\n });\n }\n\n // Not a special clear\n return prov.clear(key);\n },\n\n // Clear all keys/values in the cache\n clearAll: async (provider?: string, hookIdentifier?: string) => {\n var prov = gorgonCore.providers[provider || settings.defaultProvider];\n\n gorgonCore._callHooks('clearAll', { provider, identifier: hookIdentifier });\n\n return prov.clear();\n },\n\n // Allows you to instantly overwite a cache object\n overwrite: async (key: string, asyncFunc: asyncFunction, policy?: GorgonPolicyInput) => {\n try {\n const resolvedData = await asyncFunc();\n\n const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));\n\n gorgonCore._callHooks('overwrite', { key, asyncFunc, policy }, val);\n\n return val;\n } catch (e) {\n throw e;\n }\n },\n\n // Allows you to get from the cache or pull from the promise\n get: async <R>(key: string, asyncFunc: () => R, policy?: GorgonPolicyInput): Promise<R> => {\n policy = policyMaker(policy);\n const prov = gorgonCore.providers[policy.provider];\n\n const currentVal = await prov.get(key); // Most providers will only lookup by key and return false on not found\n\n // If we have a current value sent it out; cache hit!\n if (currentVal !== undefined) {\n if (settings.debug) {\n console.info('[Gorgon] Cache hit for key: ' + key, currentVal);\n }\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: true, queued: false }, currentVal);\n\n return currentVal;\n }\n\n // Are we currently already running this cache item?\n if (hOP.call(currentTasks, key) && Array.isArray(currentTasks[key]) && currentTasks[key].length > 0) {\n // Add to the current task, but ignore if any items is below retry anyway threshold\n var oldQueue = false;\n\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].queued < new Date(Date.now() - settings.retry)) {\n oldQueue = true;\n }\n }\n\n // Add to the current queue\n if (!oldQueue) {\n if (settings.debug) {\n console.info('[Gorgon] Cache miss, in progress, adding to current queue for key: ' + key);\n }\n\n var concurent = new Promise(function (resolve: (value: R) => void, reject) {\n currentTasks[key].push({\n res: resolve,\n rej: reject,\n queued: new Date(),\n });\n });\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: true }, concurent);\n\n return concurent;\n }\n } else {\n // Add current task to list, this is the first one so the primary\n currentTasks[key] = [{ queued: new Date() }];\n }\n\n try {\n if (settings.debug) {\n console.info('[Gorgon] Cache miss, resolving item for: ' + key);\n }\n\n // This is the primary item\n const resolver = asyncFunc();\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: false }, resolver);\n\n // wait for it to finish then push it out\n const resolvedData = await resolver;\n\n if (settings.debug) {\n console.info('[Gorgon] Cache resolved, resolved item for: ' + key, resolvedData);\n }\n\n const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));\n\n if (hOP.call(currentTasks, key)) {\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].res) {\n if (settings.debug) {\n console.info('[Gorgon] Cache queue resolved for: ' + key, resolvedData);\n }\n\n currentTasks[key][i].res(val);\n }\n }\n\n currentTasks[key] = [];\n delete currentTasks[key];\n }\n\n return val;\n } catch (e) {\n if (hOP.call(currentTasks, key)) {\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].rej) {\n currentTasks[key][i].rej(e);\n }\n }\n\n gorgonCore._callHooks('valueError', { key, asyncFunc, policy, cacheHit: false, queued: false }, e);\n\n currentTasks[key] = [];\n delete currentTasks[key];\n }\n\n throw e;\n }\n },\n };\n\n gorgonCore.addProvider('memory', MemoryCache()); // Default provider, light weight and simple\n\n return gorgonCore;\n})();\n\nexport { MemoryCache };\nexport default Gorgon;\n"],"names":["MemoryCacheCreator","cache","hOP","memoryCache","key","value","policy","to","i","Gorgon","currentTasks","settings","policyMaker","incPolicy","outPolicy","d","gorgonCore","input","output","e","newSettings","hook","name","provider","prov","hookIdentifier","keys","cacheMatchKeys","str","clearPromises","asyncFunc","resolvedData","val","currentVal","oldQueue","concurent","resolve","reject","resolver","MemoryCache"],"mappings":"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"}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- (function(d,v){typeof exports=="object"&&typeof module<"u"?v(exports):typeof define=="function"&&define.amd?define(["exports"],v):(d=typeof globalThis<"u"?globalThis:d||self,v(d.Gorgon={}))})(this,function(d){"use strict";const v=()=>{const o={},u=o.hasOwnProperty,n={init:async()=>{},get:async s=>{if(u.call(o,s)&&o[s].val)return o[s].val},set:async(s,t,e)=>{await n.clear(s);var r=!1;return e&&e.expiry&&e.expiry>0&&(r=setTimeout(function(){n.clear(s)},e.expiry)),o[s]={policy:e,val:t,to:r},t},keys:async()=>Object.keys(o),clear:async s=>{if(!s){for(var t in o)n._clear(t);return!0}return n._clear(s)},_clear:s=>u.call(o,s)?(o[s].to&&clearTimeout(o[s].to),o[s]=null,delete o[s],!0):!1};return n},x=(()=>{const o={},u=o.hasOwnProperty,n={debug:!1,defaultProvider:"memory",retry:5e3},s=function(e){const r={expiry:!1,provider:n.defaultProvider};if(!e)return r;if(e instanceof Date){var a=new Date;r.expiry=Math.ceil((e.getTime()-a.getTime())/1e3)}else typeof e=="object"&&e.expiry?(e.expiry instanceof Date?r.expiry=Math.ceil((e.expiry.getTime()-a.getTime())/1e3):r.expiry=e.expiry,r.provider=e.provider||r.provider):typeof e=="object"?r.provider=e.provider||r.provider:typeof e=="number"&&(r.expiry=e);return r.expiry=r.expiry&&r.expiry>0?r.expiry:!1,r},t={providers:{},hooks:{},_callHooks:(e,r,a)=>{if(u.call(t.hooks,e)){for(var i in t.hooks[e])if(typeof t.hooks[e][i]=="function")try{t.hooks[e][i](e,r,a)}catch(f){console.error("[Gorgon] Hook error for hook: "+e,f)}}},settings:e=>(e&&(Object.assign(n,e),t._callHooks("settings",e,n)),n),addHook:(e,r)=>{u.call(t.hooks,e)||(t.hooks[e]=[]),Array.isArray(r)?t.hooks[e]=t.hooks[e].concat(r):t.hooks[e].push(r)},addProvider:(e,r)=>{r.init(),t.providers[e]=r,t._callHooks("addProvider",{name:e,provider:r})},put:async(e,r,a)=>{a=s(a);var i=t.providers[a.provider];return t._callHooks("put",{key:e,value:r,policy:a},r),i.set(e,r,s(a))},clear:async(e,r)=>{var a=t.providers[r||n.defaultProvider];return t._callHooks("clear",{key:e,provider:r}),e&&e.indexOf("*")>-1?a.keys().then(function(i){var f=i.filter(function(l){return new RegExp("^"+e.split("*").join(".*")+"$").test(l)}),h=f.map(a.clear);return h.push(a.clear(e)),Promise.all(h)}):a.clear(e)},clearAll:async e=>{var r=t.providers[e||n.defaultProvider];return t._callHooks("clearAll",{provider:e}),r.clear()},overwrite:async(e,r,a)=>{try{const i=await r(),f=await t.put(e,i,s(a));return t._callHooks("overwrite",{key:e,asyncFunc:r,policy:a},f),f}catch(i){throw i}},get:async(e,r,a)=>{a=s(a);const f=await t.providers[a.provider].get(e);if(f!==void 0)return n.debug&&console.info("[Gorgon] Cache hit for key: "+e,f),t._callHooks("get",{key:e,asyncFunc:r,policy:a,cacheHit:!0,queued:!1},f),f;if(u.call(o,e)&&Array.isArray(o[e])&&o[e].length>0){var h=!1;for(var l in o[e])o[e][l].queued<new Date(Date.now()-n.retry)&&(h=!0);if(!h){n.debug&&console.info("[Gorgon] Cache miss, in progress, adding to current queue for key: "+e);var g=new Promise(function(c,p){o[e].push({res:c,rej:p,queued:new Date})});return t._callHooks("get",{key:e,asyncFunc:r,policy:a,cacheHit:!1,queued:!0},g),g}}else o[e]=[{queued:new Date}];try{n.debug&&console.info("[Gorgon] Cache miss, resolving item for: "+e);const c=r();t._callHooks("get",{key:e,asyncFunc:r,policy:a,cacheHit:!1,queued:!1},c);const p=await c;n.debug&&console.info("[Gorgon] Cache resolved, resolved item for: "+e,p);const m=await t.put(e,p,s(a));if(u.call(o,e)){for(var l in o[e])o[e][l].res&&(n.debug&&console.info("[Gorgon] Cache queue resolved for: "+e,p),o[e][l].res(m));o[e]=[],delete o[e]}return m}catch(c){if(u.call(o,e)){for(var l in o[e])o[e][l].rej&&o[e][l].rej(c);t._callHooks("valueError",{key:e,asyncFunc:r,policy:a,cacheHit:!1,queued:!1},c),o[e]=[],delete o[e]}throw c}}};return t.addProvider("memory",v()),t})();d.MemoryCache=v,d.default=x,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ (function(c,v){typeof exports=="object"&&typeof module<"u"?v(exports):typeof define=="function"&&define.amd?define(["exports"],v):(c=typeof globalThis<"u"?globalThis:c||self,v(c.Gorgon={}))})(this,function(c){"use strict";const v=()=>{const o={},u=o.hasOwnProperty,i={init:async()=>{},get:async s=>{if(u.call(o,s)&&o[s].val)return o[s].val},set:async(s,t,e)=>{await i.clear(s);var r=!1;return e&&e.expiry&&e.expiry>0&&(r=setTimeout(function(){i.clear(s)},e.expiry)),o[s]={policy:e,val:t,to:r},t},keys:async()=>Object.keys(o),clear:async s=>{if(!s){for(var t in o)i._clear(t);return!0}return i._clear(s)},_clear:s=>u.call(o,s)?(o[s].to&&clearTimeout(o[s].to),o[s]=null,delete o[s],!0):!1};return i},x=(()=>{const o={},u=o.hasOwnProperty,i={debug:!1,defaultProvider:"memory",retry:5e3},s=function(e){const r={expiry:!1,provider:i.defaultProvider};if(!e)return r;if(e instanceof Date){var a=new Date;r.expiry=Math.ceil((e.getTime()-a.getTime())/1e3)}else typeof e=="object"&&e.expiry?(e.expiry instanceof Date?r.expiry=Math.ceil((e.expiry.getTime()-a.getTime())/1e3):r.expiry=e.expiry,r.provider=e.provider||r.provider):typeof e=="object"?r.provider=e.provider||r.provider:typeof e=="number"&&(r.expiry=e);return r.expiry=r.expiry&&r.expiry>0?r.expiry:!1,r},t={providers:{},hooks:{},_callHooks:(e,r,a)=>{if(u.call(t.hooks,e)){for(var n in t.hooks[e])if(typeof t.hooks[e][n]=="function")try{t.hooks[e][n](e,r,a)}catch(f){console.error("[Gorgon] Hook error for hook: "+e,f)}}},settings:e=>(e&&(Object.assign(i,e),t._callHooks("settings",e,i)),i),addHook:(e,r)=>{u.call(t.hooks,e)||(t.hooks[e]=[]),Array.isArray(r)?t.hooks[e]=t.hooks[e].concat(r):t.hooks[e].push(r)},addProvider:(e,r)=>{r.init(),t.providers[e]=r,t._callHooks("addProvider",{name:e,provider:r})},put:async(e,r,a)=>{a=s(a);var n=t.providers[a.provider];return t._callHooks("put",{key:e,value:r,policy:a},r),n.set(e,r,s(a))},clear:async(e,r,a)=>{var n=t.providers[r||i.defaultProvider];return t._callHooks("clear",{key:e,provider:r,identifier:a}),e&&e.indexOf("*")>-1?n.keys().then(function(f){var p=f.filter(function(g){return new RegExp("^"+e.split("*").join(".*")+"$").test(g)}),l=p.map(n.clear);return l.push(n.clear(e)),Promise.all(l)}):n.clear(e)},clearAll:async(e,r)=>{var a=t.providers[e||i.defaultProvider];return t._callHooks("clearAll",{provider:e,identifier:r}),a.clear()},overwrite:async(e,r,a)=>{try{const n=await r(),f=await t.put(e,n,s(a));return t._callHooks("overwrite",{key:e,asyncFunc:r,policy:a},f),f}catch(n){throw n}},get:async(e,r,a)=>{a=s(a);const f=await t.providers[a.provider].get(e);if(f!==void 0)return i.debug&&console.info("[Gorgon] Cache hit for key: "+e,f),t._callHooks("get",{key:e,asyncFunc:r,policy:a,cacheHit:!0,queued:!1},f),f;if(u.call(o,e)&&Array.isArray(o[e])&&o[e].length>0){var p=!1;for(var l in o[e])o[e][l].queued<new Date(Date.now()-i.retry)&&(p=!0);if(!p){i.debug&&console.info("[Gorgon] Cache miss, in progress, adding to current queue for key: "+e);var g=new Promise(function(d,h){o[e].push({res:d,rej:h,queued:new Date})});return t._callHooks("get",{key:e,asyncFunc:r,policy:a,cacheHit:!1,queued:!0},g),g}}else o[e]=[{queued:new Date}];try{i.debug&&console.info("[Gorgon] Cache miss, resolving item for: "+e);const d=r();t._callHooks("get",{key:e,asyncFunc:r,policy:a,cacheHit:!1,queued:!1},d);const h=await d;i.debug&&console.info("[Gorgon] Cache resolved, resolved item for: "+e,h);const m=await t.put(e,h,s(a));if(u.call(o,e)){for(var l in o[e])o[e][l].res&&(i.debug&&console.info("[Gorgon] Cache queue resolved for: "+e,h),o[e][l].res(m));o[e]=[],delete o[e]}return m}catch(d){if(u.call(o,e)){for(var l in o[e])o[e][l].rej&&o[e][l].rej(d);t._callHooks("valueError",{key:e,asyncFunc:r,policy:a,cacheHit:!1,queued:!1},d),o[e]=[],delete o[e]}throw d}}};return t.addProvider("memory",v()),t})();c.MemoryCache=v,c.default=x,Object.defineProperties(c,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
2
2
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../provider/memory.ts","../index.ts"],"sourcesContent":["import {IGorgonCacheProvider, GorgonPolicySanitized} from '../index';\n\ninterface IGorgonMemoryCacheProvider extends IGorgonCacheProvider {\n _clear: (key:string) => boolean;\n}\n\n// Created as a function to allow for multiple instances of the memory cache, if needed\nconst MemoryCacheCreator = ():IGorgonMemoryCacheProvider =>{\n\n const cache = {};\n const hOP = cache.hasOwnProperty;\n\n// Memory cache is about the simplist cache possible, use it as an example\n const memoryCache = {\n\n init: async() => {\n // This should be used to update the cache on boot,\n // memory cache will be blank on boot by default\n return;\n },\n\n get: async(key:string) => {\n\n if (hOP.call(cache, key) && cache[key].val) {\n // The cached item exists, return it\n return cache[key].val;\n } else {\n // The cached item does not exist reject\n return undefined;\n }\n\n },\n\n set: async(key:string, value:any, policy: GorgonPolicySanitized) => {\n\n // Clear in case it exists\n await memoryCache.clear(key);\n\n // Set a timemout to self-remove from the cache if in policy\n var to = false as boolean | number;\n\n if (policy && policy.expiry && policy.expiry > 0) {\n to = setTimeout(function() {\n memoryCache.clear(key);\n }, policy.expiry);\n }\n\n // Store the cached item\n cache[key] = {\n policy: policy,\n val: value,\n to: to,\n };\n\n return value;\n\n },\n\n keys: async() => {\n return Object.keys(cache);\n },\n\n clear: async(key?:string) => {\n\n // Clears a single key or complete clear on empty\n // Clear all items in the cache\n if (!key) {\n for (var i in cache) {\n memoryCache._clear(i);\n }\n return true;\n }\n\n return memoryCache._clear(key);\n },\n\n _clear: (key:string) => {\n // Clear a single item, making sure to remove the extra timeout\n if (hOP.call(cache, key)) {\n if (cache[key].to) {\n clearTimeout(cache[key].to);\n }\n\n cache[key] = null;\n delete cache[key];\n return true;\n }\n\n return false;\n },\n\n };\n\n return memoryCache;\n\n}\n\nexport default MemoryCacheCreator;\n","import MemoryCache from './provider/memory';\n\nexport type asyncFunction = () => Promise<any> | (() => any);\nexport type GorgonHookKey =\n | 'settings'\n | 'addProvider'\n | 'put'\n | 'clear'\n | 'clearAll'\n | 'overwrite'\n | 'get'\n | 'valueError';\nexport type GorgonHook = (key: GorgonHookKey, input?: any, output?: any) => void;\nexport type GorgonSettings = {\n debug: boolean;\n defaultProvider: string;\n retry: number;\n};\nexport type GorgonSettingsInput = {\n debug?: boolean;\n defaultProvider?: string;\n retry?: number;\n};\nexport type GorgonPolicy = {\n expiry: number | Date | false;\n provider: string;\n};\nexport type GorgonPolicyInput = GorgonPolicy | number | Date;\nexport type GorgonPolicySanitized = {\n expiry: number | false;\n provider: string;\n};\ntype GorgonCurrentTaskItem = Array<{\n res?: any;\n rej?: any;\n queued: Date;\n}>;\nexport interface IGorgonCacheProvider {\n init: () => Promise<void>;\n get: (key: string) => Promise<any>;\n set: <R>(key: string, value: R, policy: GorgonPolicySanitized) => Promise<R>;\n clear: (key?: string) => Promise<boolean>;\n keys: () => Promise<string[]>;\n}\n\nconst Gorgon = (() => {\n const currentTasks = {} as { [key: string]: GorgonCurrentTaskItem };\n const hOP = currentTasks.hasOwnProperty;\n\n const settings = {\n debug: false,\n defaultProvider: 'memory',\n retry: 5000,\n } as GorgonSettings;\n\n const policyMaker = function (incPolicy?: GorgonPolicyInput) {\n const outPolicy = {\n expiry: false,\n provider: settings.defaultProvider,\n } as GorgonPolicySanitized;\n\n // Blank policy, false, or no policy. lets store forever\n if (!incPolicy) {\n return outPolicy;\n }\n\n // Type is a full policy object\n if (incPolicy instanceof Date) {\n var d = new Date();\n\n outPolicy.expiry = Math.ceil((incPolicy.getTime() - d.getTime()) / 1000);\n } else if (typeof incPolicy === 'object' && incPolicy.expiry) {\n if (incPolicy.expiry instanceof Date) {\n outPolicy.expiry = Math.ceil((incPolicy.expiry.getTime() - d.getTime()) / 1000);\n } else {\n outPolicy.expiry = incPolicy.expiry;\n }\n outPolicy.provider = incPolicy.provider || outPolicy.provider;\n } else if (typeof incPolicy === 'object') {\n outPolicy.provider = incPolicy.provider || outPolicy.provider;\n } else if (typeof incPolicy === 'number') {\n outPolicy.expiry = incPolicy;\n }\n\n // Number is too small, negative or not a number\n outPolicy.expiry = outPolicy.expiry && outPolicy.expiry > 0 ? outPolicy.expiry : false;\n\n return outPolicy;\n };\n\n const gorgonCore = {\n // Providers available for use\n providers: {} as { [key: string]: IGorgonCacheProvider },\n\n // Hooks\n hooks: {} as { [key: string]: Array<GorgonHook> },\n\n _callHooks: (key: GorgonHookKey, input?: any, output?: any) => {\n if (hOP.call(gorgonCore.hooks, key)) {\n for (var i in gorgonCore.hooks[key]) {\n if (typeof gorgonCore.hooks[key][i] === 'function') {\n try {\n gorgonCore.hooks[key][i](key, input, output);\n } catch (e) {\n console.error('[Gorgon] Hook error for hook: ' + key, e);\n }\n }\n }\n }\n },\n\n // Allows for settings on the gorgon cache\n settings: (newSettings?: GorgonSettingsInput) => {\n if (!newSettings) {\n return settings;\n }\n\n Object.assign(settings, newSettings); // only overwrite ones sent in; keep others at existing\n\n gorgonCore._callHooks('settings', newSettings, settings);\n\n return settings;\n },\n\n // add a hook or array of hooks\n addHook: (key: GorgonHookKey, hook: GorgonHook | Array<GorgonHook>) => {\n if (!hOP.call(gorgonCore.hooks, key)) {\n gorgonCore.hooks[key] = [];\n }\n\n if (Array.isArray(hook)) {\n gorgonCore.hooks[key] = gorgonCore.hooks[key].concat(hook);\n } else {\n gorgonCore.hooks[key].push(hook);\n }\n },\n\n // Add a provider\n addProvider: (name: string, provider: IGorgonCacheProvider) => {\n provider.init(); // Trigger for provider to clear any old cache items or any other cleanup\n gorgonCore.providers[name] = provider;\n\n gorgonCore._callHooks('addProvider', { name, provider });\n },\n\n // Place an item into the cache\n put: async <R>(key: string, value: R, policy?: GorgonPolicyInput): Promise<R> => {\n policy = policyMaker(policy);\n var prov = gorgonCore.providers[policy.provider];\n\n gorgonCore._callHooks('put', { key, value, policy }, value);\n\n return prov.set(key, value, policyMaker(policy));\n },\n\n // Clear one or all items in the cache\n clear: async (key: string, provider?: string) => {\n var prov = gorgonCore.providers[provider || settings.defaultProvider];\n\n gorgonCore._callHooks('clear', { key, provider });\n\n // Clear a wildcard search of objects\n if (key && key.indexOf('*') > -1) {\n return prov.keys().then(function (keys) {\n var cacheMatchKeys = keys.filter(function (str) {\n return new RegExp('^' + key.split('*').join('.*') + '$').test(str);\n });\n\n var clearPromises = cacheMatchKeys.map(prov.clear);\n // Incase someone somehow used a wildcard in their cached key (don't do this)\n\n clearPromises.push(prov.clear(key));\n return Promise.all(clearPromises);\n });\n }\n\n // Not a special clear\n return prov.clear(key);\n },\n\n // Clear all keys/values in the cache\n clearAll: async (provider?: string) => {\n var prov = gorgonCore.providers[provider || settings.defaultProvider];\n\n gorgonCore._callHooks('clearAll', { provider });\n\n return prov.clear();\n },\n\n // Allows you to instantly overwite a cache object\n overwrite: async (key: string, asyncFunc: asyncFunction, policy?: GorgonPolicyInput) => {\n try {\n const resolvedData = await asyncFunc();\n\n const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));\n\n gorgonCore._callHooks('overwrite', { key, asyncFunc, policy }, val);\n\n return val;\n } catch (e) {\n throw e;\n }\n },\n\n // Allows you to get from the cache or pull from the promise\n get: async <R>(key: string, asyncFunc: () => R, policy?: GorgonPolicyInput): Promise<R> => {\n policy = policyMaker(policy);\n const prov = gorgonCore.providers[policy.provider];\n\n const currentVal = await prov.get(key); // Most providers will only lookup by key and return false on not found\n\n // If we have a current value sent it out; cache hit!\n if (currentVal !== undefined) {\n if (settings.debug) {\n console.info('[Gorgon] Cache hit for key: ' + key, currentVal);\n }\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: true, queued: false }, currentVal);\n\n return currentVal;\n }\n\n // Are we currently already running this cache item?\n if (hOP.call(currentTasks, key) && Array.isArray(currentTasks[key]) && currentTasks[key].length > 0) {\n // Add to the current task, but ignore if any items is below retry anyway threshold\n var oldQueue = false;\n\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].queued < new Date(Date.now() - settings.retry)) {\n oldQueue = true;\n }\n }\n\n // Add to the current queue\n if (!oldQueue) {\n if (settings.debug) {\n console.info('[Gorgon] Cache miss, in progress, adding to current queue for key: ' + key);\n }\n\n var concurent = new Promise(function (resolve: (value: R) => void, reject) {\n currentTasks[key].push({\n res: resolve,\n rej: reject,\n queued: new Date(),\n });\n });\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: true }, concurent);\n\n return concurent;\n }\n } else {\n // Add current task to list, this is the first one so the primary\n currentTasks[key] = [{ queued: new Date() }];\n }\n\n try {\n if (settings.debug) {\n console.info('[Gorgon] Cache miss, resolving item for: ' + key);\n }\n\n // This is the primary item\n const resolver = asyncFunc();\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: false }, resolver);\n\n // wait for it to finish then push it out\n const resolvedData = await resolver;\n\n if (settings.debug) {\n console.info('[Gorgon] Cache resolved, resolved item for: ' + key, resolvedData);\n }\n\n const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));\n\n if (hOP.call(currentTasks, key)) {\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].res) {\n if (settings.debug) {\n console.info('[Gorgon] Cache queue resolved for: ' + key, resolvedData);\n }\n\n currentTasks[key][i].res(val);\n }\n }\n\n currentTasks[key] = [];\n delete currentTasks[key];\n }\n\n return val;\n } catch (e) {\n if (hOP.call(currentTasks, key)) {\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].rej) {\n currentTasks[key][i].rej(e);\n }\n }\n\n gorgonCore._callHooks('valueError', { key, asyncFunc, policy, cacheHit: false, queued: false }, e);\n\n currentTasks[key] = [];\n delete currentTasks[key];\n }\n\n throw e;\n }\n },\n };\n\n gorgonCore.addProvider('memory', MemoryCache()); // Default provider, light weight and simple\n\n return gorgonCore;\n})();\n\nexport { MemoryCache };\nexport default Gorgon;\n"],"names":["MemoryCacheCreator","cache","hOP","memoryCache","key","value","policy","to","i","Gorgon","currentTasks","settings","policyMaker","incPolicy","outPolicy","d","gorgonCore","input","output","e","newSettings","hook","name","provider","prov","keys","cacheMatchKeys","str","clearPromises","asyncFunc","resolvedData","val","currentVal","oldQueue","concurent","resolve","reject","resolver","MemoryCache"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../provider/memory.ts","../index.ts"],"sourcesContent":["import {IGorgonCacheProvider, GorgonPolicySanitized} from '../index';\n\ninterface IGorgonMemoryCacheProvider extends IGorgonCacheProvider {\n _clear: (key:string) => boolean;\n}\n\n// Created as a function to allow for multiple instances of the memory cache, if needed\nconst MemoryCacheCreator = ():IGorgonMemoryCacheProvider =>{\n\n const cache = {};\n const hOP = cache.hasOwnProperty;\n\n// Memory cache is about the simplist cache possible, use it as an example\n const memoryCache = {\n\n init: async() => {\n // This should be used to update the cache on boot,\n // memory cache will be blank on boot by default\n return;\n },\n\n get: async(key:string) => {\n\n if (hOP.call(cache, key) && cache[key].val) {\n // The cached item exists, return it\n return cache[key].val;\n } else {\n // The cached item does not exist reject\n return undefined;\n }\n\n },\n\n set: async(key:string, value:any, policy: GorgonPolicySanitized) => {\n\n // Clear in case it exists\n await memoryCache.clear(key);\n\n // Set a timemout to self-remove from the cache if in policy\n var to = false as boolean | number;\n\n if (policy && policy.expiry && policy.expiry > 0) {\n to = setTimeout(function() {\n memoryCache.clear(key);\n }, policy.expiry);\n }\n\n // Store the cached item\n cache[key] = {\n policy: policy,\n val: value,\n to: to,\n };\n\n return value;\n\n },\n\n keys: async() => {\n return Object.keys(cache);\n },\n\n clear: async(key?:string) => {\n\n // Clears a single key or complete clear on empty\n // Clear all items in the cache\n if (!key) {\n for (var i in cache) {\n memoryCache._clear(i);\n }\n return true;\n }\n\n return memoryCache._clear(key);\n },\n\n _clear: (key:string) => {\n // Clear a single item, making sure to remove the extra timeout\n if (hOP.call(cache, key)) {\n if (cache[key].to) {\n clearTimeout(cache[key].to);\n }\n\n cache[key] = null;\n delete cache[key];\n return true;\n }\n\n return false;\n },\n\n };\n\n return memoryCache;\n\n}\n\nexport default MemoryCacheCreator;\n","import MemoryCache from './provider/memory';\n\nexport type asyncFunction = () => Promise<any> | (() => any);\nexport type GorgonHookKey =\n | 'settings'\n | 'addProvider'\n | 'put'\n | 'clear'\n | 'clearAll'\n | 'overwrite'\n | 'get'\n | 'valueError';\nexport type GorgonHook = (key: GorgonHookKey, input?: any, output?: any) => void;\nexport type GorgonSettings = {\n debug: boolean;\n defaultProvider: string;\n retry: number;\n};\nexport type GorgonSettingsInput = {\n debug?: boolean;\n defaultProvider?: string;\n retry?: number;\n};\nexport type GorgonPolicy = {\n expiry: number | Date | false;\n provider: string;\n};\nexport type GorgonPolicyInput = GorgonPolicy | number | Date;\nexport type GorgonPolicySanitized = {\n expiry: number | false;\n provider: string;\n};\ntype GorgonCurrentTaskItem = Array<{\n res?: any;\n rej?: any;\n queued: Date;\n}>;\nexport interface IGorgonCacheProvider {\n init: () => Promise<void>;\n get: (key: string) => Promise<any>;\n set: <R>(key: string, value: R, policy: GorgonPolicySanitized) => Promise<R>;\n clear: (key?: string) => Promise<boolean>;\n keys: () => Promise<string[]>;\n}\n\nconst Gorgon = (() => {\n const currentTasks = {} as { [key: string]: GorgonCurrentTaskItem };\n const hOP = currentTasks.hasOwnProperty;\n\n const settings = {\n debug: false,\n defaultProvider: 'memory',\n retry: 5000,\n } as GorgonSettings;\n\n const policyMaker = function (incPolicy?: GorgonPolicyInput) {\n const outPolicy = {\n expiry: false,\n provider: settings.defaultProvider,\n } as GorgonPolicySanitized;\n\n // Blank policy, false, or no policy. lets store forever\n if (!incPolicy) {\n return outPolicy;\n }\n\n // Type is a full policy object\n if (incPolicy instanceof Date) {\n var d = new Date();\n\n outPolicy.expiry = Math.ceil((incPolicy.getTime() - d.getTime()) / 1000);\n } else if (typeof incPolicy === 'object' && incPolicy.expiry) {\n if (incPolicy.expiry instanceof Date) {\n outPolicy.expiry = Math.ceil((incPolicy.expiry.getTime() - d.getTime()) / 1000);\n } else {\n outPolicy.expiry = incPolicy.expiry;\n }\n outPolicy.provider = incPolicy.provider || outPolicy.provider;\n } else if (typeof incPolicy === 'object') {\n outPolicy.provider = incPolicy.provider || outPolicy.provider;\n } else if (typeof incPolicy === 'number') {\n outPolicy.expiry = incPolicy;\n }\n\n // Number is too small, negative or not a number\n outPolicy.expiry = outPolicy.expiry && outPolicy.expiry > 0 ? outPolicy.expiry : false;\n\n return outPolicy;\n };\n\n const gorgonCore = {\n // Providers available for use\n providers: {} as { [key: string]: IGorgonCacheProvider },\n\n // Hooks\n hooks: {} as { [key: string]: Array<GorgonHook> },\n\n _callHooks: (key: GorgonHookKey, input?: any, output?: any) => {\n if (hOP.call(gorgonCore.hooks, key)) {\n for (var i in gorgonCore.hooks[key]) {\n if (typeof gorgonCore.hooks[key][i] === 'function') {\n try {\n gorgonCore.hooks[key][i](key, input, output);\n } catch (e) {\n console.error('[Gorgon] Hook error for hook: ' + key, e);\n }\n }\n }\n }\n },\n\n // Allows for settings on the gorgon cache\n settings: (newSettings?: GorgonSettingsInput) => {\n if (!newSettings) {\n return settings;\n }\n\n Object.assign(settings, newSettings); // only overwrite ones sent in; keep others at existing\n\n gorgonCore._callHooks('settings', newSettings, settings);\n\n return settings;\n },\n\n // add a hook or array of hooks\n addHook: (key: GorgonHookKey, hook: GorgonHook | Array<GorgonHook>) => {\n if (!hOP.call(gorgonCore.hooks, key)) {\n gorgonCore.hooks[key] = [];\n }\n\n if (Array.isArray(hook)) {\n gorgonCore.hooks[key] = gorgonCore.hooks[key].concat(hook);\n } else {\n gorgonCore.hooks[key].push(hook);\n }\n },\n\n // Add a provider\n addProvider: (name: string, provider: IGorgonCacheProvider) => {\n provider.init(); // Trigger for provider to clear any old cache items or any other cleanup\n gorgonCore.providers[name] = provider;\n\n gorgonCore._callHooks('addProvider', { name, provider });\n },\n\n // Place an item into the cache\n put: async <R>(key: string, value: R, policy?: GorgonPolicyInput): Promise<R> => {\n policy = policyMaker(policy);\n var prov = gorgonCore.providers[policy.provider];\n\n gorgonCore._callHooks('put', { key, value, policy }, value);\n\n return prov.set(key, value, policyMaker(policy));\n },\n\n // Clear one or all items in the cache\n clear: async (key: string, provider?: string, hookIdentifier?: string) => {\n var prov = gorgonCore.providers[provider || settings.defaultProvider];\n\n gorgonCore._callHooks('clear', { key, provider, identifier: hookIdentifier });\n\n // Clear a wildcard search of objects\n if (key && key.indexOf('*') > -1) {\n return prov.keys().then(function (keys) {\n var cacheMatchKeys = keys.filter(function (str) {\n return new RegExp('^' + key.split('*').join('.*') + '$').test(str);\n });\n\n var clearPromises = cacheMatchKeys.map(prov.clear);\n // Incase someone somehow used a wildcard in their cached key (don't do this)\n\n clearPromises.push(prov.clear(key));\n return Promise.all(clearPromises);\n });\n }\n\n // Not a special clear\n return prov.clear(key);\n },\n\n // Clear all keys/values in the cache\n clearAll: async (provider?: string, hookIdentifier?: string) => {\n var prov = gorgonCore.providers[provider || settings.defaultProvider];\n\n gorgonCore._callHooks('clearAll', { provider, identifier: hookIdentifier });\n\n return prov.clear();\n },\n\n // Allows you to instantly overwite a cache object\n overwrite: async (key: string, asyncFunc: asyncFunction, policy?: GorgonPolicyInput) => {\n try {\n const resolvedData = await asyncFunc();\n\n const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));\n\n gorgonCore._callHooks('overwrite', { key, asyncFunc, policy }, val);\n\n return val;\n } catch (e) {\n throw e;\n }\n },\n\n // Allows you to get from the cache or pull from the promise\n get: async <R>(key: string, asyncFunc: () => R, policy?: GorgonPolicyInput): Promise<R> => {\n policy = policyMaker(policy);\n const prov = gorgonCore.providers[policy.provider];\n\n const currentVal = await prov.get(key); // Most providers will only lookup by key and return false on not found\n\n // If we have a current value sent it out; cache hit!\n if (currentVal !== undefined) {\n if (settings.debug) {\n console.info('[Gorgon] Cache hit for key: ' + key, currentVal);\n }\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: true, queued: false }, currentVal);\n\n return currentVal;\n }\n\n // Are we currently already running this cache item?\n if (hOP.call(currentTasks, key) && Array.isArray(currentTasks[key]) && currentTasks[key].length > 0) {\n // Add to the current task, but ignore if any items is below retry anyway threshold\n var oldQueue = false;\n\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].queued < new Date(Date.now() - settings.retry)) {\n oldQueue = true;\n }\n }\n\n // Add to the current queue\n if (!oldQueue) {\n if (settings.debug) {\n console.info('[Gorgon] Cache miss, in progress, adding to current queue for key: ' + key);\n }\n\n var concurent = new Promise(function (resolve: (value: R) => void, reject) {\n currentTasks[key].push({\n res: resolve,\n rej: reject,\n queued: new Date(),\n });\n });\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: true }, concurent);\n\n return concurent;\n }\n } else {\n // Add current task to list, this is the first one so the primary\n currentTasks[key] = [{ queued: new Date() }];\n }\n\n try {\n if (settings.debug) {\n console.info('[Gorgon] Cache miss, resolving item for: ' + key);\n }\n\n // This is the primary item\n const resolver = asyncFunc();\n\n gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: false }, resolver);\n\n // wait for it to finish then push it out\n const resolvedData = await resolver;\n\n if (settings.debug) {\n console.info('[Gorgon] Cache resolved, resolved item for: ' + key, resolvedData);\n }\n\n const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));\n\n if (hOP.call(currentTasks, key)) {\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].res) {\n if (settings.debug) {\n console.info('[Gorgon] Cache queue resolved for: ' + key, resolvedData);\n }\n\n currentTasks[key][i].res(val);\n }\n }\n\n currentTasks[key] = [];\n delete currentTasks[key];\n }\n\n return val;\n } catch (e) {\n if (hOP.call(currentTasks, key)) {\n for (var i in currentTasks[key]) {\n if (currentTasks[key][i].rej) {\n currentTasks[key][i].rej(e);\n }\n }\n\n gorgonCore._callHooks('valueError', { key, asyncFunc, policy, cacheHit: false, queued: false }, e);\n\n currentTasks[key] = [];\n delete currentTasks[key];\n }\n\n throw e;\n }\n },\n };\n\n gorgonCore.addProvider('memory', MemoryCache()); // Default provider, light weight and simple\n\n return gorgonCore;\n})();\n\nexport { MemoryCache };\nexport default Gorgon;\n"],"names":["MemoryCacheCreator","cache","hOP","memoryCache","key","value","policy","to","i","Gorgon","currentTasks","settings","policyMaker","incPolicy","outPolicy","d","gorgonCore","input","output","e","newSettings","hook","name","provider","prov","hookIdentifier","keys","cacheMatchKeys","str","clearPromises","asyncFunc","resolvedData","val","currentVal","oldQueue","concurent","resolve","reject","resolver","MemoryCache"],"mappings":"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"}
package/index.ts CHANGED
@@ -154,10 +154,10 @@ const Gorgon = (() => {
154
154
  },
155
155
 
156
156
  // Clear one or all items in the cache
157
- clear: async (key: string, provider?: string) => {
157
+ clear: async (key: string, provider?: string, hookIdentifier?: string) => {
158
158
  var prov = gorgonCore.providers[provider || settings.defaultProvider];
159
159
 
160
- gorgonCore._callHooks('clear', { key, provider });
160
+ gorgonCore._callHooks('clear', { key, provider, identifier: hookIdentifier });
161
161
 
162
162
  // Clear a wildcard search of objects
163
163
  if (key && key.indexOf('*') > -1) {
@@ -179,10 +179,10 @@ const Gorgon = (() => {
179
179
  },
180
180
 
181
181
  // Clear all keys/values in the cache
182
- clearAll: async (provider?: string) => {
182
+ clearAll: async (provider?: string, hookIdentifier?: string) => {
183
183
  var prov = gorgonCore.providers[provider || settings.defaultProvider];
184
184
 
185
- gorgonCore._callHooks('clearAll', { provider });
185
+ gorgonCore._callHooks('clearAll', { provider, identifier: hookIdentifier });
186
186
 
187
187
  return prov.clear();
188
188
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gorgonjs/gorgon",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "A simple caching library for async functions",
5
5
  "homepage": "https://gorgonjs.dev",
6
6
  "main": "./dist/index.umd.js",