@flusys/nestjs-shared 6.0.1 → 6.1.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 (81) hide show
  1. package/cjs/classes/api-controller.class.spec.js +684 -0
  2. package/cjs/classes/api-service.class.spec.js +809 -0
  3. package/cjs/classes/handle-custome-db.spec.js +82 -0
  4. package/cjs/classes/hybrid-cache.class.spec.js +168 -0
  5. package/cjs/classes/winston.logger.class.spec.js +330 -0
  6. package/cjs/constants/index.js +1 -1
  7. package/cjs/decorators/api-response.decorator.spec.js +126 -0
  8. package/cjs/decorators/current-user.decorator.spec.js +74 -0
  9. package/cjs/decorators/log-action.decorator.spec.js +353 -0
  10. package/cjs/decorators/public.decorator.spec.js +50 -0
  11. package/cjs/decorators/require-permission.decorator.spec.js +147 -0
  12. package/cjs/exceptions/base-app.exception.spec.js +157 -0
  13. package/cjs/exceptions/permission.exception.spec.js +82 -0
  14. package/cjs/filters/global-exception.filter.spec.js +440 -0
  15. package/cjs/guards/jwt-auth.guard.spec.js +75 -0
  16. package/cjs/guards/optional-jwt-auth.guard.spec.js +55 -0
  17. package/cjs/guards/permission.guard.js +11 -10
  18. package/cjs/guards/permission.guard.spec.js +358 -0
  19. package/cjs/interceptors/delete-empty-id-from-body.interceptor.spec.js +107 -0
  20. package/cjs/interceptors/idempotency.interceptor.spec.js +116 -0
  21. package/cjs/interceptors/response-meta.interceptor.spec.js +89 -0
  22. package/cjs/interceptors/set-user-field-on-body.interceptor.spec.js +128 -0
  23. package/cjs/interceptors/slug.interceptor.spec.js +110 -0
  24. package/cjs/interfaces/index.js +1 -0
  25. package/cjs/interfaces/permission-sync-adapter.interface.js +11 -0
  26. package/cjs/middlewares/logger.middleware.spec.js +462 -0
  27. package/cjs/modules/cache/cache.module.spec.js +48 -0
  28. package/cjs/modules/datasource/multi-tenant-datasource.service.spec.js +381 -0
  29. package/cjs/modules/utils/utils.service.spec.js +169 -0
  30. package/cjs/utils/date-time.util.spec.js +84 -0
  31. package/cjs/utils/html-sanitizer.util.spec.js +76 -0
  32. package/cjs/utils/index.js +1 -0
  33. package/cjs/utils/permission-cache-key.util.js +31 -0
  34. package/cjs/utils/permission-cache-key.util.spec.js +88 -0
  35. package/cjs/utils/query-helpers.util.spec.js +209 -0
  36. package/cjs/utils/request.util.spec.js +249 -0
  37. package/cjs/utils/string.util.spec.js +63 -0
  38. package/constants/index.d.ts +1 -1
  39. package/fesm/classes/api-controller.class.spec.js +680 -0
  40. package/fesm/classes/api-service.class.spec.js +805 -0
  41. package/fesm/classes/handle-custome-db.spec.js +78 -0
  42. package/fesm/classes/hybrid-cache.class.spec.js +164 -0
  43. package/fesm/classes/winston.logger.class.spec.js +327 -0
  44. package/fesm/constants/index.js +1 -1
  45. package/fesm/decorators/api-response.decorator.spec.js +122 -0
  46. package/fesm/decorators/current-user.decorator.spec.js +73 -0
  47. package/fesm/decorators/log-action.decorator.spec.js +349 -0
  48. package/fesm/decorators/public.decorator.spec.js +46 -0
  49. package/fesm/decorators/require-permission.decorator.spec.js +143 -0
  50. package/fesm/exceptions/base-app.exception.spec.js +153 -0
  51. package/fesm/exceptions/permission.exception.spec.js +78 -0
  52. package/fesm/filters/global-exception.filter.spec.js +436 -0
  53. package/fesm/guards/jwt-auth.guard.spec.js +71 -0
  54. package/fesm/guards/optional-jwt-auth.guard.spec.js +51 -0
  55. package/fesm/guards/permission.guard.js +12 -11
  56. package/fesm/guards/permission.guard.spec.js +354 -0
  57. package/fesm/interceptors/delete-empty-id-from-body.interceptor.spec.js +103 -0
  58. package/fesm/interceptors/idempotency.interceptor.spec.js +112 -0
  59. package/fesm/interceptors/response-meta.interceptor.spec.js +85 -0
  60. package/fesm/interceptors/set-user-field-on-body.interceptor.spec.js +124 -0
  61. package/fesm/interceptors/slug.interceptor.spec.js +106 -0
  62. package/fesm/interfaces/index.js +1 -0
  63. package/fesm/interfaces/permission-sync-adapter.interface.js +1 -0
  64. package/fesm/middlewares/logger.middleware.spec.js +459 -0
  65. package/fesm/modules/cache/cache.module.spec.js +44 -0
  66. package/fesm/modules/datasource/multi-tenant-datasource.service.spec.js +377 -0
  67. package/fesm/modules/utils/utils.service.spec.js +165 -0
  68. package/fesm/utils/date-time.util.spec.js +80 -0
  69. package/fesm/utils/html-sanitizer.util.spec.js +72 -0
  70. package/fesm/utils/index.js +1 -0
  71. package/fesm/utils/permission-cache-key.util.js +10 -0
  72. package/fesm/utils/permission-cache-key.util.spec.js +84 -0
  73. package/fesm/utils/query-helpers.util.spec.js +205 -0
  74. package/fesm/utils/request.util.spec.js +245 -0
  75. package/fesm/utils/string.util.spec.js +59 -0
  76. package/guards/permission.guard.d.ts +0 -1
  77. package/interfaces/index.d.ts +1 -0
  78. package/interfaces/permission-sync-adapter.interface.d.ts +7 -0
  79. package/package.json +2 -2
  80. package/utils/index.d.ts +1 -0
  81. package/utils/permission-cache-key.util.d.ts +9 -0
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _stringutil = require("./string.util");
6
+ describe('string.util', ()=>{
7
+ describe('generateSlug', ()=>{
8
+ it('should lowercase and hyphenate a plain string', ()=>{
9
+ expect((0, _stringutil.generateSlug)('My Company Name')).toBe('my-company-name');
10
+ });
11
+ it('should strip special characters', ()=>{
12
+ expect((0, _stringutil.generateSlug)('Hello World!')).toBe('hello-world');
13
+ });
14
+ it('should collapse repeated whitespace and hyphens', ()=>{
15
+ expect((0, _stringutil.generateSlug)('Foo Bar--Baz')).toBe('foo-bar-baz');
16
+ });
17
+ it('should trim leading/trailing hyphens produced by punctuation', ()=>{
18
+ expect((0, _stringutil.generateSlug)(' -Hello- ')).toBe('hello');
19
+ });
20
+ it('should truncate to maxLength', ()=>{
21
+ expect((0, _stringutil.generateSlug)('abcdefghij', 5)).toBe('abcde');
22
+ });
23
+ it('should return an empty string for input that is only special characters', ()=>{
24
+ expect((0, _stringutil.generateSlug)('!!!???')).toBe('');
25
+ });
26
+ });
27
+ describe('generateUniqueSlug', ()=>{
28
+ it('should return the base slug when there are no collisions', async ()=>{
29
+ const findMatchingSlugs = jest.fn().mockResolvedValue([]);
30
+ const slug = await (0, _stringutil.generateUniqueSlug)('My Company', findMatchingSlugs);
31
+ expect(slug).toBe('my-company');
32
+ expect(findMatchingSlugs).toHaveBeenCalledWith('my-company');
33
+ });
34
+ it('should return the base slug when only suffixed variants exist', async ()=>{
35
+ const findMatchingSlugs = jest.fn().mockResolvedValue([
36
+ 'my-company-1'
37
+ ]);
38
+ const slug = await (0, _stringutil.generateUniqueSlug)('My Company', findMatchingSlugs);
39
+ expect(slug).toBe('my-company');
40
+ });
41
+ it('should append the next available numeric suffix on collision', async ()=>{
42
+ const findMatchingSlugs = jest.fn().mockResolvedValue([
43
+ 'my-company',
44
+ 'my-company-1',
45
+ 'my-company-2'
46
+ ]);
47
+ const slug = await (0, _stringutil.generateUniqueSlug)('My Company', findMatchingSlugs);
48
+ expect(slug).toBe('my-company-3');
49
+ });
50
+ it('should fall back to a random suffix when all 9999 slots are taken', async ()=>{
51
+ const taken = [
52
+ 'my-company',
53
+ ...Array.from({
54
+ length: 9999
55
+ }, (_, i)=>`my-company-${i + 1}`)
56
+ ];
57
+ const findMatchingSlugs = jest.fn().mockResolvedValue(taken);
58
+ const slug = await (0, _stringutil.generateUniqueSlug)('My Company', findMatchingSlugs);
59
+ expect(slug).toMatch(/^my-company-[a-z0-9]+$/);
60
+ expect(taken).not.toContain(slug);
61
+ });
62
+ });
63
+ });
@@ -5,7 +5,7 @@ export declare const PERMISSION_GUARD_CONFIG = "PERMISSION_GUARD_CONFIG";
5
5
  export declare const IDEMPOTENCY_KEY_HEADER = "x-idempotency-key";
6
6
  export declare const REQUEST_ID_HEADER = "x-request-id";
7
7
  export declare const CLIENT_TYPE_HEADER = "x-client-type";
8
- export declare const PERMISSIONS_CACHE_PREFIX = "permissions";
8
+ export declare const PERMISSIONS_CACHE_PREFIX = "my-permissions";
9
9
  export declare const IDEMPOTENCY_CACHE_PREFIX = "idempotency";
10
10
  export * from './permissions';
11
11
  export * from './message-keys';