@strapi/utils 5.12.0 → 5.12.2
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/dist/async.js +28 -0
- package/dist/async.js.map +1 -0
- package/dist/async.mjs +24 -0
- package/dist/async.mjs.map +1 -0
- package/dist/content-types.js +201 -0
- package/dist/content-types.js.map +1 -0
- package/dist/content-types.mjs +167 -0
- package/dist/content-types.mjs.map +1 -0
- package/dist/convert-query-params.js +512 -0
- package/dist/convert-query-params.js.map +1 -0
- package/dist/convert-query-params.mjs +510 -0
- package/dist/convert-query-params.mjs.map +1 -0
- package/dist/env-helper.js +81 -0
- package/dist/env-helper.js.map +1 -0
- package/dist/env-helper.mjs +79 -0
- package/dist/env-helper.mjs.map +1 -0
- package/dist/errors.js +104 -0
- package/dist/errors.js.map +1 -0
- package/dist/errors.mjs +88 -0
- package/dist/errors.mjs.map +1 -0
- package/dist/file.js +57 -0
- package/dist/file.js.map +1 -0
- package/dist/file.mjs +50 -0
- package/dist/file.mjs.map +1 -0
- package/dist/format-yup-error.js +19 -0
- package/dist/format-yup-error.js.map +1 -0
- package/dist/format-yup-error.mjs +17 -0
- package/dist/format-yup-error.mjs.map +1 -0
- package/dist/hooks.js +86 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hooks.mjs +80 -0
- package/dist/hooks.mjs.map +1 -0
- package/dist/import-default.js +9 -0
- package/dist/import-default.js.map +1 -0
- package/dist/import-default.mjs +7 -0
- package/dist/import-default.mjs.map +1 -0
- package/dist/index.js +54 -4358
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +48 -4317
- package/dist/index.mjs.map +1 -1
- package/dist/machine-id.js +17 -0
- package/dist/machine-id.js.map +1 -0
- package/dist/machine-id.mjs +15 -0
- package/dist/machine-id.mjs.map +1 -0
- package/dist/operators.js +79 -0
- package/dist/operators.js.map +1 -0
- package/dist/operators.mjs +76 -0
- package/dist/operators.mjs.map +1 -0
- package/dist/package-manager.js +36 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/package-manager.mjs +33 -0
- package/dist/package-manager.mjs.map +1 -0
- package/dist/pagination.js +163 -0
- package/dist/pagination.js.map +1 -0
- package/dist/pagination.mjs +159 -0
- package/dist/pagination.mjs.map +1 -0
- package/dist/parse-type.js +140 -0
- package/dist/parse-type.js.map +1 -0
- package/dist/parse-type.mjs +118 -0
- package/dist/parse-type.mjs.map +1 -0
- package/dist/policy.js +33 -0
- package/dist/policy.js.map +1 -0
- package/dist/policy.mjs +30 -0
- package/dist/policy.mjs.map +1 -0
- package/dist/primitives/arrays.js +7 -0
- package/dist/primitives/arrays.js.map +1 -0
- package/dist/primitives/arrays.mjs +5 -0
- package/dist/primitives/arrays.mjs.map +1 -0
- package/dist/primitives/dates.js +11 -0
- package/dist/primitives/dates.js.map +1 -0
- package/dist/primitives/dates.mjs +9 -0
- package/dist/primitives/dates.mjs.map +1 -0
- package/dist/primitives/objects.js +13 -0
- package/dist/primitives/objects.js.map +1 -0
- package/dist/primitives/objects.mjs +11 -0
- package/dist/primitives/objects.mjs.map +1 -0
- package/dist/primitives/strings.js +49 -0
- package/dist/primitives/strings.js.map +1 -0
- package/dist/primitives/strings.mjs +38 -0
- package/dist/primitives/strings.mjs.map +1 -0
- package/dist/print-value.js +42 -0
- package/dist/print-value.js.map +1 -0
- package/dist/print-value.mjs +40 -0
- package/dist/print-value.mjs.map +1 -0
- package/dist/provider-factory.js +82 -0
- package/dist/provider-factory.js.map +1 -0
- package/dist/provider-factory.mjs +80 -0
- package/dist/provider-factory.mjs.map +1 -0
- package/dist/relations.js +54 -0
- package/dist/relations.js.map +1 -0
- package/dist/relations.mjs +45 -0
- package/dist/relations.mjs.map +1 -0
- package/dist/sanitize/index.js +195 -0
- package/dist/sanitize/index.js.map +1 -0
- package/dist/sanitize/index.mjs +194 -0
- package/dist/sanitize/index.mjs.map +1 -0
- package/dist/sanitize/sanitizers.js +173 -0
- package/dist/sanitize/sanitizers.js.map +1 -0
- package/dist/sanitize/sanitizers.mjs +166 -0
- package/dist/sanitize/sanitizers.mjs.map +1 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.js +20 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.js.map +1 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.mjs +18 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.mjs.map +1 -0
- package/dist/sanitize/visitors/index.js +22 -0
- package/dist/sanitize/visitors/index.js.map +1 -0
- package/dist/sanitize/visitors/index.mjs +9 -0
- package/dist/sanitize/visitors/index.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.js +87 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.js.map +1 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.mjs +85 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js +12 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js.map +1 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.mjs +10 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js +12 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js.map +1 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.mjs +10 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-password.js +10 -0
- package/dist/sanitize/visitors/remove-password.js.map +1 -0
- package/dist/sanitize/visitors/remove-password.mjs +8 -0
- package/dist/sanitize/visitors/remove-password.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-private.js +16 -0
- package/dist/sanitize/visitors/remove-private.js.map +1 -0
- package/dist/sanitize/visitors/remove-private.mjs +14 -0
- package/dist/sanitize/visitors/remove-private.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-fields.js +28 -0
- package/dist/sanitize/visitors/remove-restricted-fields.js.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-fields.mjs +26 -0
- package/dist/sanitize/visitors/remove-restricted-fields.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js +116 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-relations.mjs +114 -0
- package/dist/sanitize/visitors/remove-restricted-relations.mjs.map +1 -0
- package/dist/set-creator-fields.js +18 -0
- package/dist/set-creator-fields.js.map +1 -0
- package/dist/set-creator-fields.mjs +16 -0
- package/dist/set-creator-fields.mjs.map +1 -0
- package/dist/template.js +18 -0
- package/dist/template.js.map +1 -0
- package/dist/template.mjs +15 -0
- package/dist/template.mjs.map +1 -0
- package/dist/traverse/factory.js +158 -0
- package/dist/traverse/factory.js.map +1 -0
- package/dist/traverse/factory.mjs +156 -0
- package/dist/traverse/factory.mjs.map +1 -0
- package/dist/traverse/index.js +14 -0
- package/dist/traverse/index.js.map +1 -0
- package/dist/traverse/index.mjs +5 -0
- package/dist/traverse/index.mjs.map +1 -0
- package/dist/traverse/query-fields.js +41 -0
- package/dist/traverse/query-fields.js.map +1 -0
- package/dist/traverse/query-fields.mjs +39 -0
- package/dist/traverse/query-fields.mjs.map +1 -0
- package/dist/traverse/query-filters.js +114 -0
- package/dist/traverse/query-filters.js.map +1 -0
- package/dist/traverse/query-filters.mjs +112 -0
- package/dist/traverse/query-filters.mjs.map +1 -0
- package/dist/traverse/query-populate.js +280 -0
- package/dist/traverse/query-populate.js.map +1 -0
- package/dist/traverse/query-populate.mjs +278 -0
- package/dist/traverse/query-populate.mjs.map +1 -0
- package/dist/traverse/query-sort.js +144 -0
- package/dist/traverse/query-sort.js.map +1 -0
- package/dist/traverse/query-sort.mjs +142 -0
- package/dist/traverse/query-sort.mjs.map +1 -0
- package/dist/traverse-entity.js +170 -0
- package/dist/traverse-entity.js.map +1 -0
- package/dist/traverse-entity.mjs +168 -0
- package/dist/traverse-entity.mjs.map +1 -0
- package/dist/validate/index.js +218 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/index.mjs +217 -0
- package/dist/validate/index.mjs.map +1 -0
- package/dist/validate/utils.js +27 -0
- package/dist/validate/utils.js.map +1 -0
- package/dist/validate/utils.mjs +24 -0
- package/dist/validate/utils.mjs.map +1 -0
- package/dist/validate/validators.js +369 -0
- package/dist/validate/validators.js.map +1 -0
- package/dist/validate/validators.mjs +356 -0
- package/dist/validate/validators.mjs.map +1 -0
- package/dist/validate/visitors/index.js +22 -0
- package/dist/validate/visitors/index.js.map +1 -0
- package/dist/validate/visitors/index.mjs +9 -0
- package/dist/validate/visitors/index.mjs.map +1 -0
- package/dist/validate/visitors/throw-disallowed-fields.js +91 -0
- package/dist/validate/visitors/throw-disallowed-fields.js.map +1 -0
- package/dist/validate/visitors/throw-disallowed-fields.mjs +89 -0
- package/dist/validate/visitors/throw-disallowed-fields.mjs.map +1 -0
- package/dist/validate/visitors/throw-dynamic-zones.js +16 -0
- package/dist/validate/visitors/throw-dynamic-zones.js.map +1 -0
- package/dist/validate/visitors/throw-dynamic-zones.mjs +14 -0
- package/dist/validate/visitors/throw-dynamic-zones.mjs.map +1 -0
- package/dist/validate/visitors/throw-morph-to-relations.js +16 -0
- package/dist/validate/visitors/throw-morph-to-relations.js.map +1 -0
- package/dist/validate/visitors/throw-morph-to-relations.mjs +14 -0
- package/dist/validate/visitors/throw-morph-to-relations.mjs.map +1 -0
- package/dist/validate/visitors/throw-password.js +15 -0
- package/dist/validate/visitors/throw-password.js.map +1 -0
- package/dist/validate/visitors/throw-password.mjs +13 -0
- package/dist/validate/visitors/throw-password.mjs.map +1 -0
- package/dist/validate/visitors/throw-private.js +20 -0
- package/dist/validate/visitors/throw-private.js.map +1 -0
- package/dist/validate/visitors/throw-private.mjs +18 -0
- package/dist/validate/visitors/throw-private.mjs.map +1 -0
- package/dist/validate/visitors/throw-restricted-fields.js +36 -0
- package/dist/validate/visitors/throw-restricted-fields.js.map +1 -0
- package/dist/validate/visitors/throw-restricted-fields.mjs +34 -0
- package/dist/validate/visitors/throw-restricted-fields.mjs.map +1 -0
- package/dist/validate/visitors/throw-restricted-relations.js +125 -0
- package/dist/validate/visitors/throw-restricted-relations.js.map +1 -0
- package/dist/validate/visitors/throw-restricted-relations.mjs +123 -0
- package/dist/validate/visitors/throw-restricted-relations.mjs.map +1 -0
- package/dist/validate/visitors/throw-unrecognized-fields.js +66 -0
- package/dist/validate/visitors/throw-unrecognized-fields.js.map +1 -0
- package/dist/validate/visitors/throw-unrecognized-fields.mjs +64 -0
- package/dist/validate/visitors/throw-unrecognized-fields.mjs.map +1 -0
- package/dist/validators.js +60 -0
- package/dist/validators.js.map +1 -0
- package/dist/validators.mjs +37 -0
- package/dist/validators.mjs.map +1 -0
- package/dist/yup.js +101 -0
- package/dist/yup.js.map +1 -0
- package/dist/yup.mjs +74 -0
- package/dist/yup.mjs.map +1 -0
- package/dist/zod.js +31 -0
- package/dist/zod.js.map +1 -0
- package/dist/zod.mjs +29 -0
- package/dist/zod.mjs.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _ = require('lodash');
|
|
4
|
+
|
|
5
|
+
function envFn(key, defaultValue) {
|
|
6
|
+
return _.has(process.env, key) ? process.env[key] : defaultValue;
|
|
7
|
+
}
|
|
8
|
+
function getKey(key) {
|
|
9
|
+
return process.env[key] ?? '';
|
|
10
|
+
}
|
|
11
|
+
const utils = {
|
|
12
|
+
int (key, defaultValue) {
|
|
13
|
+
if (!_.has(process.env, key)) {
|
|
14
|
+
return defaultValue;
|
|
15
|
+
}
|
|
16
|
+
return parseInt(getKey(key), 10);
|
|
17
|
+
},
|
|
18
|
+
float (key, defaultValue) {
|
|
19
|
+
if (!_.has(process.env, key)) {
|
|
20
|
+
return defaultValue;
|
|
21
|
+
}
|
|
22
|
+
return parseFloat(getKey(key));
|
|
23
|
+
},
|
|
24
|
+
bool (key, defaultValue) {
|
|
25
|
+
if (!_.has(process.env, key)) {
|
|
26
|
+
return defaultValue;
|
|
27
|
+
}
|
|
28
|
+
return getKey(key) === 'true';
|
|
29
|
+
},
|
|
30
|
+
json (key, defaultValue) {
|
|
31
|
+
if (!_.has(process.env, key)) {
|
|
32
|
+
return defaultValue;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
return JSON.parse(getKey(key));
|
|
36
|
+
} catch (error) {
|
|
37
|
+
if (error instanceof Error) {
|
|
38
|
+
throw new Error(`Invalid json environment variable ${key}: ${error.message}`);
|
|
39
|
+
}
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
array (key, defaultValue) {
|
|
44
|
+
if (!_.has(process.env, key)) {
|
|
45
|
+
return defaultValue;
|
|
46
|
+
}
|
|
47
|
+
let value = getKey(key);
|
|
48
|
+
if (value.startsWith('[') && value.endsWith(']')) {
|
|
49
|
+
value = value.substring(1, value.length - 1);
|
|
50
|
+
}
|
|
51
|
+
return value.split(',').map((v)=>{
|
|
52
|
+
return _.trim(_.trim(v, ' '), '"');
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
date (key, defaultValue) {
|
|
56
|
+
if (!_.has(process.env, key)) {
|
|
57
|
+
return defaultValue;
|
|
58
|
+
}
|
|
59
|
+
return new Date(getKey(key));
|
|
60
|
+
},
|
|
61
|
+
/**
|
|
62
|
+
* Gets a value from env that matches oneOf provided values
|
|
63
|
+
* @param {string} key
|
|
64
|
+
* @param {string[]} expectedValues
|
|
65
|
+
* @param {string|undefined} defaultValue
|
|
66
|
+
* @returns {string|undefined}
|
|
67
|
+
*/ oneOf (key, expectedValues, defaultValue) {
|
|
68
|
+
if (!expectedValues) {
|
|
69
|
+
throw new Error(`env.oneOf requires expectedValues`);
|
|
70
|
+
}
|
|
71
|
+
if (defaultValue && !expectedValues.includes(defaultValue)) {
|
|
72
|
+
throw new Error(`env.oneOf requires defaultValue to be included in expectedValues`);
|
|
73
|
+
}
|
|
74
|
+
const rawValue = env(key, defaultValue);
|
|
75
|
+
return expectedValues.includes(rawValue) ? rawValue : defaultValue;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const env = Object.assign(envFn, utils);
|
|
79
|
+
|
|
80
|
+
module.exports = env;
|
|
81
|
+
//# sourceMappingURL=env-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-helper.js","sources":["../src/env-helper.ts"],"sourcesContent":["import _ from 'lodash';\n\nexport type Env = typeof envFn & typeof utils;\n\nfunction envFn<T>(key: string, defaultValue?: T): string | T | undefined {\n return _.has(process.env, key) ? process.env[key] : defaultValue;\n}\n\nfunction getKey(key: string) {\n return process.env[key] ?? '';\n}\n\nconst utils = {\n int(key: string, defaultValue?: number): number | undefined {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n return parseInt(getKey(key), 10);\n },\n\n float(key: string, defaultValue?: number): number | undefined {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n return parseFloat(getKey(key));\n },\n\n bool(key: string, defaultValue?: boolean): boolean | undefined {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n return getKey(key) === 'true';\n },\n\n json(key: string, defaultValue?: object) {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n try {\n return JSON.parse(getKey(key));\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Invalid json environment variable ${key}: ${error.message}`);\n }\n\n throw error;\n }\n },\n\n array(key: string, defaultValue?: string[]): string[] | undefined {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n let value = getKey(key);\n\n if (value.startsWith('[') && value.endsWith(']')) {\n value = value.substring(1, value.length - 1);\n }\n\n return value.split(',').map((v) => {\n return _.trim(_.trim(v, ' '), '\"');\n });\n },\n\n date(key: string, defaultValue?: Date): Date | undefined {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n return new Date(getKey(key));\n },\n\n /**\n * Gets a value from env that matches oneOf provided values\n * @param {string} key\n * @param {string[]} expectedValues\n * @param {string|undefined} defaultValue\n * @returns {string|undefined}\n */\n oneOf(key: string, expectedValues?: unknown[], defaultValue?: unknown) {\n if (!expectedValues) {\n throw new Error(`env.oneOf requires expectedValues`);\n }\n\n if (defaultValue && !expectedValues.includes(defaultValue)) {\n throw new Error(`env.oneOf requires defaultValue to be included in expectedValues`);\n }\n\n const rawValue = env(key, defaultValue);\n return expectedValues.includes(rawValue) ? rawValue : defaultValue;\n },\n};\n\nconst env: Env = Object.assign(envFn, utils);\n\nexport default env;\n"],"names":["envFn","key","defaultValue","_","has","process","env","getKey","utils","int","parseInt","float","parseFloat","bool","json","JSON","parse","error","Error","message","array","value","startsWith","endsWith","substring","length","split","map","v","trim","date","Date","oneOf","expectedValues","includes","rawValue","Object","assign"],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import ___default from 'lodash';
|
|
2
|
+
|
|
3
|
+
function envFn(key, defaultValue) {
|
|
4
|
+
return ___default.has(process.env, key) ? process.env[key] : defaultValue;
|
|
5
|
+
}
|
|
6
|
+
function getKey(key) {
|
|
7
|
+
return process.env[key] ?? '';
|
|
8
|
+
}
|
|
9
|
+
const utils = {
|
|
10
|
+
int (key, defaultValue) {
|
|
11
|
+
if (!___default.has(process.env, key)) {
|
|
12
|
+
return defaultValue;
|
|
13
|
+
}
|
|
14
|
+
return parseInt(getKey(key), 10);
|
|
15
|
+
},
|
|
16
|
+
float (key, defaultValue) {
|
|
17
|
+
if (!___default.has(process.env, key)) {
|
|
18
|
+
return defaultValue;
|
|
19
|
+
}
|
|
20
|
+
return parseFloat(getKey(key));
|
|
21
|
+
},
|
|
22
|
+
bool (key, defaultValue) {
|
|
23
|
+
if (!___default.has(process.env, key)) {
|
|
24
|
+
return defaultValue;
|
|
25
|
+
}
|
|
26
|
+
return getKey(key) === 'true';
|
|
27
|
+
},
|
|
28
|
+
json (key, defaultValue) {
|
|
29
|
+
if (!___default.has(process.env, key)) {
|
|
30
|
+
return defaultValue;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
return JSON.parse(getKey(key));
|
|
34
|
+
} catch (error) {
|
|
35
|
+
if (error instanceof Error) {
|
|
36
|
+
throw new Error(`Invalid json environment variable ${key}: ${error.message}`);
|
|
37
|
+
}
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
array (key, defaultValue) {
|
|
42
|
+
if (!___default.has(process.env, key)) {
|
|
43
|
+
return defaultValue;
|
|
44
|
+
}
|
|
45
|
+
let value = getKey(key);
|
|
46
|
+
if (value.startsWith('[') && value.endsWith(']')) {
|
|
47
|
+
value = value.substring(1, value.length - 1);
|
|
48
|
+
}
|
|
49
|
+
return value.split(',').map((v)=>{
|
|
50
|
+
return ___default.trim(___default.trim(v, ' '), '"');
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
date (key, defaultValue) {
|
|
54
|
+
if (!___default.has(process.env, key)) {
|
|
55
|
+
return defaultValue;
|
|
56
|
+
}
|
|
57
|
+
return new Date(getKey(key));
|
|
58
|
+
},
|
|
59
|
+
/**
|
|
60
|
+
* Gets a value from env that matches oneOf provided values
|
|
61
|
+
* @param {string} key
|
|
62
|
+
* @param {string[]} expectedValues
|
|
63
|
+
* @param {string|undefined} defaultValue
|
|
64
|
+
* @returns {string|undefined}
|
|
65
|
+
*/ oneOf (key, expectedValues, defaultValue) {
|
|
66
|
+
if (!expectedValues) {
|
|
67
|
+
throw new Error(`env.oneOf requires expectedValues`);
|
|
68
|
+
}
|
|
69
|
+
if (defaultValue && !expectedValues.includes(defaultValue)) {
|
|
70
|
+
throw new Error(`env.oneOf requires defaultValue to be included in expectedValues`);
|
|
71
|
+
}
|
|
72
|
+
const rawValue = env(key, defaultValue);
|
|
73
|
+
return expectedValues.includes(rawValue) ? rawValue : defaultValue;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const env = Object.assign(envFn, utils);
|
|
77
|
+
|
|
78
|
+
export { env as default };
|
|
79
|
+
//# sourceMappingURL=env-helper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-helper.mjs","sources":["../src/env-helper.ts"],"sourcesContent":["import _ from 'lodash';\n\nexport type Env = typeof envFn & typeof utils;\n\nfunction envFn<T>(key: string, defaultValue?: T): string | T | undefined {\n return _.has(process.env, key) ? process.env[key] : defaultValue;\n}\n\nfunction getKey(key: string) {\n return process.env[key] ?? '';\n}\n\nconst utils = {\n int(key: string, defaultValue?: number): number | undefined {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n return parseInt(getKey(key), 10);\n },\n\n float(key: string, defaultValue?: number): number | undefined {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n return parseFloat(getKey(key));\n },\n\n bool(key: string, defaultValue?: boolean): boolean | undefined {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n return getKey(key) === 'true';\n },\n\n json(key: string, defaultValue?: object) {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n try {\n return JSON.parse(getKey(key));\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Invalid json environment variable ${key}: ${error.message}`);\n }\n\n throw error;\n }\n },\n\n array(key: string, defaultValue?: string[]): string[] | undefined {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n let value = getKey(key);\n\n if (value.startsWith('[') && value.endsWith(']')) {\n value = value.substring(1, value.length - 1);\n }\n\n return value.split(',').map((v) => {\n return _.trim(_.trim(v, ' '), '\"');\n });\n },\n\n date(key: string, defaultValue?: Date): Date | undefined {\n if (!_.has(process.env, key)) {\n return defaultValue;\n }\n\n return new Date(getKey(key));\n },\n\n /**\n * Gets a value from env that matches oneOf provided values\n * @param {string} key\n * @param {string[]} expectedValues\n * @param {string|undefined} defaultValue\n * @returns {string|undefined}\n */\n oneOf(key: string, expectedValues?: unknown[], defaultValue?: unknown) {\n if (!expectedValues) {\n throw new Error(`env.oneOf requires expectedValues`);\n }\n\n if (defaultValue && !expectedValues.includes(defaultValue)) {\n throw new Error(`env.oneOf requires defaultValue to be included in expectedValues`);\n }\n\n const rawValue = env(key, defaultValue);\n return expectedValues.includes(rawValue) ? rawValue : defaultValue;\n },\n};\n\nconst env: Env = Object.assign(envFn, utils);\n\nexport default env;\n"],"names":["envFn","key","defaultValue","_","has","process","env","getKey","utils","int","parseInt","float","parseFloat","bool","json","JSON","parse","error","Error","message","array","value","startsWith","endsWith","substring","length","split","map","v","trim","date","Date","oneOf","expectedValues","includes","rawValue","Object","assign"],"mappings":"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"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var httpErrors = require('http-errors');
|
|
4
|
+
var formatYupError = require('./format-yup-error.js');
|
|
5
|
+
|
|
6
|
+
/* ApplicationError */ class ApplicationError extends Error {
|
|
7
|
+
constructor(message = 'An application error occured', details = {}){
|
|
8
|
+
super();
|
|
9
|
+
this.name = 'ApplicationError';
|
|
10
|
+
this.message = message;
|
|
11
|
+
this.details = details;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
class ValidationError extends ApplicationError {
|
|
15
|
+
constructor(message, details){
|
|
16
|
+
super(message, details);
|
|
17
|
+
this.name = 'ValidationError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
class YupValidationError extends ValidationError {
|
|
21
|
+
constructor(yupError, message){
|
|
22
|
+
super('Validation');
|
|
23
|
+
const { errors, message: yupMessage } = formatYupError.formatYupErrors(yupError);
|
|
24
|
+
this.message = message || yupMessage;
|
|
25
|
+
this.details = {
|
|
26
|
+
errors
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
class PaginationError extends ApplicationError {
|
|
31
|
+
constructor(message = 'Invalid pagination', details){
|
|
32
|
+
super(message, details);
|
|
33
|
+
this.name = 'PaginationError';
|
|
34
|
+
this.message = message;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
class NotFoundError extends ApplicationError {
|
|
38
|
+
constructor(message = 'Entity not found', details){
|
|
39
|
+
super(message, details);
|
|
40
|
+
this.name = 'NotFoundError';
|
|
41
|
+
this.message = message;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
class ForbiddenError extends ApplicationError {
|
|
45
|
+
constructor(message = 'Forbidden access', details){
|
|
46
|
+
super(message, details);
|
|
47
|
+
this.name = 'ForbiddenError';
|
|
48
|
+
this.message = message;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
class UnauthorizedError extends ApplicationError {
|
|
52
|
+
constructor(message = 'Unauthorized', details){
|
|
53
|
+
super(message, details);
|
|
54
|
+
this.name = 'UnauthorizedError';
|
|
55
|
+
this.message = message;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
class RateLimitError extends ApplicationError {
|
|
59
|
+
constructor(message = 'Too many requests, please try again later.', details){
|
|
60
|
+
super(message, details);
|
|
61
|
+
this.name = 'RateLimitError';
|
|
62
|
+
this.message = message;
|
|
63
|
+
this.details = details || {};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
class PayloadTooLargeError extends ApplicationError {
|
|
67
|
+
constructor(message = 'Entity too large', details){
|
|
68
|
+
super(message, details);
|
|
69
|
+
this.name = 'PayloadTooLargeError';
|
|
70
|
+
this.message = message;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
class PolicyError extends ForbiddenError {
|
|
74
|
+
constructor(message = 'Policy Failed', details){
|
|
75
|
+
super(message, details);
|
|
76
|
+
this.name = 'PolicyError';
|
|
77
|
+
this.message = message;
|
|
78
|
+
this.details = details || {};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
class NotImplementedError extends ApplicationError {
|
|
82
|
+
constructor(message = 'This feature is not implemented yet', details){
|
|
83
|
+
super(message, details);
|
|
84
|
+
this.name = 'NotImplementedError';
|
|
85
|
+
this.message = message;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
Object.defineProperty(exports, "HttpError", {
|
|
90
|
+
enumerable: true,
|
|
91
|
+
get: function () { return httpErrors.HttpError; }
|
|
92
|
+
});
|
|
93
|
+
exports.ApplicationError = ApplicationError;
|
|
94
|
+
exports.ForbiddenError = ForbiddenError;
|
|
95
|
+
exports.NotFoundError = NotFoundError;
|
|
96
|
+
exports.NotImplementedError = NotImplementedError;
|
|
97
|
+
exports.PaginationError = PaginationError;
|
|
98
|
+
exports.PayloadTooLargeError = PayloadTooLargeError;
|
|
99
|
+
exports.PolicyError = PolicyError;
|
|
100
|
+
exports.RateLimitError = RateLimitError;
|
|
101
|
+
exports.UnauthorizedError = UnauthorizedError;
|
|
102
|
+
exports.ValidationError = ValidationError;
|
|
103
|
+
exports.YupValidationError = YupValidationError;
|
|
104
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sources":["../src/errors.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\n\nimport yup from 'yup';\nimport { HttpError } from 'http-errors';\nimport { formatYupErrors } from './format-yup-error';\n\n/* ApplicationError */\nclass ApplicationError<\n TName extends string = 'ApplicationError',\n TMessage extends string = string,\n TDetails = unknown,\n> extends Error {\n name: TName;\n\n details: TDetails;\n\n message: TMessage;\n\n constructor(\n message = 'An application error occured' as TMessage,\n details: TDetails = {} as TDetails\n ) {\n super();\n this.name = 'ApplicationError' as TName;\n this.message = message;\n this.details = details;\n }\n}\n\nclass ValidationError<\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<'ValidationError', TMessage, TDetails> {\n constructor(message: TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'ValidationError';\n }\n}\n\ninterface YupFormattedError {\n path: string[];\n message: string;\n name: string;\n value: string;\n}\n\nclass YupValidationError<TMessage extends string = string> extends ValidationError<\n TMessage,\n { errors: YupFormattedError[] }\n> {\n constructor(yupError: yup.ValidationError, message?: TMessage) {\n super('Validation' as TMessage);\n const { errors, message: yupMessage } = formatYupErrors(yupError);\n this.message = message || (yupMessage as TMessage);\n this.details = { errors };\n }\n}\n\nclass PaginationError<\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<'PaginationError', TMessage, TDetails> {\n constructor(message = 'Invalid pagination' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'PaginationError';\n this.message = message;\n }\n}\n\nclass NotFoundError<TMessage extends string = string, TDetails = unknown> extends ApplicationError<\n 'NotFoundError',\n TMessage,\n TDetails\n> {\n constructor(message = 'Entity not found' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'NotFoundError';\n this.message = message;\n }\n}\n\nclass ForbiddenError<\n TName extends string = 'ForbiddenError',\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<TName, TMessage, TDetails> {\n constructor(message = 'Forbidden access' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'ForbiddenError' as TName;\n this.message = message;\n }\n}\n\nclass UnauthorizedError<\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<'UnauthorizedError', TMessage, TDetails> {\n constructor(message = 'Unauthorized' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'UnauthorizedError';\n this.message = message;\n }\n}\n\nclass RateLimitError<TMessage extends string = string, TDetails = unknown> extends ApplicationError<\n 'RateLimitError',\n TMessage,\n TDetails\n> {\n constructor(\n message = 'Too many requests, please try again later.' as TMessage,\n details?: TDetails\n ) {\n super(message, details);\n this.name = 'RateLimitError';\n this.message = message;\n this.details = details || ({} as TDetails);\n }\n}\n\nclass PayloadTooLargeError<\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<'PayloadTooLargeError', TMessage, TDetails> {\n constructor(message = 'Entity too large' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'PayloadTooLargeError';\n this.message = message;\n }\n}\n\nclass PolicyError<TMessage extends string = string, TDetails = unknown> extends ForbiddenError<\n 'PolicyError',\n TMessage,\n TDetails\n> {\n constructor(message = 'Policy Failed' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'PolicyError';\n this.message = message;\n this.details = details || ({} as TDetails);\n }\n}\n\nclass NotImplementedError<\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<'NotImplementedError', TMessage, TDetails> {\n constructor(message = 'This feature is not implemented yet' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'NotImplementedError';\n this.message = message;\n }\n}\n\nexport {\n HttpError,\n ApplicationError,\n ValidationError,\n YupValidationError,\n PaginationError,\n NotFoundError,\n ForbiddenError,\n UnauthorizedError,\n RateLimitError,\n PayloadTooLargeError,\n PolicyError,\n NotImplementedError,\n};\n"],"names":["ApplicationError","Error","constructor","message","details","name","ValidationError","YupValidationError","yupError","errors","yupMessage","formatYupErrors","PaginationError","NotFoundError","ForbiddenError","UnauthorizedError","RateLimitError","PayloadTooLargeError","PolicyError","NotImplementedError"],"mappings":"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"}
|
package/dist/errors.mjs
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export { HttpError } from 'http-errors';
|
|
2
|
+
import { formatYupErrors } from './format-yup-error.mjs';
|
|
3
|
+
|
|
4
|
+
/* ApplicationError */ class ApplicationError extends Error {
|
|
5
|
+
constructor(message = 'An application error occured', details = {}){
|
|
6
|
+
super();
|
|
7
|
+
this.name = 'ApplicationError';
|
|
8
|
+
this.message = message;
|
|
9
|
+
this.details = details;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
class ValidationError extends ApplicationError {
|
|
13
|
+
constructor(message, details){
|
|
14
|
+
super(message, details);
|
|
15
|
+
this.name = 'ValidationError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
class YupValidationError extends ValidationError {
|
|
19
|
+
constructor(yupError, message){
|
|
20
|
+
super('Validation');
|
|
21
|
+
const { errors, message: yupMessage } = formatYupErrors(yupError);
|
|
22
|
+
this.message = message || yupMessage;
|
|
23
|
+
this.details = {
|
|
24
|
+
errors
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
class PaginationError extends ApplicationError {
|
|
29
|
+
constructor(message = 'Invalid pagination', details){
|
|
30
|
+
super(message, details);
|
|
31
|
+
this.name = 'PaginationError';
|
|
32
|
+
this.message = message;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
class NotFoundError extends ApplicationError {
|
|
36
|
+
constructor(message = 'Entity not found', details){
|
|
37
|
+
super(message, details);
|
|
38
|
+
this.name = 'NotFoundError';
|
|
39
|
+
this.message = message;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
class ForbiddenError extends ApplicationError {
|
|
43
|
+
constructor(message = 'Forbidden access', details){
|
|
44
|
+
super(message, details);
|
|
45
|
+
this.name = 'ForbiddenError';
|
|
46
|
+
this.message = message;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
class UnauthorizedError extends ApplicationError {
|
|
50
|
+
constructor(message = 'Unauthorized', details){
|
|
51
|
+
super(message, details);
|
|
52
|
+
this.name = 'UnauthorizedError';
|
|
53
|
+
this.message = message;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
class RateLimitError extends ApplicationError {
|
|
57
|
+
constructor(message = 'Too many requests, please try again later.', details){
|
|
58
|
+
super(message, details);
|
|
59
|
+
this.name = 'RateLimitError';
|
|
60
|
+
this.message = message;
|
|
61
|
+
this.details = details || {};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
class PayloadTooLargeError extends ApplicationError {
|
|
65
|
+
constructor(message = 'Entity too large', details){
|
|
66
|
+
super(message, details);
|
|
67
|
+
this.name = 'PayloadTooLargeError';
|
|
68
|
+
this.message = message;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
class PolicyError extends ForbiddenError {
|
|
72
|
+
constructor(message = 'Policy Failed', details){
|
|
73
|
+
super(message, details);
|
|
74
|
+
this.name = 'PolicyError';
|
|
75
|
+
this.message = message;
|
|
76
|
+
this.details = details || {};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
class NotImplementedError extends ApplicationError {
|
|
80
|
+
constructor(message = 'This feature is not implemented yet', details){
|
|
81
|
+
super(message, details);
|
|
82
|
+
this.name = 'NotImplementedError';
|
|
83
|
+
this.message = message;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export { ApplicationError, ForbiddenError, NotFoundError, NotImplementedError, PaginationError, PayloadTooLargeError, PolicyError, RateLimitError, UnauthorizedError, ValidationError, YupValidationError };
|
|
88
|
+
//# sourceMappingURL=errors.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.mjs","sources":["../src/errors.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\n\nimport yup from 'yup';\nimport { HttpError } from 'http-errors';\nimport { formatYupErrors } from './format-yup-error';\n\n/* ApplicationError */\nclass ApplicationError<\n TName extends string = 'ApplicationError',\n TMessage extends string = string,\n TDetails = unknown,\n> extends Error {\n name: TName;\n\n details: TDetails;\n\n message: TMessage;\n\n constructor(\n message = 'An application error occured' as TMessage,\n details: TDetails = {} as TDetails\n ) {\n super();\n this.name = 'ApplicationError' as TName;\n this.message = message;\n this.details = details;\n }\n}\n\nclass ValidationError<\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<'ValidationError', TMessage, TDetails> {\n constructor(message: TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'ValidationError';\n }\n}\n\ninterface YupFormattedError {\n path: string[];\n message: string;\n name: string;\n value: string;\n}\n\nclass YupValidationError<TMessage extends string = string> extends ValidationError<\n TMessage,\n { errors: YupFormattedError[] }\n> {\n constructor(yupError: yup.ValidationError, message?: TMessage) {\n super('Validation' as TMessage);\n const { errors, message: yupMessage } = formatYupErrors(yupError);\n this.message = message || (yupMessage as TMessage);\n this.details = { errors };\n }\n}\n\nclass PaginationError<\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<'PaginationError', TMessage, TDetails> {\n constructor(message = 'Invalid pagination' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'PaginationError';\n this.message = message;\n }\n}\n\nclass NotFoundError<TMessage extends string = string, TDetails = unknown> extends ApplicationError<\n 'NotFoundError',\n TMessage,\n TDetails\n> {\n constructor(message = 'Entity not found' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'NotFoundError';\n this.message = message;\n }\n}\n\nclass ForbiddenError<\n TName extends string = 'ForbiddenError',\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<TName, TMessage, TDetails> {\n constructor(message = 'Forbidden access' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'ForbiddenError' as TName;\n this.message = message;\n }\n}\n\nclass UnauthorizedError<\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<'UnauthorizedError', TMessage, TDetails> {\n constructor(message = 'Unauthorized' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'UnauthorizedError';\n this.message = message;\n }\n}\n\nclass RateLimitError<TMessage extends string = string, TDetails = unknown> extends ApplicationError<\n 'RateLimitError',\n TMessage,\n TDetails\n> {\n constructor(\n message = 'Too many requests, please try again later.' as TMessage,\n details?: TDetails\n ) {\n super(message, details);\n this.name = 'RateLimitError';\n this.message = message;\n this.details = details || ({} as TDetails);\n }\n}\n\nclass PayloadTooLargeError<\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<'PayloadTooLargeError', TMessage, TDetails> {\n constructor(message = 'Entity too large' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'PayloadTooLargeError';\n this.message = message;\n }\n}\n\nclass PolicyError<TMessage extends string = string, TDetails = unknown> extends ForbiddenError<\n 'PolicyError',\n TMessage,\n TDetails\n> {\n constructor(message = 'Policy Failed' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'PolicyError';\n this.message = message;\n this.details = details || ({} as TDetails);\n }\n}\n\nclass NotImplementedError<\n TMessage extends string = string,\n TDetails = unknown,\n> extends ApplicationError<'NotImplementedError', TMessage, TDetails> {\n constructor(message = 'This feature is not implemented yet' as TMessage, details?: TDetails) {\n super(message, details);\n this.name = 'NotImplementedError';\n this.message = message;\n }\n}\n\nexport {\n HttpError,\n ApplicationError,\n ValidationError,\n YupValidationError,\n PaginationError,\n NotFoundError,\n ForbiddenError,\n UnauthorizedError,\n RateLimitError,\n PayloadTooLargeError,\n PolicyError,\n NotImplementedError,\n};\n"],"names":["ApplicationError","Error","constructor","message","details","name","ValidationError","YupValidationError","yupError","errors","yupMessage","formatYupErrors","PaginationError","NotFoundError","ForbiddenError","UnauthorizedError","RateLimitError","PayloadTooLargeError","PolicyError","NotImplementedError"],"mappings":"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"}
|
package/dist/file.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var node_stream = require('node:stream');
|
|
4
|
+
|
|
5
|
+
const kbytesToBytes = (kbytes)=>kbytes * 1000;
|
|
6
|
+
const bytesToKbytes = (bytes)=>Math.round(bytes / 1000 * 100) / 100;
|
|
7
|
+
const bytesToHumanReadable = (bytes)=>{
|
|
8
|
+
const sizes = [
|
|
9
|
+
'Bytes',
|
|
10
|
+
'KB',
|
|
11
|
+
'MB',
|
|
12
|
+
'GB',
|
|
13
|
+
'TB',
|
|
14
|
+
'PB'
|
|
15
|
+
];
|
|
16
|
+
if (bytes === 0) return '0 Bytes';
|
|
17
|
+
const i = parseInt(`${Math.floor(Math.log(bytes) / Math.log(1000))}`, 10);
|
|
18
|
+
return `${Math.round(bytes / 1000 ** i)} ${sizes[i]}`;
|
|
19
|
+
};
|
|
20
|
+
const streamToBuffer = (stream)=>new Promise((resolve, reject)=>{
|
|
21
|
+
const chunks = [];
|
|
22
|
+
stream.on('data', (chunk)=>{
|
|
23
|
+
chunks.push(chunk);
|
|
24
|
+
});
|
|
25
|
+
stream.on('end', ()=>{
|
|
26
|
+
resolve(Buffer.concat(chunks));
|
|
27
|
+
});
|
|
28
|
+
stream.on('error', reject);
|
|
29
|
+
});
|
|
30
|
+
const getStreamSize = (stream)=>new Promise((resolve, reject)=>{
|
|
31
|
+
let size = 0;
|
|
32
|
+
stream.on('data', (chunk)=>{
|
|
33
|
+
size += Buffer.byteLength(chunk);
|
|
34
|
+
});
|
|
35
|
+
stream.on('close', ()=>resolve(size));
|
|
36
|
+
stream.on('error', reject);
|
|
37
|
+
stream.resume();
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* Create a writeable Node.js stream that discards received data.
|
|
41
|
+
* Useful for testing, draining a stream of data, etc.
|
|
42
|
+
*/ function writableDiscardStream(options) {
|
|
43
|
+
return new node_stream.Writable({
|
|
44
|
+
...options,
|
|
45
|
+
write (chunk, encding, callback) {
|
|
46
|
+
setImmediate(callback);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
exports.bytesToHumanReadable = bytesToHumanReadable;
|
|
52
|
+
exports.bytesToKbytes = bytesToKbytes;
|
|
53
|
+
exports.getStreamSize = getStreamSize;
|
|
54
|
+
exports.kbytesToBytes = kbytesToBytes;
|
|
55
|
+
exports.streamToBuffer = streamToBuffer;
|
|
56
|
+
exports.writableDiscardStream = writableDiscardStream;
|
|
57
|
+
//# sourceMappingURL=file.js.map
|
package/dist/file.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sources":["../src/file.ts"],"sourcesContent":["/**\n * Utils file containing file treatment utils\n */\nimport { Writable, WritableOptions } from 'node:stream';\n\nconst kbytesToBytes = (kbytes: number) => kbytes * 1000;\nconst bytesToKbytes = (bytes: number) => Math.round((bytes / 1000) * 100) / 100;\nconst bytesToHumanReadable = (bytes: number) => {\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n if (bytes === 0) return '0 Bytes';\n const i = parseInt(`${Math.floor(Math.log(bytes) / Math.log(1000))}`, 10);\n return `${Math.round(bytes / 1000 ** i)} ${sizes[i]}`;\n};\n\nconst streamToBuffer = (stream: NodeJS.ReadableStream): Promise<Buffer> =>\n new Promise((resolve, reject) => {\n const chunks: Uint8Array[] = [];\n stream.on('data', (chunk) => {\n chunks.push(chunk);\n });\n stream.on('end', () => {\n resolve(Buffer.concat(chunks));\n });\n stream.on('error', reject);\n });\n\nconst getStreamSize = (stream: NodeJS.ReadableStream) =>\n new Promise((resolve, reject) => {\n let size = 0;\n stream.on('data', (chunk) => {\n size += Buffer.byteLength(chunk);\n });\n stream.on('close', () => resolve(size));\n stream.on('error', reject);\n stream.resume();\n });\n\n/**\n * Create a writeable Node.js stream that discards received data.\n * Useful for testing, draining a stream of data, etc.\n */\nfunction writableDiscardStream(options?: WritableOptions) {\n return new Writable({\n ...options,\n write(chunk, encding, callback) {\n setImmediate(callback);\n },\n });\n}\n\nexport {\n streamToBuffer,\n bytesToHumanReadable,\n bytesToKbytes,\n kbytesToBytes,\n getStreamSize,\n writableDiscardStream,\n};\n"],"names":["kbytesToBytes","kbytes","bytesToKbytes","bytes","Math","round","bytesToHumanReadable","sizes","i","parseInt","floor","log","streamToBuffer","stream","Promise","resolve","reject","chunks","on","chunk","push","Buffer","concat","getStreamSize","size","byteLength","resume","writableDiscardStream","options","Writable","write","encding","callback","setImmediate"],"mappings":";;;;AAKMA,MAAAA,aAAAA,GAAgB,CAACC,MAAAA,GAAmBA,MAAS,GAAA;AAC7CC,MAAAA,aAAAA,GAAgB,CAACC,KAAkBC,GAAAA,IAAAA,CAAKC,KAAK,CAAEF,KAAQ,GAAA,IAAA,GAAQ,GAAO,CAAA,GAAA;AAC5E,MAAMG,uBAAuB,CAACH,KAAAA,GAAAA;AAC5B,IAAA,MAAMI,KAAQ,GAAA;AAAC,QAAA,OAAA;AAAS,QAAA,IAAA;AAAM,QAAA,IAAA;AAAM,QAAA,IAAA;AAAM,QAAA,IAAA;AAAM,QAAA;AAAK,KAAA;IACrD,IAAIJ,KAAAA,KAAU,GAAG,OAAO,SAAA;AACxB,IAAA,MAAMK,IAAIC,QAAS,CAAA,CAAC,EAAEL,IAAAA,CAAKM,KAAK,CAACN,IAAAA,CAAKO,GAAG,CAACR,SAASC,IAAKO,CAAAA,GAAG,CAAC,IAAA,CAAA,CAAA,CAAO,CAAC,EAAE,EAAA,CAAA;AACtE,IAAA,OAAO,CAAC,EAAEP,IAAKC,CAAAA,KAAK,CAACF,KAAQ,GAAA,IAAA,IAAQK,CAAG,CAAA,CAAA,CAAC,EAAED,KAAK,CAACC,CAAAA,CAAE,CAAC,CAAC;AACvD;AAEA,MAAMI,iBAAiB,CAACC,MAAAA,GACtB,IAAIC,OAAAA,CAAQ,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AACpB,QAAA,MAAMC,SAAuB,EAAE;QAC/BJ,MAAOK,CAAAA,EAAE,CAAC,MAAA,EAAQ,CAACC,KAAAA,GAAAA;AACjBF,YAAAA,MAAAA,CAAOG,IAAI,CAACD,KAAAA,CAAAA;AACd,SAAA,CAAA;QACAN,MAAOK,CAAAA,EAAE,CAAC,KAAO,EAAA,IAAA;YACfH,OAAQM,CAAAA,MAAAA,CAAOC,MAAM,CAACL,MAAAA,CAAAA,CAAAA;AACxB,SAAA,CAAA;QACAJ,MAAOK,CAAAA,EAAE,CAAC,OAASF,EAAAA,MAAAA,CAAAA;AACrB,KAAA;AAEF,MAAMO,gBAAgB,CAACV,MAAAA,GACrB,IAAIC,OAAAA,CAAQ,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AACpB,QAAA,IAAIQ,IAAO,GAAA,CAAA;QACXX,MAAOK,CAAAA,EAAE,CAAC,MAAA,EAAQ,CAACC,KAAAA,GAAAA;YACjBK,IAAQH,IAAAA,MAAAA,CAAOI,UAAU,CAACN,KAAAA,CAAAA;AAC5B,SAAA,CAAA;AACAN,QAAAA,MAAAA,CAAOK,EAAE,CAAC,OAAS,EAAA,IAAMH,OAAQS,CAAAA,IAAAA,CAAAA,CAAAA;QACjCX,MAAOK,CAAAA,EAAE,CAAC,OAASF,EAAAA,MAAAA,CAAAA;AACnBH,QAAAA,MAAAA,CAAOa,MAAM,EAAA;AACf,KAAA;AAEF;;;IAIA,SAASC,sBAAsBC,OAAyB,EAAA;AACtD,IAAA,OAAO,IAAIC,oBAAS,CAAA;AAClB,QAAA,GAAGD,OAAO;AACVE,QAAAA,KAAAA,CAAAA,CAAMX,KAAK,EAAEY,OAAO,EAAEC,QAAQ,EAAA;YAC5BC,YAAaD,CAAAA,QAAAA,CAAAA;AACf;AACF,KAAA,CAAA;AACF;;;;;;;;;"}
|
package/dist/file.mjs
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Writable } from 'node:stream';
|
|
2
|
+
|
|
3
|
+
const kbytesToBytes = (kbytes)=>kbytes * 1000;
|
|
4
|
+
const bytesToKbytes = (bytes)=>Math.round(bytes / 1000 * 100) / 100;
|
|
5
|
+
const bytesToHumanReadable = (bytes)=>{
|
|
6
|
+
const sizes = [
|
|
7
|
+
'Bytes',
|
|
8
|
+
'KB',
|
|
9
|
+
'MB',
|
|
10
|
+
'GB',
|
|
11
|
+
'TB',
|
|
12
|
+
'PB'
|
|
13
|
+
];
|
|
14
|
+
if (bytes === 0) return '0 Bytes';
|
|
15
|
+
const i = parseInt(`${Math.floor(Math.log(bytes) / Math.log(1000))}`, 10);
|
|
16
|
+
return `${Math.round(bytes / 1000 ** i)} ${sizes[i]}`;
|
|
17
|
+
};
|
|
18
|
+
const streamToBuffer = (stream)=>new Promise((resolve, reject)=>{
|
|
19
|
+
const chunks = [];
|
|
20
|
+
stream.on('data', (chunk)=>{
|
|
21
|
+
chunks.push(chunk);
|
|
22
|
+
});
|
|
23
|
+
stream.on('end', ()=>{
|
|
24
|
+
resolve(Buffer.concat(chunks));
|
|
25
|
+
});
|
|
26
|
+
stream.on('error', reject);
|
|
27
|
+
});
|
|
28
|
+
const getStreamSize = (stream)=>new Promise((resolve, reject)=>{
|
|
29
|
+
let size = 0;
|
|
30
|
+
stream.on('data', (chunk)=>{
|
|
31
|
+
size += Buffer.byteLength(chunk);
|
|
32
|
+
});
|
|
33
|
+
stream.on('close', ()=>resolve(size));
|
|
34
|
+
stream.on('error', reject);
|
|
35
|
+
stream.resume();
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Create a writeable Node.js stream that discards received data.
|
|
39
|
+
* Useful for testing, draining a stream of data, etc.
|
|
40
|
+
*/ function writableDiscardStream(options) {
|
|
41
|
+
return new Writable({
|
|
42
|
+
...options,
|
|
43
|
+
write (chunk, encding, callback) {
|
|
44
|
+
setImmediate(callback);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { bytesToHumanReadable, bytesToKbytes, getStreamSize, kbytesToBytes, streamToBuffer, writableDiscardStream };
|
|
50
|
+
//# sourceMappingURL=file.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.mjs","sources":["../src/file.ts"],"sourcesContent":["/**\n * Utils file containing file treatment utils\n */\nimport { Writable, WritableOptions } from 'node:stream';\n\nconst kbytesToBytes = (kbytes: number) => kbytes * 1000;\nconst bytesToKbytes = (bytes: number) => Math.round((bytes / 1000) * 100) / 100;\nconst bytesToHumanReadable = (bytes: number) => {\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n if (bytes === 0) return '0 Bytes';\n const i = parseInt(`${Math.floor(Math.log(bytes) / Math.log(1000))}`, 10);\n return `${Math.round(bytes / 1000 ** i)} ${sizes[i]}`;\n};\n\nconst streamToBuffer = (stream: NodeJS.ReadableStream): Promise<Buffer> =>\n new Promise((resolve, reject) => {\n const chunks: Uint8Array[] = [];\n stream.on('data', (chunk) => {\n chunks.push(chunk);\n });\n stream.on('end', () => {\n resolve(Buffer.concat(chunks));\n });\n stream.on('error', reject);\n });\n\nconst getStreamSize = (stream: NodeJS.ReadableStream) =>\n new Promise((resolve, reject) => {\n let size = 0;\n stream.on('data', (chunk) => {\n size += Buffer.byteLength(chunk);\n });\n stream.on('close', () => resolve(size));\n stream.on('error', reject);\n stream.resume();\n });\n\n/**\n * Create a writeable Node.js stream that discards received data.\n * Useful for testing, draining a stream of data, etc.\n */\nfunction writableDiscardStream(options?: WritableOptions) {\n return new Writable({\n ...options,\n write(chunk, encding, callback) {\n setImmediate(callback);\n },\n });\n}\n\nexport {\n streamToBuffer,\n bytesToHumanReadable,\n bytesToKbytes,\n kbytesToBytes,\n getStreamSize,\n writableDiscardStream,\n};\n"],"names":["kbytesToBytes","kbytes","bytesToKbytes","bytes","Math","round","bytesToHumanReadable","sizes","i","parseInt","floor","log","streamToBuffer","stream","Promise","resolve","reject","chunks","on","chunk","push","Buffer","concat","getStreamSize","size","byteLength","resume","writableDiscardStream","options","Writable","write","encding","callback","setImmediate"],"mappings":";;AAKMA,MAAAA,aAAAA,GAAgB,CAACC,MAAAA,GAAmBA,MAAS,GAAA;AAC7CC,MAAAA,aAAAA,GAAgB,CAACC,KAAkBC,GAAAA,IAAAA,CAAKC,KAAK,CAAEF,KAAQ,GAAA,IAAA,GAAQ,GAAO,CAAA,GAAA;AAC5E,MAAMG,uBAAuB,CAACH,KAAAA,GAAAA;AAC5B,IAAA,MAAMI,KAAQ,GAAA;AAAC,QAAA,OAAA;AAAS,QAAA,IAAA;AAAM,QAAA,IAAA;AAAM,QAAA,IAAA;AAAM,QAAA,IAAA;AAAM,QAAA;AAAK,KAAA;IACrD,IAAIJ,KAAAA,KAAU,GAAG,OAAO,SAAA;AACxB,IAAA,MAAMK,IAAIC,QAAS,CAAA,CAAC,EAAEL,IAAAA,CAAKM,KAAK,CAACN,IAAAA,CAAKO,GAAG,CAACR,SAASC,IAAKO,CAAAA,GAAG,CAAC,IAAA,CAAA,CAAA,CAAO,CAAC,EAAE,EAAA,CAAA;AACtE,IAAA,OAAO,CAAC,EAAEP,IAAKC,CAAAA,KAAK,CAACF,KAAQ,GAAA,IAAA,IAAQK,CAAG,CAAA,CAAA,CAAC,EAAED,KAAK,CAACC,CAAAA,CAAE,CAAC,CAAC;AACvD;AAEA,MAAMI,iBAAiB,CAACC,MAAAA,GACtB,IAAIC,OAAAA,CAAQ,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AACpB,QAAA,MAAMC,SAAuB,EAAE;QAC/BJ,MAAOK,CAAAA,EAAE,CAAC,MAAA,EAAQ,CAACC,KAAAA,GAAAA;AACjBF,YAAAA,MAAAA,CAAOG,IAAI,CAACD,KAAAA,CAAAA;AACd,SAAA,CAAA;QACAN,MAAOK,CAAAA,EAAE,CAAC,KAAO,EAAA,IAAA;YACfH,OAAQM,CAAAA,MAAAA,CAAOC,MAAM,CAACL,MAAAA,CAAAA,CAAAA;AACxB,SAAA,CAAA;QACAJ,MAAOK,CAAAA,EAAE,CAAC,OAASF,EAAAA,MAAAA,CAAAA;AACrB,KAAA;AAEF,MAAMO,gBAAgB,CAACV,MAAAA,GACrB,IAAIC,OAAAA,CAAQ,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AACpB,QAAA,IAAIQ,IAAO,GAAA,CAAA;QACXX,MAAOK,CAAAA,EAAE,CAAC,MAAA,EAAQ,CAACC,KAAAA,GAAAA;YACjBK,IAAQH,IAAAA,MAAAA,CAAOI,UAAU,CAACN,KAAAA,CAAAA;AAC5B,SAAA,CAAA;AACAN,QAAAA,MAAAA,CAAOK,EAAE,CAAC,OAAS,EAAA,IAAMH,OAAQS,CAAAA,IAAAA,CAAAA,CAAAA;QACjCX,MAAOK,CAAAA,EAAE,CAAC,OAASF,EAAAA,MAAAA,CAAAA;AACnBH,QAAAA,MAAAA,CAAOa,MAAM,EAAA;AACf,KAAA;AAEF;;;IAIA,SAASC,sBAAsBC,OAAyB,EAAA;AACtD,IAAA,OAAO,IAAIC,QAAS,CAAA;AAClB,QAAA,GAAGD,OAAO;AACVE,QAAAA,KAAAA,CAAAA,CAAMX,KAAK,EAAEY,OAAO,EAAEC,QAAQ,EAAA;YAC5BC,YAAaD,CAAAA,QAAAA,CAAAA;AACf;AACF,KAAA,CAAA;AACF;;;;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fp = require('lodash/fp');
|
|
4
|
+
|
|
5
|
+
const formatYupInnerError = (yupError)=>({
|
|
6
|
+
path: fp.toPath(yupError.path),
|
|
7
|
+
message: yupError.message,
|
|
8
|
+
name: yupError.name,
|
|
9
|
+
value: yupError.value
|
|
10
|
+
});
|
|
11
|
+
const formatYupErrors = (yupError)=>({
|
|
12
|
+
errors: fp.isEmpty(yupError.inner) ? [
|
|
13
|
+
formatYupInnerError(yupError)
|
|
14
|
+
] : yupError.inner.map(formatYupInnerError),
|
|
15
|
+
message: yupError.message
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
exports.formatYupErrors = formatYupErrors;
|
|
19
|
+
//# sourceMappingURL=format-yup-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-yup-error.js","sources":["../src/format-yup-error.ts"],"sourcesContent":["import { isEmpty, toPath } from 'lodash/fp';\nimport { ValidationError } from 'yup';\n\nconst formatYupInnerError = (yupError: ValidationError) => ({\n path: toPath(yupError.path),\n message: yupError.message,\n name: yupError.name,\n value: yupError.value,\n});\n\nconst formatYupErrors = (yupError: ValidationError) => ({\n errors: isEmpty(yupError.inner)\n ? [formatYupInnerError(yupError)]\n : yupError.inner.map(formatYupInnerError),\n message: yupError.message,\n});\n\nexport { formatYupErrors };\n"],"names":["formatYupInnerError","yupError","path","toPath","message","name","value","formatYupErrors","errors","isEmpty","inner","map"],"mappings":";;;;AAGA,MAAMA,mBAAAA,GAAsB,CAACC,QAAAA,IAA+B;QAC1DC,IAAMC,EAAAA,SAAAA,CAAOF,SAASC,IAAI,CAAA;AAC1BE,QAAAA,OAAAA,EAASH,SAASG,OAAO;AACzBC,QAAAA,IAAAA,EAAMJ,SAASI,IAAI;AACnBC,QAAAA,KAAAA,EAAOL,SAASK;KAClB,CAAA;AAEMC,MAAAA,eAAAA,GAAkB,CAACN,QAAAA,IAA+B;QACtDO,MAAQC,EAAAA,UAAAA,CAAQR,QAASS,CAAAA,KAAK,CAC1B,GAAA;YAACV,mBAAoBC,CAAAA,QAAAA;AAAU,SAAA,GAC/BA,QAASS,CAAAA,KAAK,CAACC,GAAG,CAACX,mBAAAA,CAAAA;AACvBI,QAAAA,OAAAA,EAASH,SAASG;KACpB;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { isEmpty, toPath } from 'lodash/fp';
|
|
2
|
+
|
|
3
|
+
const formatYupInnerError = (yupError)=>({
|
|
4
|
+
path: toPath(yupError.path),
|
|
5
|
+
message: yupError.message,
|
|
6
|
+
name: yupError.name,
|
|
7
|
+
value: yupError.value
|
|
8
|
+
});
|
|
9
|
+
const formatYupErrors = (yupError)=>({
|
|
10
|
+
errors: isEmpty(yupError.inner) ? [
|
|
11
|
+
formatYupInnerError(yupError)
|
|
12
|
+
] : yupError.inner.map(formatYupInnerError),
|
|
13
|
+
message: yupError.message
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export { formatYupErrors };
|
|
17
|
+
//# sourceMappingURL=format-yup-error.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-yup-error.mjs","sources":["../src/format-yup-error.ts"],"sourcesContent":["import { isEmpty, toPath } from 'lodash/fp';\nimport { ValidationError } from 'yup';\n\nconst formatYupInnerError = (yupError: ValidationError) => ({\n path: toPath(yupError.path),\n message: yupError.message,\n name: yupError.name,\n value: yupError.value,\n});\n\nconst formatYupErrors = (yupError: ValidationError) => ({\n errors: isEmpty(yupError.inner)\n ? [formatYupInnerError(yupError)]\n : yupError.inner.map(formatYupInnerError),\n message: yupError.message,\n});\n\nexport { formatYupErrors };\n"],"names":["formatYupInnerError","yupError","path","toPath","message","name","value","formatYupErrors","errors","isEmpty","inner","map"],"mappings":";;AAGA,MAAMA,mBAAAA,GAAsB,CAACC,QAAAA,IAA+B;QAC1DC,IAAMC,EAAAA,MAAAA,CAAOF,SAASC,IAAI,CAAA;AAC1BE,QAAAA,OAAAA,EAASH,SAASG,OAAO;AACzBC,QAAAA,IAAAA,EAAMJ,SAASI,IAAI;AACnBC,QAAAA,KAAAA,EAAOL,SAASK;KAClB,CAAA;AAEMC,MAAAA,eAAAA,GAAkB,CAACN,QAAAA,IAA+B;QACtDO,MAAQC,EAAAA,OAAAA,CAAQR,QAASS,CAAAA,KAAK,CAC1B,GAAA;YAACV,mBAAoBC,CAAAA,QAAAA;AAAU,SAAA,GAC/BA,QAASS,CAAAA,KAAK,CAACC,GAAG,CAACX,mBAAAA,CAAAA;AACvBI,QAAAA,OAAAA,EAASH,SAASG;KACpB;;;;"}
|