@graffy/cache 0.15.8-alpha.1 → 0.15.8-alpha.5

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/index.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";var e=require("@graffy/common"),t=require("@graffy/stream");module.exports=function({maxAge:n=6e4}={}){return r=>{const o=[];let a=[];const c=new Set,i=e.makeWatcher();function s(t=[]){const r=Date.now();let a;!o.length||r-o[0][0]>n/3?(a=[],o.unshift([r,a]),o.splice(3)):a=o[0][1],e.merge(a,t)}r.on("read",[],(async(t,r,c)=>{if(r.skipCache)return c(t);const i=Date.now()-n,f=[];let m=!1;if(a.length){const{known:n,unknown:r}=e.slice(a,t);if(n&&e.merge(f,n),!r)return f;t=r}for(let n=0;n<o.length;n++){const[r,a]=o[n];if(r<i)break;const{known:c,unknown:s}=e.slice(a,t);if(c&&e.merge(f,c),!(t=s))break;m=!0}if(t){m=!0;const n=await c(t);e.merge(f,n)}return m&&s(f),f})),r.on("watch",[],((n,r,o)=>{const a=o(n);if(r.skipCache)return a;const c=i.watch([]),f=t.mapStream(a,(e=>(s(e),e)));return e.mergeStreams(c,f)})),r.on("write",[],(async(t,n,o)=>{if(!n.optimism)return o(t);c.add(t),e.merge(a,t),i.write(t);try{const n=await o(t);return s(n),i.write(n),n}catch(f){const n=e.getKnown(t),o=await r.read(n);throw i.write(o),f}finally{c.delete(t),a=[];for(const t of c)e.merge(a,t)}}))}};
package/index.mjs ADDED
@@ -0,0 +1 @@
1
+ import{makeWatcher as t,slice as n,merge as e,mergeStreams as o,getKnown as r}from"@graffy/common";import{mapStream as a}from"@graffy/stream";function i({maxAge:i=6e4}={}){return c=>{const f=[];let s=[];const w=new Set,u=t();function l(t=[]){const n=Date.now();let o;!f.length||n-f[0][0]>i/3?(o=[],f.unshift([n,o]),f.splice(3)):o=f[0][1],e(o,t)}c.on("read",[],(async(t,o,r)=>{if(o.skipCache)return r(t);const a=Date.now()-i,c=[];let w=!1;if(s.length){const{known:o,unknown:r}=n(s,t);if(o&&e(c,o),!r)return c;t=r}for(let i=0;i<f.length;i++){const[o,r]=f[i];if(o<a)break;const{known:s,unknown:u}=n(r,t);if(s&&e(c,s),!(t=u))break;w=!0}if(t){w=!0;const n=await r(t);e(c,n)}return w&&l(c),c})),c.on("watch",[],((t,n,e)=>{const r=e(t);if(n.skipCache)return r;const i=u.watch([]),c=a(r,(t=>(l(t),t)));return o(i,c)})),c.on("write",[],(async(t,n,o)=>{if(!n.optimism)return o(t);w.add(t),e(s,t),u.write(t);try{const n=await o(t);return l(n),u.write(n),n}catch(a){const n=r(t),e=await c.read(n);throw u.write(e),a}finally{w.delete(t),s=[];for(const t of w)e(s,t)}}))}}export{i as default};
package/package.json CHANGED
@@ -2,8 +2,13 @@
2
2
  "name": "@graffy/cache",
3
3
  "description": "Graffy module providing in-memory caching.",
4
4
  "author": "aravind (https://github.com/aravindet)",
5
- "version": "0.15.8-alpha.1",
6
- "main": "./cjs/index.js",
5
+ "version": "0.15.8-alpha.5",
6
+ "main": "./index.cjs",
7
+ "exports": {
8
+ "import": "./index.mjs",
9
+ "require": "./index.cjs"
10
+ },
11
+ "module": "./index.mjs",
7
12
  "types": "./types/index.d.ts",
8
13
  "repository": {
9
14
  "type": "git",
@@ -11,8 +16,7 @@
11
16
  },
12
17
  "license": "Apache-2.0",
