@koala-ts/framework 2.7.1 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/Application/ApplicationFactory.js.map +1 -1
  2. package/dist/Security/index.d.ts +1 -0
  3. package/dist/Security/index.d.ts.map +1 -1
  4. package/dist/Security/index.js +1 -0
  5. package/dist/Security/index.js.map +1 -1
  6. package/dist/Security/password/index.d.ts +3 -0
  7. package/dist/Security/password/index.d.ts.map +1 -0
  8. package/dist/Security/password/index.js +3 -0
  9. package/dist/Security/password/index.js.map +1 -0
  10. package/dist/Security/password/password.d.ts +3 -0
  11. package/dist/Security/password/password.d.ts.map +1 -0
  12. package/dist/Security/password/password.js +24 -0
  13. package/dist/Security/password/password.js.map +1 -0
  14. package/dist/Security/password/password.test.d.ts +2 -0
  15. package/dist/Security/password/password.test.d.ts.map +1 -0
  16. package/dist/Security/password/password.test.js +24 -0
  17. package/dist/Security/password/password.test.js.map +1 -0
  18. package/dist/Security/password/types.d.ts +14 -0
  19. package/dist/Security/password/types.d.ts.map +1 -0
  20. package/dist/Security/password/types.js +1 -0
  21. package/dist/Security/password/types.js.map +1 -0
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/serializer/index.d.ts +3 -0
  27. package/dist/serializer/index.d.ts.map +1 -0
  28. package/dist/serializer/index.js +3 -0
  29. package/dist/serializer/index.js.map +1 -0
  30. package/dist/serializer/normalizer/array-normalizer.d.ts +5 -0
  31. package/dist/serializer/normalizer/array-normalizer.d.ts.map +1 -0
  32. package/dist/serializer/normalizer/array-normalizer.js +9 -0
  33. package/dist/serializer/normalizer/array-normalizer.js.map +1 -0
  34. package/dist/serializer/normalizer/array-normalizer.test.d.ts +2 -0
  35. package/dist/serializer/normalizer/array-normalizer.test.d.ts.map +1 -0
  36. package/dist/serializer/normalizer/array-normalizer.test.js +21 -0
  37. package/dist/serializer/normalizer/array-normalizer.test.js.map +1 -0
  38. package/dist/serializer/normalizer/date-normalizer.d.ts +5 -0
  39. package/dist/serializer/normalizer/date-normalizer.d.ts.map +1 -0
  40. package/dist/serializer/normalizer/date-normalizer.js +7 -0
  41. package/dist/serializer/normalizer/date-normalizer.js.map +1 -0
  42. package/dist/serializer/normalizer/date-normalizer.test.d.ts +2 -0
  43. package/dist/serializer/normalizer/date-normalizer.test.d.ts.map +1 -0
  44. package/dist/serializer/normalizer/date-normalizer.test.js +23 -0
  45. package/dist/serializer/normalizer/date-normalizer.test.js.map +1 -0
  46. package/dist/serializer/normalizer/normalizer.d.ts +5 -0
  47. package/dist/serializer/normalizer/normalizer.d.ts.map +1 -0
  48. package/dist/serializer/normalizer/normalizer.js +22 -0
  49. package/dist/serializer/normalizer/normalizer.js.map +1 -0
  50. package/dist/serializer/normalizer/normalizer.test.d.ts +2 -0
  51. package/dist/serializer/normalizer/normalizer.test.d.ts.map +1 -0
  52. package/dist/serializer/normalizer/normalizer.test.js +24 -0
  53. package/dist/serializer/normalizer/normalizer.test.js.map +1 -0
  54. package/dist/serializer/normalizer/null-normalizer.d.ts +3 -0
  55. package/dist/serializer/normalizer/null-normalizer.d.ts.map +1 -0
  56. package/dist/serializer/normalizer/null-normalizer.js +6 -0
  57. package/dist/serializer/normalizer/null-normalizer.js.map +1 -0
  58. package/dist/serializer/normalizer/null-normalizer.test.d.ts +2 -0
  59. package/dist/serializer/normalizer/null-normalizer.test.d.ts.map +1 -0
  60. package/dist/serializer/normalizer/null-normalizer.test.js +18 -0
  61. package/dist/serializer/normalizer/null-normalizer.test.js.map +1 -0
  62. package/dist/serializer/normalizer/record-normalizer.d.ts +5 -0
  63. package/dist/serializer/normalizer/record-normalizer.d.ts.map +1 -0
  64. package/dist/serializer/normalizer/record-normalizer.js +25 -0
  65. package/dist/serializer/normalizer/record-normalizer.js.map +1 -0
  66. package/dist/serializer/normalizer/record-normalizer.test.d.ts +2 -0
  67. package/dist/serializer/normalizer/record-normalizer.test.d.ts.map +1 -0
  68. package/dist/serializer/normalizer/record-normalizer.test.js +72 -0
  69. package/dist/serializer/normalizer/record-normalizer.test.js.map +1 -0
  70. package/dist/serializer/normalizer/types.d.ts +16 -0
  71. package/dist/serializer/normalizer/types.d.ts.map +1 -0
  72. package/dist/serializer/normalizer/types.js +1 -0
  73. package/dist/serializer/normalizer/types.js.map +1 -0
  74. package/package.json +4 -5
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationFactory.js","sourceRoot":"","sources":["../../src/Application/ApplicationFactory.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,GAAgE,MAAM,KAAK,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAwB,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,UAAU,MAAM,CAAC,MAAmB;IACxC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiB,CAAC;IACrC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC;IAExB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEpB,IAAI,SAAS,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1C,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAE9C,kBAAkB;IAClB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAEjC,IAAI,SAAS,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1C,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAE5B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,EAAE,CAAC;QAChC,MAAM,eAAe,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAE7D,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YAC7G,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAI,eAA0E,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAgB,EAAE,UAA4B;IAC9E,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAgB,EAAE,GAAwD;IAC1G,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,KAAK,MAAM,UAAU,IAAI,WAAW;gBAAE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,UAAqD,CAAC,CAAC;YAC3G,SAAS;QACX,CAAC;QAED,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,WAAsD,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ApplicationFactory.js","sourceRoot":"","sources":["../../src/Application/ApplicationFactory.ts"],"names":[],"mappings":"AAAA,OAAO,MAA+B,MAAM,aAAa,CAAC;AAC1D,OAAO,GAAgE,MAAM,KAAK,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAwB,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,UAAU,MAAM,CAAC,MAAmB;IACxC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiB,CAAC;IACrC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC;IAExB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEpB,IAAI,SAAS,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1C,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAE9C,kBAAkB;IAClB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAEjC,IAAI,SAAS,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1C,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAE5B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,EAAE,CAAC;QAChC,MAAM,eAAe,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAE7D,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YAC7G,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAI,eAA0E,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAgB,EAAE,UAA4B;IAC9E,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAgB,EAAE,GAAwD;IAC1G,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,KAAK,MAAM,UAAU,IAAI,WAAW;gBAAE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,UAAqD,CAAC,CAAC;YAC3G,SAAS;QACX,CAAC;QAED,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,WAAsD,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './types.js';
2
2
  export * from './firewall/firewall-middleware.js';
