@beecode/msh-util 1.2.0 → 2.0.0-alpha

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 (101) hide show
  1. package/{lib → dist}/array-util.d.ts +2 -2
  2. package/{lib → dist}/array-util.d.ts.map +1 -1
  3. package/dist/array-util.js +27 -0
  4. package/{lib → dist}/class-factory-pattern.d.ts.map +1 -1
  5. package/dist/class-factory-pattern.js +26 -0
  6. package/{lib → dist}/express/error-handler.d.ts.map +1 -1
  7. package/dist/express/error-handler.js +26 -0
  8. package/dist/index.d.ts +17 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +14 -0
  11. package/{lib → dist}/joi-util.d.ts.map +1 -1
  12. package/dist/joi-util.js +62 -0
  13. package/{lib → dist}/memoize-factory.d.ts +1 -1
  14. package/dist/memoize-factory.d.ts.map +1 -0
  15. package/dist/memoize-factory.js +24 -0
  16. package/{lib → dist}/object-util.d.ts.map +1 -1
  17. package/dist/object-util.js +115 -0
  18. package/dist/regex-util.js +12 -0
  19. package/{lib → dist}/single-threshold-promise.d.ts +1 -1
  20. package/dist/single-threshold-promise.d.ts.map +1 -0
  21. package/dist/single-threshold-promise.js +46 -0
  22. package/{lib → dist}/singleton/async.d.ts +1 -1
  23. package/dist/singleton/async.d.ts.map +1 -0
  24. package/dist/singleton/async.js +75 -0
  25. package/{lib → dist}/singleton/pattern.d.ts +1 -1
  26. package/dist/singleton/pattern.d.ts.map +1 -0
  27. package/dist/singleton/pattern.js +41 -0
  28. package/dist/string-util.js +18 -0
  29. package/dist/time-util.js +90 -0
  30. package/dist/time-zone.d.ts +467 -0
  31. package/dist/time-zone.d.ts.map +1 -0
  32. package/dist/time-zone.js +468 -0
  33. package/dist/timeout.js +17 -0
  34. package/dist/type-util.js +54 -0
  35. package/package.json +160 -99
  36. package/lib/array-util.js +0 -30
  37. package/lib/array-util.js.map +0 -1
  38. package/lib/class-factory-pattern.js +0 -30
  39. package/lib/class-factory-pattern.js.map +0 -1
  40. package/lib/express/error-handler.js +0 -28
  41. package/lib/express/error-handler.js.map +0 -1
  42. package/lib/index.d.ts +0 -14
  43. package/lib/index.d.ts.map +0 -1
  44. package/lib/index.js +0 -30
  45. package/lib/index.js.map +0 -1
  46. package/lib/joi-util.js +0 -63
  47. package/lib/joi-util.js.map +0 -1
  48. package/lib/memoize-factory.d.ts.map +0 -1
  49. package/lib/memoize-factory.js +0 -28
  50. package/lib/memoize-factory.js.map +0 -1
  51. package/lib/object-util.js +0 -118
  52. package/lib/object-util.js.map +0 -1
  53. package/lib/regex-util.js +0 -15
  54. package/lib/regex-util.js.map +0 -1
  55. package/lib/single-threshold-promise.d.ts.map +0 -1
  56. package/lib/single-threshold-promise.js +0 -49
  57. package/lib/single-threshold-promise.js.map +0 -1
  58. package/lib/singleton/async.d.ts.map +0 -1
  59. package/lib/singleton/async.js +0 -78
  60. package/lib/singleton/async.js.map +0 -1
  61. package/lib/singleton/pattern.d.ts.map +0 -1
  62. package/lib/singleton/pattern.js +0 -45
  63. package/lib/singleton/pattern.js.map +0 -1
  64. package/lib/string-util.js +0 -21
  65. package/lib/string-util.js.map +0 -1
  66. package/lib/time-util.js +0 -97
  67. package/lib/time-util.js.map +0 -1
  68. package/lib/timeout.js +0 -21
  69. package/lib/timeout.js.map +0 -1
  70. package/lib/type-util.js +0 -57
  71. package/lib/type-util.js.map +0 -1
  72. package/lib/types/any-function/index.d.ts +0 -2
  73. package/lib/types/any-function/index.d.ts.map +0 -1
  74. package/lib/types/any-function/index.js +0 -3
  75. package/lib/types/any-function/index.js.map +0 -1
  76. package/lib/types/any-function/no-params.d.ts +0 -2
  77. package/lib/types/any-function/no-params.d.ts.map +0 -1
  78. package/lib/types/any-function/no-params.js +0 -3
  79. package/lib/types/any-function/no-params.js.map +0 -1
  80. package/lib/types/any-function/promise-no-params.d.ts +0 -2
  81. package/lib/types/any-function/promise-no-params.d.ts.map +0 -1
  82. package/lib/types/any-function/promise-no-params.js +0 -3
  83. package/lib/types/any-function/promise-no-params.js.map +0 -1
  84. package/lib/types/any-function/promise.d.ts +0 -2
  85. package/lib/types/any-function/promise.d.ts.map +0 -1
  86. package/lib/types/any-function/promise.js +0 -3
  87. package/lib/types/any-function/promise.js.map +0 -1
  88. /package/{lib → dist}/class-factory-pattern.d.ts +0 -0
  89. /package/{lib → dist}/express/error-handler.d.ts +0 -0
  90. /package/{lib → dist}/joi-util.d.ts +0 -0
  91. /package/{lib → dist}/object-util.d.ts +0 -0
  92. /package/{lib → dist}/regex-util.d.ts +0 -0
  93. /package/{lib → dist}/regex-util.d.ts.map +0 -0
  94. /package/{lib → dist}/string-util.d.ts +0 -0
  95. /package/{lib → dist}/string-util.d.ts.map +0 -0
  96. /package/{lib → dist}/time-util.d.ts +0 -0
  97. /package/{lib → dist}/time-util.d.ts.map +0 -0
  98. /package/{lib → dist}/timeout.d.ts +0 -0
  99. /package/{lib → dist}/timeout.d.ts.map +0 -0
  100. /package/{lib → dist}/type-util.d.ts +0 -0
  101. /package/{lib → dist}/type-util.d.ts.map +0 -0
@@ -5,7 +5,7 @@ export declare const arrayUtil: {
5
5
  * @param {T | null | undefined} value
6
6
  * @return {value is T}
7
7
  * @example
8
- * const notEmptyArray = [0, 1, 2, null, undefined, ''].filter(arrayUtil.notEmpty))
8
+ * const notEmptyArray = [0, 1, 2, null, undefined, ''].filter(arrayUtil.notEmpty)
9
9
  * console.log(notEmptyArray)// [0, 1, 2, '']
10
10
  */
11
11
  notEmpty: <T>(value: T | null | undefined) => value is T;
@@ -15,7 +15,7 @@ export declare const arrayUtil: {
15
15
  * @param {T | null | undefined} value
16
16
  * @return {value is T}
17
17
  * @example
18
- * const notFalsyArray = [0, 1, 2, null, undefined, ''].filter(arrayUtil.notFalsy))
18
+ * const notFalsyArray = [0, 1, 2, null, undefined, ''].filter(arrayUtil.notFalsy)
19
19
  * console.log(notFalsyArray)// [1, 2]
20
20
  */
21
21
  notFalsy: <T_1>(value: T_1 | null | undefined) => value is T_1;
