@strapi/utils 5.12.1 → 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.
Files changed (233) hide show
  1. package/dist/async.js +28 -0
  2. package/dist/async.js.map +1 -0
  3. package/dist/async.mjs +24 -0
  4. package/dist/async.mjs.map +1 -0
  5. package/dist/content-types.js +201 -0
  6. package/dist/content-types.js.map +1 -0
  7. package/dist/content-types.mjs +167 -0
  8. package/dist/content-types.mjs.map +1 -0
  9. package/dist/convert-query-params.js +512 -0
  10. package/dist/convert-query-params.js.map +1 -0
  11. package/dist/convert-query-params.mjs +510 -0
  12. package/dist/convert-query-params.mjs.map +1 -0
  13. package/dist/env-helper.js +81 -0
  14. package/dist/env-helper.js.map +1 -0
  15. package/dist/env-helper.mjs +79 -0
  16. package/dist/env-helper.mjs.map +1 -0
  17. package/dist/errors.js +104 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/errors.mjs +88 -0
  20. package/dist/errors.mjs.map +1 -0
  21. package/dist/file.js +57 -0
  22. package/dist/file.js.map +1 -0
  23. package/dist/file.mjs +50 -0
  24. package/dist/file.mjs.map +1 -0
  25. package/dist/format-yup-error.js +19 -0
  26. package/dist/format-yup-error.js.map +1 -0
  27. package/dist/format-yup-error.mjs +17 -0
  28. package/dist/format-yup-error.mjs.map +1 -0
  29. package/dist/hooks.js +86 -0
  30. package/dist/hooks.js.map +1 -0
  31. package/dist/hooks.mjs +80 -0
  32. package/dist/hooks.mjs.map +1 -0
  33. package/dist/import-default.js +9 -0
  34. package/dist/import-default.js.map +1 -0
  35. package/dist/import-default.mjs +7 -0
  36. package/dist/import-default.mjs.map +1 -0
  37. package/dist/index.js +54 -4358
  38. package/dist/index.js.map +1 -1
  39. package/dist/index.mjs +48 -4317
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/machine-id.js +17 -0
  42. package/dist/machine-id.js.map +1 -0
  43. package/dist/machine-id.mjs +15 -0
  44. package/dist/machine-id.mjs.map +1 -0
  45. package/dist/operators.js +79 -0
  46. package/dist/operators.js.map +1 -0
  47. package/dist/operators.mjs +76 -0
  48. package/dist/operators.mjs.map +1 -0
  49. package/dist/package-manager.js +36 -0
  50. package/dist/package-manager.js.map +1 -0
  51. package/dist/package-manager.mjs +33 -0
  52. package/dist/package-manager.mjs.map +1 -0
  53. package/dist/pagination.js +163 -0
  54. package/dist/pagination.js.map +1 -0
  55. package/dist/pagination.mjs +159 -0
  56. package/dist/pagination.mjs.map +1 -0
  57. package/dist/parse-type.js +140 -0
  58. package/dist/parse-type.js.map +1 -0
  59. package/dist/parse-type.mjs +118 -0
  60. package/dist/parse-type.mjs.map +1 -0
  61. package/dist/policy.js +33 -0
  62. package/dist/policy.js.map +1 -0
  63. package/dist/policy.mjs +30 -0
  64. package/dist/policy.mjs.map +1 -0
  65. package/dist/primitives/arrays.js +7 -0
  66. package/dist/primitives/arrays.js.map +1 -0
  67. package/dist/primitives/arrays.mjs +5 -0
  68. package/dist/primitives/arrays.mjs.map +1 -0
  69. package/dist/primitives/dates.js +11 -0
  70. package/dist/primitives/dates.js.map +1 -0
  71. package/dist/primitives/dates.mjs +9 -0
  72. package/dist/primitives/dates.mjs.map +1 -0
  73. package/dist/primitives/objects.js +13 -0
  74. package/dist/primitives/objects.js.map +1 -0
  75. package/dist/primitives/objects.mjs +11 -0
  76. package/dist/primitives/objects.mjs.map +1 -0
  77. package/dist/primitives/strings.js +49 -0
  78. package/dist/primitives/strings.js.map +1 -0
  79. package/dist/primitives/strings.mjs +38 -0
  80. package/dist/primitives/strings.mjs.map +1 -0
  81. package/dist/print-value.js +42 -0
  82. package/dist/print-value.js.map +1 -0
  83. package/dist/print-value.mjs +40 -0
  84. package/dist/print-value.mjs.map +1 -0
  85. package/dist/provider-factory.js +82 -0
  86. package/dist/provider-factory.js.map +1 -0
  87. package/dist/provider-factory.mjs +80 -0
  88. package/dist/provider-factory.mjs.map +1 -0
  89. package/dist/relations.js +54 -0
  90. package/dist/relations.js.map +1 -0
  91. package/dist/relations.mjs +45 -0
  92. package/dist/relations.mjs.map +1 -0
  93. package/dist/sanitize/index.js +195 -0
  94. package/dist/sanitize/index.js.map +1 -0
  95. package/dist/sanitize/index.mjs +194 -0
  96. package/dist/sanitize/index.mjs.map +1 -0
  97. package/dist/sanitize/sanitizers.js +173 -0
  98. package/dist/sanitize/sanitizers.js.map +1 -0
  99. package/dist/sanitize/sanitizers.mjs +166 -0
  100. package/dist/sanitize/sanitizers.mjs.map +1 -0
  101. package/dist/sanitize/visitors/expand-wildcard-populate.js +20 -0
  102. package/dist/sanitize/visitors/expand-wildcard-populate.js.map +1 -0
  103. package/dist/sanitize/visitors/expand-wildcard-populate.mjs +18 -0
  104. package/dist/sanitize/visitors/expand-wildcard-populate.mjs.map +1 -0
  105. package/dist/sanitize/visitors/index.js +22 -0
  106. package/dist/sanitize/visitors/index.js.map +1 -0
  107. package/dist/sanitize/visitors/index.mjs +9 -0
  108. package/dist/sanitize/visitors/index.mjs.map +1 -0
  109. package/dist/sanitize/visitors/remove-disallowed-fields.js +87 -0
  110. package/dist/sanitize/visitors/remove-disallowed-fields.js.map +1 -0
  111. package/dist/sanitize/visitors/remove-disallowed-fields.mjs +85 -0
  112. package/dist/sanitize/visitors/remove-disallowed-fields.mjs.map +1 -0
  113. package/dist/sanitize/visitors/remove-dynamic-zones.js +12 -0
  114. package/dist/sanitize/visitors/remove-dynamic-zones.js.map +1 -0
  115. package/dist/sanitize/visitors/remove-dynamic-zones.mjs +10 -0
  116. package/dist/sanitize/visitors/remove-dynamic-zones.mjs.map +1 -0
  117. package/dist/sanitize/visitors/remove-morph-to-relations.js +12 -0
  118. package/dist/sanitize/visitors/remove-morph-to-relations.js.map +1 -0
  119. package/dist/sanitize/visitors/remove-morph-to-relations.mjs +10 -0
  120. package/dist/sanitize/visitors/remove-morph-to-relations.mjs.map +1 -0
  121. package/dist/sanitize/visitors/remove-password.js +10 -0
  122. package/dist/sanitize/visitors/remove-password.js.map +1 -0
  123. package/dist/sanitize/visitors/remove-password.mjs +8 -0
  124. package/dist/sanitize/visitors/remove-password.mjs.map +1 -0
  125. package/dist/sanitize/visitors/remove-private.js +16 -0
  126. package/dist/sanitize/visitors/remove-private.js.map +1 -0
  127. package/dist/sanitize/visitors/remove-private.mjs +14 -0
  128. package/dist/sanitize/visitors/remove-private.mjs.map +1 -0
  129. package/dist/sanitize/visitors/remove-restricted-fields.js +28 -0
  130. package/dist/sanitize/visitors/remove-restricted-fields.js.map +1 -0
  131. package/dist/sanitize/visitors/remove-restricted-fields.mjs +26 -0
  132. package/dist/sanitize/visitors/remove-restricted-fields.mjs.map +1 -0
  133. package/dist/sanitize/visitors/remove-restricted-relations.js +116 -0
  134. package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -0
  135. package/dist/sanitize/visitors/remove-restricted-relations.mjs +114 -0
  136. package/dist/sanitize/visitors/remove-restricted-relations.mjs.map +1 -0
  137. package/dist/set-creator-fields.js +18 -0
  138. package/dist/set-creator-fields.js.map +1 -0
  139. package/dist/set-creator-fields.mjs +16 -0
  140. package/dist/set-creator-fields.mjs.map +1 -0
  141. package/dist/template.js +18 -0
  142. package/dist/template.js.map +1 -0
  143. package/dist/template.mjs +15 -0
  144. package/dist/template.mjs.map +1 -0
  145. package/dist/traverse/factory.js +158 -0
  146. package/dist/traverse/factory.js.map +1 -0
  147. package/dist/traverse/factory.mjs +156 -0
  148. package/dist/traverse/factory.mjs.map +1 -0
  149. package/dist/traverse/index.js +14 -0
  150. package/dist/traverse/index.js.map +1 -0
  151. package/dist/traverse/index.mjs +5 -0
  152. package/dist/traverse/index.mjs.map +1 -0
  153. package/dist/traverse/query-fields.js +41 -0
  154. package/dist/traverse/query-fields.js.map +1 -0
  155. package/dist/traverse/query-fields.mjs +39 -0
  156. package/dist/traverse/query-fields.mjs.map +1 -0
  157. package/dist/traverse/query-filters.js +114 -0
  158. package/dist/traverse/query-filters.js.map +1 -0
  159. package/dist/traverse/query-filters.mjs +112 -0
  160. package/dist/traverse/query-filters.mjs.map +1 -0
  161. package/dist/traverse/query-populate.js +280 -0
  162. package/dist/traverse/query-populate.js.map +1 -0
  163. package/dist/traverse/query-populate.mjs +278 -0
  164. package/dist/traverse/query-populate.mjs.map +1 -0
  165. package/dist/traverse/query-sort.js +144 -0
  166. package/dist/traverse/query-sort.js.map +1 -0
  167. package/dist/traverse/query-sort.mjs +142 -0
  168. package/dist/traverse/query-sort.mjs.map +1 -0
  169. package/dist/traverse-entity.js +170 -0
  170. package/dist/traverse-entity.js.map +1 -0
  171. package/dist/traverse-entity.mjs +168 -0
  172. package/dist/traverse-entity.mjs.map +1 -0
  173. package/dist/validate/index.js +218 -0
  174. package/dist/validate/index.js.map +1 -0
  175. package/dist/validate/index.mjs +217 -0
  176. package/dist/validate/index.mjs.map +1 -0
  177. package/dist/validate/utils.js +27 -0
  178. package/dist/validate/utils.js.map +1 -0
  179. package/dist/validate/utils.mjs +24 -0
  180. package/dist/validate/utils.mjs.map +1 -0
  181. package/dist/validate/validators.js +369 -0
  182. package/dist/validate/validators.js.map +1 -0
  183. package/dist/validate/validators.mjs +356 -0
  184. package/dist/validate/validators.mjs.map +1 -0
  185. package/dist/validate/visitors/index.js +22 -0
  186. package/dist/validate/visitors/index.js.map +1 -0
  187. package/dist/validate/visitors/index.mjs +9 -0
  188. package/dist/validate/visitors/index.mjs.map +1 -0
  189. package/dist/validate/visitors/throw-disallowed-fields.js +91 -0
  190. package/dist/validate/visitors/throw-disallowed-fields.js.map +1 -0
  191. package/dist/validate/visitors/throw-disallowed-fields.mjs +89 -0
  192. package/dist/validate/visitors/throw-disallowed-fields.mjs.map +1 -0
  193. package/dist/validate/visitors/throw-dynamic-zones.js +16 -0
  194. package/dist/validate/visitors/throw-dynamic-zones.js.map +1 -0
  195. package/dist/validate/visitors/throw-dynamic-zones.mjs +14 -0
  196. package/dist/validate/visitors/throw-dynamic-zones.mjs.map +1 -0
  197. package/dist/validate/visitors/throw-morph-to-relations.js +16 -0
  198. package/dist/validate/visitors/throw-morph-to-relations.js.map +1 -0
  199. package/dist/validate/visitors/throw-morph-to-relations.mjs +14 -0
  200. package/dist/validate/visitors/throw-morph-to-relations.mjs.map +1 -0
  201. package/dist/validate/visitors/throw-password.js +15 -0
  202. package/dist/validate/visitors/throw-password.js.map +1 -0
  203. package/dist/validate/visitors/throw-password.mjs +13 -0
  204. package/dist/validate/visitors/throw-password.mjs.map +1 -0
  205. package/dist/validate/visitors/throw-private.js +20 -0
  206. package/dist/validate/visitors/throw-private.js.map +1 -0
  207. package/dist/validate/visitors/throw-private.mjs +18 -0
  208. package/dist/validate/visitors/throw-private.mjs.map +1 -0
  209. package/dist/validate/visitors/throw-restricted-fields.js +36 -0
  210. package/dist/validate/visitors/throw-restricted-fields.js.map +1 -0
  211. package/dist/validate/visitors/throw-restricted-fields.mjs +34 -0
  212. package/dist/validate/visitors/throw-restricted-fields.mjs.map +1 -0
  213. package/dist/validate/visitors/throw-restricted-relations.js +125 -0
  214. package/dist/validate/visitors/throw-restricted-relations.js.map +1 -0
  215. package/dist/validate/visitors/throw-restricted-relations.mjs +123 -0
  216. package/dist/validate/visitors/throw-restricted-relations.mjs.map +1 -0
  217. package/dist/validate/visitors/throw-unrecognized-fields.js +66 -0
  218. package/dist/validate/visitors/throw-unrecognized-fields.js.map +1 -0
  219. package/dist/validate/visitors/throw-unrecognized-fields.mjs +64 -0
  220. package/dist/validate/visitors/throw-unrecognized-fields.mjs.map +1 -0
  221. package/dist/validators.js +60 -0
  222. package/dist/validators.js.map +1 -0
  223. package/dist/validators.mjs +37 -0
  224. package/dist/validators.mjs.map +1 -0
  225. package/dist/yup.js +101 -0
  226. package/dist/yup.js.map +1 -0
  227. package/dist/yup.mjs +74 -0
  228. package/dist/yup.mjs.map +1 -0
  229. package/dist/zod.js +31 -0
  230. package/dist/zod.js.map +1 -0
  231. package/dist/zod.mjs +29 -0
  232. package/dist/zod.mjs.map +1 -0
  233. 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":";;;;AAIA,SAASA,KAAAA,CAASC,GAAW,EAAEC,YAAgB,EAAA;IAC7C,OAAOC,CAAAA,CAAEC,GAAG,CAACC,OAAQC,CAAAA,GAAG,EAAEL,GAAAA,CAAAA,GAAOI,OAAQC,CAAAA,GAAG,CAACL,GAAAA,CAAI,GAAGC,YAAAA;AACtD;AAEA,SAASK,OAAON,GAAW,EAAA;AACzB,IAAA,OAAOI,OAAQC,CAAAA,GAAG,CAACL,GAAAA,CAAI,IAAI,EAAA;AAC7B;AAEA,MAAMO,KAAQ,GAAA;IACZC,GAAIR,CAAAA,CAAAA,GAAW,EAAEC,YAAqB,EAAA;AACpC,QAAA,IAAI,CAACC,CAAEC,CAAAA,GAAG,CAACC,OAAQC,CAAAA,GAAG,EAAEL,GAAM,CAAA,EAAA;YAC5B,OAAOC,YAAAA;AACT;QAEA,OAAOQ,QAAAA,CAASH,OAAON,GAAM,CAAA,EAAA,EAAA,CAAA;AAC/B,KAAA;IAEAU,KAAMV,CAAAA,CAAAA,GAAW,EAAEC,YAAqB,EAAA;AACtC,QAAA,IAAI,CAACC,CAAEC,CAAAA,GAAG,CAACC,OAAQC,CAAAA,GAAG,EAAEL,GAAM,CAAA,EAAA;YAC5B,OAAOC,YAAAA;AACT;AAEA,QAAA,OAAOU,WAAWL,MAAON,CAAAA,GAAAA,CAAAA,CAAAA;AAC3B,KAAA;IAEAY,IAAKZ,CAAAA,CAAAA,GAAW,EAAEC,YAAsB,EAAA;AACtC,QAAA,IAAI,CAACC,CAAEC,CAAAA,GAAG,CAACC,OAAQC,CAAAA,GAAG,EAAEL,GAAM,CAAA,EAAA;YAC5B,OAAOC,YAAAA;AACT;AAEA,QAAA,OAAOK,OAAON,GAAS,CAAA,KAAA,MAAA;AACzB,KAAA;IAEAa,IAAKb,CAAAA,CAAAA,GAAW,EAAEC,YAAqB,EAAA;AACrC,QAAA,IAAI,CAACC,CAAEC,CAAAA,GAAG,CAACC,OAAQC,CAAAA,GAAG,EAAEL,GAAM,CAAA,EAAA;YAC5B,OAAOC,YAAAA;AACT;QAEA,IAAI;YACF,OAAOa,IAAAA,CAAKC,KAAK,CAACT,MAAON,CAAAA,GAAAA,CAAAA,CAAAA;AAC3B,SAAA,CAAE,OAAOgB,KAAO,EAAA;AACd,YAAA,IAAIA,iBAAiBC,KAAO,EAAA;gBAC1B,MAAM,IAAIA,KAAM,CAAA,CAAC,kCAAkC,EAAEjB,GAAI,CAAA,EAAE,EAAEgB,KAAAA,CAAME,OAAO,CAAC,CAAC,CAAA;AAC9E;YAEA,MAAMF,KAAAA;AACR;AACF,KAAA;IAEAG,KAAMnB,CAAAA,CAAAA,GAAW,EAAEC,YAAuB,EAAA;AACxC,QAAA,IAAI,CAACC,CAAEC,CAAAA,GAAG,CAACC,OAAQC,CAAAA,GAAG,EAAEL,GAAM,CAAA,EAAA;YAC5B,OAAOC,YAAAA;AACT;AAEA,QAAA,IAAImB,QAAQd,MAAON,CAAAA,GAAAA,CAAAA;AAEnB,QAAA,IAAIoB,MAAMC,UAAU,CAAC,QAAQD,KAAME,CAAAA,QAAQ,CAAC,GAAM,CAAA,EAAA;AAChDF,YAAAA,KAAAA,GAAQA,MAAMG,SAAS,CAAC,CAAGH,EAAAA,KAAAA,CAAMI,MAAM,GAAG,CAAA,CAAA;AAC5C;AAEA,QAAA,OAAOJ,MAAMK,KAAK,CAAC,GAAKC,CAAAA,CAAAA,GAAG,CAAC,CAACC,CAAAA,GAAAA;AAC3B,YAAA,OAAOzB,EAAE0B,IAAI,CAAC1B,EAAE0B,IAAI,CAACD,GAAG,GAAM,CAAA,EAAA,GAAA,CAAA;AAChC,SAAA,CAAA;AACF,KAAA;IAEAE,IAAK7B,CAAAA,CAAAA,GAAW,EAAEC,YAAmB,EAAA;AACnC,QAAA,IAAI,CAACC,CAAEC,CAAAA,GAAG,CAACC,OAAQC,CAAAA,GAAG,EAAEL,GAAM,CAAA,EAAA;YAC5B,OAAOC,YAAAA;AACT;QAEA,OAAO,IAAI6B,KAAKxB,MAAON,CAAAA,GAAAA,CAAAA,CAAAA;AACzB,KAAA;AAEA;;;;;;AAMC,MACD+B,KAAM/B,CAAAA,CAAAA,GAAW,EAAEgC,cAA0B,EAAE/B,YAAsB,EAAA;AACnE,QAAA,IAAI,CAAC+B,cAAgB,EAAA;AACnB,YAAA,MAAM,IAAIf,KAAAA,CAAM,CAAC,iCAAiC,CAAC,CAAA;AACrD;AAEA,QAAA,IAAIhB,YAAgB,IAAA,CAAC+B,cAAeC,CAAAA,QAAQ,CAAChC,YAAe,CAAA,EAAA;AAC1D,YAAA,MAAM,IAAIgB,KAAAA,CAAM,CAAC,gEAAgE,CAAC,CAAA;AACpF;QAEA,MAAMiB,QAAAA,GAAW7B,IAAIL,GAAKC,EAAAA,YAAAA,CAAAA;AAC1B,QAAA,OAAO+B,cAAeC,CAAAA,QAAQ,CAACC,QAAAA,CAAAA,GAAYA,QAAWjC,GAAAA,YAAAA;AACxD;AACF,CAAA;AAEA,MAAMI,GAAW8B,GAAAA,MAAAA,CAAOC,MAAM,CAACrC,KAAOQ,EAAAA,KAAAA;;;;"}