3
+ export * from './password/index.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Security/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Security/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,gCAAgC,CAAC;AAC/C,cAAc,YAAY,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './types.js';
2
2
  export * from './firewall/firewall-middleware.js';
3
+ export * from './password/index.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Security/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Security/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,gCAAgC,CAAC;AAC/C,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './types.js';
2
+ export * from './password.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Security/password/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './types.js';
2
+ export * from './password.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Security/password/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type PasswordConfig, type PasswordHasher } from '../../Security/password/types.js';
2
+ export declare function createPasswordHasher(config?: PasswordConfig): PasswordHasher;
3
+ //# sourceMappingURL=password.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/Security/password/password.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAoBrF,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,cAAc,CAM5E"}
@@ -0,0 +1,24 @@
1
+ import { hash as _hash, needsRehash as _needsRehash, verify as _verify } from 'argon2';
2
+ function hash(config) {
3
+ return function (plainPassword) {
4
+ return _hash(plainPassword, config);
5
+ };
6
+ }
7
+ function verify(config) {
8
+ return function (hashedPassword, plainPassword) {
9
+ return _verify(hashedPassword, plainPassword, config);
10
+ };
11
+ }
12
+ function needsRehash(config) {
13
+ return function (hashedPassword) {
14
+ return _needsRehash(hashedPassword, config);
15
+ };
16
+ }
17
+ export function createPasswordHasher(config) {
18
+ return {
19
+ hash: hash(config),
20
+ verify: verify(config),
21
+ needsRehash: needsRehash(config),
22
+ };
23
+ }
24
+ //# sourceMappingURL=password.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.js","sourceRoot":"","sources":["../../../src/Security/password/password.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,WAAW,IAAI,YAAY,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGvF,SAAS,IAAI,CAAC,MAAuB;IACnC,OAAO,UAAU,aAAqB;QACpC,OAAO,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,MAAuB;IACrC,OAAO,UAAU,cAAsB,EAAE,aAAqB;QAC5D,OAAO,OAAO,CAAC,cAAc,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB;IAC1C,OAAO,UAAU,cAAsB;QACrC,OAAO,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAuB;IAC1D,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC;KACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=password.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.test.d.ts","sourceRoot":"","sources":["../../../src/Security/password/password.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import { createPasswordHasher } from './password.js';
3
+ describe('createPasswordHasher', () => {
4
+ test('hash and verify password', async () => {
5
+ const hasher = createPasswordHasher({ timeCost: 1, memoryCost: 1024 });
6
+ const hashedPassword = await hasher.hash('mySecretPassword123');
7
+ expect(await hasher.verify(hashedPassword, 'mySecretPassword123')).toBeTruthy();
8
+ expect(await hasher.verify(hashedPassword, 'wrongPassword')).toBeFalsy();
9
+ });
10
+ test('it should detect needs rehash on changed config', async () => {
11
+ const originalHasher = createPasswordHasher({ timeCost: 1, memoryCost: 1024 });
12
+ const strongerHasher = createPasswordHasher({ timeCost: 2, memoryCost: 2048 });
13
+ const hashedPassword = await originalHasher.hash('mySecretPassword123');
14
+ expect(strongerHasher.needsRehash(hashedPassword)).toBeTruthy();
15
+ expect(originalHasher.needsRehash(hashedPassword)).toBeFalsy();
16
+ });
17
+ test('verify on changed config still works', async () => {
18
+ const originalHasher = createPasswordHasher({ timeCost: 1, memoryCost: 1024 });
19
+ const modifiedHasher = createPasswordHasher({ timeCost: 2, memoryCost: 2048 });
20
+ const hashedPassword = await originalHasher.hash('mySecretPassword123');
21
+ expect(await modifiedHasher.verify(hashedPassword, 'mySecretPassword123')).toBeTruthy();
22
+ });
23
+ });
24
+ //# sourceMappingURL=password.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.test.js","sourceRoot":"","sources":["../../../src/Security/password/password.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvE,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAEhE,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAChF,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAExE,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAChE,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAExE,MAAM,CAAC,MAAM,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface PasswordConfig {
2
+ hashLength?: number;
3
+ timeCost?: number;
4
+ memoryCost?: number;
5
+ parallelism?: number;
6
+ secret?: Buffer;
7
+ associatedData?: Buffer;
8
+ }
9
+ export interface PasswordHasher {
10
+ hash(plainPassword: string): Promise<string>;
11
+ verify(hashedPassword: string, plainPassword: string): Promise<boolean>;
12
+ needsRehash(hashedPassword: string): boolean;
13
+ }
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/Security/password/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAExE,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9C"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/Security/password/types.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -5,4 +5,5 @@ export * from './Kernel/index.js';
5
5
  export * from './Routing/index.js';
