@sapphire-sh/utils 1.82.0 → 1.83.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/lib/cjs/date.d.ts +1 -0
- package/lib/cjs/date.d.ts.map +1 -1
- package/lib/cjs/date.js +3 -1
- package/lib/cjs/date.js.map +1 -1
- package/lib/cjs/download.d.ts +1 -1
- package/lib/cjs/download.d.ts.map +1 -1
- package/lib/cjs/download.js +25 -2
- package/lib/cjs/download.js.map +1 -1
- package/lib/cjs/env.d.ts +3 -0
- package/lib/cjs/env.d.ts.map +1 -0
- package/lib/cjs/env.js +25 -0
- package/lib/cjs/env.js.map +1 -0
- package/lib/cjs/eslint.d.ts.map +1 -1
- package/lib/cjs/eslint.js +14 -2
- package/lib/cjs/eslint.js.map +1 -1
- package/lib/cjs/eslintNext.d.ts +3 -0
- package/lib/cjs/eslintNext.d.ts.map +1 -0
- package/lib/cjs/eslintNext.js +11 -0
- package/lib/cjs/eslintNext.js.map +1 -0
- package/lib/cjs/eslintRules.d.ts +1 -0
- package/lib/cjs/eslintRules.d.ts.map +1 -1
- package/lib/cjs/eslintRules.js +33 -1
- package/lib/cjs/eslintRules.js.map +1 -1
- package/lib/cjs/format.d.ts +2 -0
- package/lib/cjs/format.d.ts.map +1 -0
- package/lib/cjs/format.js +19 -0
- package/lib/cjs/format.js.map +1 -0
- package/lib/cjs/fs.d.ts +3 -0
- package/lib/cjs/fs.d.ts.map +1 -1
- package/lib/cjs/fs.js +22 -6
- package/lib/cjs/fs.js.map +1 -1
- package/lib/cjs/http.d.ts +3 -1
- package/lib/cjs/http.d.ts.map +1 -1
- package/lib/cjs/http.js +27 -16
- package/lib/cjs/http.js.map +1 -1
- package/lib/cjs/index.d.ts +15 -3
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +26 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/json.d.ts +12 -0
- package/lib/cjs/json.d.ts.map +1 -0
- package/lib/cjs/json.js +41 -0
- package/lib/cjs/json.js.map +1 -0
- package/lib/cjs/logger.d.ts +9 -1
- package/lib/cjs/logger.d.ts.map +1 -1
- package/lib/cjs/logger.js +28 -5
- package/lib/cjs/logger.js.map +1 -1
- package/lib/cjs/math.d.ts +2 -0
- package/lib/cjs/math.d.ts.map +1 -0
- package/lib/cjs/math.js +11 -0
- package/lib/cjs/math.js.map +1 -0
- package/lib/cjs/notify.d.ts +1 -0
- package/lib/cjs/notify.d.ts.map +1 -1
- package/lib/cjs/notify.js +18 -1
- package/lib/cjs/notify.js.map +1 -1
- package/lib/cjs/retry.d.ts +10 -0
- package/lib/cjs/retry.d.ts.map +1 -0
- package/lib/cjs/retry.js +22 -0
- package/lib/cjs/retry.js.map +1 -0
- package/lib/cjs/serialLimiter.d.ts +3 -0
- package/lib/cjs/serialLimiter.d.ts.map +1 -0
- package/lib/cjs/serialLimiter.js +29 -0
- package/lib/cjs/serialLimiter.js.map +1 -0
- package/lib/cjs/slackLogBatcher.d.ts +12 -0
- package/lib/cjs/slackLogBatcher.d.ts.map +1 -0
- package/lib/cjs/slackLogBatcher.js +54 -0
- package/lib/cjs/slackLogBatcher.js.map +1 -0
- package/lib/cjs/vitestNext.d.ts +3 -0
- package/lib/cjs/vitestNext.d.ts.map +1 -0
- package/lib/cjs/vitestNext.js +21 -0
- package/lib/cjs/vitestNext.js.map +1 -0
- package/lib/date.d.ts +1 -0
- package/lib/date.d.ts.map +1 -1
- package/lib/date.js +1 -0
- package/lib/date.js.map +1 -1
- package/lib/download.d.ts +1 -1
- package/lib/download.d.ts.map +1 -1
- package/lib/download.js +25 -2
- package/lib/download.js.map +1 -1
- package/lib/env.d.ts +3 -0
- package/lib/env.d.ts.map +1 -0
- package/lib/env.js +20 -0
- package/lib/env.js.map +1 -0
- package/lib/eslint.d.ts.map +1 -1
- package/lib/eslint.js +14 -2
- package/lib/eslint.js.map +1 -1
- package/lib/eslintNext.d.ts +3 -0
- package/lib/eslintNext.d.ts.map +1 -0
- package/lib/eslintNext.js +6 -0
- package/lib/eslintNext.js.map +1 -0
- package/lib/eslintRules.d.ts +1 -0
- package/lib/eslintRules.d.ts.map +1 -1
- package/lib/eslintRules.js +32 -0
- package/lib/eslintRules.js.map +1 -1
- package/lib/format.d.ts +2 -0
- package/lib/format.d.ts.map +1 -0
- package/lib/format.js +15 -0
- package/lib/format.js.map +1 -0
- package/lib/fs.d.ts +3 -0
- package/lib/fs.d.ts.map +1 -1
- package/lib/fs.js +18 -5
- package/lib/fs.js.map +1 -1
- package/lib/http.d.ts +3 -1
- package/lib/http.d.ts.map +1 -1
- package/lib/http.js +25 -15
- package/lib/http.js.map +1 -1
- package/lib/index.d.ts +15 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -3
- package/lib/index.js.map +1 -1
- package/lib/json.d.ts +12 -0
- package/lib/json.d.ts.map +1 -0
- package/lib/json.js +31 -0
- package/lib/json.js.map +1 -0
- package/lib/logger.d.ts +9 -1
- package/lib/logger.d.ts.map +1 -1
- package/lib/logger.js +28 -5
- package/lib/logger.js.map +1 -1
- package/lib/math.d.ts +2 -0
- package/lib/math.d.ts.map +1 -0
- package/lib/math.js +7 -0
- package/lib/math.js.map +1 -0
- package/lib/notify.d.ts +1 -0
- package/lib/notify.d.ts.map +1 -1
- package/lib/notify.js +16 -0
- package/lib/notify.js.map +1 -1
- package/lib/retry.d.ts +10 -0
- package/lib/retry.d.ts.map +1 -0
- package/lib/retry.js +18 -0
- package/lib/retry.js.map +1 -0
- package/lib/serialLimiter.d.ts +3 -0
- package/lib/serialLimiter.d.ts.map +1 -0
- package/lib/serialLimiter.js +25 -0
- package/lib/serialLimiter.js.map +1 -0
- package/lib/slackLogBatcher.d.ts +12 -0
- package/lib/slackLogBatcher.d.ts.map +1 -0
- package/lib/slackLogBatcher.js +49 -0
- package/lib/slackLogBatcher.js.map +1 -0
- package/lib/vitestNext.d.ts +3 -0
- package/lib/vitestNext.d.ts.map +1 -0
- package/lib/vitestNext.js +16 -0
- package/lib/vitestNext.js.map +1 -0
- package/package.json +21 -1
package/lib/eslint.js
CHANGED
|
@@ -11,6 +11,7 @@ export default defineConfig(eslint.configs.recommended, ...tseslint.configs.reco
|
|
|
11
11
|
rules: {
|
|
12
12
|
// Sapphire
|
|
13
13
|
'sapphire/no-control-characters': 'error',
|
|
14
|
+
'sapphire/prefer-read-env': 'error',
|
|
14
15
|
// General
|
|
15
16
|
'arrow-body-style': ['error', 'as-needed'],
|
|
16
17
|
curly: 'error',
|
|
@@ -32,6 +33,7 @@ export default defineConfig(eslint.configs.recommended, ...tseslint.configs.reco
|
|
|
32
33
|
'no-restricted-imports': [
|
|
33
34
|
'error',
|
|
34
35
|
{ name: 'assert', message: 'Use `node:assert` instead.' },
|
|
36
|
+
{ name: 'axios', message: 'Use fetch or fetchWithRetry from @sapphire-sh/utils instead.' },
|
|
35
37
|
{ name: 'buffer', message: 'Use `node:buffer` instead.' },
|
|
36
38
|
{ name: 'child_process', message: 'Use `node:child_process` instead.' },
|
|
37
39
|
{ name: 'cluster', message: 'Use `node:cluster` instead.' },
|
|
@@ -87,9 +89,9 @@ export default defineConfig(eslint.configs.recommended, ...tseslint.configs.reco
|
|
|
87
89
|
custom: { regex: '^I[A-Z]', match: false },
|
|
88
90
|
},
|
|
89
91
|
],
|
|
90
|
-
'@typescript-eslint/no-explicit-any': '
|
|
92
|
+
'@typescript-eslint/no-explicit-any': 'error',
|
|
91
93
|
'@typescript-eslint/no-namespace': 'off',
|
|
92
|
-
'@typescript-eslint/no-non-null-assertion': '
|
|
94
|
+
'@typescript-eslint/no-non-null-assertion': 'error',
|
|
93
95
|
'@typescript-eslint/no-shadow': 'off',
|
|
94
96
|
'@typescript-eslint/no-unnecessary-type-assertion': 'error',
|
|
95
97
|
'@typescript-eslint/no-unused-vars': ['error', { varsIgnorePattern: '^_', argsIgnorePattern: '^_' }],
|
|
@@ -130,6 +132,16 @@ export default defineConfig(eslint.configs.recommended, ...tseslint.configs.reco
|
|
|
130
132
|
project: true,
|
|
131
133
|
},
|
|
132
134
|
},
|
|
135
|
+
}, {
|
|
136
|
+
// Test doubles implement only part of an interface, and some libraries return
|
|
137
|
+
// `unknown`, so test files narrow with `as` where production code must not.
|
|
138
|
+
files: ['**/*.test.ts', '**/*.test.tsx'],
|
|
139
|
+
rules: {
|
|
140
|
+
'@typescript-eslint/consistent-type-assertions': [
|
|
141
|
+
'error',
|
|
142
|
+
{ assertionStyle: 'as', objectLiteralTypeAssertions: 'allow', arrayLiteralTypeAssertions: 'allow' },
|
|
143
|
+
],
|
|
144
|
+
},
|
|
133
145
|
}, {
|
|
134
146
|
ignores: ['*.config.js', '**/*.json', 'coverage/', 'dist/', 'lib/', 'node_modules/'],
|
|
135
147
|
});
|
package/lib/eslint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslint.js","sourceRoot":"","sources":["../src/eslint.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,YAAY,CAAC;AAChC,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,eAAe,YAAY,CAC1B,MAAM,CAAC,OAAO,CAAC,WAAW,EAC1B,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAC/B,QAAQ,EACR,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,EACnC;IACC,OAAO,EAAE;QACR,QAAQ,EAAE,cAAc;KACxB;IACD,KAAK,EAAE;QACN,WAAW;QACX,gCAAgC,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"eslint.js","sourceRoot":"","sources":["../src/eslint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eslintNext.d.ts","sourceRoot":"","sources":["../src/eslintNext.ts"],"names":[],"mappings":";AAKA,wBAKE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import nextCoreWebVitals from 'eslint-config-next/core-web-vitals';
|
|
2
|
+
import nextTypescript from 'eslint-config-next/typescript';
|
|
3
|
+
import { defineConfig, globalIgnores } from 'eslint/config';
|
|
4
|
+
import sapphireConfig from './eslint.js';
|
|
5
|
+
export default defineConfig(...sapphireConfig, ...nextCoreWebVitals, ...nextTypescript, globalIgnores(['.next/**', 'out/**', 'build/**', 'next-env.d.ts']));
|
|
6
|
+
//# sourceMappingURL=eslintNext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eslintNext.js","sourceRoot":"","sources":["../src/eslintNext.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,oCAAoC,CAAC;AACnE,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,cAAc,MAAM,aAAa,CAAC;AAEzC,eAAe,YAAY,CAC1B,GAAG,cAAc,EACjB,GAAG,iBAAiB,EACpB,GAAG,cAAc,EACjB,aAAa,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAClE,CAAC"}
|
package/lib/eslintRules.d.ts
CHANGED
package/lib/eslintRules.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslintRules.d.ts","sourceRoot":"","sources":["../src/eslintRules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"eslintRules.d.ts","sourceRoot":"","sources":["../src/eslintRules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAQ3C,eAAO,MAAM,mBAAmB,EAAE,IAAI,CAAC,UAgCtC,CAAC;AAUF,eAAO,MAAM,aAAa,EAAE,IAAI,CAAC,UAyBhC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAKnC,CAAC"}
|
package/lib/eslintRules.js
CHANGED
|
@@ -35,9 +35,41 @@ export const noControlCharacters = {
|
|
|
35
35
|
};
|
|
36
36
|
},
|
|
37
37
|
};
|
|
38
|
+
const isProcessEnv = (node) => node.type === 'MemberExpression' &&
|
|
39
|
+
!node.computed &&
|
|
40
|
+
node.object.type === 'Identifier' &&
|
|
41
|
+
node.object.name === 'process' &&
|
|
42
|
+
node.property.type === 'Identifier' &&
|
|
43
|
+
node.property.name === 'env';
|
|
44
|
+
export const preferReadEnv = {
|
|
45
|
+
meta: {
|
|
46
|
+
type: 'problem',
|
|
47
|
+
docs: {
|
|
48
|
+
description: 'Disallow fallback operators on process.env values, which keep an empty string as a value',
|
|
49
|
+
},
|
|
50
|
+
schema: [],
|
|
51
|
+
messages: {
|
|
52
|
+
preferReadEnv: 'Use readEnv() from @sapphire-sh/utils instead of a fallback operator on process.env, which does not treat an empty string as unset.',
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
create(context) {
|
|
56
|
+
return {
|
|
57
|
+
LogicalExpression(node) {
|
|
58
|
+
if (node.operator !== '??' && node.operator !== '||') {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (node.left.type !== 'MemberExpression' || !isProcessEnv(node.left.object)) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
context.report({ node, messageId: 'preferReadEnv' });
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
};
|
|
38
69
|
export const sapphirePlugin = {
|
|
39
70
|
rules: {
|
|
40
71
|
'no-control-characters': noControlCharacters,
|
|
72
|
+
'prefer-read-env': preferReadEnv,
|
|
41
73
|
},
|
|
42
74
|
};
|
|
43
75
|
//# sourceMappingURL=eslintRules.js.map
|
package/lib/eslintRules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslintRules.js","sourceRoot":"","sources":["../src/eslintRules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"eslintRules.js","sourceRoot":"","sources":["../src/eslintRules.ts"],"names":[],"mappings":"AAGA,uFAAuF;AACvF,qGAAqG;AACrG,4CAA4C;AAC5C,MAAM,yBAAyB,GAAG,IAAI,MAAM,CAAC,uDAAuD,EAAE,GAAG,CAAC,CAAC;AAE3G,MAAM,CAAC,MAAM,mBAAmB,GAAoB;IACnD,IAAI,EAAE;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACL,WAAW,EAAE,mEAAmE;SAChF;QACD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACT,gBAAgB,EAAE,oDAAoD;SACtE;KACD;IACD,MAAM,CAAC,OAAO;QACb,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAC/B,OAAO;YACN,OAAO,CAAC,IAAI;gBACX,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;gBAClC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;oBAC9D,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;oBACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;oBAChF,OAAO,CAAC,MAAM,CAAC;wBACd,IAAI;wBACJ,GAAG,EAAE;4BACJ,KAAK,EAAE,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC;4BACxC,GAAG,EAAE,UAAU,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAC;yBAC1C;wBACD,SAAS,EAAE,kBAAkB;wBAC7B,IAAI,EAAE,EAAE,IAAI,EAAE;qBACd,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAU,EAAW,EAAE,CAC5C,IAAI,CAAC,IAAI,KAAK,kBAAkB;IAChC,CAAC,IAAI,CAAC,QAAQ;IACd,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;IACjC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;IAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;IACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC;AAE9B,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC7C,IAAI,EAAE;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACL,WAAW,EAAE,0FAA0F;SACvG;QACD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACT,aAAa,EACZ,qIAAqI;SACtI;KACD;IACD,MAAM,CAAC,OAAO;QACb,OAAO;YACN,iBAAiB,CAAC,IAAI;gBACrB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACtD,OAAO;gBACR,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9E,OAAO;gBACR,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;YACtD,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC5C,KAAK,EAAE;QACN,uBAAuB,EAAE,mBAAmB;QAC5C,iBAAiB,EAAE,aAAa;KAChC;CACD,CAAC"}
|
package/lib/format.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAc3C,CAAC"}
|
package/lib/format.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const BYTES_PER_UNIT = 1024;
|
|
2
|
+
const BYTE_UNITS = ['KB', 'MB', 'GB', 'TB'];
|
|
3
|
+
export const formatBytes = (bytes) => {
|
|
4
|
+
if (bytes < BYTES_PER_UNIT) {
|
|
5
|
+
return `${bytes} B`;
|
|
6
|
+
}
|
|
7
|
+
let value = bytes / BYTES_PER_UNIT;
|
|
8
|
+
let unitIndex = 0;
|
|
9
|
+
while (value >= BYTES_PER_UNIT && unitIndex < BYTE_UNITS.length - 1) {
|
|
10
|
+
value /= BYTES_PER_UNIT;
|
|
11
|
+
unitIndex += 1;
|
|
12
|
+
}
|
|
13
|
+
return `${value.toFixed(1)} ${BYTE_UNITS[unitIndex]}`;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE;IACpD,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;QAC5B,OAAO,GAAG,KAAK,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,GAAG,KAAK,GAAG,cAAc,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,OAAO,KAAK,IAAI,cAAc,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrE,KAAK,IAAI,cAAc,CAAC;QACxB,SAAS,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;AACvD,CAAC,CAAC"}
|
package/lib/fs.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
+
export declare const fileExists: (path: string) => Promise<boolean>;
|
|
1
2
|
export declare const mkdir: (path: string) => Promise<void>;
|
|
3
|
+
export declare const readJson: <T>(path: string) => Promise<T>;
|
|
4
|
+
export declare const writeJson: (path: string, data: unknown) => Promise<void>;
|
|
2
5
|
//# sourceMappingURL=fs.d.ts.map
|
package/lib/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,CAU9D,CAAC;AAEF,eAAO,MAAM,KAAK,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAKtD,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAU,CAAC,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,CAAC,CAIzD,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,MAAM,MAAM,EAAE,MAAM,OAAO,KAAG,OAAO,CAAC,IAAI,CAEzE,CAAC"}
|
package/lib/fs.js
CHANGED
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
|
-
export const
|
|
2
|
+
export const fileExists = async (path) => {
|
|
3
3
|
try {
|
|
4
4
|
await fs.promises.lstat(path);
|
|
5
|
+
return true;
|
|
5
6
|
}
|
|
6
7
|
catch (error) {
|
|
7
8
|
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
else {
|
|
11
|
-
throw error;
|
|
9
|
+
return false;
|
|
12
10
|
}
|
|
11
|
+
throw error;
|
|
13
12
|
}
|
|
14
13
|
};
|
|
14
|
+
export const mkdir = async (path) => {
|
|
15
|
+
if (await fileExists(path)) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
await fs.promises.mkdir(path, { recursive: true });
|
|
19
|
+
};
|
|
20
|
+
export const readJson = async (path) => {
|
|
21
|
+
const text = await fs.promises.readFile(path, 'utf-8');
|
|
22
|
+
const parsed = JSON.parse(text);
|
|
23
|
+
return parsed;
|
|
24
|
+
};
|
|
25
|
+
export const writeJson = async (path, data) => {
|
|
26
|
+
await fs.promises.writeFile(path, `${JSON.stringify(data, null, 2)}\n`);
|
|
27
|
+
};
|
|
15
28
|
//# sourceMappingURL=fs.js.map
|
package/lib/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE;IAClE,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1E,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAiB,EAAE;IAC1D,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO;IACR,CAAC;IACD,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAK,IAAY,EAAc,EAAE;IAC7D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,MAAM,GAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,IAAa,EAAiB,EAAE;IAC7E,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC,CAAC"}
|
package/lib/http.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export declare class HttpError extends Error {
|
|
2
2
|
readonly status: number;
|
|
3
|
-
|
|
3
|
+
readonly retryAfterMs?: number | undefined;
|
|
4
|
+
constructor(status: number, statusText: string, retryAfterMs?: number | undefined);
|
|
4
5
|
}
|
|
5
6
|
export interface FetchRetryOptions {
|
|
6
7
|
maxRetries?: number;
|
|
@@ -9,4 +10,5 @@ export interface FetchRetryOptions {
|
|
|
9
10
|
timeoutMs?: number;
|
|
10
11
|
}
|
|
11
12
|
export declare const fetchWithRetry: (url: string, init?: RequestInit, retryOptions?: FetchRetryOptions) => Promise<Response>;
|
|
13
|
+
export declare const fetchJson: <T>(url: string, init?: RequestInit, retryOptions?: FetchRetryOptions) => Promise<T>;
|
|
12
14
|
//# sourceMappingURL=http.d.ts.map
|
package/lib/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAU,SAAQ,KAAK;aAElB,MAAM,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAU,SAAQ,KAAK;aAElB,MAAM,EAAE,MAAM;aAEd,YAAY,CAAC,EAAE,MAAM;gBAFrB,MAAM,EAAE,MAAM,EAC9B,UAAU,EAAE,MAAM,EACF,YAAY,CAAC,EAAE,MAAM,YAAA;CAItC;AAED,MAAM,WAAW,iBAAiB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD,eAAO,MAAM,cAAc,GAC1B,KAAK,MAAM,EACX,OAAO,WAAW,EAClB,eAAe,iBAAiB,KAC9B,OAAO,CAAC,QAAQ,CAwBlB,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,CAAC,EAAE,KAAK,MAAM,EAAE,OAAO,WAAW,EAAE,eAAe,iBAAiB,KAAG,OAAO,CAAC,CAAC,CAI/G,CAAC"}
|
package/lib/http.js
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { retry } from './retry.js';
|
|
2
2
|
export class HttpError extends Error {
|
|
3
3
|
status;
|
|
4
|
-
|
|
4
|
+
retryAfterMs;
|
|
5
|
+
constructor(status, statusText, retryAfterMs) {
|
|
5
6
|
super(`HTTP ${status} ${statusText}`);
|
|
6
7
|
this.status = status;
|
|
8
|
+
this.retryAfterMs = retryAfterMs;
|
|
7
9
|
}
|
|
8
10
|
}
|
|
11
|
+
const parseRetryAfterMs = (response) => {
|
|
12
|
+
const header = response.headers.get('retry-after');
|
|
13
|
+
if (header === null || header === '') {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
return Number.parseInt(header, 10) * 1000;
|
|
17
|
+
};
|
|
9
18
|
export const fetchWithRetry = async (url, init, retryOptions) => {
|
|
10
19
|
const { maxRetries = 3, baseDelayMs = 1000, jitterMs = 500, timeoutMs = 30000 } = retryOptions ?? {};
|
|
11
|
-
|
|
20
|
+
return retry(async () => {
|
|
12
21
|
const resp = await fetch(url, {
|
|
13
22
|
signal: AbortSignal.timeout(timeoutMs),
|
|
14
23
|
...init,
|
|
@@ -16,17 +25,18 @@ export const fetchWithRetry = async (url, init, retryOptions) => {
|
|
|
16
25
|
if (resp.ok) {
|
|
17
26
|
return resp;
|
|
18
27
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
throw new HttpError(resp.status, resp.statusText, parseRetryAfterMs(resp));
|
|
29
|
+
}, {
|
|
30
|
+
maxAttempts: maxRetries + 1,
|
|
31
|
+
baseDelayMs,
|
|
32
|
+
jitterMs,
|
|
33
|
+
isRetryable: (error) => error instanceof HttpError && (error.status === 429 || error.status >= 500),
|
|
34
|
+
delayMs: (error) => (error instanceof HttpError ? error.retryAfterMs : undefined),
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
export const fetchJson = async (url, init, retryOptions) => {
|
|
38
|
+
const resp = await fetchWithRetry(url, init, retryOptions);
|
|
39
|
+
const parsed = await resp.json();
|
|
40
|
+
return parsed;
|
|
31
41
|
};
|
|
32
42
|
//# sourceMappingURL=http.js.map
|
package/lib/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,OAAO,SAAU,SAAQ,KAAK;IAElB;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,OAAO,SAAU,SAAQ,KAAK;IAElB;IAEA;IAHjB,YACiB,MAAc,EAC9B,UAAkB,EACF,YAAqB;QAErC,KAAK,CAAC,QAAQ,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;QAJtB,WAAM,GAAN,MAAM,CAAQ;QAEd,iBAAY,GAAZ,YAAY,CAAS;IAGtC,CAAC;CACD;AASD,MAAM,iBAAiB,GAAG,CAAC,QAAkB,EAAsB,EAAE;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAClC,GAAW,EACX,IAAkB,EAClB,YAAgC,EACZ,EAAE;IACtB,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,GAAG,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,YAAY,IAAI,EAAE,CAAC;IAErG,OAAO,KAAK,CACX,KAAK,IAAI,EAAE;QACV,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;YACtC,GAAG,IAAI;SACP,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,CAAC,EACD;QACC,WAAW,EAAE,UAAU,GAAG,CAAC;QAC3B,WAAW;QACX,QAAQ;QACR,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,YAAY,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;QACnG,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;KACjF,CACD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAK,GAAW,EAAE,IAAkB,EAAE,YAAgC,EAAc,EAAE;IACnH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAM,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpC,OAAO,MAAM,CAAC;AACf,CAAC,CAAC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
|
-
export { formatDuration, toLocalISOString } from './date.js';
|
|
1
|
+
export { formatDate, formatDuration, toLocalISOString } from './date.js';
|
|
2
|
+
export { readEnv, requireEnv } from './env.js';
|
|
2
3
|
export { serializeError } from './error.js';
|
|
4
|
+
export { formatBytes } from './format.js';
|
|
3
5
|
export { getEnumValue } from './getEnumValue.js';
|
|
4
|
-
export { HttpError, fetchWithRetry } from './http.js';
|
|
6
|
+
export { HttpError, fetchJson, fetchWithRetry } from './http.js';
|
|
5
7
|
export type { FetchRetryOptions } from './http.js';
|
|
6
8
|
export { isNonNullable } from './isNonNullable.js';
|
|
9
|
+
export { getArray, getBoolean, getNumber, getObject, getString, isJsonObject, parseJson } from './json.js';
|
|
10
|
+
export type { JsonObject, JsonValue } from './json.js';
|
|
7
11
|
export { LogLevel, logger } from './logger.js';
|
|
8
|
-
export {
|
|
12
|
+
export type { LogEntry, LogSink } from './logger.js';
|
|
13
|
+
export { clamp } from './math.js';
|
|
14
|
+
export { notifyMattermost, notifySlack, pingHealthchecks } from './notify.js';
|
|
9
15
|
export { Queue } from './queue.js';
|
|
16
|
+
export { retry } from './retry.js';
|
|
17
|
+
export type { RetryOptions } from './retry.js';
|
|
18
|
+
export { createSerialLimiter } from './serialLimiter.js';
|
|
19
|
+
export type { SerialLimiter } from './serialLimiter.js';
|
|
20
|
+
export { chunkLines, createSlackLogBatcher } from './slackLogBatcher.js';
|
|
21
|
+
export type { SlackLogBatcher, SlackLogBatcherOptions } from './slackLogBatcher.js';
|
|
10
22
|
export { sleep } from './sleep.js';
|
|
11
23
|
export { escapeHtml } from './string.js';
|
|
12
24
|
export { throttle } from './throttle.js';
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3G,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
export { formatDuration, toLocalISOString } from './date.js';
|
|
1
|
+
export { formatDate, formatDuration, toLocalISOString } from './date.js';
|
|
2
|
+
export { readEnv, requireEnv } from './env.js';
|
|
2
3
|
export { serializeError } from './error.js';
|
|
4
|
+
export { formatBytes } from './format.js';
|
|
3
5
|
export { getEnumValue } from './getEnumValue.js';
|
|
4
|
-
export { HttpError, fetchWithRetry } from './http.js';
|
|
6
|
+
export { HttpError, fetchJson, fetchWithRetry } from './http.js';
|
|
5
7
|
export { isNonNullable } from './isNonNullable.js';
|
|
8
|
+
export { getArray, getBoolean, getNumber, getObject, getString, isJsonObject, parseJson } from './json.js';
|
|
6
9
|
export { LogLevel, logger } from './logger.js';
|
|
7
|
-
export {
|
|
10
|
+
export { clamp } from './math.js';
|
|
11
|
+
export { notifyMattermost, notifySlack, pingHealthchecks } from './notify.js';
|
|
8
12
|
export { Queue } from './queue.js';
|
|
13
|
+
export { retry } from './retry.js';
|
|
14
|
+
export { createSerialLimiter } from './serialLimiter.js';
|
|
15
|
+
export { chunkLines, createSlackLogBatcher } from './slackLogBatcher.js';
|
|
9
16
|
export { sleep } from './sleep.js';
|
|
10
17
|
export { escapeHtml } from './string.js';
|
|
11
18
|
export { throttle } from './throttle.js';
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3G,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
package/lib/json.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type JsonValue = string | number | boolean | null | JsonValue[] | JsonObject;
|
|
2
|
+
export interface JsonObject {
|
|
3
|
+
[key: string]: JsonValue;
|
|
4
|
+
}
|
|
5
|
+
export declare const isJsonObject: (value: unknown) => value is JsonObject;
|
|
6
|
+
export declare const parseJson: (text: string) => JsonValue | null;
|
|
7
|
+
export declare const getObject: (object: JsonObject, key: string) => JsonObject | null;
|
|
8
|
+
export declare const getArray: (object: JsonObject, key: string) => JsonValue[];
|
|
9
|
+
export declare const getString: (object: JsonObject, key: string) => string | null;
|
|
10
|
+
export declare const getNumber: (object: JsonObject, key: string) => number | null;
|
|
11
|
+
export declare const getBoolean: (object: JsonObject, key: string) => boolean | null;
|
|
12
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,UAAU,CAAC;AAEpF,MAAM,WAAW,UAAU;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,UACc,CAAC;AAEtE,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,SAAS,GAAG,IAOpD,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,UAAU,EAAE,KAAK,MAAM,KAAG,UAAU,GAAG,IAGxE,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,QAAQ,UAAU,EAAE,KAAK,MAAM,KAAG,SAAS,EAGnE,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,UAAU,EAAE,KAAK,MAAM,KAAG,MAAM,GAAG,IAGpE,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,UAAU,EAAE,KAAK,MAAM,KAAG,MAAM,GAAG,IAGpE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,QAAQ,UAAU,EAAE,KAAK,MAAM,KAAG,OAAO,GAAG,IAGtE,CAAC"}
|
package/lib/json.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export const isJsonObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
2
|
+
export const parseJson = (text) => {
|
|
3
|
+
try {
|
|
4
|
+
const parsed = JSON.parse(text);
|
|
5
|
+
return parsed;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
export const getObject = (object, key) => {
|
|
12
|
+
const value = object[key];
|
|
13
|
+
return isJsonObject(value) ? value : null;
|
|
14
|
+
};
|
|
15
|
+
export const getArray = (object, key) => {
|
|
16
|
+
const value = object[key];
|
|
17
|
+
return Array.isArray(value) ? value : [];
|
|
18
|
+
};
|
|
19
|
+
export const getString = (object, key) => {
|
|
20
|
+
const value = object[key];
|
|
21
|
+
return typeof value === 'string' ? value : null;
|
|
22
|
+
};
|
|
23
|
+
export const getNumber = (object, key) => {
|
|
24
|
+
const value = object[key];
|
|
25
|
+
return typeof value === 'number' ? value : null;
|
|
26
|
+
};
|
|
27
|
+
export const getBoolean = (object, key) => {
|
|
28
|
+
const value = object[key];
|
|
29
|
+
return typeof value === 'boolean' ? value : null;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=json.js.map
|
package/lib/json.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAuB,EAAE,CACnE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAoB,EAAE;IAC3D,IAAI,CAAC;QACJ,MAAM,MAAM,GAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAqB,EAAE;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAe,EAAE;IACxE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAiB,EAAE;IAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAiB,EAAE;IAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAkB,EAAE;IAC7E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC,CAAC"}
|
package/lib/logger.d.ts
CHANGED
|
@@ -4,12 +4,20 @@ export declare enum LogLevel {
|
|
|
4
4
|
WARN = 3,
|
|
5
5
|
ERROR = 4
|
|
6
6
|
}
|
|
7
|
-
type Payload =
|
|
7
|
+
type Payload = unknown;
|
|
8
|
+
export interface LogEntry {
|
|
9
|
+
level: LogLevel;
|
|
10
|
+
message: string;
|
|
11
|
+
payload?: unknown;
|
|
12
|
+
timestamp: Date;
|
|
13
|
+
}
|
|
14
|
+
export type LogSink = (entry: LogEntry) => void;
|
|
8
15
|
export declare const logger: {
|
|
9
16
|
debug: (message: string, payload?: Payload) => void;
|
|
10
17
|
info: (message: string, payload?: Payload) => void;
|
|
11
18
|
warn: (message: string, payload?: Payload) => void;
|
|
12
19
|
error: (message: string, payload?: Payload) => void;
|
|
20
|
+
addSink: (sink: LogSink) => (() => void);
|
|
13
21
|
setLevel: (level: LogLevel | string) => void;
|
|
14
22
|
};
|
|
15
23
|
export {};
|
package/lib/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IACnB,KAAK,IAAI;IACT,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,KAAK,IAAA;CACL;AAED,KAAK,OAAO,GAAG,OAAO,CAAC;AAEvB,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAgEhD,eAAO,MAAM,MAAM;qBACD,MAAM,YAAY,OAAO;oBAC1B,MAAM,YAAY,OAAO;oBACzB,MAAM,YAAY,OAAO;qBACxB,MAAM,YAAY,OAAO;oBAC1B,OAAO,KAAG,CAAC,MAAM,IAAI,CAAC;sBASpB,QAAQ,GAAG,MAAM;CAYnC,CAAC"}
|
package/lib/logger.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { readEnv } from './env.js';
|
|
1
2
|
export var LogLevel;
|
|
2
3
|
(function (LogLevel) {
|
|
3
4
|
LogLevel[LogLevel["DEBUG"] = 1] = "DEBUG";
|
|
@@ -5,8 +6,13 @@ export var LogLevel;
|
|
|
5
6
|
LogLevel[LogLevel["WARN"] = 3] = "WARN";
|
|
6
7
|
LogLevel[LogLevel["ERROR"] = 4] = "ERROR";
|
|
7
8
|
})(LogLevel || (LogLevel = {}));
|
|
9
|
+
const sinks = [];
|
|
10
|
+
// JSON.stringify is typed as returning string, but returns undefined for values it cannot
|
|
11
|
+
// serialize, such as functions and symbols.
|
|
12
|
+
const stringify = (value) => JSON.stringify(value);
|
|
8
13
|
const serializePayload = (payload) => {
|
|
9
|
-
const
|
|
14
|
+
const serialized = stringify(payload instanceof Error ? { error: payload.message, name: payload.name, stack: payload.stack } : payload);
|
|
15
|
+
const json = serialized ?? `"[${typeof payload}]"`;
|
|
10
16
|
return json.padStart(json.length + 1);
|
|
11
17
|
};
|
|
12
18
|
const levelMap = {
|
|
@@ -17,8 +23,8 @@ const levelMap = {
|
|
|
17
23
|
};
|
|
18
24
|
const parseLevel = (level) => levelMap[level.toUpperCase()];
|
|
19
25
|
const resolveInitialLevel = () => {
|
|
20
|
-
const envLevel =
|
|
21
|
-
if (envLevel === undefined
|
|
26
|
+
const envLevel = readEnv('LOG_LEVEL');
|
|
27
|
+
if (envLevel === undefined) {
|
|
22
28
|
return LogLevel.INFO;
|
|
23
29
|
}
|
|
24
30
|
return parseLevel(envLevel) ?? LogLevel.INFO;
|
|
@@ -28,8 +34,8 @@ const log = (level, message, payload) => {
|
|
|
28
34
|
if (level < currentLevel) {
|
|
29
35
|
return;
|
|
30
36
|
}
|
|
31
|
-
const
|
|
32
|
-
const prefix = `[${
|
|
37
|
+
const timestamp = new Date();
|
|
38
|
+
const prefix = `[${timestamp.toISOString()}] [${LogLevel[level].toUpperCase()}]`;
|
|
33
39
|
const payloadStr = payload === undefined ? '' : serializePayload(payload);
|
|
34
40
|
const output = `${prefix} ${message}${payloadStr}`;
|
|
35
41
|
if (level === LogLevel.ERROR) {
|
|
@@ -44,12 +50,29 @@ const log = (level, message, payload) => {
|
|
|
44
50
|
else {
|
|
45
51
|
console.log(output);
|
|
46
52
|
}
|
|
53
|
+
for (const sink of sinks) {
|
|
54
|
+
try {
|
|
55
|
+
sink({ level, message, payload, timestamp });
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.error('[logger] sink failed', error);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
47
61
|
};
|
|
48
62
|
export const logger = {
|
|
49
63
|
debug: (message, payload) => log(LogLevel.DEBUG, message, payload),
|
|
50
64
|
info: (message, payload) => log(LogLevel.INFO, message, payload),
|
|
51
65
|
warn: (message, payload) => log(LogLevel.WARN, message, payload),
|
|
52
66
|
error: (message, payload) => log(LogLevel.ERROR, message, payload),
|
|
67
|
+
addSink: (sink) => {
|
|
68
|
+
sinks.push(sink);
|
|
69
|
+
return () => {
|
|
70
|
+
const index = sinks.indexOf(sink);
|
|
71
|
+
if (index !== -1) {
|
|
72
|
+
sinks.splice(index, 1);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
},
|
|
53
76
|
setLevel: (level) => {
|
|
54
77
|
if (typeof level === 'string') {
|
|
55
78
|
const resolved = parseLevel(level);
|
package/lib/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IACnB,yCAAS,CAAA;IACT,uCAAI,CAAA;IACJ,uCAAI,CAAA;IACJ,yCAAK,CAAA;AACN,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/lib/math.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAK/D,CAAC"}
|
package/lib/math.js
ADDED
package/lib/math.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAU,EAAE;IACxE,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAAC,4BAA4B,GAAG,wBAAwB,GAAG,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC"}
|
package/lib/notify.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export declare const notifySlack: (url: string, text: string) => Promise<void>;
|
|
2
|
+
export declare const pingHealthchecks: (url: string, timeoutMs?: number) => Promise<void>;
|
|
2
3
|
export declare const notifyMattermost: (baseUrl: string, token: string, channelId: string, message: string) => Promise<void>;
|
|
3
4
|
//# sourceMappingURL=notify.d.ts.map
|
package/lib/notify.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../src/notify.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAyBzE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC5B,SAAS,MAAM,EACf,OAAO,MAAM,EACb,WAAW,MAAM,EACjB,SAAS,MAAM,KACb,OAAO,CAAC,IAAI,CAcd,CAAC"}
|
|
1
|
+
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../src/notify.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAyBzE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,KAAK,MAAM,EAAE,kBAAgB,KAAG,OAAO,CAAC,IAAI,CAclF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC5B,SAAS,MAAM,EACf,OAAO,MAAM,EACb,WAAW,MAAM,EACjB,SAAS,MAAM,KACb,OAAO,CAAC,IAAI,CAcd,CAAC"}
|