@nxtedition/lib 15.0.49 → 15.0.51

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 (3) hide show
  1. package/couch.js +30 -49
  2. package/deepstream.js +2 -3
  3. package/package.json +1 -2
package/couch.js CHANGED
@@ -1,9 +1,7 @@
1
- const stream = require('node:stream')
2
- const tp = require('node:timers/promises')
3
1
  const createError = require('http-errors')
4
2
  const makeWeak = require('./weakCache')
3
+ const tp = require('timers/promises')
5
4
  const { delay } = require('./http')
6
- const split2 = require('split2')
7
5
 
8
6
  // https://github.com/fastify/fastify/blob/main/lib/reqIdGenFactory.js
9
7
  // 2,147,483,647 (2^31 − 1) stands for max SMI value (an internal optimization of V8).
@@ -133,7 +131,7 @@ module.exports = function (opts) {
133
131
  })
134
132
  }
135
133
 
136
- async function* changes({ client = defaultClient, signal, highWaterMark, ...options } = {}) {
134
+ async function* changes({ client = defaultClient, signal, ...options } = {}) {
137
135
  const params = {}
138
136
 
139
137
  let body
@@ -244,59 +242,42 @@ module.exports = function (opts) {
244
242
  ...(body ? { 'content-type': 'application/json' } : {}),
245
243
  },
246
244
  throwOnError: true,
247
- highWaterMark: highWaterMark ?? 256 * 1024,
245
+ highWaterMark: 256 * 1024, // TODO (fix): Needs support in undici...
248
246
  bodyTimeout: 2 * (params.heartbeat || 60e3),
249
247
  }
250
248
 
251
- const res = await client.request(req)
252
-
253
- retryCount = 0
254
-
255
- const src = stream.pipeline(res.body, split2(), () => {})
256
-
257
- let error
258
- let ended = false
259
- let resume = () => {}
249
+ try {
250
+ const res = await client.request(req)
260
251
 
261
- src
262
- .on('error', (err) => {
263
- error = err
264
- })
265
- .on('readable', () => {
266
- resume()
267
- })
268
- .on('end', () => {
269
- ended = true
270
- resume()
271
- })
252
+ retryCount = 0
272
253
 
273
- const batch = batched ? [] : null
274
- while (true) {
275
- const line = src.read()
276
-
277
- if (line === '') {
278
- continue
279
- } else if (line !== null) {
280
- const change = JSON.parse(line)
281
- if (change.seq) {
282
- params.since = change.seq
254
+ let str = ''
255
+ for await (const chunk of res.body) {
256
+ const lines = (str + chunk).split('\n')
257
+ str = lines.pop() ?? ''
258
+
259
+ const results = batched ? [] : null
260
+ for (const line of lines) {
261
+ if (line) {
262
+ const change = JSON.parse(line)
263
+ if (change.seq) {
264
+ params.since = change.seq
265
+ }
266
+ if (results) {
267
+ results.push(change)
268
+ } else {
269
+ yield change
270
+ }
271
+ }
283
272
  }
284
- if (batch) {
285
- batch.push(change)
286
- } else {
287
- yield change
273
+
274
+ if (results?.length) {
275
+ yield results
288
276
  }
289
- } else if (batch?.length) {
290
- yield batch.splice(0)
291
- } else if (error) {
292
- throw Object.assign(error, { data: req })
293
- } else if (ended) {
294
- return
295
- } else {
296
- await new Promise((resolve) => {
297
- resume = resolve
298
- })
299
277
  }
278
+ } catch (err) {
279
+ Object.assign(err, { data: req })
280
+ throw err
300
281
  }
301
282
  }
302
283
 
package/deepstream.js CHANGED
@@ -141,6 +141,7 @@ function init(ds) {
141
141
  async function* changes(
142
142
  ds,
143
143
  {
144
+ origin,
144
145
  since = 'now',
145
146
  live = true,
146
147
  batched = false,
@@ -151,10 +152,8 @@ async function* changes(
151
152
  retry,
152
153
  },
153
154
  ) {
154
- const url = new URL('/_record/changes', ds._url)
155
+ const url = new URL('/_record/changes', origin)
155
156
 
156
- url.protocol = url.protocol === 'ws:' ? 'http:' : 'https:'
157
- url.port = '6100'
158
157
  url.searchParams.set('since', since || '0')
159
158
  url.searchParams.set('live', String(live))
160
159
  url.searchParams.set('include_docs', String(includeDocs))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/lib",
3
- "version": "15.0.49",
3
+ "version": "15.0.51",
4
4
  "license": "MIT",
5
5
  "author": "Robert Nagy <robert.nagy@boffins.se>",
6
6
  "files": [
@@ -89,7 +89,6 @@
89
89
  "request-target": "^1.0.2",
90
90
  "smpte-timecode": "^1.3.3",
91
91
  "split-string": "^6.0.0",
92
- "split2": "^4.2.0",
93
92
  "toobusy-js": "^0.5.1",
94
93
  "undici": "^5.25.4",
95
94
  "url-join": "^4.0.0"