6
6
  export * from './Security/index.js';
7
7
  export * from './Testing/index.js';
8
+ export * from './serializer/index.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -5,4 +5,5 @@ export * from './Kernel/index.js';
5
5
  export * from './Routing/index.js';
6
6
  export * from './Security/index.js';
7
7
  export * from './Testing/index.js';
8
+ export * from './serializer/index.js';
8
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './normalizer/types.js';
2
+ export * from './normalizer/normalizer.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serializer/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './normalizer/types.js';
2
+ export * from './normalizer/normalizer.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serializer/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type NormalizedValue, type Normalizer } from '../../serializer/normalizer/types.js';
2
+ type Result = NormalizedValue | undefined;
3
+ export declare function createArrayNormalizer(normalize: Normalizer): Normalizer<unknown, Result>;
4
+ export {};
5
+ //# sourceMappingURL=array-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-normalizer.d.ts","sourceRoot":"","sources":["../../../src/serializer/normalizer/array-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAA0B,MAAM,+BAA+B,CAAC;AAE9G,KAAK,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;AAE1C,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAQxF"}
@@ -0,0 +1,9 @@
1
+ export function createArrayNormalizer(normalize) {
2
+ return function arrayNormalizer(value, context) {
3
+ if (Array.isArray(value)) {
4
+ return value.map(item => normalize(item, context));
5
+ }
6
+ return undefined;
7
+ };
8
+ }
9
+ //# sourceMappingURL=array-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-normalizer.js","sourceRoot":"","sources":["../../../src/serializer/normalizer/array-normalizer.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,qBAAqB,CAAC,SAAqB;IACzD,OAAO,SAAS,eAAe,CAAC,KAAc,EAAE,OAA2B;QACzE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=array-normalizer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-normalizer.test.d.ts","sourceRoot":"","sources":["../../../src/serializer/normalizer/array-normalizer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { createArrayNormalizer } from '../../serializer/normalizer/array-normalizer.js';
3
+ describe('Array normalizer', () => {
4
+ it('should normalize array recursively', () => {
5
+ const normalizer = vi.fn().mockImplementation((value) => value);
6
+ const arrayNormalizer = createArrayNormalizer(normalizer);
7
+ const input = [1, [2, 3], { a: 4 }];
8
+ const result = arrayNormalizer(input);
9
+ expect(result).toEqual([1, [2, 3], { a: 4 }]);
10
+ expect(normalizer).toHaveBeenCalledTimes(3);
11
+ });
12
+ it('should return undefined otherwise', () => {
13
+ const normalizer = vi.fn();
14
+ const arrayNormalizer = createArrayNormalizer(normalizer);
15
+ expect(arrayNormalizer(42)).toBeUndefined();
16
+ expect(arrayNormalizer('not an array')).toBeUndefined();
17
+ expect(arrayNormalizer({})).toBeUndefined();
18
+ expect(normalizer).not.toHaveBeenCalled();
19
+ });
20
+ });
21
+ //# sourceMappingURL=array-normalizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-normalizer.test.js","sourceRoot":"","sources":["../../../src/serializer/normalizer/array-normalizer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAEjF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,eAAe,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAEpC,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAE1D,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACxD,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type NormalizedValue, type Normalizer } from '../../serializer/normalizer/types.js';
2
+ type Result = NormalizedValue | undefined;
3
+ export declare const dateNormalizer: Normalizer<unknown, Result>;
4
+ export {};
5
+ //# sourceMappingURL=date-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-normalizer.d.ts","sourceRoot":"","sources":["../../../src/serializer/normalizer/date-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEtF,KAAK,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;AAE1C,eAAO,MAAM,cAAc,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAMtD,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const dateNormalizer = (date) => {
2
+ if (!(date instanceof Date) || isNaN(date.getTime())) {
3
+ return undefined;
4
+ }
5
+ return date.getTime();
6
+ };
7
+ //# sourceMappingURL=date-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-normalizer.js","sourceRoot":"","sources":["../../../src/serializer/normalizer/date-normalizer.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,cAAc,GAAgC,CAAC,IAAa,EAAU,EAAE;IACnF,IAAI,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACrD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;AACxB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=date-normalizer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-normalizer.test.d.ts","sourceRoot":"","sources":["../../../src/serializer/normalizer/date-normalizer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { dateNormalizer } from '../../serializer/normalizer/date-normalizer.js';
3
+ describe('Date normalizer', () => {
4
+ it('should normalize date to Unix Epoch time', () => {
5
+ const now = new Date();
6
+ const actual = dateNormalizer(now);
7
+ expect(actual).toBe(now.getTime());
8
+ });
9
+ it('should return undefined for invalid date', () => {
10
+ const invalidDate = new Date('invalid date string');
11
+ const actual = dateNormalizer(invalidDate);
12
+ expect(actual).toBeUndefined();
13
+ });
14
+ it('should return undefined for non-date input', () => {
15
+ expect(dateNormalizer('2023-01-01')).toBeUndefined();
16
+ expect(dateNormalizer(1672531200000)).toBeUndefined();
17
+ expect(dateNormalizer({})).toBeUndefined();
18
+ expect(dateNormalizer([])).toBeUndefined();
19
+ expect(dateNormalizer(null)).toBeUndefined();
20
+ expect(dateNormalizer(undefined)).toBeUndefined();
21
+ });
22
+ });
23
+ //# sourceMappingURL=date-normalizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-normalizer.test.js","sourceRoot":"","sources":["../../../src/serializer/normalizer/date-normalizer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAEzE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QAE3C,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACrD,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACtD,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type NormalizedValue, type Normalizer } from '../../serializer/normalizer/types.js';
2
+ type CustomNormalizer = Normalizer<unknown, NormalizedValue | undefined>;
3
+ export declare function createNormalizer(customNormalizer?: CustomNormalizer[]): Normalizer;
4
+ export {};
5
+ //# sourceMappingURL=normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.d.ts","sourceRoot":"","sources":["../../../src/serializer/normalizer/normalizer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAA0B,MAAM,+BAA+B,CAAC;AAE9G,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,CAAC,CAAC;AAEzE,wBAAgB,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAmBlF"}
@@ -0,0 +1,22 @@
1
+ import { createArrayNormalizer } from '../../serializer/normalizer/array-normalizer.js';
2
+ import { dateNormalizer } from '../../serializer/normalizer/date-normalizer.js';
3
+ import { nullNormalizer } from '../../serializer/normalizer/null-normalizer.js';
4
+ import { createRecordNormalizer } from '../../serializer/normalizer/record-normalizer.js';
5
+ export function createNormalizer(customNormalizer) {
6
+ return function normalize(value, context) {
7
+ const builtInNormalizers = [
8
+ nullNormalizer,
9
+ dateNormalizer,
10
+ createArrayNormalizer(normalize),
11
+ createRecordNormalizer(normalize),
12
+ ];
13
+ const normalizers = new Set([...(customNormalizer ?? []), ...builtInNormalizers]);
14
+ for (const normalizer of normalizers) {
15
+ const result = normalizer(value, context);
16
+ if (undefined !== result)
17
+ return result;
18
+ }
19
+ return value;
20
+ };
21
+ }
22
+ //# sourceMappingURL=normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.js","sourceRoot":"","sources":["../../../src/serializer/normalizer/normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAKnF,MAAM,UAAU,gBAAgB,CAAC,gBAAqC;IACpE,OAAO,SAAS,SAAS,CAAC,KAAc,EAAE,OAA2B;QACnE,MAAM,kBAAkB,GAAG;YACzB,cAAc;YACd,cAAc;YACd,qBAAqB,CAAC,SAAS,CAAC;YAChC,sBAAsB,CAAC,SAAS,CAAC;SAClC,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAmB,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC;QAEpG,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE1C,IAAI,SAAS,KAAK,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC1C,CAAC;QAED,OAAO,KAAwB,CAAC;IAClC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=normalizer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.test.d.ts","sourceRoot":"","sources":["../../../src/serializer/normalizer/normalizer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { createNormalizer } from '../../serializer/normalizer/normalizer.js';
3
+ describe('Normalizer', () => {
4
+ it('should normalize plain objects with context', () => {
5
+ const input = { id: 1, username: 'admin', c: true, age: undefined, roles: ['admin', 'user'] };
6
+ const normalizer = createNormalizer();
7
+ const result = normalizer(input, { metadata: { id: { ignore: true } } });
8
+ const expected = { username: 'admin', c: true, age: null, roles: ['admin', 'user'] };
9
+ expect(result).toEqual(expected);
10
+ });
11
+ it('should allow adding custom normalizers', () => {
12
+ const input = { id: 1, createdAt: new Date('2024-01-01T00:00:00Z') };
13
+ const customDateNormalizer = function (value) {
14
+ if (value instanceof Date)
15
+ return value.toISOString();
16
+ return undefined;
17
+ };
18
+ const normalizer = createNormalizer([customDateNormalizer]);
19
+ const result = normalizer(input);
20
+ const expected = { id: 1, createdAt: '2024-01-01T00:00:00.000Z' };
21
+ expect(result).toEqual(expected);
22
+ });
23
+ });
24
+ //# sourceMappingURL=normalizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.test.js","sourceRoot":"","sources":["../../../src/serializer/normalizer/normalizer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9F,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;QAEtC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzE,MAAM,QAAQ,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;QACrF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACrE,MAAM,oBAAoB,GAAG,UAAU,KAAc;YACnD,IAAI,KAAK,YAAY,IAAI;gBAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;YACtD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Normalizer } from '../../serializer/normalizer/types.js';
2
+ export declare const nullNormalizer: Normalizer<unknown, null | undefined>;
3
+ //# sourceMappingURL=null-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null-normalizer.d.ts","sourceRoot":"","sources":["../../../src/serializer/normalizer/null-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,eAAO,MAAM,cAAc,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,CAIhE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const nullNormalizer = function (input) {
2
+ if (undefined === input || null === input)
3
+ return null;
4
+ return undefined;
5
+ };
6
+ //# sourceMappingURL=null-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null-normalizer.js","sourceRoot":"","sources":["../../../src/serializer/normalizer/null-normalizer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAA0C,UAAU,KAAc;IAC3F,IAAI,SAAS,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAEvD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=null-normalizer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null-normalizer.test.d.ts","sourceRoot":"","sources":["../../../src/serializer/normalizer/null-normalizer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { nullNormalizer } from '../../serializer/normalizer/null-normalizer.js';
3
+ describe('Null normalizer', () => {
4
+ it('should normalize undefined to null', () => {
5
+ expect(nullNormalizer(undefined)).toBeNull();
6
+ });
7
+ it('should normalize null to null', () => {
8
+ expect(nullNormalizer(null)).toBeNull();
9
+ });
10
+ it('should return undefined otherwise', () => {
11
+ expect(nullNormalizer(0)).toBeUndefined();
12
+ expect(nullNormalizer('')).toBeUndefined();
13
+ expect(nullNormalizer(false)).toBeUndefined();
14
+ expect(nullNormalizer({})).toBeUndefined();
15
+ expect(nullNormalizer([])).toBeUndefined();
16
+ });
17
+ });
18
+ //# sourceMappingURL=null-normalizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null-normalizer.test.js","sourceRoot":"","sources":["../../../src/serializer/normalizer/null-normalizer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAEzE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type NormalizedRecord, type Normalizer } from '../../serializer/normalizer/types.js';
2
+ type Result = NormalizedRecord | undefined;
3
+ export declare function createRecordNormalizer(normalize: Normalizer): Normalizer<unknown, Result>;
4
+ export {};
5
+ //# sourceMappingURL=record-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-normalizer.d.ts","sourceRoot":"","sources":["../../../src/serializer/normalizer/record-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAA0B,MAAM,+BAA+B,CAAC;AAE/G,KAAK,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAE3C,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CA4BzF"}
@@ -0,0 +1,25 @@
1
+ export function createRecordNormalizer(normalize) {
2
+ return function recordNormalizer(value, context) {
3
+ if (typeof value !== 'object' || value === null || value instanceof Date || Array.isArray(value)) {
4
+ return undefined;
5
+ }
6
+ const obj = value;
7
+ const normalizedRecord = {};
8
+ const shouldHandleGroups = undefined !== context?.groups && context.groups.length > 0;
9
+ const activeGroups = new Set(context?.groups ?? []);
10
+ for (const [key, val] of Object.entries(obj)) {
11
+ const rule = context?.metadata?.[key];
12
+ if (rule?.ignore === true)
13
+ continue;
14
+ if (shouldHandleGroups) {
15
+ const propGroups = rule?.groups ?? [];
16
+ const hasMatchingGroup = propGroups.some(group => activeGroups.has(group));
17
+ if (!hasMatchingGroup)
18
+ continue;
19
+ }
20
+ normalizedRecord[rule?.serializedName ?? key] = normalize(val, context);
21
+ }
22
+ return normalizedRecord;
23
+ };
24
+ }
25
+ //# sourceMappingURL=record-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-normalizer.js","sourceRoot":"","sources":["../../../src/serializer/normalizer/record-normalizer.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,sBAAsB,CAAC,SAAqB;IAC1D,OAAO,SAAS,gBAAgB,CAAC,KAAc,EAAE,OAA2B;QAC1E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjG,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,MAAM,gBAAgB,GAAqB,EAAE,CAAC;QAE9C,MAAM,kBAAkB,GAAG,SAAS,KAAK,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACtF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;QAEpD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;YAEtC,IAAI,IAAI,EAAE,MAAM,KAAK,IAAI;gBAAE,SAAS;YAEpC,IAAI,kBAAkB,EAAE,CAAC;gBACvB,MAAM,UAAU,GAAG,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;gBACtC,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3E,IAAI,CAAC,gBAAgB;oBAAE,SAAS;YAClC,CAAC;YAED,gBAAgB,CAAC,IAAI,EAAE,cAAc,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=record-normalizer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-normalizer.test.d.ts","sourceRoot":"","sources":["../../../src/serializer/normalizer/record-normalizer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { createRecordNormalizer } from '../../serializer/normalizer/record-normalizer.js';
3
+ describe('Record normalizer', () => {
4
+ it('should return undefined for non records', () => {
5
+ const normalizer = vi.fn().mockImplementation((value) => value);
6
+ const recordNormalizer = createRecordNormalizer(normalizer);
7
+ expect(recordNormalizer(42)).toBeUndefined();
8
+ expect(recordNormalizer('not a record')).toBeUndefined();
9
+ expect(recordNormalizer([])).toBeUndefined();
10
+ expect(normalizer).not.toHaveBeenCalled();
11
+ });
12
+ it('should normalize object values recursively', () => {
13
+ const normalizer = vi.fn().mockImplementation((value) => value);
14
+ const recordNormalizer = createRecordNormalizer(normalizer);
15
+ const input = { a: 1, b: { c: 2 }, d: [3, 4] };
16
+ const result = recordNormalizer(input);
17
+ expect(result).toEqual({ a: 1, b: { c: 2 }, d: [3, 4] });
18
+ expect(normalizer).toHaveBeenCalledTimes(3);
19
+ });
20
+ it('should remove ignored properties', () => {
21
+ const normalizer = vi.fn().mockImplementation((value) => value);
22
+ const recordNormalizer = createRecordNormalizer(normalizer);
23
+ const input = { name: 'Alice', password: '123' };
24
+ const context = {
25
+ metadata: { password: { ignore: true } },
26
+ };
27
+ const result = recordNormalizer(input, context);
28
+ expect(result).toEqual({ name: 'Alice' });
29
+ });
30
+ it('should rename props based on metadata', () => {
31
+ const normalizer = vi.fn().mockImplementation((value) => value);
32
+ const input = { id: 1, name: 'Alice' };
33
+ const context = {
34
+ metadata: { id: { serializedName: 'userId' } },
35
+ };
36
+ const recordNormalizer = createRecordNormalizer(normalizer);
37
+ const result = recordNormalizer(input, context);
38
+ expect(result).toEqual({ userId: 1, name: 'Alice' });
39
+ });
40
+ it('should return empty map if no groups matched', () => {
41
+ const normalizer = vi.fn().mockImplementation((value) => value);
42
+ const input = { id: 1, firstName: 'John', lastName: 'Doe' };
43
+ const recordNormalizer = createRecordNormalizer(normalizer);
44
+ const result = recordNormalizer(input, { groups: ['public'] });
45
+ expect(result).toEqual({});
46
+ });
47
+ it('should return only props of target groups', () => {
48
+ const normalizer = vi.fn().mockImplementation((value) => value);
49
+ const input = { id: 1, firstName: 'John', lastName: 'Doe', password: 'secret' };
50
+ const props = {
51
+ id: { groups: ['read'] },
52
+ firstName: { groups: ['public'] },
53
+ lastName: { groups: ['public'] },
54
+ password: { groups: ['private'] },
55
+ };
56
+ const recordNormalizer = createRecordNormalizer(normalizer);
57
+ const result = recordNormalizer(input, { groups: ['public', 'read'], metadata: props });
58
+ expect(result).toEqual({ id: 1, firstName: 'John', lastName: 'Doe' });
59
+ });
60
+ it('should prioritize ignore over groups', () => {
61
+ const normalizer = vi.fn().mockImplementation((value) => value);
62
+ const input = { id: 1, firstName: 'John', lastName: 'Doe', password: 'secret' };
63
+ const props = {
64
+ id: { groups: ['public'] },
65
+ password: { groups: ['private'], ignore: true },
66
+ };
67
+ const recordNormalizer = createRecordNormalizer(normalizer);
68
+ const result = recordNormalizer(input, { groups: ['public', 'private'], metadata: props });
69
+ expect(result).toEqual({ id: 1 });
70
+ });
71
+ });
72
+ //# sourceMappingURL=record-normalizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-normalizer.test.js","sourceRoot":"","sources":["../../../src/serializer/normalizer/record-normalizer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAGnF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAE5D,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACzD,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAE/C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEvC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACjD,MAAM,OAAO,GAAsB;YACjC,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;SACzC,CAAC;QAEF,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACvC,MAAM,OAAO,GAAsB;YACjC,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE;SAC/C,CAAC;QACF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC5D,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAChF,MAAM,KAAK,GAAG;YACZ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;YACxB,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE;YACjC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE;YAChC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;SAClC,CAAC;QACF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAExF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAChF,MAAM,KAAK,GAAG;YACZ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE;YAC1B,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;SAChD,CAAC;QACF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAE3F,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface NormalizedRecord {
2
+ [key: string]: NormalizedValue;
3
+ }
4
+ export type NormalizedArray = NormalizedValue[];
5
+ export type NormalizedValue = string | number | boolean | null | NormalizedRecord | NormalizedArray;
6
+ export interface PropertyMetadata {
7
+ ignore?: boolean;
8
+ groups?: string[];
9
+ serializedName?: string;
10
+ }
11
+ export interface NormalizerContext {
12
+ groups?: string[];
13
+ metadata?: Record<string, PropertyMetadata>;
14
+ }
15
+ export type Normalizer<From = unknown, To = NormalizedValue> = (input: From, context?: NormalizerContext) => To;
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/serializer/normalizer/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,GAAG,eAAe,EAAE,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAEpG,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC7C;AAED,MAAM,MAAM,UAAU,CAAC,IAAI,GAAG,OAAO,EAAE,EAAE,GAAG,eAAe,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,iBAAiB,KAAK,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/serializer/normalizer/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@koala-ts/framework",
3
3
  "main": "dist/index.js",
