@credithub/harlan-components 1.100.6 → 1.101.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.
@@ -47,8 +47,97 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
47
47
  function reject(value) { resume("throw", value); }
48
48
  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
49
49
  };
50
+ import { StreamReader } from '@credithub/webservice';
50
51
  import { useCallback, useContext, useEffect, useRef, useState } from 'react';
51
52
  import { WebService } from './webservice';
53
+ var streamReaderPrototype = StreamReader === null || StreamReader === void 0 ? void 0 : StreamReader.prototype;
54
+ if (streamReaderPrototype &&
55
+ typeof streamReaderPrototype.pipe === 'function' &&
56
+ !streamReaderPrototype.__patchedPartialJson) {
57
+ streamReaderPrototype.__patchedPartialJson = true;
58
+ streamReaderPrototype.pipe = function patchedPipe(stream) {
59
+ return __awaiter(this, void 0, void 0, function () {
60
+ var reader, decoder, buffer, looksIncomplete, emitIfComplete, done, _a, value, chunkDone, newlineIndex, line, error_1;
61
+ var _this = this;
62
+ return __generator(this, function (_b) {
63
+ switch (_b.label) {
64
+ case 0:
65
+ reader = stream.getReader();
66
+ decoder = new TextDecoder('utf-8');
67
+ buffer = '';
68
+ looksIncomplete = function (fragment) {
69
+ var _a, _b;
70
+ var trimmed = fragment.trim();
71
+ if (!trimmed)
72
+ return true;
73
+ var startsJson = trimmed.startsWith('{') || trimmed.startsWith('[');
74
+ if (!startsJson)
75
+ return false;
76
+ var openings = ((_a = trimmed.match(/[\[{]/g)) !== null && _a !== void 0 ? _a : []).length;
77
+ var closings = ((_b = trimmed.match(/[\]}]/g)) !== null && _b !== void 0 ? _b : []).length;
78
+ if (closings < openings)
79
+ return true;
80
+ var endsJson = /[\]}]$/.test(trimmed);
81
+ return !endsJson;
82
+ };
83
+ emitIfComplete = function (fragment) {
84
+ var candidate = fragment.trim();
85
+ if (!candidate)
86
+ return true;
87
+ try {
88
+ var parsed = JSON.parse(candidate);
89
+ _this.dispatch('data', parsed);
90
+ return true;
91
+ }
92
+ catch (err) {
93
+ if (looksIncomplete(candidate)) {
94
+ buffer = fragment;
95
+ return false;
96
+ }
97
+ console.warn('Error processing line, skipping...', candidate, err);
98
+ return true;
99
+ }
100
+ };
101
+ _b.label = 1;
102
+ case 1:
103
+ _b.trys.push([1, 5, , 6]);
104
+ done = false;
105
+ _b.label = 2;
106
+ case 2:
107
+ if (!!done) return [3 /*break*/, 4];
108
+ return [4 /*yield*/, reader.read()];
109
+ case 3:
110
+ _a = _b.sent(), value = _a.value, chunkDone = _a.done;
111
+ done = chunkDone;
112
+ if (value) {
113
+ buffer += decoder.decode(value, { stream: true });
114
+ newlineIndex = buffer.indexOf('\n');
115
+ while (newlineIndex !== -1) {
116
+ line = buffer.slice(0, newlineIndex);
117
+ buffer = buffer.slice(newlineIndex + 1);
118
+ if (!emitIfComplete(line)) {
119
+ break;
120
+ }
121
+ newlineIndex = buffer.indexOf('\n');
122
+ }
123
+ }
124
+ return [3 /*break*/, 2];
125
+ case 4:
126
+ if (buffer.trim()) {
127
+ emitIfComplete(buffer);
128
+ }
129
+ this.dispatch('end', undefined);
130
+ return [3 /*break*/, 6];
131
+ case 5:
132
+ error_1 = _b.sent();
133
+ this.dispatch('error', error_1);
134
+ throw error_1;
135
+ case 6: return [2 /*return*/];
136
+ }
137
+ });
138
+ });
139
+ };
140
+ }
52
141
  export function useStreamQuery(query, data, enabled) {
53
142
  var _this = this;
54
143
  if (enabled === void 0) { enabled = true; }