@graffy/fill 0.15.6 → 0.15.8-alpha.3

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 r=require("@graffy/common"),n=require("@graffy/stream"),t=require("debug"),e=require("@graffy/testing");function a(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var o=a(t);const i=o.default("graffy:fill:subscribe");function f(t,a,{raw:o}){const f=()=>r.finalize([],a,0);let l,u,c,s=[],m=f(),g=[];const w=n.makeStream(((r,n)=>(l=n=>{i("Push",e.format(n)),r(n)},u=n,p)));return d(a),w;async function d(n){try{const a=r.add(s,n);if(i(a?"Resubscribing":"Not resubscribing",e.format(n)),!a)return;c&&c.return(),c=t.call("watch",s,{skipFill:!0});let{value:o}=await c.next();i("First payload",typeof o,e.format(o)),void 0===o&&(o=await t.call("read",n,{skipCache:!0}),i("Read initial value",e.format(o))),k(o,!1)}catch(a){i("resubscribe error",a),y(a)}!async function(r){i("Start putting stream");try{for await(const n of r)k(n,!0)}catch(a){y(a)}}(c)}function k(n,t){if(void 0===n)return;if(i("Put",t?"Change":"Value",typeof n),null===n)return m=f(),void l(null);let u;t?u=r.sieve(m,n):(u=r.slice(n,s).known,u&&r.merge(m,u)),i("Sieved: ",u&&e.format(u)),o&&u&&r.merge(g,u);let{known:c,unknown:w}=r.slice(m,a);if(m=c||f(),i("Data and unknown",e.format(m),w&&e.format(w)),i("Payload and value",e.format(g),n&&e.format(n)),t&&n&&w){const t=r.slice(n,w);t.known&&(r.merge(m,t.known),o&&r.merge(g,t.known),w=t.unknown)}if(w)return d(w);o?g.length&&(l(g),g=[]):(!t||u&&u.length)&&l(m)}function y(r){u&&u(r),p()}function p(){c&&c.return()}}const l=o.default("graffy:fill");module.exports=function(n){return n=>{n.on("read",[],(async function(t,a,o){let i=await o(t);if(a.skipFill)return i;if(!i||!i.length)throw l("No progress",e.format(t)),Error("fill.no_progress");let f=10;for(;f-- >1;){const{known:e,unknown:a}=r.slice(i,t);if(i=e,!a)break;const o=await n.call("read",a,{skipFill:!0});r.merge(i,o)}if(!f)throw l("fill.max_recursion",e.format(i),e.format(t)),new Error("fill.max_recursion");return i})),n.on("watch",[],(function(r,t,e){return t.skipFill?e(r):f(n,r,t)}))}};
package/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ declare module "subscribe" {
2
+ export default function subscribe(store: any, originalQuery: any, { raw }: {
3
+ raw: any;
4
+ }): any;
5
+ }
6
+ declare module "index" {
7
+ export default function fill(_: any): (store: any) => void;
8
+ }
package/index.mjs ADDED
@@ -0,0 +1 @@
1
+ import{finalize as n,add as r,sieve as t,slice as o,merge as i}from"@graffy/common";import{makeStream as a}from"@graffy/stream";import e from"debug";import{format as l}from"@graffy/testing";const f=e("graffy:fill:subscribe");function u(e,u,{raw:c}){const s=()=>n([],u,0);let w,g,k,p=[],d=s(),m=[];const y=a(((n,r)=>(w=r=>{f("Push",l(r)),n(r)},g=r,F)));return h(u),y;async function h(n){try{const t=r(p,n);if(f(t?"Resubscribing":"Not resubscribing",l(n)),!t)return;k&&k.return(),k=e.call("watch",p,{skipFill:!0});let{value:o}=await k.next();f("First payload",typeof o,l(o)),void 0===o&&(o=await e.call("read",n,{skipCache:!0}),f("Read initial value",l(o))),b(o,!1)}catch(t){f("resubscribe error",t),v(t)}!async function(n){f("Start putting stream");try{for await(const r of n)b(r,!0)}catch(t){v(t)}}(k)}function b(n,r){if(void 0===n)return;if(f("Put",r?"Change":"Value",typeof n),null===n)return d=s(),void w(null);let a;r?a=t(d,n):(a=o(n,p).known,a&&i(d,a)),f("Sieved: ",a&&l(a)),c&&a&&i(m,a);let{known:e,unknown:g}=o(d,u);if(d=e||s(),f("Data and unknown",l(d),g&&l(g)),f("Payload and value",l(m),n&&l(n)),r&&n&&g){const r=o(n,g);r.known&&(i(d,r.known),c&&i(m,r.known),g=r.unknown)}if(g)return h(g);c?m.length&&(w(m),m=[]):(!r||a&&a.length)&&w(d)}function v(n){g&&g(n),F()}function F(){k&&k.return()}}const c=e("graffy:fill");function s(n){return n=>{n.on("read",[],(async function(r,t,a){let e=await a(r);if(t.skipFill)return e;if(!e||!e.length)throw c("No progress",l(r)),Error("fill.no_progress");let f=10;for(;f-- >1;){const{known:t,unknown:a}=o(e,r);if(e=t,!a)break;const l=await n.call("read",a,{skipFill:!0});i(e,l)}if(!f)throw c("fill.max_recursion",l(e),l(r)),new Error("fill.max_recursion");return e})),n.on("watch",[],(function(r,t,o){return t.skipFill?o(r):u(n,r,t)}))}}export{s as default};
package/package.json CHANGED
@@ -2,19 +2,23 @@
2
2
  "name": "@graffy/fill",
3
3
  "description": "Graffy module for fulfilling queries using multiple backends, traversing links and turning subscriptions into live queries.",
4
4
  "author": "aravind (https://github.com/aravindet)",
5
- "version": "0.15.6",
6
- "main": "./cjs/index.js",
7
- "types": "./types/index.d.ts",
5
+ "version": "0.15.8-alpha.3",
6
+ "main": "./index.cjs",
7
+ "exports": {
8
+ "import": "./index.mjs",
9
+ "require": "./index.cjs"
10
+ },
11
+ "module": "./index.mjs",
12
+ "types": "./index.d.ts",
8
13
  "repository": {
9
14
  "type": "git",
10
15
  "url": "git+https://github.com/usegraffy/graffy.git"
11
16
  },
12
17
  "license": "Apache-2.0",
13
18
  "dependencies": {
14
- "@babel/runtime-corejs3": "^7.15.3",
15
- "@graffy/common": "0.15.6",
16
- "@graffy/stream": "0.15.6",
19
+ "@graffy/common": "0.15.8-alpha.3",
20
+ "@graffy/stream": "0.15.8-alpha.3",
17
21
  "debug": "^4.3.2",
18
- "@graffy/testing": "0.15.6"
22
+ "@graffy/testing": "0.15.8-alpha.3"
19
23
  }
20
24
  }