13
18
  "dependencies": {
14
- "@babel/runtime-corejs3": "^7.15.3",
15
- "@graffy/common": "0.15.8-alpha.1",
16
- "@graffy/stream": "0.15.8-alpha.1"
19
+ "@graffy/common": "0.15.8-alpha.5",
20
+ "@graffy/stream": "0.15.8-alpha.5"
17
21
  }
18
22
  }
package/cjs/index.js DELETED
@@ -1,259 +0,0 @@
1
- "use strict";
2
-
3
- var _sliceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/slice");
4
-
5
- var _Array$from = require("@babel/runtime-corejs3/core-js-stable/array/from");
6
-
7
- var _Symbol = require("@babel/runtime-corejs3/core-js-stable/symbol");
8
-
9
- var _getIteratorMethod = require("@babel/runtime-corejs3/core-js/get-iterator-method");
10
-
11
- var _bindInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/bind");
12
-
13
- var _Array$isArray = require("@babel/runtime-corejs3/core-js-stable/array/is-array");
14
-
15
- var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
16
-
17
- exports.__esModule = true;
18
- exports.default = _default;
19
-
20
- var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
21
-
22
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
23
-
24
- var _set = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set"));
25
-
26
- var _now = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/date/now"));
27
-
28
- var _splice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/splice"));
29
-
30
- var _common = require("@graffy/common");
31
-
32
- var _stream = require("@graffy/stream");
33
-
34
- function _createForOfIteratorHelperLoose(o, allowArrayLike) { var _context4; var it = typeof _Symbol !== "undefined" && _getIteratorMethod(o) || o["@@iterator"]; if (it) return _bindInstanceProperty(_context4 = (it = it.call(o)).next).call(_context4, it); if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
35
-
36
- function _unsupportedIterableToArray(o, minLen) { var _context3; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = _sliceInstanceProperty(_context3 = Object.prototype.toString.call(o)).call(_context3, 8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
37
-
38
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
39
-
40
- // import { debug } from '@graffy/testing';
41
- var DEFAULT_MAX_AGE = 60000;
42
- var NUM_LAYERS = 3;
43
-
44
- function _default(_temp) {
45
- var _ref = _temp === void 0 ? {} : _temp,
46
- _ref$maxAge = _ref.maxAge,
47
- maxAge = _ref$maxAge === void 0 ? DEFAULT_MAX_AGE : _ref$maxAge;
48
-
49
- return function (store) {
50
- var layers = [];
51
- var optimisticState = [];
52
- var optimisticChanges = new _set.default();
53
- var watcher = (0, _common.makeWatcher)();
54
-
55
- function addToCache(result) {
56
- if (result === void 0) {
57
- result = [];
58
- }
59
-
60
- var now = (0, _now.default)();
61
- var state;
62
-
63
- if (!layers.length || now - layers[0][0] > maxAge / NUM_LAYERS) {
64
- state = [];
65
- layers.unshift([now, state]);
66
- (0, _splice.default)(layers).call(layers, NUM_LAYERS);
67
- } else {
68
- state = layers[0][1];
69
- }
70
-
71
- (0, _common.merge)(state, result);
72
- }
73
-
74
- store.on('read', [], /*#__PURE__*/function () {
75
- var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(query, options, next) {
76
- var earliest, result, miss, _slice, known, unknown, i, _layers$i, fetchTime, state, _slice2, _known, _unknown, nextValue;
77
-
78
- return _regenerator.default.wrap(function _callee$(_context) {
79
- while (1) {
80
- switch (_context.prev = _context.next) {
81
- case 0:
82
- if (!options.skipCache) {
83
- _context.next = 2;
84
- break;
85
- }
86
-
87
- return _context.abrupt("return", next(query));
88
-
89
- case 2:
90
- earliest = (0, _now.default)() - maxAge;
91
- result = [];
92
- miss = false;
93
-
94
- if (!optimisticState.length) {
95
- _context.next = 11;
96
- break;
97
- }
98
-
99
- _slice = (0, _sliceInstanceProperty(_common))(optimisticState, query), known = _slice.known, unknown = _slice.unknown;
100
- if (known) (0, _common.merge)(result, known);
101
-
102
- if (unknown) {
103
- _context.next = 10;
104
- break;
105
- }
106
-
107
- return _context.abrupt("return", result);
108
-
109
- case 10:
110
- query = unknown;
111
-
112
- case 11:
113
- i = 0;
114
-
115
- case 12:
116
- if (!(i < layers.length)) {
117
- _context.next = 25;
118
- break;
119
- }
120
-
121
- _layers$i = layers[i], fetchTime = _layers$i[0], state = _layers$i[1];
122
-
123
- if (!(fetchTime < earliest)) {
124
- _context.next = 16;
125
- break;
126
- }
127
-
128
- return _context.abrupt("break", 25);
129
-
130
- case 16:
131
- _slice2 = (0, _sliceInstanceProperty(_common))(state, query), _known = _slice2.known, _unknown = _slice2.unknown;
132
- if (_known) (0, _common.merge)(result, _known);
133
- query = _unknown;
134
-
135
- if (query) {
136
- _context.next = 21;
137
- break;
138
- }
139
-
140
- return _context.abrupt("break", 25);
141
-
142
- case 21:
143
- miss = true;
144
-
145
- case 22:
146
- i++;
147
- _context.next = 12;
148
- break;
149
-
150
- case 25:
151
- if (!query) {
152
- _context.next = 31;
153
- break;
154
- }
155
-
156
- miss = true; // Required if 0 layers within maxAge.
157
-
158
- _context.next = 29;
159
- return next(query);
160
-
161
- case 29:
162
- nextValue = _context.sent;
163
- (0, _common.merge)(result, nextValue);
164
-
165
- case 31:
166
- if (miss) addToCache(result);
167
- return _context.abrupt("return", result);
168
-
169
- case 33:
170
- case "end":
171
- return _context.stop();
172
- }
173
- }
174
- }, _callee);
175
- }));
176
-
177
- return function (_x, _x2, _x3) {
178
- return _ref2.apply(this, arguments);
179
- };
180
- }());
181
- store.on('watch', [], function (query, options, next) {
182
- var nextStream = next(query);
183
- if (options.skipCache) return nextStream;
184
- var optiStream = watcher.watch([]);
185
- var nextStreamCopy = (0, _stream.mapStream)(nextStream, function (change) {
186
- addToCache(change);
187
- return change;
188
- });
189
- return (0, _common.mergeStreams)(optiStream, nextStreamCopy);
190
- });
191
- store.on('write', [], /*#__PURE__*/function () {
192
- var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(change, options, next) {
193
- var appliedChange, query, undo, _iterator, _step, oChange;
194
-
195
- return _regenerator.default.wrap(function _callee2$(_context2) {
196
- while (1) {
197
- switch (_context2.prev = _context2.next) {
198
- case 0:
199
- if (options.optimism) {
200
- _context2.next = 2;
201
- break;
202
- }
203
-
204
- return _context2.abrupt("return", next(change));
205
-
206
- case 2:
207
- optimisticChanges.add(change);
208
- (0, _common.merge)(optimisticState, change);
209
- watcher.write(change);
210
- _context2.prev = 5;
211
- _context2.next = 8;
212
- return next(change);
213
-
214
- case 8:
215
- appliedChange = _context2.sent;
216
- addToCache(appliedChange);
217
- watcher.write(appliedChange);
218
- return _context2.abrupt("return", appliedChange);
219
-
220
- case 14:
221
- _context2.prev = 14;
222
- _context2.t0 = _context2["catch"](5);
223
- query = (0, _common.getKnown)(change);
224
- _context2.next = 19;
225
- return store.read(query);
226
-
227
- case 19:
228
- undo = _context2.sent;
229
- watcher.write(undo);
230
- throw _context2.t0;
231
-
232
- case 22:
233
- _context2.prev = 22;
234
- optimisticChanges.delete(change);
235
- optimisticState = [];
236
-
237
- for (_iterator = _createForOfIteratorHelperLoose(optimisticChanges); !(_step = _iterator()).done;) {
238
- oChange = _step.value;
239
- (0, _common.merge)(optimisticState, oChange);
240
- }
241
-
242
- return _context2.finish(22);
243
-
244
- case 27:
245
- case "end":
246
- return _context2.stop();
247
- }
248
- }
249
- }, _callee2, null, [[5, 14, 22, 27]]);
250
- }));
251
-
252
- return function (_x4, _x5, _x6) {
253
- return _ref3.apply(this, arguments);
254
- };
255
- }());
256
- };
257
- }
258
-
259
- module.exports = exports.default;