@@ -1 +1 @@
1
- {"version":3,"file":"array-util.d.ts","sourceRoot":"","sources":["../src/array-util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;IACrB;;;;;;;;OAQG;;IAIH;;;;;;;;OAQG;;CAIH,CAAA"}
1
+ {"version":3,"file":"array-util.d.ts","sourceRoot":"","sources":["../src/array-util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;IACrB;;;;;;;;OAQG;yBACkB,CAAC,GAAG,IAAI,GAAG,SAAS;IAGzC;;;;;;;;OAQG;;CAIH,CAAA"}
@@ -0,0 +1,27 @@
1
+ export const arrayUtil = {
2
+ /**
3
+ * Check if array element is not empty
4
+ * @template T
5
+ * @param {T | null | undefined} value
6
+ * @return {value is T}
7
+ * @example
8
+ * const notEmptyArray = [0, 1, 2, null, undefined, ''].filter(arrayUtil.notEmpty)
9
+ * console.log(notEmptyArray)// [0, 1, 2, '']
10
+ */
11
+ notEmpty: (value) => {
12
+ return value !== null && value !== undefined;
13
+ },
14
+ /**
15
+ * Check if array element is not falsy
16
+ * @template T
17
+ * @param {T | null | undefined} value
18
+ * @return {value is T}
19
+ * @example
20
+ * const notFalsyArray = [0, 1, 2, null, undefined, ''].filter(arrayUtil.notFalsy)
21
+ * console.log(notFalsyArray)// [1, 2]
22
+ */
23
+ notFalsy: (value) => {
24
+ return !!value;
25
+ },
26
+ };
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcnJheS11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRztJQUN4Qjs7Ozs7Ozs7T0FRRztJQUNILFFBQVEsRUFBRSxDQUFJLEtBQTJCLEVBQWMsRUFBRTtRQUN4RCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQTtJQUM3QyxDQUFDO0lBQ0Q7Ozs7Ozs7O09BUUc7SUFDSCxRQUFRLEVBQUUsQ0FBSSxLQUEyQixFQUFjLEVBQUU7UUFDeEQsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ2YsQ0FBQztDQUNELENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgYXJyYXlVdGlsID0ge1xuXHQvKipcblx0ICogQ2hlY2sgaWYgYXJyYXkgZWxlbWVudCBpcyBub3QgZW1wdHlcblx0ICogQHRlbXBsYXRlIFRcblx0ICogQHBhcmFtIHtUIHwgbnVsbCB8IHVuZGVmaW5lZH0gdmFsdWVcblx0ICogQHJldHVybiB7dmFsdWUgaXMgVH1cblx0ICogQGV4YW1wbGVcblx0ICogY29uc3Qgbm90RW1wdHlBcnJheSA9IFswLCAxLCAyLCBudWxsLCB1bmRlZmluZWQsICcnXS5maWx0ZXIoYXJyYXlVdGlsLm5vdEVtcHR5KVxuXHQgKiBjb25zb2xlLmxvZyhub3RFbXB0eUFycmF5KS8vIFswLCAxLCAyLCAnJ11cblx0ICovXG5cdG5vdEVtcHR5OiA8VD4odmFsdWU6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogdmFsdWUgaXMgVCA9PiB7XG5cdFx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWRcblx0fSxcblx0LyoqXG5cdCAqIENoZWNrIGlmIGFycmF5IGVsZW1lbnQgaXMgbm90IGZhbHN5XG5cdCAqIEB0ZW1wbGF0ZSBUXG5cdCAqIEBwYXJhbSB7VCB8IG51bGwgfCB1bmRlZmluZWR9IHZhbHVlXG5cdCAqIEByZXR1cm4ge3ZhbHVlIGlzIFR9XG5cdCAqIEBleGFtcGxlXG5cdCAqIGNvbnN0IG5vdEZhbHN5QXJyYXkgPSBbMCwgMSwgMiwgbnVsbCwgdW5kZWZpbmVkLCAnJ10uZmlsdGVyKGFycmF5VXRpbC5ub3RGYWxzeSlcblx0ICogY29uc29sZS5sb2cobm90RmFsc3lBcnJheSkvLyBbMSwgMl1cblx0ICovXG5cdG5vdEZhbHN5OiA8VD4odmFsdWU6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogdmFsdWUgaXMgVCA9PiB7XG5cdFx0cmV0dXJuICEhdmFsdWVcblx0fSxcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"class-factory-pattern.d.ts","sourceRoot":"","sources":["../src/class-factory-pattern.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,CAAA;CAAE,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAA;AAE/G;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,mBAAmB,uGAM/B,CAAA"}
1
+ {"version":3,"file":"class-factory-pattern.d.ts","sourceRoot":"","sources":["../src/class-factory-pattern.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,CAAA;CAAE,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAA;AAE/G;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,mBAAmB,2CACpB,CAAC,eACC,sBAAsB,CAAC,CAAC,KAAK,aAAa,CAAC,CAIxD,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * This is a wrapper that easily converts class constructor call (`new className(..constructorParams)`) into function call (`classNameFactory(..constructorParams)`)
3
+ * @param {C} classType
4
+ * @template C
5
+ * @return {(...args: ConstructorParameters<C>) => InstanceType<C>}
6
+ * @example
7
+ * export class SomeClass {
8
+ * protected _a: string
9
+ *
10
+ * constructor(params: { a: string }) {
11
+ * const { a } = params
12
+ * this._a = a
13
+ * }
14
+ * }
15
+ *
16
+ * export const someClassFactory = classFactoryPattern(SomeClass)
17
+ *
18
+ * // using
19
+ * const someClassInstance = someClassFactory({ a: 'test' })
20
+ */
21
+ export const classFactoryPattern = (classType) => {
22
+ return (...args) => {
23
+ return new classType(...args);
24
+ };
25
+ };
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtZmFjdG9yeS1wYXR0ZXJuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsYXNzLWZhY3RvcnktcGF0dGVybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQ2xDLFNBQVksRUFDK0MsRUFBRTtJQUM3RCxPQUFPLENBQUMsR0FBRyxJQUE4QixFQUFtQixFQUFFO1FBQzdELE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQW9CLENBQUE7SUFDakQsQ0FBQyxDQUFBO0FBQ0YsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIENsYXNzVHlwZTxUID0gb2JqZWN0PiA9IG5ldyAoLi4uYXJnczogVCBleHRlbmRzIHsgbmV3ICguLi5hcmdzOiBpbmZlciBQKTogYW55IH0gPyBQIDogbmV2ZXJbXSkgPT4gVFxuXG4vKipcbiAqIFRoaXMgaXMgYSB3cmFwcGVyIHRoYXQgZWFzaWx5IGNvbnZlcnRzIGNsYXNzIGNvbnN0cnVjdG9yIGNhbGwgKGBuZXcgY2xhc3NOYW1lKC4uY29uc3RydWN0b3JQYXJhbXMpYCkgaW50byBmdW5jdGlvbiBjYWxsIChgY2xhc3NOYW1lRmFjdG9yeSguLmNvbnN0cnVjdG9yUGFyYW1zKWApXG4gKiBAcGFyYW0ge0N9IGNsYXNzVHlwZVxuICogQHRlbXBsYXRlIENcbiAqIEByZXR1cm4geyguLi5hcmdzOiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8Qz4pID0+IEluc3RhbmNlVHlwZTxDPn1cbiAqIEBleGFtcGxlXG4gKiBleHBvcnQgY2xhc3MgU29tZUNsYXNzIHtcbiAqICAgcHJvdGVjdGVkIF9hOiBzdHJpbmdcbiAqXG4gKiAgIGNvbnN0cnVjdG9yKHBhcmFtczogeyBhOiBzdHJpbmcgfSkge1xuICogICAgIGNvbnN0IHsgYSB9ID0gcGFyYW1zXG4gKiAgICAgdGhpcy5fYSA9IGFcbiAqICAgfVxuICogfVxuICpcbiAqIGV4cG9ydCBjb25zdCBzb21lQ2xhc3NGYWN0b3J5ID0gY2xhc3NGYWN0b3J5UGF0dGVybihTb21lQ2xhc3MpXG4gKlxuICogLy8gdXNpbmdcbiAqIGNvbnN0IHNvbWVDbGFzc0luc3RhbmNlID0gc29tZUNsYXNzRmFjdG9yeSh7IGE6ICd0ZXN0JyB9KVxuICovXG5leHBvcnQgY29uc3QgY2xhc3NGYWN0b3J5UGF0dGVybiA9IDxDIGV4dGVuZHMgQ2xhc3NUeXBlPihcblx0Y2xhc3NUeXBlOiBDXG4pOiAoKC4uLmFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczxDPikgPT4gSW5zdGFuY2VUeXBlPEM+KSA9PiB7XG5cdHJldHVybiAoLi4uYXJnczogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPEM+KTogSW5zdGFuY2VUeXBlPEM+ID0+IHtcblx0XHRyZXR1cm4gbmV3IGNsYXNzVHlwZSguLi5hcmdzKSBhcyBJbnN0YW5jZVR5cGU8Qz5cblx0fVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/express/error-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,YAAa,GAAG,QAAQ,MAAM,cAAc,wBAAwB,GAAG,CAAC,KAAG,GAS1G,CAAA"}
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/express/error-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,mBAAmB,YAAa,GAAG,QAAQ,MAAM,cAAc,wBAAwB,GAAG,CAAC,KAAG,GAU1G,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Wrap async express http request end return promise or call next on catch
3
+ * @param _target
4
+ * @param _key
5
+ * @param descriptor
6
+ * @example
7
+ * export class RootController {
8
+ * /@expressErrorHandler
9
+ * async login(req: Request, res: Response): Promise<void> {
10
+ * const { username, password } = validationUtil().sanitize(req.body, postLoginBodySchema)
11
+ * const result = await authorizationUseCase.login({ username, password })
12
+ * res.json(result)
13
+ * }
14
+ * }
15
+ */
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ export const expressErrorHandler = (_target, _key, descriptor) => {
18
+ const originalMethod = descriptor.value;
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ descriptor.value = function () {
21
+ const next = arguments[2]; // eslint-disable-line prefer-rest-params
22
+ return Promise.resolve(originalMethod.apply(this, arguments)).catch(next); // eslint-disable-line prefer-rest-params
23
+ };
24
+ return descriptor;
25
+ };
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHByZXNzL2Vycm9yLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxPQUFZLEVBQUUsSUFBWSxFQUFFLFVBQXdDLEVBQU8sRUFBRTtJQUNoSCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFBO0lBQ3ZDLDhEQUE4RDtJQUM5RCxVQUFVLENBQUMsS0FBSyxHQUFHO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLHlDQUF5QztRQUVuRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyx5Q0FBeUM7SUFDcEgsQ0FBQyxDQUFBO0lBRUQsT0FBTyxVQUFVLENBQUE7QUFDbEIsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXcmFwIGFzeW5jIGV4cHJlc3MgaHR0cCByZXF1ZXN0IGVuZCByZXR1cm4gcHJvbWlzZSBvciBjYWxsIG5leHQgb24gY2F0Y2hcbiAqIEBwYXJhbSBfdGFyZ2V0XG4gKiBAcGFyYW0gX2tleVxuICogQHBhcmFtIGRlc2NyaXB0b3JcbiAqIEBleGFtcGxlXG4gKiBleHBvcnQgY2xhc3MgUm9vdENvbnRyb2xsZXIge1xuICogIC9AZXhwcmVzc0Vycm9ySGFuZGxlclxuICogICBhc3luYyBsb2dpbihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAqICAgICBjb25zdCB7IHVzZXJuYW1lLCBwYXNzd29yZCB9ID0gdmFsaWRhdGlvblV0aWwoKS5zYW5pdGl6ZShyZXEuYm9keSwgcG9zdExvZ2luQm9keVNjaGVtYSlcbiAqICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhdXRob3JpemF0aW9uVXNlQ2FzZS5sb2dpbih7IHVzZXJuYW1lLCBwYXNzd29yZCB9KVxuICogICAgIHJlcy5qc29uKHJlc3VsdClcbiAqICAgfVxuICogfVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNvbnN0IGV4cHJlc3NFcnJvckhhbmRsZXIgPSAoX3RhcmdldDogYW55LCBfa2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pOiBhbnkgPT4ge1xuXHRjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWVcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0ZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uICgpOiBhbnkge1xuXHRcdGNvbnN0IG5leHQgPSBhcmd1bWVudHNbMl0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUob3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKSkuY2F0Y2gobmV4dCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcblx0fVxuXG5cdHJldHVybiBkZXNjcmlwdG9yXG59XG4iXX0=
@@ -0,0 +1,17 @@
1
+ export { expressErrorHandler } from '#src/express/error-handler';
2
+ export { SingletonAsync } from '#src/singleton/async';
3
+ export { singletonPattern } from '#src/singleton/pattern';
4
+ export { classFactoryPattern } from '#src/class-factory-pattern';
5
+ export type { ClassType } from '#src/class-factory-pattern';
6
+ export { ErrorWithPayload, JoiUtil } from '#src/joi-util';
7
+ export { memoizeFactory } from '#src/memoize-factory';
8
+ export { ObjectUtil } from '#src/object-util';
9
+ export type { ObjectType } from '#src/object-util';
10
+ export { regexUtil } from '#src/regex-util';
11
+ export { SingleThresholdPromise } from '#src/single-threshold-promise';
12
+ export { stringUtil } from '#src/string-util';
13
+ export { DurationUnit, TimeUtil } from '#src/time-util';
14
+ export type { DurationUnitType } from '#src/time-util';
15
+ export { timeout } from '#src/timeout';
16
+ export { typeUtil } from '#src/type-util';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,YAAY,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ export { expressErrorHandler } from '#src/express/error-handler';
2
+ export { SingletonAsync } from '#src/singleton/async';
3
+ export { singletonPattern } from '#src/singleton/pattern';
4
+ export { classFactoryPattern } from '#src/class-factory-pattern';
5
+ export { ErrorWithPayload, JoiUtil } from '#src/joi-util';
6
+ export { memoizeFactory } from '#src/memoize-factory';
7
+ export { ObjectUtil } from '#src/object-util';
8
+ export { regexUtil } from '#src/regex-util';
9
+ export { SingleThresholdPromise } from '#src/single-threshold-promise';
10
+ export { stringUtil } from '#src/string-util';
11
+ export { DurationUnit, TimeUtil } from '#src/time-util';
12
+ export { timeout } from '#src/timeout';
13
+ export { typeUtil } from '#src/type-util';
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRXJELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBRXpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBSWhFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRXJELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUk3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFFdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFJdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBleHByZXNzRXJyb3JIYW5kbGVyIH0gZnJvbSAnI3NyYy9leHByZXNzL2Vycm9yLWhhbmRsZXInXG5cbmV4cG9ydCB7IFNpbmdsZXRvbkFzeW5jIH0gZnJvbSAnI3NyYy9zaW5nbGV0b24vYXN5bmMnXG5cbmV4cG9ydCB7IHNpbmdsZXRvblBhdHRlcm4gfSBmcm9tICcjc3JjL3NpbmdsZXRvbi9wYXR0ZXJuJ1xuXG5leHBvcnQgeyBjbGFzc0ZhY3RvcnlQYXR0ZXJuIH0gZnJvbSAnI3NyYy9jbGFzcy1mYWN0b3J5LXBhdHRlcm4nXG5cbmV4cG9ydCB0eXBlIHsgQ2xhc3NUeXBlIH0gZnJvbSAnI3NyYy9jbGFzcy1mYWN0b3J5LXBhdHRlcm4nXG5cbmV4cG9ydCB7IEVycm9yV2l0aFBheWxvYWQsIEpvaVV0aWwgfSBmcm9tICcjc3JjL2pvaS11dGlsJ1xuXG5leHBvcnQgeyBtZW1vaXplRmFjdG9yeSB9IGZyb20gJyNzcmMvbWVtb2l6ZS1mYWN0b3J5J1xuXG5leHBvcnQgeyBPYmplY3RVdGlsIH0gZnJvbSAnI3NyYy9vYmplY3QtdXRpbCdcblxuZXhwb3J0IHR5cGUgeyBPYmplY3RUeXBlIH0gZnJvbSAnI3NyYy9vYmplY3QtdXRpbCdcblxuZXhwb3J0IHsgcmVnZXhVdGlsIH0gZnJvbSAnI3NyYy9yZWdleC11dGlsJ1xuXG5leHBvcnQgeyBTaW5nbGVUaHJlc2hvbGRQcm9taXNlIH0gZnJvbSAnI3NyYy9zaW5nbGUtdGhyZXNob2xkLXByb21pc2UnXG5cbmV4cG9ydCB7IHN0cmluZ1V0aWwgfSBmcm9tICcjc3JjL3N0cmluZy11dGlsJ1xuXG5leHBvcnQgeyBEdXJhdGlvblVuaXQsIFRpbWVVdGlsIH0gZnJvbSAnI3NyYy90aW1lLXV0aWwnXG5cbmV4cG9ydCB0eXBlIHsgRHVyYXRpb25Vbml0VHlwZSB9IGZyb20gJyNzcmMvdGltZS11dGlsJ1xuXG5leHBvcnQgeyB0aW1lb3V0IH0gZnJvbSAnI3NyYy90aW1lb3V0J1xuXG5leHBvcnQgeyB0eXBlVXRpbCB9IGZyb20gJyNzcmMvdHlwZS11dGlsJ1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"joi-util.d.ts","sourceRoot":"","sources":["../src/joi-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAA;AAE7D,qBAAa,gBAAgB,CAAC,CAAC,CAAE,SAAQ,KAAK;IAC7C,OAAO,EAAE,CAAC,CAAA;gBAEE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;CAIvC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,OAAO;IACnB;;;;;;;;OAQG;IACH,QAAQ,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,CAAC;IAI9G;;;;;;;;OAQG;IACH,QAAQ,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,CAAC;IAI9G,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,CAAC;CAQzH"}
1
+ {"version":3,"file":"joi-util.d.ts","sourceRoot":"","sources":["../src/joi-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAA;AAE7D,qBAAa,gBAAgB,CAAC,CAAC,CAAE,SAAQ,KAAK;IAC7C,OAAO,EAAE,CAAC,CAAA;gBAEE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;CAIvC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,OAAO;IACnB;;;;;;;;OAQG;IAEH,QAAQ,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,CAAC;IAI9G;;;;;;;;OAQG;IAEH,QAAQ,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,CAAC;IAK9G,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,CAAC;CAQzH"}
@@ -0,0 +1,62 @@
1
+ export class ErrorWithPayload extends Error {
2
+ payload;
3
+ constructor(message, payload) {
4
+ super(message);
5
+ this.payload = payload;
6
+ }
7
+ }
8
+ /**
9
+ * This is a simple wrapper around Joi validation with two functions exposed validate and sanitize. If object is not valid function throws an error.
10
+ * @example
11
+ * type SomeType = {
12
+ * a: string
13
+ * b: number
14
+ * }
15
+ * const someSchema = Joi.object<SomeType>().keys({
16
+ * a: Joi.string().required(),
17
+ * b: Joi.number().required(),
18
+ * }).required()
19
+ *
20
+ * const joiUtil = new JoiUtil()
21
+ *
22
+ * // using
23
+ * const invalidObject = joiUtil.validate({}, someSchema) // validate throws an error
24
+ * const validObject = joiUtil.validate({ a: 'a', b: 1 }, someSchema)
25
+ */
26
+ export class JoiUtil {
27
+ /**
28
+ * Validate and clean object
29
+ * @template T
30
+ * @template Joi
31
+ * @param {any} objectToValidate
32
+ * @param {Joi.Schema | Joi.ObjectSchema<T>} schema
33
+ * @param {validationOptions} [validationOptions]
34
+ * @returns {T} expected object after validation
35
+ */
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ sanitize(objectToValidate, schema, validationOptions) {
38
+ return this._validate(objectToValidate, schema, { ...validationOptions, stripUnknown: true });
39
+ }
40
+ /**
41
+ * Only validate properties specified in validation schema
42
+ * @template T
43
+ * @template Joi
44
+ * @param {any} objectToValidate
45
+ * @param {Joi.Schema | Joi.ObjectSchema<T>} schema
46
+ * @param {validationOptions} [validationOptions]
47
+ * @returns {T} expected object after validation
48
+ */
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ validate(objectToValidate, schema, validationOptions) {
51
+ return this._validate(objectToValidate, schema, validationOptions);
52
+ }
53
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
+ _validate(objectToValidate, schema, validationOptions) {
55
+ const { error: validationError, value } = schema.validate(objectToValidate, validationOptions);
56
+ if (validationError) {
57
+ throw new ErrorWithPayload(validationError.message.split('"').join("'"), validationError);
58
+ }
59
+ return value;
60
+ }
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9pLXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvam9pLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLGdCQUFvQixTQUFRLEtBQUs7SUFDN0MsT0FBTyxDQUFHO0lBRVYsWUFBWSxPQUFlLEVBQUUsT0FBVTtRQUN0QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDZCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0NBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLE9BQU8sT0FBTztJQUNuQjs7Ozs7Ozs7T0FRRztJQUNILDhEQUE4RDtJQUM5RCxRQUFRLENBQUksZ0JBQXFCLEVBQUUsTUFBZ0MsRUFBRSxpQkFBcUM7UUFDekcsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFJLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDakcsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsOERBQThEO0lBQzlELFFBQVEsQ0FBSSxnQkFBcUIsRUFBRSxNQUFnQyxFQUFFLGlCQUFxQztRQUN6RyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUksZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUE7SUFDdEUsQ0FBQztJQUVELDhEQUE4RDtJQUNwRCxTQUFTLENBQUksZ0JBQXFCLEVBQUUsTUFBZ0MsRUFBRSxpQkFBcUM7UUFDcEgsTUFBTSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO1FBQzlGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQUMxRixDQUFDO1FBRUQsT0FBTyxLQUFVLENBQUE7SUFDbEIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JqZWN0U2NoZW1hLCBTY2hlbWEsIFZhbGlkYXRpb25PcHRpb25zIH0gZnJvbSAnam9pJ1xuXG5leHBvcnQgY2xhc3MgRXJyb3JXaXRoUGF5bG9hZDxUPiBleHRlbmRzIEVycm9yIHtcblx0cGF5bG9hZDogVFxuXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcGF5bG9hZDogVCkge1xuXHRcdHN1cGVyKG1lc3NhZ2UpXG5cdFx0dGhpcy5wYXlsb2FkID0gcGF5bG9hZFxuXHR9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCBKb2kgdmFsaWRhdGlvbiB3aXRoIHR3byBmdW5jdGlvbnMgZXhwb3NlZCB2YWxpZGF0ZSBhbmQgc2FuaXRpemUuIElmIG9iamVjdCBpcyBub3QgdmFsaWQgZnVuY3Rpb24gdGhyb3dzIGFuIGVycm9yLlxuICogQGV4YW1wbGVcbiAqIHR5cGUgU29tZVR5cGUgPSB7XG4gKiAgIGE6IHN0cmluZ1xuICogICBiOiBudW1iZXJcbiAqIH1cbiAqIGNvbnN0IHNvbWVTY2hlbWEgPSBKb2kub2JqZWN0PFNvbWVUeXBlPigpLmtleXMoe1xuICogICBhOiBKb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAqICAgYjogSm9pLm51bWJlcigpLnJlcXVpcmVkKCksXG4gKiB9KS5yZXF1aXJlZCgpXG4gKlxuICogY29uc3Qgam9pVXRpbCA9IG5ldyBKb2lVdGlsKClcbiAqXG4gKiAvLyB1c2luZ1xuICogY29uc3QgaW52YWxpZE9iamVjdCA9IGpvaVV0aWwudmFsaWRhdGUoe30sIHNvbWVTY2hlbWEpIC8vIHZhbGlkYXRlIHRocm93cyBhbiBlcnJvclxuICogY29uc3QgdmFsaWRPYmplY3QgPSBqb2lVdGlsLnZhbGlkYXRlKHsgYTogJ2EnLCBiOiAxIH0sIHNvbWVTY2hlbWEpXG4gKi9cbmV4cG9ydCBjbGFzcyBKb2lVdGlsIHtcblx0LyoqXG5cdCAqIFZhbGlkYXRlIGFuZCBjbGVhbiBvYmplY3Rcblx0ICogQHRlbXBsYXRlIFRcblx0ICogQHRlbXBsYXRlIEpvaVxuXHQgKiBAcGFyYW0ge2FueX0gb2JqZWN0VG9WYWxpZGF0ZVxuXHQgKiBAcGFyYW0ge0pvaS5TY2hlbWEgfCBKb2kuT2JqZWN0U2NoZW1hPFQ+fSBzY2hlbWFcblx0ICogQHBhcmFtIHt2YWxpZGF0aW9uT3B0aW9uc30gW3ZhbGlkYXRpb25PcHRpb25zXVxuXHQgKiBAcmV0dXJucyB7VH0gZXhwZWN0ZWQgb2JqZWN0IGFmdGVyIHZhbGlkYXRpb25cblx0ICovXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdHNhbml0aXplPFQ+KG9iamVjdFRvVmFsaWRhdGU6IGFueSwgc2NoZW1hOiBTY2hlbWEgfCBPYmplY3RTY2hlbWE8VD4sIHZhbGlkYXRpb25PcHRpb25zPzogVmFsaWRhdGlvbk9wdGlvbnMpOiBUIHtcblx0XHRyZXR1cm4gdGhpcy5fdmFsaWRhdGU8VD4ob2JqZWN0VG9WYWxpZGF0ZSwgc2NoZW1hLCB7IC4uLnZhbGlkYXRpb25PcHRpb25zLCBzdHJpcFVua25vd246IHRydWUgfSlcblx0fVxuXG5cdC8qKlxuXHQgKiBPbmx5IHZhbGlkYXRlIHByb3BlcnRpZXMgc3BlY2lmaWVkIGluIHZhbGlkYXRpb24gc2NoZW1hXG5cdCAqIEB0ZW1wbGF0ZSBUXG5cdCAqIEB0ZW1wbGF0ZSBKb2lcblx0ICogQHBhcmFtIHthbnl9IG9iamVjdFRvVmFsaWRhdGVcblx0ICogQHBhcmFtIHtKb2kuU2NoZW1hIHwgSm9pLk9iamVjdFNjaGVtYTxUPn0gc2NoZW1hXG5cdCAqIEBwYXJhbSB7dmFsaWRhdGlvbk9wdGlvbnN9IFt2YWxpZGF0aW9uT3B0aW9uc11cblx0ICogQHJldHVybnMge1R9IGV4cGVjdGVkIG9iamVjdCBhZnRlciB2YWxpZGF0aW9uXG5cdCAqL1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHR2YWxpZGF0ZTxUPihvYmplY3RUb1ZhbGlkYXRlOiBhbnksIHNjaGVtYTogU2NoZW1hIHwgT2JqZWN0U2NoZW1hPFQ+LCB2YWxpZGF0aW9uT3B0aW9ucz86IFZhbGlkYXRpb25PcHRpb25zKTogVCB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZhbGlkYXRlPFQ+KG9iamVjdFRvVmFsaWRhdGUsIHNjaGVtYSwgdmFsaWRhdGlvbk9wdGlvbnMpXG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRwcm90ZWN0ZWQgX3ZhbGlkYXRlPFQ+KG9iamVjdFRvVmFsaWRhdGU6IGFueSwgc2NoZW1hOiBTY2hlbWEgfCBPYmplY3RTY2hlbWE8VD4sIHZhbGlkYXRpb25PcHRpb25zPzogVmFsaWRhdGlvbk9wdGlvbnMpOiBUIHtcblx0XHRjb25zdCB7IGVycm9yOiB2YWxpZGF0aW9uRXJyb3IsIHZhbHVlIH0gPSBzY2hlbWEudmFsaWRhdGUob2JqZWN0VG9WYWxpZGF0ZSwgdmFsaWRhdGlvbk9wdGlvbnMpXG5cdFx0aWYgKHZhbGlkYXRpb25FcnJvcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yV2l0aFBheWxvYWQodmFsaWRhdGlvbkVycm9yLm1lc3NhZ2Uuc3BsaXQoJ1wiJykuam9pbihcIidcIiksIHZhbGlkYXRpb25FcnJvcilcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWUgYXMgVFxuXHR9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { AnyFunction } from './types/any-function';
1
+ export type AnyFunction<T> = (...args: any[]) => T;
2
2
  /**
3
3
  * This is a simple implementation of memoize function that caches result against the parameter passed that are passed to the
4
4
  * function so it never runs the same calculation twice.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoize-factory.d.ts","sourceRoot":"","sources":["../src/memoize-factory.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AAElD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,2CAA4C,CAAC,KAAG,CAW1E,CAAA"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This is a simple implementation of memoize function that caches result against the parameter passed that are passed to the
3
+ * function so it never runs the same calculation twice.
4
+ * @template F
5
+ * @template R
6
+ * @param {F} factoryFn
7
+ * @return {F: AnyFunction<R>}
8
+ * @example
9
+ * export const sumTwoNumbersMemoize = memoizeFactory((a:number, b:number): number => a + b)
10
+ *
11
+ * // using
12
+ * sumTwoNumbersMemoize(5 + 10) // 15
13
+ */
14
+ export const memoizeFactory = (factoryFn) => {
15
+ const cache = {};
16
+ return ((...args) => {
17
+ const key = JSON.stringify(args);
18
+ if (key in cache) {
19
+ return cache[key];
20
+ }
21
+ return (cache[key] = factoryFn(...args));
22
+ });
23
+ };
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb2l6ZS1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21lbW9pemUtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBOEIsU0FBWSxFQUFLLEVBQUU7SUFDOUUsTUFBTSxLQUFLLEdBQXNCLEVBQUUsQ0FBQTtJQUVuQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQW1CLEVBQUssRUFBRTtRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2hDLElBQUksR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2xCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBRSxDQUFBO1FBQ25CLENBQUM7UUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDekMsQ0FBQyxDQUFNLENBQUE7QUFDUixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgQW55RnVuY3Rpb248VD4gPSAoLi4uYXJnczogYW55W10pID0+IFRcblxuLyoqXG4gKiBUaGlzIGlzIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIG1lbW9pemUgZnVuY3Rpb24gdGhhdCBjYWNoZXMgcmVzdWx0IGFnYWluc3QgdGhlIHBhcmFtZXRlciBwYXNzZWQgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZVxuICogZnVuY3Rpb24gc28gaXQgbmV2ZXIgcnVucyB0aGUgc2FtZSBjYWxjdWxhdGlvbiB0d2ljZS5cbiAqIEB0ZW1wbGF0ZSBGXG4gKiBAdGVtcGxhdGUgUlxuICogQHBhcmFtIHtGfSBmYWN0b3J5Rm5cbiAqIEByZXR1cm4ge0Y6IEFueUZ1bmN0aW9uPFI+fVxuICogQGV4YW1wbGVcbiAqIGV4cG9ydCBjb25zdCBzdW1Ud29OdW1iZXJzTWVtb2l6ZSA9IG1lbW9pemVGYWN0b3J5KChhOm51bWJlciwgYjpudW1iZXIpOiBudW1iZXIgPT4gYSArIGIpXG4gKlxuICogLy8gdXNpbmdcbiAqIHN1bVR3b051bWJlcnNNZW1vaXplKDUgKyAxMCkgLy8gMTVcbiAqL1xuZXhwb3J0IGNvbnN0IG1lbW9pemVGYWN0b3J5ID0gPEYgZXh0ZW5kcyBBbnlGdW5jdGlvbjxSPiwgUj4oZmFjdG9yeUZuOiBGKTogRiA9PiB7XG5cdGNvbnN0IGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBSPiA9IHt9XG5cblx0cmV0dXJuICgoLi4uYXJnczogUGFyYW1ldGVyczxGPik6IFIgPT4ge1xuXHRcdGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KGFyZ3MpXG5cdFx0aWYgKGtleSBpbiBjYWNoZSkge1xuXHRcdFx0cmV0dXJuIGNhY2hlW2tleV0hXG5cdFx0fVxuXG5cdFx0cmV0dXJuIChjYWNoZVtrZXldID0gZmFjdG9yeUZuKC4uLmFyZ3MpKVxuXHR9KSBhcyBGXG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"object-util.d.ts","sourceRoot":"","sources":["../src/object-util.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAE5C,qBAAa,UAAU;IACtB;;;;;OAKG;IACH,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC;IAIpD;;;;;;;OAOG;IACH,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAU5F;;;;;;;OAOG;IACH,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAMnH;;;;;;;;;;;;;;;;;OAiBG;IACH,aAAa,CACZ,MAAM,EAAE,GAAG,EACX,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3F,MAAM;IAeT,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE;QAAE,eAAe,EAAE,OAAO,CAAC;QAAC,uBAAuB,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,OAAO;IAUxH;;;;;OAKG;IACH,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO;IAIlC;;;;;;;OAOG;IACH,mBAAmB,CAAC,CAAC,SAAS,UAAU,EAAE,eAAe,EAAE,CAAC,GAAG,CAAC;CAchE"}
1
+ {"version":3,"file":"object-util.d.ts","sourceRoot":"","sources":["../src/object-util.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAE5C,qBAAa,UAAU;IACtB;;;;;OAKG;IACH,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC;IAIpD;;;;;;;OAOG;IACH,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAa5F;;;;;;;OAOG;IACH,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAMnH;;;;;;;;;;;;;;;;;OAiBG;IACH,aAAa,CAEZ,MAAM,EAAE,GAAG,EACX,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3F,MAAM;IAeT,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE;QAAE,eAAe,EAAE,OAAO,CAAC;QAAC,uBAAuB,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,OAAO;IAUxH;;;;;OAKG;IAEH,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO;IAIlC;;;;;;;OAOG;IACH,mBAAmB,CAAC,CAAC,SAAS,UAAU,EAAE,eAAe,EAAE,CAAC,GAAG,CAAC;CAehE"}
@@ -0,0 +1,115 @@
1
+ import cloneDeep from 'lodash.clonedeep';
2
+ import util from 'util';
3
+ export class ObjectUtil {
4
+ /**
5
+ * Deep clone object. Returned object will have no references to the object passed through params
6
+ * @template T
7
+ * @param {T} objectToClone
8
+ * @return {T}
9
+ */
10
+ deepClone(objectToClone) {
11
+ return cloneDeep(objectToClone);
12
+ }
13
+ /**
14
+ * Pick only properties from the property list. It is only allowed to pick properties from the first level
15
+ * @template T
16
+ * @template L
17
+ * @param {T} obj
18
+ * @param {L[]} keyList
19
+ * @return {Pick<T, L>}
20
+ */
21
+ pickByList(obj, keyList) {
22
+ return keyList.reduce((pickedObj, key) => {
23
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
24
+ pickedObj[key] = obj[key];
25
+ }
26
+ return pickedObj;
27
+ }, {}); // eslint-disable-line @typescript-eslint/prefer-reduce-type-parameter
28
+ }
29
+ /**
30
+ * Pick objects properties using keys from the second object.
31
+ * @template T
32
+ * @template L
33
+ * @param {T} obj
34
+ * @param {Partial<T>} objWithPickKeys
35
+ * @return {Pick<T, L>}
36
+ */
37
+ pickByObjectKeys(obj, objWithPickKeys) {
38
+ const keys = Object.keys(objWithPickKeys);
39
+ return this.pickByList(obj, keys);
40
+ }
41
+ /**
42
+ * This function will do stringify deeper that JSON.stringify.
43
+ * @param {any} entity - entity thant needs to be stringify
44
+ * @param {object} [options] - available options
45
+ * @param {boolean} [options.isSortable=false] - if object property should be sorted
46
+ * @param {boolean} [options.isPrettyPrinted=false] - if object and array properties should be printed in a new row
47
+ * @param {number} [options.prettyPrintCompactLevel=0] - if pretty print is on define the level of deepest children that are not
48
+ * going to be pretty. It doesn't matter if the siblings doesn't have the same depth.
49
+ * @return {string} - strung result
50
+ * @example
51
+ * console.log(new ObjectUtil().deepStringify(null)) // 'null'
52
+ * console.log(new ObjectUtil().deepStringify(undefined)) // 'undefined'
53
+ * console.log(new ObjectUtil().deepStringify({ a: 1 })) // '{\n\ta: 1\n}'
54
+ * // `{
55
+ * // a:1
56
+ * // }`
57
+ * console.log(new ObjectUtil().deepStringify({ b: 1, a: 2 }, {isSorted:true, compact: true})) // { a: 2, b: 1 }
58
+ */
59
+ deepStringify(
60
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
+ entity, options) {
62
+ const { isSorted = false, isPrettyPrinted = false, prettyPrintCompactLevel = 0 } = options ?? {};
63
+ const compact = this._deepStringifyCompact({ isPrettyPrinted, prettyPrintCompactLevel });
64
+ return util.inspect(entity, {
65
+ breakLength: Infinity,
66
+ compact,
67
+ depth: Infinity,
68
+ maxArrayLength: Infinity,
69
+ maxStringLength: Infinity,
70
+ sorted: isSorted,
71
+ });
72
+ }
73
+ _deepStringifyCompact(params) {
74
+ const { isPrettyPrinted, prettyPrintCompactLevel } = params;
75
+ if (!isPrettyPrinted) {
76
+ return true;
77
+ }
78
+ return prettyPrintCompactLevel;
79
+ }
80
+ /**
81
+ * We are converting objects to string (or null or undefined) and comparing if the result is equal
82
+ * @param a
83
+ * @param b
84
+ * @return {boolean}
85
+ */
86
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
+ deepEqual(a, b) {
88
+ return this.deepStringify(a, { isSorted: true }) === this.deepStringify(b, { isSorted: true });
89
+ }
90
+ /**
91
+ * This function is going to convert any null to undefined in the object that is passed to it.
92
+ * @template T
93
+ * @param {T} objectWithNulls
94
+ * @return {T}
95
+ * @example
96
+ * console.log(new ObjectUtil().deepNullToUndefined({ a: null, b: { c: null } })) // { a: undefined, b: { c: undefined } }
97
+ */
98
+ deepNullToUndefined(objectWithNulls) {
99
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
100
+ return Object.entries(objectWithNulls).reduce((acc, cur) => {
101
+ const [key, value] = cur;
102
+ if (value === null) {
103
+ acc[key] = undefined;
104
+ }
105
+ else if (typeof value === 'object' && !(value instanceof Date)) {
106
+ acc[key] = this.deepNullToUndefined(value);
107
+ }
108
+ else {
109
+ acc[key] = value;
110
+ }
111
+ return acc;
112
+ }, {});
113
+ }
114
+ }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvb2JqZWN0LXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTLE1BQU0sa0JBQWtCLENBQUE7QUFDeEMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBS3ZCLE1BQU0sT0FBTyxVQUFVO0lBQ3RCOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUF1QixhQUFnQjtRQUMvQyxPQUFPLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFVBQVUsQ0FBc0MsR0FBTSxFQUFFLE9BQXVCO1FBQzlFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FDcEIsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELFNBQVMsQ0FBQyxHQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBUSxDQUFDLENBQUE7WUFDcEMsQ0FBQztZQUVELE9BQU8sU0FBUyxDQUFBO1FBQ2pCLENBQUMsRUFDRCxFQUFnQixDQUNoQixDQUFBLENBQUMsc0VBQXNFO0lBQ3pFLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsZ0JBQWdCLENBQXNDLEdBQU0sRUFBRSxlQUF3QztRQUNyRyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBUSxDQUFBO1FBRWhELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILGFBQWE7SUFDWiw4REFBOEQ7SUFDOUQsTUFBVyxFQUNYLE9BQTZGO1FBRTdGLE1BQU0sRUFBRSxRQUFRLEdBQUcsS0FBSyxFQUFFLGVBQWUsR0FBRyxLQUFLLEVBQUUsdUJBQXVCLEdBQUcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUVoRyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxDQUFBO1FBRXhGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDM0IsV0FBVyxFQUFFLFFBQVE7WUFDckIsT0FBTztZQUNQLEtBQUssRUFBRSxRQUFRO1lBQ2YsY0FBYyxFQUFFLFFBQVE7WUFDeEIsZUFBZSxFQUFFLFFBQVE7WUFDekIsTUFBTSxFQUFFLFFBQVE7U0FDaEIsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQUVTLHFCQUFxQixDQUFDLE1BQXFFO1FBQ3BHLE1BQU0sRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxNQUFNLENBQUE7UUFFM0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFBO1FBQ1osQ0FBQztRQUVELE9BQU8sdUJBQXVCLENBQUE7SUFDL0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsOERBQThEO0lBQzlELFNBQVMsQ0FBQyxDQUFNLEVBQUUsQ0FBTTtRQUN2QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUMvRixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILG1CQUFtQixDQUF1QixlQUFrQjtRQUMzRCw4REFBOEQ7UUFDOUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUMvRCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQTtZQUN4QixJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQTtZQUNyQixDQUFDO2lCQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUMzQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtZQUNqQixDQUFDO1lBRUQsT0FBTyxHQUFHLENBQUE7UUFDWCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDUCxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC5jbG9uZWRlZXAnXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJ1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgT2JqZWN0VHlwZSA9IFJlY29yZDxzdHJpbmcsIGFueT5cblxuZXhwb3J0IGNsYXNzIE9iamVjdFV0aWwge1xuXHQvKipcblx0ICogRGVlcCBjbG9uZSBvYmplY3QuIFJldHVybmVkIG9iamVjdCB3aWxsIGhhdmUgbm8gcmVmZXJlbmNlcyB0byB0aGUgb2JqZWN0IHBhc3NlZCB0aHJvdWdoIHBhcmFtc1xuXHQgKiBAdGVtcGxhdGUgVFxuXHQgKiBAcGFyYW0ge1R9IG9iamVjdFRvQ2xvbmVcblx0ICogQHJldHVybiB7VH1cblx0ICovXG5cdGRlZXBDbG9uZTxUIGV4dGVuZHMgT2JqZWN0VHlwZT4ob2JqZWN0VG9DbG9uZTogVCk6IFQge1xuXHRcdHJldHVybiBjbG9uZURlZXAob2JqZWN0VG9DbG9uZSlcblx0fVxuXG5cdC8qKlxuXHQgKiBQaWNrIG9ubHkgcHJvcGVydGllcyBmcm9tIHRoZSBwcm9wZXJ0eSBsaXN0LiBJdCBpcyBvbmx5IGFsbG93ZWQgdG8gcGljayBwcm9wZXJ0aWVzIGZyb20gdGhlIGZpcnN0IGxldmVsXG5cdCAqIEB0ZW1wbGF0ZSBUXG5cdCAqIEB0ZW1wbGF0ZSBMXG5cdCAqIEBwYXJhbSB7VH0gb2JqXG5cdCAqIEBwYXJhbSB7TFtdfSBrZXlMaXN0XG5cdCAqIEByZXR1cm4ge1BpY2s8VCwgTD59XG5cdCAqL1xuXHRwaWNrQnlMaXN0PFQgZXh0ZW5kcyBvYmplY3QsIEwgZXh0ZW5kcyBrZXlvZiBUPihvYmo6IFQsIGtleUxpc3Q6IChMIHwgc3RyaW5nKVtdKTogUGljazxULCBMPiB7XG5cdFx0cmV0dXJuIGtleUxpc3QucmVkdWNlKFxuXHRcdFx0KHBpY2tlZE9iaiwga2V5KSA9PiB7XG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG5cdFx0XHRcdFx0cGlja2VkT2JqW2tleSBhcyBMXSA9IG9ialtrZXkgYXMgTF1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBwaWNrZWRPYmpcblx0XHRcdH0sXG5cdFx0XHR7fSBhcyBQaWNrPFQsIEw+XG5cdFx0KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItcmVkdWNlLXR5cGUtcGFyYW1ldGVyXG5cdH1cblxuXHQvKipcblx0ICogUGljayBvYmplY3RzIHByb3BlcnRpZXMgdXNpbmcga2V5cyBmcm9tIHRoZSBzZWNvbmQgb2JqZWN0LlxuXHQgKiBAdGVtcGxhdGUgVFxuXHQgKiBAdGVtcGxhdGUgTFxuXHQgKiBAcGFyYW0ge1R9IG9ialxuXHQgKiBAcGFyYW0ge1BhcnRpYWw8VD59IG9ialdpdGhQaWNrS2V5c1xuXHQgKiBAcmV0dXJuIHtQaWNrPFQsIEw+fVxuXHQgKi9cblx0cGlja0J5T2JqZWN0S2V5czxUIGV4dGVuZHMgb2JqZWN0LCBMIGV4dGVuZHMga2V5b2YgVD4ob2JqOiBULCBvYmpXaXRoUGlja0tleXM6IFBhcnRpYWw8VD4gfCBPYmplY3RUeXBlKTogUGljazxULCBMPiB7XG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9ialdpdGhQaWNrS2V5cykgYXMgTFtdXG5cblx0XHRyZXR1cm4gdGhpcy5waWNrQnlMaXN0PFQsIEw+KG9iaiwga2V5cylcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZG8gc3RyaW5naWZ5IGRlZXBlciB0aGF0IEpTT04uc3RyaW5naWZ5LlxuXHQgKiBAcGFyYW0ge2FueX0gZW50aXR5IC0gZW50aXR5IHRoYW50IG5lZWRzIHRvIGJlIHN0cmluZ2lmeVxuXHQgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gYXZhaWxhYmxlIG9wdGlvbnNcblx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5pc1NvcnRhYmxlPWZhbHNlXSAtIGlmIG9iamVjdCBwcm9wZXJ0eSBzaG91bGQgYmUgc29ydGVkXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaXNQcmV0dHlQcmludGVkPWZhbHNlXSAtIGlmIG9iamVjdCBhbmQgYXJyYXkgcHJvcGVydGllcyBzaG91bGQgYmUgcHJpbnRlZCBpbiBhIG5ldyByb3dcblx0ICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnByZXR0eVByaW50Q29tcGFjdExldmVsPTBdIC0gaWYgcHJldHR5IHByaW50IGlzIG9uIGRlZmluZSB0aGUgbGV2ZWwgb2YgZGVlcGVzdCBjaGlsZHJlbiB0aGF0IGFyZSBub3Rcblx0ICogZ29pbmcgdG8gYmUgcHJldHR5LiBJdCBkb2Vzbid0IG1hdHRlciBpZiB0aGUgc2libGluZ3MgZG9lc24ndCBoYXZlIHRoZSBzYW1lIGRlcHRoLlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IC0gc3RydW5nIHJlc3VsdFxuXHQgKiBAZXhhbXBsZVxuXHQgKiBjb25zb2xlLmxvZyhuZXcgT2JqZWN0VXRpbCgpLmRlZXBTdHJpbmdpZnkobnVsbCkpIC8vICdudWxsJ1xuXHQgKiBjb25zb2xlLmxvZyhuZXcgT2JqZWN0VXRpbCgpLmRlZXBTdHJpbmdpZnkodW5kZWZpbmVkKSkgLy8gJ3VuZGVmaW5lZCdcblx0ICogY29uc29sZS5sb2cobmV3IE9iamVjdFV0aWwoKS5kZWVwU3RyaW5naWZ5KHsgYTogMSB9KSkgLy8gJ3tcXG5cXHRhOiAxXFxufSdcblx0ICogLy8gYHtcblx0ICogLy8gICBhOjFcblx0ICogLy8gfWBcblx0ICogY29uc29sZS5sb2cobmV3IE9iamVjdFV0aWwoKS5kZWVwU3RyaW5naWZ5KHsgYjogMSwgYTogMiB9LCB7aXNTb3J0ZWQ6dHJ1ZSwgY29tcGFjdDogdHJ1ZX0pKSAvLyB7IGE6IDIsIGI6IDEgfVxuXHQgKi9cblx0ZGVlcFN0cmluZ2lmeShcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRcdGVudGl0eTogYW55LFxuXHRcdG9wdGlvbnM/OiB7IGlzU29ydGVkPzogYm9vbGVhbjsgaXNQcmV0dHlQcmludGVkPzogYm9vbGVhbjsgcHJldHR5UHJpbnRDb21wYWN0TGV2ZWw/OiBudW1iZXIgfVxuXHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHsgaXNTb3J0ZWQgPSBmYWxzZSwgaXNQcmV0dHlQcmludGVkID0gZmFsc2UsIHByZXR0eVByaW50Q29tcGFjdExldmVsID0gMCB9ID0gb3B0aW9ucyA/PyB7fVxuXG5cdFx0Y29uc3QgY29tcGFjdCA9IHRoaXMuX2RlZXBTdHJpbmdpZnlDb21wYWN0KHsgaXNQcmV0dHlQcmludGVkLCBwcmV0dHlQcmludENvbXBhY3RMZXZlbCB9KVxuXG5cdFx0cmV0dXJuIHV0aWwuaW5zcGVjdChlbnRpdHksIHtcblx0XHRcdGJyZWFrTGVuZ3RoOiBJbmZpbml0eSxcblx0XHRcdGNvbXBhY3QsXG5cdFx0XHRkZXB0aDogSW5maW5pdHksXG5cdFx0XHRtYXhBcnJheUxlbmd0aDogSW5maW5pdHksXG5cdFx0XHRtYXhTdHJpbmdMZW5ndGg6IEluZmluaXR5LFxuXHRcdFx0c29ydGVkOiBpc1NvcnRlZCxcblx0XHR9KVxuXHR9XG5cblx0cHJvdGVjdGVkIF9kZWVwU3RyaW5naWZ5Q29tcGFjdChwYXJhbXM6IHsgaXNQcmV0dHlQcmludGVkOiBib29sZWFuOyBwcmV0dHlQcmludENvbXBhY3RMZXZlbDogbnVtYmVyIH0pOiBudW1iZXIgfCBib29sZWFuIHtcblx0XHRjb25zdCB7IGlzUHJldHR5UHJpbnRlZCwgcHJldHR5UHJpbnRDb21wYWN0TGV2ZWwgfSA9IHBhcmFtc1xuXG5cdFx0aWYgKCFpc1ByZXR0eVByaW50ZWQpIHtcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByZXR0eVByaW50Q29tcGFjdExldmVsXG5cdH1cblxuXHQvKipcblx0ICogV2UgYXJlIGNvbnZlcnRpbmcgb2JqZWN0cyB0byBzdHJpbmcgKG9yIG51bGwgb3IgdW5kZWZpbmVkKSBhbmQgY29tcGFyaW5nIGlmIHRoZSByZXN1bHQgaXMgZXF1YWxcblx0ICogQHBhcmFtIGFcblx0ICogQHBhcmFtIGJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdGRlZXBFcXVhbChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmRlZXBTdHJpbmdpZnkoYSwgeyBpc1NvcnRlZDogdHJ1ZSB9KSA9PT0gdGhpcy5kZWVwU3RyaW5naWZ5KGIsIHsgaXNTb3J0ZWQ6IHRydWUgfSlcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGNvbnZlcnQgYW55IG51bGwgdG8gdW5kZWZpbmVkIGluIHRoZSBvYmplY3QgdGhhdCBpcyBwYXNzZWQgdG8gaXQuXG5cdCAqIEB0ZW1wbGF0ZSBUXG5cdCAqIEBwYXJhbSB7VH0gb2JqZWN0V2l0aE51bGxzXG5cdCAqIEByZXR1cm4ge1R9XG5cdCAqIEBleGFtcGxlXG5cdCAqIGNvbnNvbGUubG9nKG5ldyBPYmplY3RVdGlsKCkuZGVlcE51bGxUb1VuZGVmaW5lZCh7IGE6IG51bGwsIGI6IHsgYzogbnVsbCB9IH0pKSAvLyB7IGE6IHVuZGVmaW5lZCwgYjogeyBjOiB1bmRlZmluZWQgfSB9XG5cdCAqL1xuXHRkZWVwTnVsbFRvVW5kZWZpbmVkPFQgZXh0ZW5kcyBPYmplY3RUeXBlPihvYmplY3RXaXRoTnVsbHM6IFQpOiBUIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRcdHJldHVybiBPYmplY3QuZW50cmllcyhvYmplY3RXaXRoTnVsbHMpLnJlZHVjZTxhbnk+KChhY2MsIGN1cikgPT4ge1xuXHRcdFx0Y29uc3QgW2tleSwgdmFsdWVdID0gY3VyXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0YWNjW2tleV0gPSB1bmRlZmluZWRcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcblx0XHRcdFx0YWNjW2tleV0gPSB0aGlzLmRlZXBOdWxsVG9VbmRlZmluZWQodmFsdWUpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhY2Nba2V5XSA9IHZhbHVlXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBhY2Ncblx0XHR9LCB7fSlcblx0fVxufVxuIl19
@@ -0,0 +1,12 @@
1
+ export const regexUtil = {
2
+ /**
3
+ * This is a UUID regex expression. This is usually used in express router to constrict the values passed as a path parameter (if you are using UUID as your identifier).
4
+ * @return {string}
5
+ * @example
6
+ * const { uuid } = regexUtil
7
+ * router.route(`/users/:userId(${uuid})`).get(getUsersById)
8
+ * //...
9
+ */
10
+ uuid: `\\b[0-9a-f]{8}\\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\\b[0-9a-f]{12}\\b`,
11
+ };
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnZXgtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWdleC11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRztJQUN4Qjs7Ozs7OztPQU9HO0lBQ0gsSUFBSSxFQUFFLDBFQUFtRjtDQUN6RixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHJlZ2V4VXRpbCA9IHtcblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBVVUlEIHJlZ2V4IGV4cHJlc3Npb24uIFRoaXMgaXMgdXN1YWxseSB1c2VkIGluIGV4cHJlc3Mgcm91dGVyIHRvIGNvbnN0cmljdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhIHBhdGggcGFyYW1ldGVyIChpZiB5b3UgYXJlIHVzaW5nIFVVSUQgYXMgeW91ciBpZGVudGlmaWVyKS5cblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAZXhhbXBsZVxuXHQgKiBjb25zdCB7IHV1aWQgfSA9IHJlZ2V4VXRpbFxuXHQgKiByb3V0ZXIucm91dGUoYC91c2Vycy86dXNlcklkKCR7dXVpZH0pYCkuZ2V0KGdldFVzZXJzQnlJZClcblx0ICogLy8uLi5cblx0ICovXG5cdHV1aWQ6IGBcXFxcYlswLTlhLWZdezh9XFxcXGItWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tXFxcXGJbMC05YS1mXXsxMn1cXFxcYmAgYXMgY29uc3QsXG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { AnyFunctionPromiseNoParams } from './types/any-function/promise-no-params';
1
+ export type AnyFunctionPromiseNoParams<T> = () => Promise<T>;
2
2
  /**
3
3
  * SingleThresholdPromise returns a single promise, and subsequent calls made before the promise resolves will return the same promise.
4
4
  * @example
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single-threshold-promise.d.ts","sourceRoot":"","sources":["../src/single-threshold-promise.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;AAE5D;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,sBAAsB,CAAC,CAAC;IACpC,SAAS,CAAC,MAAM,EAAE;QAEjB,QAAQ,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;YAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;SAAE,EAAE,CAAA;KAC7F,CAAK;IAEN,SAAS,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAA;gBAEvC,SAAS,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAIpD,SAAS,CAAC,eAAe,IAAI,IAAI;IAO3B,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC;CAkB3B"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * SingleThresholdPromise returns a single promise, and subsequent calls made before the promise resolves will return the same promise.
3
+ * @example
4
+ * export const refreshTokenSingleThreshold = new SingleThresholdPromise(async () => {
5
+ * const oldRefreshToken = await refreshTokenService.get()
6
+ * const { accessToken, refreshToken } = await authService.refreshToken({
7
+ * refreshToken: oldRefreshToken,
8
+ * })
9
+ * return { accessToken, refreshToken }
10
+ * })
11
+ *
12
+ * export const authService = {
13
+ * refreshToken: async (): Promise<{ accessToken: string; refreshToken:string }> => {
14
+ * return refreshTokenSingleThreshold.promise()
15
+ * }
16
+ * }
17
+ */
18
+ export class SingleThresholdPromise {
19
+ _cache = {};
20
+ _factoryFn;
21
+ constructor(factoryFn) {
22
+ this._factoryFn = factoryFn;
23
+ }
24
+ _rejectPromises() {
25
+ if (this._cache.promises) {
26
+ this._cache.promises.forEach((promise) => promise.reject(new Error('Cache was cleaned')));
27
+ }
28
+ delete this._cache.promises;
29
+ }
30
+ async promise() {
31
+ if ('promises' in this._cache) {
32
+ return new Promise((resolve, reject) => {
33
+ this._cache.promises.push({ reject, resolve });
34
+ });
35
+ }
36
+ this._cache.promises = [];
37
+ const result = await this._factoryFn().catch((err) => {
38
+ this._rejectPromises();
39
+ throw err;
40
+ });
41
+ this._cache.promises.forEach((promise) => promise.resolve(result));
42
+ delete this._cache.promises;
43
+ return result;
44
+ }
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXRocmVzaG9sZC1wcm9taXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NpbmdsZS10aHJlc2hvbGQtcHJvbWlzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFDeEIsTUFBTSxHQUdaLEVBQUUsQ0FBQTtJQUVJLFVBQVUsQ0FBK0I7SUFFbkQsWUFBWSxTQUF3QztRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtJQUM1QixDQUFDO0lBRVMsZUFBZTtRQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzFGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFBO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNaLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksT0FBTyxDQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUNoRCxDQUFDLENBQUMsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFDekIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDcEQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1lBQ3RCLE1BQU0sR0FBRyxDQUFBO1FBQ1YsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNsRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFBO1FBRTNCLE9BQU8sTUFBTSxDQUFBO0lBQ2QsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQW55RnVuY3Rpb25Qcm9taXNlTm9QYXJhbXM8VD4gPSAoKSA9PiBQcm9taXNlPFQ+XG5cbi8qKlxuICogU2luZ2xlVGhyZXNob2xkUHJvbWlzZSByZXR1cm5zIGEgc2luZ2xlIHByb21pc2UsIGFuZCBzdWJzZXF1ZW50IGNhbGxzIG1hZGUgYmVmb3JlIHRoZSBwcm9taXNlIHJlc29sdmVzIHdpbGwgcmV0dXJuIHRoZSBzYW1lIHByb21pc2UuXG4gKiBAZXhhbXBsZVxuICogZXhwb3J0IGNvbnN0IHJlZnJlc2hUb2tlblNpbmdsZVRocmVzaG9sZCA9IG5ldyBTaW5nbGVUaHJlc2hvbGRQcm9taXNlKGFzeW5jICgpID0+IHtcbiAqICAgY29uc3Qgb2xkUmVmcmVzaFRva2VuID0gYXdhaXQgcmVmcmVzaFRva2VuU2VydmljZS5nZXQoKVxuICogICBjb25zdCB7IGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4gfSA9IGF3YWl0IGF1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbih7XG4gKiAgICAgcmVmcmVzaFRva2VuOiBvbGRSZWZyZXNoVG9rZW4sXG4gKiAgIH0pXG4gKiAgIHJldHVybiB7IGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4gfVxuICogfSlcbiAqXG4gKiBleHBvcnQgY29uc3QgYXV0aFNlcnZpY2UgPSB7XG4gKiAgIHJlZnJlc2hUb2tlbjogYXN5bmMgKCk6IFByb21pc2U8eyBhY2Nlc3NUb2tlbjogc3RyaW5nOyByZWZyZXNoVG9rZW46c3RyaW5nIH0+ID0+IHtcbiAqICAgICByZXR1cm4gcmVmcmVzaFRva2VuU2luZ2xlVGhyZXNob2xkLnByb21pc2UoKVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjbGFzcyBTaW5nbGVUaHJlc2hvbGRQcm9taXNlPFQ+IHtcblx0cHJvdGVjdGVkIF9jYWNoZToge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0cHJvbWlzZXM/OiB7IHJlc29sdmU6ICh2YWx1ZTogVCB8IFByb21pc2VMaWtlPFQ+KSA9PiB2b2lkOyByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQgfVtdXG5cdH0gPSB7fVxuXG5cdHByb3RlY3RlZCBfZmFjdG9yeUZuOiBBbnlGdW5jdGlvblByb21pc2VOb1BhcmFtczxUPlxuXG5cdGNvbnN0cnVjdG9yKGZhY3RvcnlGbjogQW55RnVuY3Rpb25Qcm9taXNlTm9QYXJhbXM8VD4pIHtcblx0XHR0aGlzLl9mYWN0b3J5Rm4gPSBmYWN0b3J5Rm5cblx0fVxuXG5cdHByb3RlY3RlZCBfcmVqZWN0UHJvbWlzZXMoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2NhY2hlLnByb21pc2VzKSB7XG5cdFx0XHR0aGlzLl9jYWNoZS5wcm9taXNlcy5mb3JFYWNoKChwcm9taXNlKSA9PiBwcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ0NhY2hlIHdhcyBjbGVhbmVkJykpKVxuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5fY2FjaGUucHJvbWlzZXNcblx0fVxuXG5cdGFzeW5jIHByb21pc2UoKTogUHJvbWlzZTxUPiB7XG5cdFx0aWYgKCdwcm9taXNlcycgaW4gdGhpcy5fY2FjaGUpIHtcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdHRoaXMuX2NhY2hlLnByb21pc2VzIS5wdXNoKHsgcmVqZWN0LCByZXNvbHZlIH0pXG5cdFx0XHR9KVxuXHRcdH1cblxuXHRcdHRoaXMuX2NhY2hlLnByb21pc2VzID0gW11cblx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9mYWN0b3J5Rm4oKS5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHR0aGlzLl9yZWplY3RQcm9taXNlcygpXG5cdFx0XHR0aHJvdyBlcnJcblx0XHR9KVxuXG5cdFx0dGhpcy5fY2FjaGUucHJvbWlzZXMuZm9yRWFjaCgocHJvbWlzZSkgPT4gcHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkpXG5cdFx0ZGVsZXRlIHRoaXMuX2NhY2hlLnByb21pc2VzXG5cblx0XHRyZXR1cm4gcmVzdWx0XG5cdH1cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { AnyFunctionPromiseNoParams } from '../types/any-function/promise-no-params';
1
+ export type AnyFunctionPromiseNoParams<T> = () => Promise<T>;
2
2
  /**
3
3
  * This is a singleton wrapper that is used to wrap around async function. We have additional functionality to clear the cache
4
4
  * and reject any subscriptions to initial promise. And we can also check if there is anything i cache
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/singleton/async.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;AAE5D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,cAAc,CAAC,CAAC;IAC5B,SAAS,CAAC,MAAM,EAAE;QACjB,SAAS,CAAC,EAAE,CAAC,CAAA;QAEb,QAAQ,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;YAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;SAAE,EAAE,CAAA;KAC7F,CAAK;IAEN,SAAS,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAA;gBAErC,OAAO,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAIlD;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI;IASzD;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC;IAuB3B;;;;OAIG;IACH,MAAM,IAAI,CAAC,GAAG,SAAS;CAOvB"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * This is a singleton wrapper that is used to wrap around async function. We have additional functionality to clear the cache
3
+ * and reject any subscriptions to initial promise. And we can also check if there is anything i cache
4
+ * @example
5
+ * export const configSingleton = new SingletonAsync(async () => {
6
+ * await timeout(3000)
7
+ * return {
8
+ * env: process.env.NODE_ENV
9
+ * } as const
10
+ * })
11
+ *
12
+ * // using
13
+ * // cache value before we call promise
14
+ * console.log(configSingleton().cache()) // undefined
15
+ * console.log('NODE_ENV: ', await configSingleton().promise().env) // NODE_ENV: prod
16
+ * // cache value after we call promise
17
+ * console.log(configSingleton().cache()) // { env: 'prod' }
18
+ */
19
+ export class SingletonAsync {
20
+ _cache = {};
21
+ _factory;
22
+ constructor(factory) {
23
+ this._factory = factory;
24
+ }
25
+ /**
26
+ * Empty cached value and reject any subscribed promise that is waiting for the initial promise to be resolved.
27
+ */
28
+ cleanCache() {
29
+ delete this._cache.singleton;
30
+ this._rejectPromises({ error: new Error('Cache was cleaned') });
31
+ }
32
+ _rejectPromises(params) {
33
+ const { error } = params;
34
+ if (this._cache.promises) {
35
+ this._cache.promises.forEach((promise) => promise.reject(error));
36
+ }
37
+ delete this._cache.promises;
38
+ }
39
+ /**
40
+ * Return singleton value in a promise. If there is no cached value then try to get it from factory.
41
+ * @template T
42
+ * @returns {Promise<T>}
43
+ */
44
+ async promise() {
45
+ if ('singleton' in this._cache) {
46
+ return this._cache.singleton;
47
+ }
48
+ if ('promises' in this._cache) {
49
+ return new Promise((resolve, reject) => {
50
+ this._cache.promises.push({ reject, resolve });
51
+ });
52
+ }
53
+ this._cache.promises = [];
54
+ const result = await this._factory().catch((error) => {
55
+ this._rejectPromises({ error });
56
+ throw error;
57
+ });
58
+ this._cache.singleton = result;
59
+ this._cache.promises.forEach((promise) => promise.resolve(result));
60
+ delete this._cache.promises;
61
+ return result;
62
+ }
63
+ /**
64
+ * Return cached value, if there is no value cached return undefined.
65
+ * @template T
66
+ * @returns {T | undefined}
67
+ */
68
+ cached() {
69
+ if ('singleton' in this._cache) {
70
+ return this._cache.singleton;
71
+ }
72
+ return undefined;
73
+ }
74
+ }
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2luZ2xldG9uL2FzeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBQ2hCLE1BQU0sR0FJWixFQUFFLENBQUE7SUFFSSxRQUFRLENBQStCO0lBRWpELFlBQVksT0FBc0M7UUFDakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUE7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNULE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUE7UUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRVMsZUFBZSxDQUFDLE1BQXdCO1FBQ2pELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUE7UUFFeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ2pFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFBO0lBQzVCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWixJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVUsQ0FBQTtRQUM5QixDQUFDO1FBQ0QsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxPQUFPLENBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1lBQ2hELENBQUMsQ0FBQyxDQUFBO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNwRCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtZQUMvQixNQUFNLEtBQUssQ0FBQTtRQUNaLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFBO1FBRTlCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUE7UUFFM0IsT0FBTyxNQUFNLENBQUE7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU07UUFDTCxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVUsQ0FBQTtRQUM5QixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDakIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQW55RnVuY3Rpb25Qcm9taXNlTm9QYXJhbXM8VD4gPSAoKSA9PiBQcm9taXNlPFQ+XG5cbi8qKlxuICogVGhpcyBpcyBhIHNpbmdsZXRvbiB3cmFwcGVyIHRoYXQgaXMgdXNlZCB0byB3cmFwIGFyb3VuZCBhc3luYyBmdW5jdGlvbi4gV2UgaGF2ZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgdG8gY2xlYXIgdGhlIGNhY2hlXG4gKiBhbmQgcmVqZWN0IGFueSBzdWJzY3JpcHRpb25zIHRvIGluaXRpYWwgcHJvbWlzZS4gQW5kIHdlIGNhbiBhbHNvIGNoZWNrIGlmIHRoZXJlIGlzIGFueXRoaW5nIGkgY2FjaGVcbiAqIEBleGFtcGxlXG4gKiBleHBvcnQgY29uc3QgY29uZmlnU2luZ2xldG9uID0gbmV3IFNpbmdsZXRvbkFzeW5jKGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgdGltZW91dCgzMDAwKVxuICogICByZXR1cm4ge1xuICogICAgIGVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlZcbiAqICAgfSBhcyBjb25zdFxuICogfSlcbiAqXG4gKiAvLyB1c2luZ1xuICogLy8gY2FjaGUgdmFsdWUgYmVmb3JlIHdlIGNhbGwgcHJvbWlzZVxuICogY29uc29sZS5sb2coY29uZmlnU2luZ2xldG9uKCkuY2FjaGUoKSkgLy8gdW5kZWZpbmVkXG4gKiBjb25zb2xlLmxvZygnTk9ERV9FTlY6ICcsIGF3YWl0IGNvbmZpZ1NpbmdsZXRvbigpLnByb21pc2UoKS5lbnYpIC8vIE5PREVfRU5WOiBwcm9kXG4gKiAvLyBjYWNoZSB2YWx1ZSBhZnRlciB3ZSBjYWxsIHByb21pc2VcbiAqIGNvbnNvbGUubG9nKGNvbmZpZ1NpbmdsZXRvbigpLmNhY2hlKCkpIC8vIHsgZW52OiAncHJvZCcgfVxuICovXG5leHBvcnQgY2xhc3MgU2luZ2xldG9uQXN5bmM8VD4ge1xuXHRwcm90ZWN0ZWQgX2NhY2hlOiB7XG5cdFx0c2luZ2xldG9uPzogVFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0cHJvbWlzZXM/OiB7IHJlc29sdmU6ICh2YWx1ZTogVCB8IFByb21pc2VMaWtlPFQ+KSA9PiB2b2lkOyByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQgfVtdXG5cdH0gPSB7fVxuXG5cdHByb3RlY3RlZCBfZmFjdG9yeTogQW55RnVuY3Rpb25Qcm9taXNlTm9QYXJhbXM8VD5cblxuXHRjb25zdHJ1Y3RvcihmYWN0b3J5OiBBbnlGdW5jdGlvblByb21pc2VOb1BhcmFtczxUPikge1xuXHRcdHRoaXMuX2ZhY3RvcnkgPSBmYWN0b3J5XG5cdH1cblxuXHQvKipcblx0ICogRW1wdHkgY2FjaGVkIHZhbHVlIGFuZCByZWplY3QgYW55IHN1YnNjcmliZWQgcHJvbWlzZSB0aGF0IGlzIHdhaXRpbmcgZm9yIHRoZSBpbml0aWFsIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQuXG5cdCAqL1xuXHRjbGVhbkNhY2hlKCk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLl9jYWNoZS5zaW5nbGV0b25cblx0XHR0aGlzLl9yZWplY3RQcm9taXNlcyh7IGVycm9yOiBuZXcgRXJyb3IoJ0NhY2hlIHdhcyBjbGVhbmVkJykgfSlcblx0fVxuXG5cdHByb3RlY3RlZCBfcmVqZWN0UHJvbWlzZXMocGFyYW1zOiB7IGVycm9yOiBFcnJvciB9KTogdm9pZCB7XG5cdFx0Y29uc3QgeyBlcnJvciB9ID0gcGFyYW1zXG5cblx0XHRpZiAodGhpcy5fY2FjaGUucHJvbWlzZXMpIHtcblx0XHRcdHRoaXMuX2NhY2hlLnByb21pc2VzLmZvckVhY2goKHByb21pc2UpID0+IHByb21pc2UucmVqZWN0KGVycm9yKSlcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuX2NhY2hlLnByb21pc2VzXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJuIHNpbmdsZXRvbiB2YWx1ZSBpbiBhIHByb21pc2UuIElmIHRoZXJlIGlzIG5vIGNhY2hlZCB2YWx1ZSB0aGVuIHRyeSB0byBnZXQgaXQgZnJvbSBmYWN0b3J5LlxuXHQgKiBAdGVtcGxhdGUgVFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxUPn1cblx0ICovXG5cdGFzeW5jIHByb21pc2UoKTogUHJvbWlzZTxUPiB7XG5cdFx0aWYgKCdzaW5nbGV0b24nIGluIHRoaXMuX2NhY2hlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FjaGUuc2luZ2xldG9uIVxuXHRcdH1cblx0XHRpZiAoJ3Byb21pc2VzJyBpbiB0aGlzLl9jYWNoZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0dGhpcy5fY2FjaGUucHJvbWlzZXMhLnB1c2goeyByZWplY3QsIHJlc29sdmUgfSlcblx0XHRcdH0pXG5cdFx0fVxuXG5cdFx0dGhpcy5fY2FjaGUucHJvbWlzZXMgPSBbXVxuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2ZhY3RvcnkoKS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdHRoaXMuX3JlamVjdFByb21pc2VzKHsgZXJyb3IgfSlcblx0XHRcdHRocm93IGVycm9yXG5cdFx0fSlcblx0XHR0aGlzLl9jYWNoZS5zaW5nbGV0b24gPSByZXN1bHRcblxuXHRcdHRoaXMuX2NhY2hlLnByb21pc2VzLmZvckVhY2goKHByb21pc2UpID0+IHByb21pc2UucmVzb2x2ZShyZXN1bHQpKVxuXHRcdGRlbGV0ZSB0aGlzLl9jYWNoZS5wcm9taXNlc1xuXG5cdFx0cmV0dXJuIHJlc3VsdFxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybiBjYWNoZWQgdmFsdWUsIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGNhY2hlZCByZXR1cm4gdW5kZWZpbmVkLlxuXHQgKiBAdGVtcGxhdGUgVFxuXHQgKiBAcmV0dXJucyB7VCB8IHVuZGVmaW5lZH1cblx0ICovXG5cdGNhY2hlZCgpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoJ3NpbmdsZXRvbicgaW4gdGhpcy5fY2FjaGUpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWNoZS5zaW5nbGV0b24hXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { AnyFunctionNoParams } from '../types/any-function/no-params';
1
+ export type AnyFunctionNoParams<T> = () => T;
2
2
  /**
3
3
  * Singleton patter wrapper function
4
4
  * @param {AnyFunctionNoParams<R>} factoryFn Factory function that is used to generate value that is going to be cached and return by
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/singleton/pattern.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,MAAM,CAAC,CAAA;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,gBAAgB,iBAAkB,oBAAoB,CAAC,CAAC,KAAG,oBAAoB,CAAC,CAU5F,CAAA"}