@nxtedition/lib 22.1.4 → 23.0.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.
- package/app.js +21 -0
- package/couch.d.ts +1 -0
- package/errors.d.ts +3 -1
- package/http.js +0 -17
- package/package.json +13 -12
- package/scheduler.js +32 -0
- package/serializers.js +2 -2
- package/util/template/javascript.js +1 -6
package/app.js
CHANGED
|
@@ -34,6 +34,7 @@ import { monitorEventLoopDelay } from 'node:perf_hooks'
|
|
|
34
34
|
import { LRUCache } from 'lru-cache'
|
|
35
35
|
import xuid from 'xuid'
|
|
36
36
|
import undici from 'undici'
|
|
37
|
+
import { isTimeBetween } from './time.js'
|
|
37
38
|
|
|
38
39
|
export function makeApp(appConfig, onTerminate) {
|
|
39
40
|
let ds
|
|
@@ -76,6 +77,26 @@ export function makeApp(appConfig, onTerminate) {
|
|
|
76
77
|
logger?.warn({ err }, 'warning')
|
|
77
78
|
})
|
|
78
79
|
|
|
80
|
+
const dailyOffpeakTime = config.dailyOffpeakTime ?? '00:00-04:00'
|
|
81
|
+
|
|
82
|
+
if (dailyOffpeakTime) {
|
|
83
|
+
const [start, end] = dailyOffpeakTime.split('-')
|
|
84
|
+
|
|
85
|
+
let wasOffpeak = null
|
|
86
|
+
|
|
87
|
+
const offPeakInterval = setInterval(() => {
|
|
88
|
+
if (isTimeBetween(new Date(), start, end)) {
|
|
89
|
+
if (!wasOffpeak && global.gc) {
|
|
90
|
+
global.gc()
|
|
91
|
+
}
|
|
92
|
+
wasOffpeak = true
|
|
93
|
+
} else {
|
|
94
|
+
wasOffpeak = false
|
|
95
|
+
}
|
|
96
|
+
}, 60e3)
|
|
97
|
+
destroyers.unshift(() => clearInterval(offPeakInterval))
|
|
98
|
+
}
|
|
99
|
+
|
|
79
100
|
const cleanAppConfig = ({
|
|
80
101
|
status,
|
|
81
102
|
stats,
|
package/couch.d.ts
CHANGED
package/errors.d.ts
CHANGED
|
@@ -17,7 +17,9 @@ export interface NxtError {
|
|
|
17
17
|
errors?: NxtError[] | null
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
type SerializableError = null | undefined | Error | string | NxtError | SerializableError[]
|
|
21
|
+
|
|
22
|
+
export function serializeError(err: SerializableError): NxtError[] | null
|
|
21
23
|
|
|
22
24
|
export type Message = {
|
|
23
25
|
msg: string
|
package/http.js
CHANGED
|
@@ -683,20 +683,3 @@ export async function retry(fn, options) {
|
|
|
683
683
|
}
|
|
684
684
|
}
|
|
685
685
|
}
|
|
686
|
-
|
|
687
|
-
export function parseHeaders(rawHeaders, obj = {}) {
|
|
688
|
-
for (let i = 0; i < rawHeaders.length; i += 2) {
|
|
689
|
-
const key = rawHeaders[i].toString().toLowerCase()
|
|
690
|
-
let val = obj[key]
|
|
691
|
-
if (!val) {
|
|
692
|
-
obj[key] = rawHeaders[i + 1].toString()
|
|
693
|
-
} else {
|
|
694
|
-
if (!Array.isArray(val)) {
|
|
695
|
-
val = [val]
|
|
696
|
-
obj[key] = val
|
|
697
|
-
}
|
|
698
|
-
val.push(rawHeaders[i + 1].toString())
|
|
699
|
-
}
|
|
700
|
-
}
|
|
701
|
-
return obj
|
|
702
|
-
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxtedition/lib",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "23.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Robert Nagy <robert.nagy@boffins.se>",
|
|
6
6
|
"type": "module",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"errors.js",
|
|
37
37
|
"errors.d.ts",
|
|
38
38
|
"worker.js",
|
|
39
|
+
"scheduler.js",
|
|
39
40
|
"stream.js",
|
|
40
41
|
"timeline.js",
|
|
41
42
|
"docker-secrets.js"
|
|
@@ -58,10 +59,10 @@
|
|
|
58
59
|
"singleQuote": true
|
|
59
60
|
},
|
|
60
61
|
"dependencies": {
|
|
61
|
-
"@aws-sdk/client-s3": "^3.
|
|
62
|
+
"@aws-sdk/client-s3": "^3.723.0",
|
|
62
63
|
"@elastic/elasticsearch": "^8.16.1",
|
|
63
64
|
"@elastic/transport": "^8.9.1",
|
|
64
|
-
"@nxtedition/nxt-undici": "^
|
|
65
|
+
"@nxtedition/nxt-undici": "^5.1.8",
|
|
65
66
|
"@swc/wasm-web": "^1.10.1",
|
|
66
67
|
"content-type": "^1.0.5",
|
|
67
68
|
"date-fns": "^3.6.0",
|
|
@@ -72,42 +73,42 @@
|
|
|
72
73
|
"koa-compose": "^4.1.0",
|
|
73
74
|
"lodash": "^4.17.21",
|
|
74
75
|
"lru-cache": "^11.0.2",
|
|
75
|
-
"mime": "^4.0.
|
|
76
|
-
"mitata": "^1.0.
|
|
76
|
+
"mime": "^4.0.6",
|
|
77
|
+
"mitata": "^1.0.26",
|
|
77
78
|
"moment-timezone": "^0.5.46",
|
|
78
79
|
"nconf": "^0.12.1",
|
|
79
80
|
"nested-error-stacks": "^2.1.1",
|
|
80
81
|
"object-hash": "^3.0.0",
|
|
81
82
|
"p-queue": "^8.0.1",
|
|
82
|
-
"pino": "^9.
|
|
83
|
+
"pino": "^9.6.0",
|
|
83
84
|
"qs": "^6.13.1",
|
|
84
85
|
"request-target": "^1.0.2",
|
|
85
86
|
"smpte-timecode": "^1.3.6",
|
|
86
87
|
"split-string": "^6.0.0",
|
|
87
|
-
"undici": "^
|
|
88
|
+
"undici": "^7.2.0",
|
|
88
89
|
"url-join": "^5.0.0",
|
|
89
90
|
"xuid": "^4.1.3",
|
|
90
91
|
"yocto-queue": "^1.1.1"
|
|
91
92
|
},
|
|
92
93
|
"devDependencies": {
|
|
93
94
|
"@nxtedition/deepstream.io-client-js": ">=25.6.3",
|
|
94
|
-
"@types/lodash": "^4.17.
|
|
95
|
-
"@types/node": "^22.
|
|
95
|
+
"@types/lodash": "^4.17.14",
|
|
96
|
+
"@types/node": "^22.10.5",
|
|
96
97
|
"eslint": "^9.15.0",
|
|
97
98
|
"eslint-config-prettier": "^9.1.0",
|
|
98
99
|
"eslint-config-standard": "^17.0.0",
|
|
99
100
|
"eslint-plugin-import": "^2.31.0",
|
|
100
|
-
"eslint-plugin-n": "^17.
|
|
101
|
+
"eslint-plugin-n": "^17.15.1",
|
|
101
102
|
"eslint-plugin-node": "^11.1.0",
|
|
102
103
|
"eslint-plugin-promise": "^7.2.1",
|
|
103
104
|
"husky": "^9.1.7",
|
|
104
|
-
"lint-staged": "^15.
|
|
105
|
+
"lint-staged": "^15.3.0",
|
|
105
106
|
"pinst": "^3.0.0",
|
|
106
107
|
"prettier": "^3.4.2",
|
|
107
108
|
"rxjs": "^7.5.6",
|
|
108
109
|
"send": "^0.18.0",
|
|
109
110
|
"tap": "^21.0.1",
|
|
110
|
-
"typescript-eslint": "^8.
|
|
111
|
+
"typescript-eslint": "^8.19.1"
|
|
111
112
|
},
|
|
112
113
|
"peerDependencies": {
|
|
113
114
|
"@elastic/elasticsearch": "^8.6.0",
|
package/scheduler.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { setImmediate } from 'timers/promises'
|
|
2
|
+
|
|
3
|
+
let yieldTime = performance.now()
|
|
4
|
+
let yieldPromise = undefined
|
|
5
|
+
|
|
6
|
+
function reset() {
|
|
7
|
+
yieldTime = performance.now()
|
|
8
|
+
yieldPromise = undefined
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
setInterval(reset, 100).unref()
|
|
12
|
+
|
|
13
|
+
export function shouldYield() {
|
|
14
|
+
if (yieldPromise === undefined) {
|
|
15
|
+
yieldPromise = performance.now() - yieldTime > 50 ? null : undefined
|
|
16
|
+
}
|
|
17
|
+
return yieldPromise !== undefined
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function maybeYield() {
|
|
21
|
+
if (yieldPromise === undefined) {
|
|
22
|
+
yieldPromise = performance.now() - yieldTime > 50 ? null : undefined
|
|
23
|
+
}
|
|
24
|
+
if (yieldPromise === null) {
|
|
25
|
+
yieldPromise = setImmediate().then(reset)
|
|
26
|
+
}
|
|
27
|
+
return yieldPromise ?? null
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export async function yield() {
|
|
31
|
+
return (yieldPromise ??= setImmediate().then(reset))
|
|
32
|
+
}
|
package/serializers.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SIGNALS } from './platform.js'
|
|
2
|
-
import {
|
|
2
|
+
import { parseHeaders } from '@nxtedition/nxt-undici'
|
|
3
3
|
|
|
4
4
|
function getHeader(obj, key) {
|
|
5
5
|
return obj?.headers?.get?.(key) || obj?.getHeader?.(key) || obj?.headers?.[key]
|
|
@@ -11,7 +11,7 @@ function getHeaders(obj) {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
if (Array.isArray(obj.headers)) {
|
|
14
|
-
return
|
|
14
|
+
return parseHeaders(obj.headers)
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
return (
|
|
@@ -233,7 +233,6 @@ export default function ({ ds, proxify, compiler }) {
|
|
|
233
233
|
this._wrap = null
|
|
234
234
|
this._suspended = false
|
|
235
235
|
this._errored = false
|
|
236
|
-
this._refreshImpl = this._refreshImpl.bind(this)
|
|
237
236
|
|
|
238
237
|
if (rxjs.isObservable(args)) {
|
|
239
238
|
this._subscription = args.subscribe({
|
|
@@ -243,10 +242,6 @@ export default function ({ ds, proxify, compiler }) {
|
|
|
243
242
|
},
|
|
244
243
|
error: (err) => {
|
|
245
244
|
this._observer.error(err)
|
|
246
|
-
this._subscription = null
|
|
247
|
-
},
|
|
248
|
-
complete: () => {
|
|
249
|
-
this._subscription = null
|
|
250
245
|
},
|
|
251
246
|
})
|
|
252
247
|
} else {
|
|
@@ -338,7 +333,7 @@ export default function ({ ds, proxify, compiler }) {
|
|
|
338
333
|
this._entries.clear()
|
|
339
334
|
}
|
|
340
335
|
|
|
341
|
-
_refreshImpl() {
|
|
336
|
+
_refreshImpl = () => {
|
|
342
337
|
this._refreshing = false
|
|
343
338
|
|
|
344
339
|
if (this._destroyed || this._disposing || this._args === kEmpty) {
|