@gorgonjs/gorgon 1.4.1 → 1.5.0

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.
@@ -0,0 +1,196 @@
1
+ /* eslint-disable */
2
+ var addSorting = (function() {
3
+ 'use strict';
4
+ var cols,
5
+ currentSort = {
6
+ index: 0,
7
+ desc: false
8
+ };
9
+
10
+ // returns the summary table element
11
+ function getTable() {
12
+ return document.querySelector('.coverage-summary');
13
+ }
14
+ // returns the thead element of the summary table
15
+ function getTableHeader() {
16
+ return getTable().querySelector('thead tr');
17
+ }
18
+ // returns the tbody element of the summary table
19
+ function getTableBody() {
20
+ return getTable().querySelector('tbody');
21
+ }
22
+ // returns the th element for nth column
23
+ function getNthColumn(n) {
24
+ return getTableHeader().querySelectorAll('th')[n];
25
+ }
26
+
27
+ function onFilterInput() {
28
+ const searchValue = document.getElementById('fileSearch').value;
29
+ const rows = document.getElementsByTagName('tbody')[0].children;
30
+ for (let i = 0; i < rows.length; i++) {
31
+ const row = rows[i];
32
+ if (
33
+ row.textContent
34
+ .toLowerCase()
35
+ .includes(searchValue.toLowerCase())
36
+ ) {
37
+ row.style.display = '';
38
+ } else {
39
+ row.style.display = 'none';
40
+ }
41
+ }
42
+ }
43
+
44
+ // loads the search box
45
+ function addSearchBox() {
46
+ var template = document.getElementById('filterTemplate');
47
+ var templateClone = template.content.cloneNode(true);
48
+ templateClone.getElementById('fileSearch').oninput = onFilterInput;
49
+ template.parentElement.appendChild(templateClone);
50
+ }
51
+
52
+ // loads all columns
53
+ function loadColumns() {
54
+ var colNodes = getTableHeader().querySelectorAll('th'),
55
+ colNode,
56
+ cols = [],
57
+ col,
58
+ i;
59
+
60
+ for (i = 0; i < colNodes.length; i += 1) {
61
+ colNode = colNodes[i];
62
+ col = {
63
+ key: colNode.getAttribute('data-col'),
64
+ sortable: !colNode.getAttribute('data-nosort'),
65
+ type: colNode.getAttribute('data-type') || 'string'
66
+ };
67
+ cols.push(col);
68
+ if (col.sortable) {
69
+ col.defaultDescSort = col.type === 'number';
70
+ colNode.innerHTML =
71
+ colNode.innerHTML + '<span class="sorter"></span>';
72
+ }
73
+ }
74
+ return cols;
75
+ }
76
+ // attaches a data attribute to every tr element with an object
77
+ // of data values keyed by column name
78
+ function loadRowData(tableRow) {
79
+ var tableCols = tableRow.querySelectorAll('td'),
80
+ colNode,
81
+ col,
82
+ data = {},
83
+ i,
84
+ val;
85
+ for (i = 0; i < tableCols.length; i += 1) {
86
+ colNode = tableCols[i];
87
+ col = cols[i];
88
+ val = colNode.getAttribute('data-value');
89
+ if (col.type === 'number') {
90
+ val = Number(val);
91
+ }
92
+ data[col.key] = val;
93
+ }
94
+ return data;
95
+ }
96
+ // loads all row data
97
+ function loadData() {
98
+ var rows = getTableBody().querySelectorAll('tr'),
99
+ i;
100
+
101
+ for (i = 0; i < rows.length; i += 1) {
102
+ rows[i].data = loadRowData(rows[i]);
103
+ }
104
+ }
105
+ // sorts the table using the data for the ith column
106
+ function sortByIndex(index, desc) {
107
+ var key = cols[index].key,
108
+ sorter = function(a, b) {
109
+ a = a.data[key];
110
+ b = b.data[key];
111
+ return a < b ? -1 : a > b ? 1 : 0;
112
+ },
113
+ finalSorter = sorter,
114
+ tableBody = document.querySelector('.coverage-summary tbody'),
115
+ rowNodes = tableBody.querySelectorAll('tr'),
116
+ rows = [],
117
+ i;
118
+
119
+ if (desc) {
120
+ finalSorter = function(a, b) {
121
+ return -1 * sorter(a, b);
122
+ };
123
+ }
124
+
125
+ for (i = 0; i < rowNodes.length; i += 1) {
126
+ rows.push(rowNodes[i]);
127
+ tableBody.removeChild(rowNodes[i]);
128
+ }
129
+
130
+ rows.sort(finalSorter);
131
+
132
+ for (i = 0; i < rows.length; i += 1) {
133
+ tableBody.appendChild(rows[i]);
134
+ }
135
+ }
136
+ // removes sort indicators for current column being sorted
137
+ function removeSortIndicators() {
138
+ var col = getNthColumn(currentSort.index),
139
+ cls = col.className;
140
+
141
+ cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
142
+ col.className = cls;
143
+ }
144
+ // adds sort indicators for current column being sorted
145
+ function addSortIndicators() {
146
+ getNthColumn(currentSort.index).className += currentSort.desc
147
+ ? ' sorted-desc'
148
+ : ' sorted';
149
+ }
150
+ // adds event listeners for all sorter widgets
151
+ function enableUI() {
152
+ var i,
153
+ el,
154
+ ithSorter = function ithSorter(i) {
155
+ var col = cols[i];
156
+
157
+ return function() {
158
+ var desc = col.defaultDescSort;
159
+
160
+ if (currentSort.index === i) {
161
+ desc = !currentSort.desc;
162
+ }
163
+ sortByIndex(i, desc);
164
+ removeSortIndicators();
165
+ currentSort.index = i;
166
+ currentSort.desc = desc;
167
+ addSortIndicators();
168
+ };
169
+ };
170
+ for (i = 0; i < cols.length; i += 1) {
171
+ if (cols[i].sortable) {
172
+ // add the click event handler on the th so users
173
+ // dont have to click on those tiny arrows
174
+ el = getNthColumn(i).querySelector('.sorter').parentElement;
175
+ if (el.addEventListener) {
176
+ el.addEventListener('click', ithSorter(i));
177
+ } else {
178
+ el.attachEvent('onclick', ithSorter(i));
179
+ }
180
+ }
181
+ }
182
+ }
183
+ // adds sorting functionality to the UI
184
+ return function() {
185
+ if (!getTable()) {
186
+ return;
187
+ }
188
+ cols = loadColumns();
189
+ loadData();
190
+ addSearchBox();
191
+ addSortIndicators();
192
+ enableUI();
193
+ };
194
+ })();
195
+
196
+ window.addEventListener('load', addSorting);
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import MemoryCache from './provider/memory';
2
2
  export type asyncFunction = () => Promise<any> | (() => any);