4
4
  "type": "module",
5
- "version": "2.7.1",
5
+ "version": "2.9.0",
6
6
  "description": "A NodeJS framework for lazy developers",
7
7
  "keywords": [
8
8
  "koala",
@@ -42,12 +42,12 @@
42
42
  "format:check": "prettier --check ."
43
43
  },
44
44
  "dependencies": {
45
- "@koa/router": "^14.0.0",
45
+ "@koa/router": "^15.1.1",
46
46
  "@koa/send": "^6.0.0",
47
47
  "@types/koa": "^3.0.0",
48
- "@types/koa__router": "^12.0.4",
49
48
  "@types/stack-trace": "^0.0.33",
50
49
  "@types/supertest": "^6.0.3",
50
+ "argon2": "^0.44.0",
51
51
  "dotenv": "^17.2.3",
52
52
  "dotenv-expand": "^12.0.3",
53
53
  "koa": "^3.0.3",
@@ -66,8 +66,7 @@
66
66
  "eslint-plugin-n": "^17.23.1",
67
67
  "eslint-plugin-prettier": "^5.5.4",
68
68
  "eslint-plugin-promise": "^7.2.1",
69
- "eslint-plugin-sonarjs": "^3.0.5",
70
- "globals": "^16.4.0",
69
+ "globals": "^17.0.0",
71
70
  "prettier": "^3.7.4",
72
71
  "tsc-alias": "^1.8.16",
73
72
  "tsx": "^4.20.6",