@hanivanrizky/nestjs-browser-action 0.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 (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +279 -0
  3. package/dist/browser-action.module-definition.d.ts +7 -0
  4. package/dist/browser-action.module-definition.js +3 -0
  5. package/dist/browser-action.module-definition.js.map +1 -0
  6. package/dist/browser-action.module.d.ts +8 -0
  7. package/dist/browser-action.module.js +93 -0
  8. package/dist/browser-action.module.js.map +1 -0
  9. package/dist/constants/browser-action.constants.d.ts +28 -0
  10. package/dist/constants/browser-action.constants.js +32 -0
  11. package/dist/constants/browser-action.constants.js.map +1 -0
  12. package/dist/constants/index.d.ts +1 -0
  13. package/dist/constants/index.js +18 -0
  14. package/dist/constants/index.js.map +1 -0
  15. package/dist/decorators/index.d.ts +2 -0
  16. package/dist/decorators/index.js +19 -0
  17. package/dist/decorators/index.js.map +1 -0
  18. package/dist/decorators/inject-browser.decorator.d.ts +1 -0
  19. package/dist/decorators/inject-browser.decorator.js +7 -0
  20. package/dist/decorators/inject-browser.decorator.js.map +1 -0
  21. package/dist/decorators/inject-page.decorator.d.ts +1 -0
  22. package/dist/decorators/inject-page.decorator.js +7 -0
  23. package/dist/decorators/inject-page.decorator.js.map +1 -0
  24. package/dist/enums/cleansing-profile.enum.d.ts +7 -0
  25. package/dist/enums/cleansing-profile.enum.js +12 -0
  26. package/dist/enums/cleansing-profile.enum.js.map +1 -0
  27. package/dist/enums/cleansing-type.enum.d.ts +15 -0
  28. package/dist/enums/cleansing-type.enum.js +20 -0
  29. package/dist/enums/cleansing-type.enum.js.map +1 -0
  30. package/dist/enums/index.d.ts +2 -0
  31. package/dist/enums/index.js +19 -0
  32. package/dist/enums/index.js.map +1 -0
  33. package/dist/helpers/action-helpers.service.d.ts +41 -0
  34. package/dist/helpers/action-helpers.service.js +534 -0
  35. package/dist/helpers/action-helpers.service.js.map +1 -0
  36. package/dist/helpers/dom.util.d.ts +4 -0
  37. package/dist/helpers/dom.util.js +27 -0
  38. package/dist/helpers/dom.util.js.map +1 -0
  39. package/dist/helpers/index.d.ts +2 -0
  40. package/dist/helpers/index.js +19 -0
  41. package/dist/helpers/index.js.map +1 -0
  42. package/dist/helpers/logger.util.d.ts +10 -0
  43. package/dist/helpers/logger.util.js +47 -0
  44. package/dist/helpers/logger.util.js.map +1 -0
  45. package/dist/index.d.ts +12 -0
  46. package/dist/index.js +29 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/interfaces/browser-action-options.d.ts +17 -0
  49. package/dist/interfaces/browser-action-options.js +3 -0
  50. package/dist/interfaces/browser-action-options.js.map +1 -0
  51. package/dist/interfaces/cleansing-options.d.ts +14 -0
  52. package/dist/interfaces/cleansing-options.js +3 -0
  53. package/dist/interfaces/cleansing-options.js.map +1 -0
  54. package/dist/interfaces/cookie-options.d.ts +31 -0
  55. package/dist/interfaces/cookie-options.js +3 -0
  56. package/dist/interfaces/cookie-options.js.map +1 -0
  57. package/dist/interfaces/index.d.ts +6 -0
  58. package/dist/interfaces/index.js +23 -0
  59. package/dist/interfaces/index.js.map +1 -0
  60. package/dist/interfaces/pool-options.d.ts +6 -0
  61. package/dist/interfaces/pool-options.js +3 -0
  62. package/dist/interfaces/pool-options.js.map +1 -0
  63. package/dist/interfaces/types.d.ts +31 -0
  64. package/dist/interfaces/types.js +3 -0
  65. package/dist/interfaces/types.js.map +1 -0
  66. package/dist/interfaces/workflow-options.d.ts +50 -0
  67. package/dist/interfaces/workflow-options.js +3 -0
  68. package/dist/interfaces/workflow-options.js.map +1 -0
  69. package/dist/pipes/alt-flag.pipe.d.ts +10 -0
  70. package/dist/pipes/alt-flag.pipe.js +63 -0
  71. package/dist/pipes/alt-flag.pipe.js.map +1 -0
  72. package/dist/pipes/cleansing-pipe.d.ts +7 -0
  73. package/dist/pipes/cleansing-pipe.js +25 -0
  74. package/dist/pipes/cleansing-pipe.js.map +1 -0
  75. package/dist/pipes/date-format.pipe.d.ts +10 -0
  76. package/dist/pipes/date-format.pipe.js +88 -0
  77. package/dist/pipes/date-format.pipe.js.map +1 -0
  78. package/dist/pipes/index.d.ts +15 -0
  79. package/dist/pipes/index.js +32 -0
  80. package/dist/pipes/index.js.map +1 -0
  81. package/dist/pipes/normalize-whitespace.pipe.d.ts +8 -0
  82. package/dist/pipes/normalize-whitespace.pipe.js +49 -0
  83. package/dist/pipes/normalize-whitespace.pipe.js.map +1 -0
  84. package/dist/pipes/profiles/currency.profile.d.ts +2 -0
  85. package/dist/pipes/profiles/currency.profile.js +19 -0
  86. package/dist/pipes/profiles/currency.profile.js.map +1 -0
  87. package/dist/pipes/profiles/date.profile.d.ts +2 -0
  88. package/dist/pipes/profiles/date.profile.js +14 -0
  89. package/dist/pipes/profiles/date.profile.js.map +1 -0
  90. package/dist/pipes/profiles/email.profile.d.ts +2 -0
  91. package/dist/pipes/profiles/email.profile.js +18 -0
  92. package/dist/pipes/profiles/email.profile.js.map +1 -0
  93. package/dist/pipes/profiles/phone.profile.d.ts +2 -0
  94. package/dist/pipes/profiles/phone.profile.js +18 -0
  95. package/dist/pipes/profiles/phone.profile.js.map +1 -0
  96. package/dist/pipes/profiles/price.profile.d.ts +2 -0
  97. package/dist/pipes/profiles/price.profile.js +19 -0
  98. package/dist/pipes/profiles/price.profile.js.map +1 -0
  99. package/dist/pipes/profiles.d.ts +3 -0
  100. package/dist/pipes/profiles.js +17 -0
  101. package/dist/pipes/profiles.js.map +1 -0
  102. package/dist/pipes/regex-extract.pipe.d.ts +7 -0
  103. package/dist/pipes/regex-extract.pipe.js +73 -0
  104. package/dist/pipes/regex-extract.pipe.js.map +1 -0
  105. package/dist/pipes/regex-replace.pipe.d.ts +9 -0
  106. package/dist/pipes/regex-replace.pipe.js +59 -0
  107. package/dist/pipes/regex-replace.pipe.js.map +1 -0
  108. package/dist/pipes/remove-currency-symbol.pipe.d.ts +7 -0
  109. package/dist/pipes/remove-currency-symbol.pipe.js +65 -0
  110. package/dist/pipes/remove-currency-symbol.pipe.js.map +1 -0
  111. package/dist/pipes/remove-line-breaks.pipe.d.ts +7 -0
  112. package/dist/pipes/remove-line-breaks.pipe.js +42 -0
  113. package/dist/pipes/remove-line-breaks.pipe.js.map +1 -0
  114. package/dist/pipes/remove-special-chars.pipe.d.ts +7 -0
  115. package/dist/pipes/remove-special-chars.pipe.js +44 -0
  116. package/dist/pipes/remove-special-chars.pipe.js.map +1 -0
  117. package/dist/pipes/sanitize-text.pipe.d.ts +7 -0
  118. package/dist/pipes/sanitize-text.pipe.js +86 -0
  119. package/dist/pipes/sanitize-text.pipe.js.map +1 -0
  120. package/dist/pipes/to-lower-case.pipe.d.ts +6 -0
  121. package/dist/pipes/to-lower-case.pipe.js +16 -0
  122. package/dist/pipes/to-lower-case.pipe.js.map +1 -0
  123. package/dist/pipes/to-number.pipe.d.ts +9 -0
  124. package/dist/pipes/to-number.pipe.js +57 -0
  125. package/dist/pipes/to-number.pipe.js.map +1 -0
  126. package/dist/pipes/to-upper-case.pipe.d.ts +6 -0
  127. package/dist/pipes/to-upper-case.pipe.js +16 -0
  128. package/dist/pipes/to-upper-case.pipe.js.map +1 -0
  129. package/dist/pipes/trim.pipe.d.ts +8 -0
  130. package/dist/pipes/trim.pipe.js +44 -0
  131. package/dist/pipes/trim.pipe.js.map +1 -0
  132. package/dist/services/browser-manager.service.d.ts +15 -0
  133. package/dist/services/browser-manager.service.js +47 -0
  134. package/dist/services/browser-manager.service.js.map +1 -0
  135. package/dist/services/browser-pool.service.d.ts +26 -0
  136. package/dist/services/browser-pool.service.js +163 -0
  137. package/dist/services/browser-pool.service.js.map +1 -0
  138. package/dist/services/cleansing.service.d.ts +10 -0
  139. package/dist/services/cleansing.service.js +78 -0
  140. package/dist/services/cleansing.service.js.map +1 -0
  141. package/dist/services/cookie.service.d.ts +20 -0
  142. package/dist/services/cookie.service.js +246 -0
  143. package/dist/services/cookie.service.js.map +1 -0
  144. package/dist/services/index.d.ts +4 -0
  145. package/dist/services/index.js +21 -0
  146. package/dist/services/index.js.map +1 -0
  147. package/dist/services/page-service.d.ts +16 -0
  148. package/dist/services/page-service.js +68 -0
  149. package/dist/services/page-service.js.map +1 -0
  150. package/dist/tsconfig.build.tsbuildinfo +1 -0
  151. package/package.json +98 -0
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RemoveSpecialCharsPipe = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const cleansing_pipe_1 = require("./cleansing-pipe");
15
+ const cleansing_type_enum_1 = require("../enums/cleansing-type.enum");
16
+ class RemoveSpecialCharsPipe extends cleansing_pipe_1.CleansingPipe {
17
+ type = cleansing_type_enum_1.CleansingType.REMOVE_SPECIAL_CHARS;
18
+ allowedChars;
19
+ exec(value) {
20
+ if (typeof value !== 'string') {
21
+ return value;
22
+ }
23
+ let result = value;
24
+ if (this.allowedChars) {
25
+ const escaped = this.allowedChars
26
+ .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
27
+ .replace(/-/g, '\\-');
28
+ const regex = new RegExp(`[^a-zA-Z0-9${escaped}]`, 'g');
29
+ result = result.replace(regex, '');
30
+ }
31
+ else {
32
+ result = result.replace(/[^\p{L}\p{N}\s]/gu, '');
33
+ }
34
+ result = result.replace(/\s+/g, ' ').trim();
35
+ return result;
36
+ }
37
+ }
38
+ exports.RemoveSpecialCharsPipe = RemoveSpecialCharsPipe;
39
+ __decorate([
40
+ (0, class_validator_1.IsOptional)(),
41
+ (0, class_validator_1.IsString)(),
42
+ __metadata("design:type", String)
43
+ ], RemoveSpecialCharsPipe.prototype, "allowedChars", void 0);
44
+ //# sourceMappingURL=remove-special-chars.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-special-chars.pipe.js","sourceRoot":"","sources":["../../src/pipes/remove-special-chars.pipe.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAuD;AACvD,qDAAiD;AACjD,sEAA6D;AAK7D,MAAa,sBAAuB,SAAQ,8BAA6B;IACvE,IAAI,GAAG,mCAAa,CAAC,oBAAoB,CAAC;IAI1C,YAAY,CAAU;IAEtB,IAAI,CAAC,KAAa;QAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY;iBAC9B,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;iBACtC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAExB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,cAAc,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YAGN,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QAGD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAE5C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAjCD,wDAiCC;AA5BC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;4DACW"}
@@ -0,0 +1,7 @@
1
+ import { CleansingPipe } from './cleansing-pipe';
2
+ import { CleansingType } from '../enums/cleansing-type.enum';
3
+ export declare class SanitizeTextPipe extends CleansingPipe<string, string> {
4
+ type: CleansingType;
5
+ preserveEntities?: boolean;
6
+ exec(value: string): string;
7
+ }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SanitizeTextPipe = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const cleansing_pipe_1 = require("./cleansing-pipe");
15
+ const cleansing_type_enum_1 = require("../enums/cleansing-type.enum");
16
+ class SanitizeTextPipe extends cleansing_pipe_1.CleansingPipe {
17
+ type = cleansing_type_enum_1.CleansingType.SANITIZE_TEXT;
18
+ preserveEntities;
19
+ exec(value) {
20
+ if (typeof value !== 'string' || !value) {
21
+ return value;
22
+ }
23
+ let result = value;
24
+ const dangerousTags = [
25
+ 'script',
26
+ 'iframe',
27
+ 'object',
28
+ 'embed',
29
+ 'applet',
30
+ 'form',
31
+ 'input',
32
+ 'button',
33
+ 'select',
34
+ 'textarea',
35
+ 'meta',
36
+ 'link',
37
+ 'style',
38
+ ];
39
+ dangerousTags.forEach((tag) => {
40
+ const regex = new RegExp(`<${tag}[^>]*>.*?<\\/${tag}>`, 'gi');
41
+ result = result.replace(regex, '');
42
+ });
43
+ dangerousTags.forEach((tag) => {
44
+ const regex = new RegExp(`<${tag}[^>]*\\s*\\/?>`, 'gi');
45
+ result = result.replace(regex, '');
46
+ });
47
+ const eventHandlers = [
48
+ 'onclick',
49
+ 'onerror',
50
+ 'onload',
51
+ 'onmouseover',
52
+ 'onmouseout',
53
+ 'onfocus',
54
+ 'onblur',
55
+ 'onchange',
56
+ 'onsubmit',
57
+ 'onreset',
58
+ 'onselect',
59
+ 'onkeydown',
60
+ 'onkeyup',
61
+ 'onkeypress',
62
+ ];
63
+ eventHandlers.forEach((handler) => {
64
+ const regex = new RegExp(`${handler}=\\S*`, 'gi');
65
+ result = result.replace(regex, '');
66
+ });
67
+ result = result.replace(/javascript:/gi, '');
68
+ result = result.replace(/<[^>]*>/g, '');
69
+ if (!this.preserveEntities) {
70
+ result = result
71
+ .replace(/&amp;/g, '&')
72
+ .replace(/&lt;/g, '<')
73
+ .replace(/&gt;/g, '>')
74
+ .replace(/&quot;/g, '"')
75
+ .replace(/&#39;/g, "'");
76
+ }
77
+ result = result.replace(/\s+/g, ' ').trim();
78
+ return result;
79
+ }
80
+ }
81
+ exports.SanitizeTextPipe = SanitizeTextPipe;
82
+ __decorate([
83
+ (0, class_validator_1.IsOptional)(),
84
+ __metadata("design:type", Boolean)
85
+ ], SanitizeTextPipe.prototype, "preserveEntities", void 0);
86
+ //# sourceMappingURL=sanitize-text.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-text.pipe.js","sourceRoot":"","sources":["../../src/pipes/sanitize-text.pipe.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA6C;AAC7C,qDAAiD;AACjD,sEAA6D;AAK7D,MAAa,gBAAiB,SAAQ,8BAA6B;IACjE,IAAI,GAAG,mCAAa,CAAC,aAAa,CAAC;IAGnC,gBAAgB,CAAW;IAE3B,IAAI,CAAC,KAAa;QAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,MAAM,GAAG,KAAK,CAAC;QAGnB,MAAM,aAAa,GAAG;YACpB,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,MAAM;YACN,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,UAAU;YACV,MAAM;YACN,MAAM;YACN,OAAO;SACR,CAAC;QAGF,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,gBAAgB,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;YAC9D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAGH,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACxD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAGH,MAAM,aAAa,GAAG;YACpB,SAAS;YACT,SAAS;YACT,QAAQ;YACR,aAAa;YACb,YAAY;YACZ,SAAS;YACT,QAAQ;YACR,UAAU;YACV,UAAU;YACV,SAAS;YACT,UAAU;YACV,WAAW;YACX,SAAS;YACT,YAAY;SACb,CAAC;QAEF,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAChC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,OAAO,OAAO,EAAE,IAAI,CAAC,CAAC;YAClD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAGH,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAG7C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAGxC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,GAAG,MAAM;iBACZ,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;iBACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;iBACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;iBACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;iBACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;QAGD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAE5C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAtFD,4CAsFC;AAlFC;IADC,IAAA,4BAAU,GAAE;;0DACc"}
@@ -0,0 +1,6 @@
1
+ import { CleansingPipe } from './cleansing-pipe';
2
+ import { CleansingType } from '../enums/cleansing-type.enum';
3
+ export declare class ToLowerCasePipe extends CleansingPipe<unknown, unknown> {
4
+ type: CleansingType;
5
+ exec(value: unknown): unknown;
6
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToLowerCasePipe = void 0;
4
+ const cleansing_pipe_1 = require("./cleansing-pipe");
5
+ const cleansing_type_enum_1 = require("../enums/cleansing-type.enum");
6
+ class ToLowerCasePipe extends cleansing_pipe_1.CleansingPipe {
7
+ type = cleansing_type_enum_1.CleansingType.TO_LOWER_CASE;
8
+ exec(value) {
9
+ if (typeof value !== 'string') {
10
+ return value;
11
+ }
12
+ return value.toLowerCase();
13
+ }
14
+ }
15
+ exports.ToLowerCasePipe = ToLowerCasePipe;
16
+ //# sourceMappingURL=to-lower-case.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-lower-case.pipe.js","sourceRoot":"","sources":["../../src/pipes/to-lower-case.pipe.ts"],"names":[],"mappings":";;;AAAA,qDAAiD;AACjD,sEAA6D;AAE7D,MAAa,eAAgB,SAAQ,8BAA+B;IAClE,IAAI,GAAG,mCAAa,CAAC,aAAa,CAAC;IAEnC,IAAI,CAAC,KAAc;QACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;CACF;AATD,0CASC"}
@@ -0,0 +1,9 @@
1
+ import { CleansingPipe } from './cleansing-pipe';
2
+ import { CleansingType } from '../enums/cleansing-type.enum';
3
+ export declare class ToNumberPipe extends CleansingPipe<string, number> {
4
+ type: CleansingType;
5
+ decimals?: number;
6
+ round?: 'ceil' | 'floor' | 'round';
7
+ nullifyEmpty?: boolean;
8
+ exec(value: string): number;
9
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ToNumberPipe = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const cleansing_pipe_1 = require("./cleansing-pipe");
15
+ const cleansing_type_enum_1 = require("../enums/cleansing-type.enum");
16
+ class ToNumberPipe extends cleansing_pipe_1.CleansingPipe {
17
+ type = cleansing_type_enum_1.CleansingType.TO_NUMBER;
18
+ decimals = 0;
19
+ round = 'round';
20
+ nullifyEmpty = false;
21
+ exec(value) {
22
+ if (value === '' && this.nullifyEmpty) {
23
+ return 0;
24
+ }
25
+ const num = parseFloat(value);
26
+ if (isNaN(num)) {
27
+ return NaN;
28
+ }
29
+ if (this.decimals !== undefined && this.decimals >= 0) {
30
+ const multiplier = Math.pow(10, this.decimals);
31
+ const rounded = this.round === 'ceil'
32
+ ? Math.ceil
33
+ : this.round === 'floor'
34
+ ? Math.floor
35
+ : Math.round;
36
+ return rounded(num * multiplier) / multiplier;
37
+ }
38
+ return num;
39
+ }
40
+ }
41
+ exports.ToNumberPipe = ToNumberPipe;
42
+ __decorate([
43
+ (0, class_validator_1.IsOptional)(),
44
+ (0, class_validator_1.IsNumber)(),
45
+ __metadata("design:type", Number)
46
+ ], ToNumberPipe.prototype, "decimals", void 0);
47
+ __decorate([
48
+ (0, class_validator_1.IsOptional)(),
49
+ (0, class_validator_1.IsEnum)(['ceil', 'floor', 'round']),
50
+ __metadata("design:type", String)
51
+ ], ToNumberPipe.prototype, "round", void 0);
52
+ __decorate([
53
+ (0, class_validator_1.IsOptional)(),
54
+ (0, class_validator_1.IsBoolean)(),
55
+ __metadata("design:type", Boolean)
56
+ ], ToNumberPipe.prototype, "nullifyEmpty", void 0);
57
+ //# sourceMappingURL=to-number.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-number.pipe.js","sourceRoot":"","sources":["../../src/pipes/to-number.pipe.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA0E;AAC1E,qDAAiD;AACjD,sEAA6D;AAK7D,MAAa,YAAa,SAAQ,8BAA6B;IAC7D,IAAI,GAAG,mCAAa,CAAC,SAAS,CAAC;IAI/B,QAAQ,GAAY,CAAC,CAAC;IAItB,KAAK,GAAgC,OAAO,CAAC;IAI7C,YAAY,GAAa,KAAK,CAAC;IAE/B,IAAI,CAAC,KAAa;QAChB,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAE9B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,OAAO,GACX,IAAI,CAAC,KAAK,KAAK,MAAM;gBACnB,CAAC,CAAC,IAAI,CAAC,IAAI;gBACX,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO;oBACtB,CAAC,CAAC,IAAI,CAAC,KAAK;oBACZ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACnB,OAAO,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC;QAChD,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAvCD,oCAuCC;AAlCC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;8CACW;AAItB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,EAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;;2CACU;AAI7C;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;kDACmB"}
@@ -0,0 +1,6 @@
1
+ import { CleansingPipe } from './cleansing-pipe';
2
+ import { CleansingType } from '../enums/cleansing-type.enum';
3
+ export declare class ToUpperCasePipe extends CleansingPipe<unknown, unknown> {
4
+ type: CleansingType;
5
+ exec(value: unknown): unknown;
6
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToUpperCasePipe = void 0;
4
+ const cleansing_pipe_1 = require("./cleansing-pipe");
5
+ const cleansing_type_enum_1 = require("../enums/cleansing-type.enum");
6
+ class ToUpperCasePipe extends cleansing_pipe_1.CleansingPipe {
7
+ type = cleansing_type_enum_1.CleansingType.TO_UPPER_CASE;
8
+ exec(value) {
9
+ if (typeof value !== 'string') {
10
+ return value;
11
+ }
12
+ return value.toUpperCase();
13
+ }
14
+ }
15
+ exports.ToUpperCasePipe = ToUpperCasePipe;
16
+ //# sourceMappingURL=to-upper-case.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-upper-case.pipe.js","sourceRoot":"","sources":["../../src/pipes/to-upper-case.pipe.ts"],"names":[],"mappings":";;;AAAA,qDAAiD;AACjD,sEAA6D;AAE7D,MAAa,eAAgB,SAAQ,8BAA+B;IAClE,IAAI,GAAG,mCAAa,CAAC,aAAa,CAAC;IAEnC,IAAI,CAAC,KAAc;QACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;CACF;AATD,0CASC"}
@@ -0,0 +1,8 @@
1
+ import { CleansingPipe } from './cleansing-pipe';
2
+ import { CleansingType } from '../enums/cleansing-type.enum';
3
+ export declare class TrimPipe extends CleansingPipe<unknown, unknown> {
4
+ type: CleansingType;
5
+ trimStart?: boolean;
6
+ trimEnd?: boolean;
7
+ exec(value: unknown): unknown;
8
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.TrimPipe = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const cleansing_pipe_1 = require("./cleansing-pipe");
15
+ const cleansing_type_enum_1 = require("../enums/cleansing-type.enum");
16
+ class TrimPipe extends cleansing_pipe_1.CleansingPipe {
17
+ type = cleansing_type_enum_1.CleansingType.TRIM;
18
+ trimStart;
19
+ trimEnd;
20
+ exec(value) {
21
+ if (typeof value !== 'string') {
22
+ return value;
23
+ }
24
+ if (this.trimStart && !this.trimEnd) {
25
+ return value.trimStart();
26
+ }
27
+ if (this.trimEnd && !this.trimStart) {
28
+ return value.trimEnd();
29
+ }
30
+ return value.trim();
31
+ }
32
+ }
33
+ exports.TrimPipe = TrimPipe;
34
+ __decorate([
35
+ (0, class_validator_1.IsOptional)(),
36
+ (0, class_validator_1.IsBoolean)(),
37
+ __metadata("design:type", Boolean)
38
+ ], TrimPipe.prototype, "trimStart", void 0);
39
+ __decorate([
40
+ (0, class_validator_1.IsOptional)(),
41
+ (0, class_validator_1.IsBoolean)(),
42
+ __metadata("design:type", Boolean)
43
+ ], TrimPipe.prototype, "trimEnd", void 0);
44
+ //# sourceMappingURL=trim.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trim.pipe.js","sourceRoot":"","sources":["../../src/pipes/trim.pipe.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAwD;AACxD,qDAAiD;AACjD,sEAA6D;AAK7D,MAAa,QAAS,SAAQ,8BAA+B;IAC3D,IAAI,GAAG,mCAAa,CAAC,IAAI,CAAC;IAI1B,SAAS,CAAW;IAIpB,OAAO,CAAW;IAElB,IAAI,CAAC,KAAc;QACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAGD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;QAGD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;CACF;AA5BD,4BA4BC;AAvBC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;2CACQ;AAIpB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;yCACM"}
@@ -0,0 +1,15 @@
1
+ import type { Browser } from 'puppeteer';
2
+ import { BrowserPoolService } from './browser-pool.service';
3
+ import type { LogLevel } from '@nestjs/common';
4
+ export declare class BrowserManagerService {
5
+ private readonly poolService;
6
+ private readonly logger;
7
+ constructor(poolService: BrowserPoolService);
8
+ getBrowser(): Promise<Browser>;
9
+ releaseBrowser(browser: Browser): void;
10
+ getPoolStatus(): {
11
+ size: number;
12
+ available: number;
13
+ };
14
+ getLogLevel(): LogLevel;
15
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var BrowserManagerService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.BrowserManagerService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const browser_pool_service_1 = require("./browser-pool.service");
16
+ const logger_util_1 = require("../helpers/logger.util");
17
+ let BrowserManagerService = BrowserManagerService_1 = class BrowserManagerService {
18
+ poolService;
19
+ logger;
20
+ constructor(poolService) {
21
+ this.poolService = poolService;
22
+ this.logger = new logger_util_1.LoggerWithLevel(BrowserManagerService_1.name, this.poolService.getLogLevel());
23
+ }
24
+ async getBrowser() {
25
+ this.logger.log('Acquiring browser from pool', 'debug');
26
+ return await this.poolService.acquire();
27
+ }
28
+ releaseBrowser(browser) {
29
+ this.logger.log('Releasing browser to pool', 'debug');
30
+ this.poolService.release(browser);
31
+ }
32
+ getPoolStatus() {
33
+ return {
34
+ size: this.poolService.getPoolSize(),
35
+ available: this.poolService.getAvailableCount(),
36
+ };
37
+ }
38
+ getLogLevel() {
39
+ return this.logger.getLogLevel();
40
+ }
41
+ };
42
+ exports.BrowserManagerService = BrowserManagerService;
43
+ exports.BrowserManagerService = BrowserManagerService = BrowserManagerService_1 = __decorate([
44
+ (0, common_1.Injectable)(),
45
+ __metadata("design:paramtypes", [browser_pool_service_1.BrowserPoolService])
46
+ ], BrowserManagerService);
47
+ //# sourceMappingURL=browser-manager.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-manager.service.js","sourceRoot":"","sources":["../../src/services/browser-manager.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,iEAA4D;AAC5D,wDAAyD;AAIlD,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAGH;IAFZ,MAAM,CAAkB;IAEzC,YAA6B,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;QAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,6BAAe,CAC/B,uBAAqB,CAAC,IAAI,EAC1B,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAC/B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,OAAgB;QAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,aAAa;QACX,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YACpC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;SAChD,CAAC;IACJ,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;CACF,CAAA;AA9BY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAI+B,yCAAkB;GAHjD,qBAAqB,CA8BjC"}
@@ -0,0 +1,26 @@
1
+ import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import type { Browser } from 'puppeteer';
3
+ import type { BrowserActionOptions } from '../interfaces/browser-action-options';
4
+ import type { LogLevel } from '@nestjs/common';
5
+ export declare class BrowserPoolService implements OnModuleInit, OnModuleDestroy {
6
+ private readonly options;
7
+ private readonly logger;
8
+ private pool;
9
+ private available;
10
+ private inUse;
11
+ private launchOptions;
12
+ private minSize;
13
+ private maxSize;
14
+ private currentIndex;
15
+ constructor(options: BrowserActionOptions);
16
+ onModuleInit(): Promise<void>;
17
+ getLogLevel(): LogLevel;
18
+ private createBrowser;
19
+ acquire(): Promise<Browser>;
20
+ private getNextAvailable;
21
+ private waitForAvailable;
22
+ release(browser: Browser): void;
23
+ getPoolSize(): number;
24
+ getAvailableCount(): number;
25
+ onModuleDestroy(): Promise<void>;
26
+ }
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
45
+ return function (target, key) { decorator(target, key, paramIndex); }
46
+ };
47
+ var BrowserPoolService_1;
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.BrowserPoolService = void 0;
50
+ const common_1 = require("@nestjs/common");
51
+ const puppeteer = __importStar(require("puppeteer"));
52
+ const browser_action_constants_1 = require("../constants/browser-action.constants");
53
+ const logger_util_1 = require("../helpers/logger.util");
54
+ let BrowserPoolService = BrowserPoolService_1 = class BrowserPoolService {
55
+ options;
56
+ logger;
57
+ pool = [];
58
+ available = new Set();
59
+ inUse = new Set();
60
+ launchOptions = {};
61
+ minSize = browser_action_constants_1.DEFAULT_POOL_OPTIONS.min;
62
+ maxSize = browser_action_constants_1.DEFAULT_POOL_OPTIONS.max;
63
+ currentIndex = 0;
64
+ constructor(options) {
65
+ this.options = options;
66
+ this.logger = new logger_util_1.LoggerWithLevel(BrowserPoolService_1.name, options.logLevel || 'log');
67
+ }
68
+ async onModuleInit() {
69
+ this.launchOptions = this.options.launchOptions || {};
70
+ this.minSize = this.options.pool?.min || browser_action_constants_1.DEFAULT_POOL_OPTIONS.min;
71
+ this.maxSize = this.options.pool?.max || browser_action_constants_1.DEFAULT_POOL_OPTIONS.max;
72
+ this.logger.log(`Initializing browser pool (min: ${this.minSize}, max: ${this.maxSize})`);
73
+ for (let i = 0; i < this.minSize; i++) {
74
+ const browser = await this.createBrowser();
75
+ this.pool.push(browser);
76
+ this.available.add(browser);
77
+ }
78
+ this.logger.log(`Browser pool initialized with ${this.pool.length} browsers`);
79
+ }
80
+ getLogLevel() {
81
+ return this.logger.getLogLevel();
82
+ }
83
+ async createBrowser() {
84
+ try {
85
+ const browser = await puppeteer.launch(this.launchOptions);
86
+ browser.on('disconnected', () => {
87
+ this.logger.log('Browser disconnected', 'warn');
88
+ });
89
+ return browser;
90
+ }
91
+ catch (error) {
92
+ this.logger.log('Failed to launch browser', 'error');
93
+ throw error;
94
+ }
95
+ }
96
+ async acquire() {
97
+ if (this.available.size === 0) {
98
+ if (this.pool.length < this.maxSize) {
99
+ const browser = await this.createBrowser();
100
+ this.pool.push(browser);
101
+ this.available.add(browser);
102
+ this.inUse.add(browser);
103
+ return browser;
104
+ }
105
+ await this.waitForAvailable();
106
+ }
107
+ const browser = this.getNextAvailable();
108
+ this.available.delete(browser);
109
+ this.inUse.add(browser);
110
+ return browser;
111
+ }
112
+ getNextAvailable() {
113
+ const browsers = Array.from(this.available);
114
+ const browser = browsers[this.currentIndex % browsers.length];
115
+ this.currentIndex++;
116
+ return browser;
117
+ }
118
+ waitForAvailable() {
119
+ return new Promise((resolve) => {
120
+ const checkInterval = setInterval(() => {
121
+ if (this.available.size > 0) {
122
+ clearInterval(checkInterval);
123
+ resolve();
124
+ }
125
+ }, 100);
126
+ });
127
+ }
128
+ release(browser) {
129
+ if (this.inUse.has(browser)) {
130
+ this.inUse.delete(browser);
131
+ this.available.add(browser);
132
+ }
133
+ }
134
+ getPoolSize() {
135
+ return this.pool.length;
136
+ }
137
+ getAvailableCount() {
138
+ return this.available.size;
139
+ }
140
+ async onModuleDestroy() {
141
+ this.logger.log('Closing all browsers in pool');
142
+ await Promise.all(this.pool.map(async (browser) => {
143
+ try {
144
+ if (browser.isConnected()) {
145
+ await browser.close();
146
+ }
147
+ }
148
+ catch {
149
+ this.logger.log('Error closing browser', 'error');
150
+ }
151
+ }));
152
+ this.pool = [];
153
+ this.available.clear();
154
+ this.inUse.clear();
155
+ }
156
+ };
157
+ exports.BrowserPoolService = BrowserPoolService;
158
+ exports.BrowserPoolService = BrowserPoolService = BrowserPoolService_1 = __decorate([
159
+ (0, common_1.Injectable)(),
160
+ __param(0, (0, common_1.Inject)(browser_action_constants_1.BROWSER_ACTION_OPTIONS)),
161
+ __metadata("design:paramtypes", [Object])
162
+ ], BrowserPoolService);
163
+ //# sourceMappingURL=browser-pool.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-pool.service.js","sourceRoot":"","sources":["../../src/services/browser-pool.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { CleansingPipe } from '../pipes/cleansing-pipe';
2
+ import { CleansingProfile } from '../enums/cleansing-profile.enum';
3
+ import type { PipeConfig } from '../interfaces/types';
4
+ export declare class CleansingService {
5
+ private readonly PIPE_TYPE_MAP;
6
+ cleanse<TInput = unknown, TOutput = unknown>(data: TInput, pipes: CleansingPipe<TInput, TOutput>[]): TOutput;
7
+ cleanseWithProfile<T = unknown>(data: string, profileName: CleansingProfile): T;
8
+ loadPipes(config: PipeConfig[]): CleansingPipe[];
9
+ private loadPipesSync;
10
+ }