package/cjs/index.js DELETED
@@ -1,123 +0,0 @@
1
- "use strict";
2
-
3
- var _sliceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/slice");
4
-
5
- var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
6
-
7
- exports.__esModule = true;
8
- exports.default = fill;
9
-
10
- var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
11
-
12
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
13
-
14
- var _common = require("@graffy/common");
15
-
16
- var _subscribe = _interopRequireDefault(require("./subscribe.js"));
17
-
18
- var _testing = require("@graffy/testing");
19
-
20
- var _debug = _interopRequireDefault(require("debug"));
21
-
22
- var log = (0, _debug.default)('graffy:fill');
23
- var MAX_RECURSIONS = 10;
24
-
25
- function fill(_) {
26
- return function (store) {
27
- store.on('read', [], /*#__PURE__*/function () {
28
- var _fillOnRead = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(query, options, next) {
29
- var value, budget, _slice, known, unknown, res;
30
-
31
- return _regenerator.default.wrap(function _callee$(_context) {
32
- while (1) {
33
- switch (_context.prev = _context.next) {
34
- case 0:
35
- _context.next = 2;
36
- return next(query);
37
-
38
- case 2:
39
- value = _context.sent;
40
-
41
- if (!options.skipFill) {
42
- _context.next = 5;
43
- break;
44
- }
45
-
46
- return _context.abrupt("return", value);
47
-
48
- case 5:
49
- if (!(!value || !value.length)) {
50
- _context.next = 8;
51
- break;
52
- }
53
-
54
- log('No progress', (0, _testing.format)(query));
55
- throw Error('fill.no_progress');
56
-
57
- case 8:
58
- budget = MAX_RECURSIONS;
59
-
60
- case 9:
61
- if (!(budget-- > 1)) {
62
- _context.next = 20;
63
- break;
64
- }
65
-
66
- // console.log('filled value', value);
67
- _slice = (0, _sliceInstanceProperty(_common))(value, query), known = _slice.known, unknown = _slice.unknown;
68
- value = known;
69
-
70
- if (unknown) {
71
- _context.next = 14;
72
- break;
73
- }
74
-
75
- return _context.abrupt("break", 20);
76
-
77
- case 14:
78
- _context.next = 16;
79
- return store.call('read', unknown, {
80
- skipFill: true
81
- });
82
-
83
- case 16:
84
- res = _context.sent;
85
- // console.log('fetched', res);
86
- (0, _common.merge)(value, res);
87
- _context.next = 9;
88
- break;
89
-
90
- case 20:
91
- if (budget) {
92
- _context.next = 23;
93
- break;
94
- }
95
-
96
- log('fill.max_recursion', (0, _testing.format)(value), (0, _testing.format)(query));
97
- throw new Error('fill.max_recursion');
98
-
99
- case 23:
100
- return _context.abrupt("return", value);
101
-
102
- case 24:
103
- case "end":
104
- return _context.stop();
105
- }
106
- }
107
- }, _callee);
108
- }));
109
-
110
- function fillOnRead(_x, _x2, _x3) {
111
- return _fillOnRead.apply(this, arguments);
112
- }
113
-
114
- return fillOnRead;
115
- }());
116
- store.on('watch', [], function fillOnWatch(query, options, next) {
117
- if (options.skipFill) return next(query);
118
- return (0, _subscribe.default)(store, query, options);
119
- });
120
- };
121
- }
122
-
123
- module.exports = exports.default;
package/cjs/subscribe.js DELETED
@@ -1,296 +0,0 @@
1
- "use strict";
2
-
3
- var _sliceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/slice");
4
-
5
- var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
6
-
7
- exports.__esModule = true;
8
- exports.default = subscribe;
9
-
10
- var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
11
-
12
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
13
-
14
- var _asyncIterator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncIterator"));
15
-
16
- var _common = require("@graffy/common");
17
-
18
- var _stream = require("@graffy/stream");
19
-
20
- var _debug = _interopRequireDefault(require("debug"));
21
-
22
- var _testing = require("@graffy/testing");
23
-
24
- var log = (0, _debug.default)('graffy:fill:subscribe');
25
-
26
- function subscribe(store, originalQuery, _ref) {
27
- var raw = _ref.raw;
28
-
29
- var empty = function empty() {
30
- return (0, _common.finalize)([], originalQuery, 0);
31
- };
32
-
33
- var push, end;
34
- var upstream;
35
- var query = [];
36
- var data = empty();
37
- var payload = [];
38
- var stream = (0, _stream.makeStream)(function (streamPush, streamEnd) {
39
- push = function push(v) {
40
- log('Push', (0, _testing.format)(v));
41
- streamPush(v);
42
- };
43
-
44
- end = streamEnd;
45
- return unsubscribe;
46
- });
47
- resubscribe(originalQuery);
48
- return stream;
49
-
50
- function resubscribe(_x) {
51
- return _resubscribe.apply(this, arguments);
52
- }
53
-
54
- function _resubscribe() {
55
- _resubscribe = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(unknown) {
56
- var changed, _yield$upstream$next, value;
57
-
58
- return _regenerator.default.wrap(function _callee$(_context) {
59
- while (1) {
60
- switch (_context.prev = _context.next) {
61
- case 0:
62
- _context.prev = 0;
63
- changed = (0, _common.add)(query, unknown);
64
- log(changed ? 'Resubscribing' : 'Not resubscribing', (0, _testing.format)(unknown));
65
-
66
- if (changed) {
67
- _context.next = 5;
68
- break;
69
- }
70
-
71
- return _context.abrupt("return");
72
-
73
- case 5:
74
- if (upstream) upstream.return(); // Close the existing stream.
75
-
76
- upstream = store.call('watch', query, {
77
- skipFill: true
78
- });
79
- _context.next = 9;
80
- return upstream.next();
81
-
82
- case 9:
83
- _yield$upstream$next = _context.sent;
84
- value = _yield$upstream$next.value;
85
- log('First payload', typeof value, (0, _testing.format)(value));
86
-
87
- if (!(typeof value === 'undefined')) {
88
- _context.next = 17;
89
- break;
90
- }
91
-
92
- _context.next = 15;
93
- return store.call('read', unknown, {
94
- skipCache: true
95
- });
96
-
97
- case 15:
98
- value = _context.sent;
99
- log('Read initial value', (0, _testing.format)(value));
100
-
101
- case 17:
102
- // value = value && slice(value, unknown).known;
103
- putValue(value, false);
104
- _context.next = 24;
105
- break;
106
-
107
- case 20:
108
- _context.prev = 20;
109
- _context.t0 = _context["catch"](0);
110
- log('resubscribe error', _context.t0);
111
- error(_context.t0);
112
-
113
- case 24:
114
- putStream(upstream);
115
-
116
- case 25:
117
- case "end":
118
- return _context.stop();
119
- }
120
- }
121
- }, _callee, null, [[0, 20]]);
122
- }));
123
- return _resubscribe.apply(this, arguments);
124
- }
125
-
126
- function putStream(_x2) {
127
- return _putStream.apply(this, arguments);
128
- }
129
-
130
- function _putStream() {
131
- _putStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(stream) {
132
- var _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, value;
133
-
134
- return _regenerator.default.wrap(function _callee2$(_context2) {
135
- while (1) {
136
- switch (_context2.prev = _context2.next) {
137
- case 0:
138
- // TODO: Backpressure: pause pulling if downstream listener is saturated.
139
- log('Start putting stream');
140
- _context2.prev = 1;
141
- _iteratorAbruptCompletion = false;
142
- _didIteratorError = false;
143
- _context2.prev = 4;
144
- _iterator = (0, _asyncIterator2.default)(stream);
145
-
146
- case 6:
147
- _context2.next = 8;
148
- return _iterator.next();
149
-
150
- case 8:
151
- if (!(_iteratorAbruptCompletion = !(_step = _context2.sent).done)) {
152
- _context2.next = 14;
153
- break;
154
- }
155
-
156
- value = _step.value;
157
- putValue(value, true);
158
-
159
- case 11:
160
- _iteratorAbruptCompletion = false;
161
- _context2.next = 6;
162
- break;
163
-
164
- case 14:
165
- _context2.next = 20;
166
- break;
167
-
168
- case 16:
169
- _context2.prev = 16;
170
- _context2.t0 = _context2["catch"](4);
171
- _didIteratorError = true;
172
- _iteratorError = _context2.t0;
173
-
174
- case 20:
175
- _context2.prev = 20;
176
- _context2.prev = 21;
177
-
178
- if (!(_iteratorAbruptCompletion && _iterator.return != null)) {
179
- _context2.next = 25;
180
- break;
181
- }
182
-
183
- _context2.next = 25;
184
- return _iterator.return();
185
-
186
- case 25:
187
- _context2.prev = 25;
188
-
189
- if (!_didIteratorError) {
190
- _context2.next = 28;
191
- break;
192
- }
193
-
194
- throw _iteratorError;
195
-
196
- case 28:
197
- return _context2.finish(25);
198
-
199
- case 29:
200
- return _context2.finish(20);
201
-
202
- case 30:
203
- _context2.next = 35;
204
- break;
205
-
206
- case 32:
207
- _context2.prev = 32;
208
- _context2.t1 = _context2["catch"](1);
209
- error(_context2.t1);
210
-
211
- case 35:
212
- case "end":
213
- return _context2.stop();
214
- }
215
- }
216
- }, _callee2, null, [[1, 32], [4, 16, 20, 30], [21,, 25, 29]]);
217
- }));
218
- return _putStream.apply(this, arguments);
219
- }
220
-
221
- function putValue(value, isChange) {
222
- if (typeof value === 'undefined') return;
223
- log('Put', isChange ? 'Change' : 'Value', typeof value);
224
-
225
- if (value === null) {
226
- // No results exist at this moment.
227
- data = empty();
228
- push(null);
229
- return;
230
- } // We do this to ensure that everything in value gets incorporated
231
- // into data, even as we use sieve to ensure only actual changes are
232
- // added to payload.
233
- // if (!isChange) merge(data, [{ key: '', end: '\uffff', version: -1 }]);
234
- // log('Data before sieve', format(data));
235
-
236
-
237
- var sieved;
238
-
239
- if (isChange) {
240
- sieved = (0, _common.sieve)(data, value);
241
- } else {
242
- sieved = (0, _sliceInstanceProperty(_common))(value, query).known;
243
- if (sieved) (0, _common.merge)(data, sieved);
244
- }
245
-
246
- log('Sieved: ', sieved && (0, _testing.format)(sieved));
247
-
248
- if (raw && sieved) {
249
- // log('Payload before adding sieved', format(payload));
250
- (0, _common.merge)(payload, sieved); // log('Payload after adding sieved', format(payload));
251
- } // The new value might have removed a link, making parts of
252
- // data unnecessary, or added a link, introducing
253
- // new data requirements. Let's find out.
254
-
255
-
256
- var _slice = (0, _sliceInstanceProperty(_common))(data, originalQuery),
257
- known = _slice.known,
258
- unknown = _slice.unknown;
259
-
260
- data = known || empty();
261
- log('Data and unknown', (0, _testing.format)(data), unknown && (0, _testing.format)(unknown));
262
- log('Payload and value', (0, _testing.format)(payload), value && (0, _testing.format)(value));
263
-
264
- if (isChange && value && unknown) {
265
- // The sieve may have removed some necessary data (that we weren't aware
266
- // was necessary). Get it back.
267
- var valueParts = (0, _sliceInstanceProperty(_common))(value, unknown);
268
-
269
- if (valueParts.known) {
270
- (0, _common.merge)(data, valueParts.known);
271
- if (raw) (0, _common.merge)(payload, valueParts.known);
272
- unknown = valueParts.unknown;
273
- }
274
- }
275
-
276
- if (unknown) return resubscribe(unknown);
277
-
278
- if (!raw) {
279
- if (!isChange || sieved && sieved.length) push(data);
280
- } else if (payload.length) {
281
- push(payload);
282
- payload = [];
283
- }
284
- }
285
-
286
- function error(e) {
287
- if (end) end(e);
288
- unsubscribe();
289
- }
290
-
291
- function unsubscribe() {
292
- if (upstream) upstream.return();
293
- }
294
- }
295
-
296
- module.exports = exports.default;
package/types/index.d.ts DELETED
@@ -1 +0,0 @@
1
- export default function fill(_: any): (store: any) => void;
@@ -1,3 +0,0 @@
1
- export default function subscribe(store: any, originalQuery: any, { raw }: {
2
- raw: any;
3
- }): any;