3
+ export type GorgonHookKey = 'settings' | 'addProvider' | 'put' | 'clear' | 'clearAll' | 'overwrite' | 'get' | 'valueError';
4
+ export type GorgonHook = (key: GorgonHookKey, input?: any, output?: any) => void;
3
5
  export type GorgonSettings = {
4
6
  debug: boolean;
5
7
  defaultProvider: string;
@@ -30,7 +32,12 @@ declare const Gorgon: {
30
32
  providers: {
31
33
  [key: string]: IGorgonCacheProvider;
32
34
  };
35
+ hooks: {
36
+ [key: string]: GorgonHook[];
37
+ };
38
+ _callHooks: (key: GorgonHookKey, input?: any, output?: any) => void;
33
39
  settings: (newSettings?: GorgonSettingsInput) => GorgonSettings;
40
+ addHook: (key: GorgonHookKey, hook: GorgonHook | Array<GorgonHook>) => void;
34
41
  addProvider: (name: string, provider: IGorgonCacheProvider) => void;
35
42
  put: <R>(key: string, value: R, policy?: GorgonPolicyInput) => Promise<R>;
36
43
  clear: (key: string, provider?: string) => Promise<boolean | boolean[]>;
package/dist/index.es.js CHANGED
@@ -1,139 +1,158 @@
1
1
  const g = () => {
2
- const e = {}, c = e.hasOwnProperty, n = {
2
+ const o = {}, u = o.hasOwnProperty, n = {
3
3
  init: async () => {
4
4
  },
5
- get: async (a) => {
6
- if (c.call(e, a) && e[a].val)
7
- return e[a].val;
5
+ get: async (s) => {
6
+ if (u.call(o, s) && o[s].val)
7
+ return o[s].val;
8
8
  },
9
- set: async (a, s, r) => {
10
- await n.clear(a);
11
- var t = !1;
12
- return r && r.expiry && r.expiry > 0 && (t = setTimeout(function() {
13
- n.clear(a);
14
- }, r.expiry)), e[a] = {
9
+ set: async (s, t, r) => {
10
+ await n.clear(s);
11
+ var e = !1;
12
+ return r && r.expiry && r.expiry > 0 && (e = setTimeout(function() {
13
+ n.clear(s);
14
+ }, r.expiry)), o[s] = {
15
15
  policy: r,
16
- val: s,
17
- to: t
18
- }, s;
16
+ val: t,
17
+ to: e
18
+ }, t;
19
19
  },
20
- keys: async () => Object.keys(e),
21
- clear: async (a) => {
22
- if (!a) {
23
- for (var s in e)
24
- n._clear(s);
20
+ keys: async () => Object.keys(o),
21
+ clear: async (s) => {
22
+ if (!s) {
23
+ for (var t in o)
24
+ n._clear(t);
25
25
  return !0;
26
26
  }
27
- return n._clear(a);
27
+ return n._clear(s);
28
28
  },
29
- _clear: (a) => c.call(e, a) ? (e[a].to && clearTimeout(e[a].to), e[a] = null, delete e[a], !0) : !1
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
31
  return n;
32
- }, h = (() => {
33
- const e = {}, c = e.hasOwnProperty, n = {
32
+ }, m = (() => {
33
+ const o = {}, u = o.hasOwnProperty, n = {
34
34
  debug: !1,
35
35
  defaultProvider: "memory",
36
36
  retry: 5e3
37
- }, a = function(r) {
38
- const t = {
37
+ }, s = function(r) {
38
+ const e = {
39
39
  expiry: !1,
40
40
  provider: n.defaultProvider
41
41
  };
42
42
  if (!r)
43
- return t;
43
+ return e;
44
44
  if (r instanceof Date) {
45
- var o = /* @__PURE__ */ new Date();
46
- t.expiry = Math.ceil((r.getTime() - o.getTime()) / 1e3);
45
+ var a = /* @__PURE__ */ new Date();
46
+ e.expiry = Math.ceil((r.getTime() - a.getTime()) / 1e3);
47
47
  } else
48
- typeof r == "object" && r.expiry ? (r.expiry instanceof Date ? t.expiry = Math.ceil((r.expiry.getTime() - o.getTime()) / 1e3) : t.expiry = r.expiry, t.provider = r.provider || t.provider) : typeof r == "object" ? t.provider = r.provider || t.provider : typeof r == "number" && (t.expiry = r);
49
- return t.expiry = t.expiry && t.expiry > 0 ? t.expiry : !1, t;
50
- }, s = {
48
+ typeof r == "object" && r.expiry ? (r.expiry instanceof Date ? e.expiry = Math.ceil((r.expiry.getTime() - a.getTime()) / 1e3) : e.expiry = r.expiry, e.provider = r.provider || e.provider) : typeof r == "object" ? e.provider = r.provider || e.provider : typeof r == "number" && (e.expiry = r);
49
+ return e.expiry = e.expiry && e.expiry > 0 ? e.expiry : !1, e;
50
+ }, t = {
51
51
  // Providers available for use
52
52
  providers: {},
53
+ // Hooks
54
+ hooks: {},
55
+ _callHooks: (r, e, a) => {
56
+ if (u.call(t.hooks, r)) {
57
+ for (var i in t.hooks[r])
58
+ if (typeof t.hooks[r][i] == "function")
59
+ try {
60
+ t.hooks[r][i](r, e, a);
61
+ } catch (l) {
62
+ console.error("[Gorgon] Hook error for hook: " + r, l);
63
+ }
64
+ }
65
+ },
53
66
  // Allows for settings on the gorgon cache
54
- settings: (r) => (r && Object.assign(n, r), n),
67
+ settings: (r) => (r && (Object.assign(n, r), t._callHooks("settings", r, n)), n),
68
+ // add a hook or array of hooks
69
+ addHook: (r, e) => {
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);
71
+ },
55
72
  // Add a provider
56
- addProvider: (r, t) => {
57
- t.init(), s.providers[r] = t;
73
+ addProvider: (r, e) => {
74
+ e.init(), t.providers[r] = e, t._callHooks("addProvider", { name: r, provider: e });
58
75
  },
59
76
  // Place an item into the cache
60
- put: async (r, t, o) => {
61
- o = a(o);
62
- var u = s.providers[o.provider];
63
- return u.set(r, t, a(o));
77
+ put: async (r, e, a) => {
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));
64
81
  },
65
82
  // Clear one or all items in the cache
66
- clear: async (r, t) => {
67
- var o = s.providers[t || n.defaultProvider];
68
- return r && r.indexOf("*") > -1 ? o.keys().then(function(u) {
69
- var v = u.filter(function(i) {
70
- return new RegExp("^" + r.split("*").join(".*") + "$").test(i);
71
- }), l = v.map(o.clear);
72
- return l.push(o.clear(r)), Promise.all(l);
73
- }) : o.clear(r);
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);
74
91
  },
75
92
  // Clear all keys/values in the cache
76
93
  clearAll: async (r) => {
77
- var t = s.providers[r || n.defaultProvider];
78
- return t.clear();
94
+ var e = t.providers[r || n.defaultProvider];
95
+ return t._callHooks("clearAll", { provider: r }), e.clear();
79
96
  },
80
97
  // Allows you to instantly overwite a cache object
81
- overwrite: async (r, t, o) => {
98
+ overwrite: async (r, e, a) => {
82
99
  try {
83
- const u = await t();
84
- return await s.put(r, u, a(o));
85
- } catch (u) {
86
- throw u;
100
+ const i = await e(), l = await t.put(r, i, s(a));
101
+ return t._callHooks("overwrite", { key: r, asyncFunc: e, policy: a }, l), l;
102
+ } catch (i) {
103
+ throw i;
87
104
  }
88
105
  },
89
106
  // Allows you to get from the cache or pull from the promise
90
- get: async (r, t, o) => {
91
- o = a(o);
92
- const v = await s.providers[o.provider].get(r);
93
- if (v !== void 0)
94
- return n.debug && console.info("[Gorgon] Cache hit for key: " + r, v), v;
95
- if (c.call(e, r) && Array.isArray(e[r]) && e[r].length > 0) {
96
- var l = !1;
97
- for (var i in e[r])
98
- e[r][i].queued < new Date(Date.now() - n.retry) && (l = !0);
99
- if (!l) {
107
+ get: async (r, e, a) => {
108
+ a = s(a);
109
+ const l = await t.providers[a.provider].get(r);
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;
112
+ if (u.call(o, r) && Array.isArray(o[r]) && o[r].length > 0) {
113
+ var d = !1;
114
+ for (var f in o[r])
115
+ o[r][f].queued < new Date(Date.now() - n.retry) && (d = !0);
116
+ if (!d) {
100
117
  n.debug && console.info("[Gorgon] Cache miss, in progress, adding to current queue for key: " + r);
101
- var p = new Promise(function(f, d) {
102
- e[r].push({
103
- res: f,
104
- rej: d,
118
+ var h = new Promise(function(c, v) {
119
+ o[r].push({
120
+ res: c,
121
+ rej: v,
105
122
  queued: /* @__PURE__ */ new Date()
106
123
  });
107
124
  });
108
- return p;
125
+ return t._callHooks("get", { key: r, asyncFunc: e, policy: a, cacheHit: !1, queued: !0 }, h), h;
109
126
  }
110
127
  } else
111
- e[r] = [{ queued: /* @__PURE__ */ new Date() }];
128
+ o[r] = [{ queued: /* @__PURE__ */ new Date() }];
112
129
  try {
113
130
  n.debug && console.info("[Gorgon] Cache miss, resolving item for: " + r);
114
- const f = await t();
115
- n.debug && console.info("[Gorgon] Cache resolved, resolved item for: " + r, f);
116
- const d = await s.put(r, f, a(o));
117
- if (c.call(e, r)) {
118
- for (var i in e[r])
119
- e[r][i].res && (n.debug && console.info("[Gorgon] Cache queue resolved for: " + r, f), e[r][i].res(d));
120
- e[r] = [], delete e[r];
131
+ const c = e();
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));
136
+ if (u.call(o, r)) {
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));
139
+ o[r] = [], delete o[r];
121
140
  }
122
- return d;
123
- } catch (f) {
124
- if (c.call(e, r)) {
125
- for (var i in e[r])
126
- e[r][i].rej && e[r][i].rej(f);
127
- e[r] = [], delete e[r];
141
+ return p;
142
+ } catch (c) {
143
+ if (u.call(o, r)) {
144
+ for (var f in o[r])
145
+ o[r][f].rej && o[r][f].rej(c);
146
+ t._callHooks("valueError", { key: r, asyncFunc: e, policy: a, cacheHit: !1, queued: !1 }, c), o[r] = [], delete o[r];
128
147
  }
129
- throw f;
148
+ throw c;
130
149
  }
131
150
  }
132
151
  };
133
- return s.addProvider("memory", g()), s;
152
+ return t.addProvider("memory", g()), t;
134
153
  })();
135
154
  export {
136
155
  g as MemoryCache,
137
- h as default
156
+ m as default
138
157
  };
139
158
  //# sourceMappingURL=index.es.js.map
@@ -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 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\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\n // Providers available for use\n providers: {} as {[key: string]: IGorgonCacheProvider},\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 return settings;\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\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 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\n var prov = gorgonCore.providers[provider || settings.defaultProvider];\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\n // Clear all keys/values in the cache\n clearAll: async(provider?: string) => {\n var prov = gorgonCore.providers[provider || settings.defaultProvider];\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\n try{\n const resolvedData = await asyncFunc();\n\n const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));\n\n return val;\n }catch (e) {\n throw e;\n }\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\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) {console.info('[Gorgon] Cache hit for key: ' + key, currentVal);}\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) {console.info('[Gorgon] Cache miss, in progress, adding to current queue for key: ' + key);}\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 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) {console.info('[Gorgon] Cache miss, resolving item for: ' + key);}\n\n // This is the primary item, lets resolve and push it out\n const resolvedData = await asyncFunc();\n\n if(settings.debug) {console.info('[Gorgon] Cache resolved, resolved item for: ' + key, resolvedData);}\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) {console.info('[Gorgon] Cache queue resolved for: ' + key, resolvedData);}\n\n currentTasks[key][i].res(val);\n }\n }\n\n currentTasks[key] = [];\n delete currentTasks[key];\n }\n\n return val;\n\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 currentTasks[key] = [];\n delete currentTasks[key];\n }\n\n throw e;\n }\n\n },\n\n\n };\n\n gorgonCore.addProvider('memory', MemoryCache()); // Default provider, light weight and simple\n\n return gorgonCore;\n\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","newSettings","name","provider","prov","keys","cacheMatchKeys","str","clearPromises","asyncFunc","resolvedData","e","currentVal","oldQueue","concurent","resolve","reject","val","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) => {\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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"}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- (function(d,l){typeof exports=="object"&&typeof module<"u"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(d=typeof globalThis<"u"?globalThis:d||self,l(d.Gorgon={}))})(this,function(d){"use strict";const l=()=>{const r={},c=r.hasOwnProperty,a={init:async()=>{},get:async o=>{if(c.call(r,o)&&r[o].val)return r[o].val},set:async(o,i,e)=>{await a.clear(o);var t=!1;return e&&e.expiry&&e.expiry>0&&(t=setTimeout(function(){a.clear(o)},e.expiry)),r[o]={policy:e,val:i,to:t},i},keys:async()=>Object.keys(r),clear:async o=>{if(!o){for(var i in r)a._clear(i);return!0}return a._clear(o)},_clear:o=>c.call(r,o)?(r[o].to&&clearTimeout(r[o].to),r[o]=null,delete r[o],!0):!1};return a},h=(()=>{const r={},c=r.hasOwnProperty,a={debug:!1,defaultProvider:"memory",retry:5e3},o=function(e){const t={expiry:!1,provider:a.defaultProvider};if(!e)return t;if(e instanceof Date){var n=new Date;t.expiry=Math.ceil((e.getTime()-n.getTime())/1e3)}else typeof e=="object"&&e.expiry?(e.expiry instanceof Date?t.expiry=Math.ceil((e.expiry.getTime()-n.getTime())/1e3):t.expiry=e.expiry,t.provider=e.provider||t.provider):typeof e=="object"?t.provider=e.provider||t.provider:typeof e=="number"&&(t.expiry=e);return t.expiry=t.expiry&&t.expiry>0?t.expiry:!1,t},i={providers:{},settings:e=>(e&&Object.assign(a,e),a),addProvider:(e,t)=>{t.init(),i.providers[e]=t},put:async(e,t,n)=>{n=o(n);var u=i.providers[n.provider];return u.set(e,t,o(n))},clear:async(e,t)=>{var n=i.providers[t||a.defaultProvider];return e&&e.indexOf("*")>-1?n.keys().then(function(u){var v=u.filter(function(s){return new RegExp("^"+e.split("*").join(".*")+"$").test(s)}),p=v.map(n.clear);return p.push(n.clear(e)),Promise.all(p)}):n.clear(e)},clearAll:async e=>{var t=i.providers[e||a.defaultProvider];return t.clear()},overwrite:async(e,t,n)=>{try{const u=await t();return await i.put(e,u,o(n))}catch(u){throw u}},get:async(e,t,n)=>{n=o(n);const v=await i.providers[n.provider].get(e);if(v!==void 0)return a.debug&&console.info("[Gorgon] Cache hit for key: "+e,v),v;if(c.call(r,e)&&Array.isArray(r[e])&&r[e].length>0){var p=!1;for(var s in r[e])r[e][s].queued<new Date(Date.now()-a.retry)&&(p=!0);if(!p){a.debug&&console.info("[Gorgon] Cache miss, in progress, adding to current queue for key: "+e);var m=new Promise(function(f,g){r[e].push({res:f,rej:g,queued:new Date})});return m}}else r[e]=[{queued:new Date}];try{a.debug&&console.info("[Gorgon] Cache miss, resolving item for: "+e);const f=await t();a.debug&&console.info("[Gorgon] Cache resolved, resolved item for: "+e,f);const g=await i.put(e,f,o(n));if(c.call(r,e)){for(var s in r[e])r[e][s].res&&(a.debug&&console.info("[Gorgon] Cache queue resolved for: "+e,f),r[e][s].res(g));r[e]=[],delete r[e]}return g}catch(f){if(c.call(r,e)){for(var s in r[e])r[e][s].rej&&r[e][s].rej(f);r[e]=[],delete r[e]}throw f}}};return i.addProvider("memory",l()),i})();d.MemoryCache=l,d.default=h,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
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"}})});
2
2
  //# sourceMappingURL=index.umd.js.map