@nxtedition/lib 19.0.9 → 19.0.10

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.
Files changed (2) hide show
  1. package/deepstream.js +0 -118
  2. package/package.json +1 -1
package/deepstream.js CHANGED
@@ -1,9 +1,5 @@
1
1
  import qs from 'qs'
2
2
  import cached from './util/cached.js'
3
- import undici from 'undici'
4
- import stream from 'node:stream'
5
- import split2 from 'split2'
6
- import { defaultDelay as delay } from './http.js'
7
3
 
8
4
  function provide(ds, domain, callback, options) {
9
5
  if (domain instanceof RegExp) {
@@ -131,132 +127,18 @@ export function makeDeepstream(ds) {
131
127
  set: (...args) => ds.record.set(...args),
132
128
  get: (...args) => get(ds, ...args),
133
129
  update: (...args) => ds.record.update(...args),
134
- changes: (...args) => changes(ds, ...args),
135
130
  },
136
131
  }
137
132
  ds.nxt = nxt
138
133
  return nxt
139
134
  }
140
135
 
141
- async function* changes(
142
- ds,
143
- {
144
- origin,
145
- since = 'now',
146
- live = true,
147
- batched = false,
148
- includeDocs = false,
149
- highWaterMark = 256 * 1024,
150
- heartbeat = 60e3,
151
- signal,
152
- retry,
153
- },
154
- ) {
155
- const url = new URL('/_record/changes', origin)
156
-
157
- url.searchParams.set('since', since || '0')
158
- url.searchParams.set('live', String(live))
159
- url.searchParams.set('include_docs', String(includeDocs))
160
-
161
- let ac
162
-
163
- const abort = () => {
164
- ac?.abort(signal.reason)
165
- }
166
-
167
- signal?.addEventListener('abort', abort)
168
-
169
- try {
170
- for (let retryCount = 0; true; retryCount++) {
171
- ac = new AbortController()
172
- try {
173
- // TODO (fix): Use nxt-undici
174
- const res = await undici.request(url, {
175
- idempotent: false,
176
- blocking: true,
177
- method: 'GET',
178
- signal: ac.signal,
179
- throwOnError: true,
180
- highWaterMark,
181
- bodyTimeout: 2 * heartbeat,
182
- })
183
-
184
- const src = stream.pipeline(res.body, split2(), () => {})
185
-
186
- let error
187
- let ended = false
188
- let resume = () => {}
189
-
190
- src
191
- .on('error', (err) => {
192
- error = err
193
- resume()
194
- })
195
- .on('readable', () => {
196
- resume()
197
- })
198
- .on('end', () => {
199
- ended = true
200
- resume()
201
- })
202
-
203
- const batch = batched ? [] : null
204
- while (true) {
205
- const line = src.read()
206
-
207
- if (line === '') {
208
- continue
209
- } else if (line !== null) {
210
- const change = JSON.parse(line)
211
-
212
- retryCount = 0
213
-
214
- if (change.seq) {
215
- since = change.seq
216
- }
217
- if (batch) {
218
- batch.push(change)
219
- } else {
220
- yield change
221
- }
222
- } else if (batch?.length) {
223
- yield batch.splice(0)
224
- } else if (error) {
225
- throw error
226
- } else if (ended) {
227
- return
228
- } else {
229
- await new Promise((resolve) => {
230
- resume = resolve
231
- })
232
- }
233
- }
234
- } catch (err) {
235
- if (typeof retry === 'function') {
236
- const retryState = { since }
237
- await retry(err, retryCount, retryState, { signal: ac.signal })
238
- url.searchParams.set('since', since || '0')
239
- } else {
240
- await delay(err, retryCount, { signal: ac.signal })
241
- }
242
- } finally {
243
- ac.abort()
244
- ac = null
245
- }
246
- }
247
- } finally {
248
- signal?.removeEventListener('abort', abort)
249
- }
250
- }
251
-
252
136
  Object.assign(makeDeepstream, {
253
- changes,
254
137
  provide,
255
138
  observe,
256
139
  observe2,
257
140
  get,
258
141
  record: {
259
- changes,
260
142
  provide,
261
143
  observe,
262
144
  observe2,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/lib",
3
- "version": "19.0.9",
3
+ "version": "19.0.10",
4
4
  "license": "MIT",
5
5
  "author": "Robert Nagy <robert.nagy@boffins.se>",
6
6
  "type": "module",