@@ -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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"}
@@ -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":";;;AAMA,uBACA,MAAMA,gBAIIC,SAAAA,KAAAA,CAAAA;AAORC,IAAAA,WAAAA,CACEC,UAAU,8BAA0C,EACpDC,OAAoB,GAAA,EAAc,CAClC;QACA,KAAK,EAAA;QACL,IAAI,CAACC,IAAI,GAAG,kBAAA;QACZ,IAAI,CAACF,OAAO,GAAGA,OAAAA;QACf,IAAI,CAACC,OAAO,GAAGA,OAAAA;AACjB;AACF;AAEA,MAAME,eAGIN,SAAAA,gBAAAA,CAAAA;IACRE,WAAYC,CAAAA,OAAiB,EAAEC,OAAkB,CAAE;AACjD,QAAA,KAAK,CAACD,OAASC,EAAAA,OAAAA,CAAAA;QACf,IAAI,CAACC,IAAI,GAAG,iBAAA;AACd;AACF;AASA,MAAME,kBAA6DD,SAAAA,eAAAA,CAAAA;IAIjEJ,WAAYM,CAAAA,QAA6B,EAAEL,OAAkB,CAAE;AAC7D,QAAA,KAAK,CAAC,YAAA,CAAA;AACN,QAAA,MAAM,EAAEM,MAAM,EAAEN,SAASO,UAAU,EAAE,GAAGC,eAAgBH,CAAAA,QAAAA,CAAAA;QACxD,IAAI,CAACL,OAAO,GAAGA,OAAYO,IAAAA,UAAAA;QAC3B,IAAI,CAACN,OAAO,GAAG;AAAEK,YAAAA;AAAO,SAAA;AAC1B;AACF;AAEA,MAAMG,eAGIZ,SAAAA,gBAAAA,CAAAA;AACRE,IAAAA,WAAAA,CAAYC,OAAU,GAAA,oBAAgC,EAAEC,OAAkB,CAAE;AAC1E,QAAA,KAAK,CAACD,OAASC,EAAAA,OAAAA,CAAAA;QACf,IAAI,CAACC,IAAI,GAAG,iBAAA;QACZ,IAAI,CAACF,OAAO,GAAGA,OAAAA;AACjB;AACF;AAEA,MAAMU,aAA4Eb,SAAAA,gBAAAA,CAAAA;AAKhFE,IAAAA,WAAAA,CAAYC,OAAU,GAAA,kBAA8B,EAAEC,OAAkB,CAAE;AACxE,QAAA,KAAK,CAACD,OAASC,EAAAA,OAAAA,CAAAA;QACf,IAAI,CAACC,IAAI,GAAG,eAAA;QACZ,IAAI,CAACF,OAAO,GAAGA,OAAAA;AACjB;AACF;AAEA,MAAMW,cAIId,SAAAA,gBAAAA,CAAAA;AACRE,IAAAA,WAAAA,CAAYC,OAAU,GAAA,kBAA8B,EAAEC,OAAkB,CAAE;AACxE,QAAA,KAAK,CAACD,OAASC,EAAAA,OAAAA,CAAAA;QACf,IAAI,CAACC,IAAI,GAAG,gBAAA;QACZ,IAAI,CAACF,OAAO,GAAGA,OAAAA;AACjB;AACF;AAEA,MAAMY,iBAGIf,SAAAA,gBAAAA,CAAAA;AACRE,IAAAA,WAAAA,CAAYC,OAAU,GAAA,cAA0B,EAAEC,OAAkB,CAAE;AACpE,QAAA,KAAK,CAACD,OAASC,EAAAA,OAAAA,CAAAA;QACf,IAAI,CAACC,IAAI,GAAG,mBAAA;QACZ,IAAI,CAACF,OAAO,GAAGA,OAAAA;AACjB;AACF;AAEA,MAAMa,cAA6EhB,SAAAA,gBAAAA,CAAAA;AAKjFE,IAAAA,WAAAA,CACEC,OAAU,GAAA,4CAAwD,EAClEC,OAAkB,CAClB;AACA,QAAA,KAAK,CAACD,OAASC,EAAAA,OAAAA,CAAAA;QACf,IAAI,CAACC,IAAI,GAAG,gBAAA;QACZ,IAAI,CAACF,OAAO,GAAGA,OAAAA;AACf,QAAA,IAAI,CAACC,OAAO,GAAGA,OAAAA,IAAY,EAAC;AAC9B;AACF;AAEA,MAAMa,oBAGIjB,SAAAA,gBAAAA,CAAAA;AACRE,IAAAA,WAAAA,CAAYC,OAAU,GAAA,kBAA8B,EAAEC,OAAkB,CAAE;AACxE,QAAA,KAAK,CAACD,OAASC,EAAAA,OAAAA,CAAAA;QACf,IAAI,CAACC,IAAI,GAAG,sBAAA;QACZ,IAAI,CAACF,OAAO,GAAGA,OAAAA;AACjB;AACF;AAEA,MAAMe,WAA0EJ,SAAAA,cAAAA,CAAAA;AAK9EZ,IAAAA,WAAAA,CAAYC,OAAU,GAAA,eAA2B,EAAEC,OAAkB,CAAE;AACrE,QAAA,KAAK,CAACD,OAASC,EAAAA,OAAAA,CAAAA;QACf,IAAI,CAACC,IAAI,GAAG,aAAA;QACZ,IAAI,CAACF,OAAO,GAAGA,OAAAA;AACf,QAAA,IAAI,CAACC,OAAO,GAAGA,OAAAA,IAAY,EAAC;AAC9B;AACF;AAEA,MAAMe,mBAGInB,SAAAA,gBAAAA,CAAAA;AACRE,IAAAA,WAAAA,CAAYC,OAAU,GAAA,qCAAiD,EAAEC,OAAkB,CAAE;AAC3F,QAAA,KAAK,CAACD,OAASC,EAAAA,OAAAA,CAAAA;QACf,IAAI,CAACC,IAAI,GAAG,qBAAA;QACZ,IAAI,CAACF,OAAO,GAAGA,OAAAA;AACjB;AACF;;;;"}
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
@@ -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;;;;"}