@rafikidota/scoutee 0.12.0 → 0.15.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 (103) hide show
  1. package/dist/common/constant/boolean.constant.d.ts +3 -0
  2. package/dist/common/constant/boolean.constant.js +17 -0
  3. package/dist/common/constant/boolean.constant.js.map +1 -0
  4. package/dist/common/util/boolean.d.ts +1 -0
  5. package/dist/common/util/{boolean.validator.js → boolean.joi.js} +10 -22
  6. package/dist/common/util/boolean.joi.js.map +1 -0
  7. package/dist/common/util/boolean.js +22 -0
  8. package/dist/common/util/boolean.js.map +1 -0
  9. package/dist/common/util/boolean.zod.js +3 -14
  10. package/dist/common/util/boolean.zod.js.map +1 -1
  11. package/dist/exports/camoufox.d.ts +5 -0
  12. package/dist/exports/camoufox.js +22 -0
  13. package/dist/exports/camoufox.js.map +1 -0
  14. package/dist/exports/cheerio.d.ts +5 -0
  15. package/dist/exports/cheerio.js +22 -0
  16. package/dist/exports/cheerio.js.map +1 -0
  17. package/dist/exports/http.d.ts +5 -0
  18. package/dist/exports/http.js +22 -0
  19. package/dist/exports/http.js.map +1 -0
  20. package/dist/exports/playwright.d.ts +5 -0
  21. package/dist/exports/playwright.js +22 -0
  22. package/dist/exports/playwright.js.map +1 -0
  23. package/dist/modules/camoufox/camoufox.module.js +7 -1
  24. package/dist/modules/camoufox/camoufox.module.js.map +1 -1
  25. package/dist/modules/camoufox/camoufox.service.d.ts +2 -9
  26. package/dist/modules/camoufox/camoufox.service.js +11 -23
  27. package/dist/modules/camoufox/camoufox.service.js.map +1 -1
  28. package/dist/modules/camoufox/constant/camoufox.env.constant.d.ts +12 -10
  29. package/dist/modules/camoufox/constant/camoufox.env.constant.js +13 -11
  30. package/dist/modules/camoufox/constant/camoufox.env.constant.js.map +1 -1
  31. package/dist/modules/camoufox/env/camoufox.env.config.d.ts +9 -9
  32. package/dist/modules/camoufox/env/camoufox.env.config.js +9 -9
  33. package/dist/modules/camoufox/env/camoufox.env.config.js.map +1 -1
  34. package/dist/modules/camoufox/env/camoufox.env.validation.js +4 -4
  35. package/dist/modules/camoufox/env/camoufox.env.validation.js.map +1 -1
  36. package/dist/modules/camoufox/services/camoufox.browser.service.d.ts +2 -4
  37. package/dist/modules/camoufox/services/camoufox.browser.service.js +5 -8
  38. package/dist/modules/camoufox/services/camoufox.browser.service.js.map +1 -1
  39. package/dist/modules/camoufox/services/camoufox.config.service.d.ts +18 -0
  40. package/dist/modules/camoufox/services/camoufox.config.service.js +71 -0
  41. package/dist/modules/camoufox/services/camoufox.config.service.js.map +1 -0
  42. package/dist/modules/camoufox/services/camoufox.hook.service.d.ts +2 -3
  43. package/dist/modules/camoufox/services/camoufox.hook.service.js +3 -6
  44. package/dist/modules/camoufox/services/camoufox.hook.service.js.map +1 -1
  45. package/dist/modules/camoufox/types/camoufox.config.d.ts +12 -0
  46. package/dist/modules/camoufox/types/camoufox.config.js +3 -0
  47. package/dist/modules/camoufox/types/camoufox.config.js.map +1 -0
  48. package/dist/modules/cheerio/cheerio.module.js +2 -1
  49. package/dist/modules/cheerio/cheerio.module.js.map +1 -1
  50. package/dist/modules/cheerio/cheerio.service.d.ts +2 -7
  51. package/dist/modules/cheerio/cheerio.service.js +8 -17
  52. package/dist/modules/cheerio/cheerio.service.js.map +1 -1
  53. package/dist/modules/cheerio/constant/cheerio.env.constant.d.ts +8 -6
  54. package/dist/modules/cheerio/constant/cheerio.env.constant.js +9 -7
  55. package/dist/modules/cheerio/constant/cheerio.env.constant.js.map +1 -1
  56. package/dist/modules/cheerio/services/cheerio.config.service.d.ts +14 -0
  57. package/dist/modules/cheerio/services/cheerio.config.service.js +55 -0
  58. package/dist/modules/cheerio/services/cheerio.config.service.js.map +1 -0
  59. package/dist/modules/cheerio/types/cheerio.config.d.ts +8 -0
  60. package/dist/modules/cheerio/types/cheerio.config.js +3 -0
  61. package/dist/modules/cheerio/types/cheerio.config.js.map +1 -0
  62. package/dist/modules/http/constant/http.env.constant.d.ts +8 -6
  63. package/dist/modules/http/constant/http.env.constant.js +9 -7
  64. package/dist/modules/http/constant/http.env.constant.js.map +1 -1
  65. package/dist/modules/http/http.module.js +2 -1
  66. package/dist/modules/http/http.module.js.map +1 -1
  67. package/dist/modules/http/http.service.d.ts +2 -7
  68. package/dist/modules/http/http.service.js +9 -18
  69. package/dist/modules/http/http.service.js.map +1 -1
  70. package/dist/modules/http/services/http.config.service.d.ts +14 -0
  71. package/dist/modules/http/services/http.config.service.js +55 -0
  72. package/dist/modules/http/services/http.config.service.js.map +1 -0
  73. package/dist/modules/http/types/http.config.d.ts +8 -0
  74. package/dist/modules/http/types/http.config.js +3 -0
  75. package/dist/modules/http/types/http.config.js.map +1 -0
  76. package/dist/modules/playwright/constant/playwright.env.constant.d.ts +12 -10
  77. package/dist/modules/playwright/constant/playwright.env.constant.js +13 -11
  78. package/dist/modules/playwright/constant/playwright.env.constant.js.map +1 -1
  79. package/dist/modules/playwright/env/playwright.env.config.d.ts +9 -9
  80. package/dist/modules/playwright/env/playwright.env.config.js +9 -9
  81. package/dist/modules/playwright/env/playwright.env.config.js.map +1 -1
  82. package/dist/modules/playwright/env/playwright.env.validation.js +4 -4
  83. package/dist/modules/playwright/env/playwright.env.validation.js.map +1 -1
  84. package/dist/modules/playwright/playwright.module.js +2 -0
  85. package/dist/modules/playwright/playwright.module.js.map +1 -1
  86. package/dist/modules/playwright/playwright.service.d.ts +2 -9
  87. package/dist/modules/playwright/playwright.service.js +11 -23
  88. package/dist/modules/playwright/playwright.service.js.map +1 -1
  89. package/dist/modules/playwright/services/playwright.browser.service.d.ts +2 -4
  90. package/dist/modules/playwright/services/playwright.browser.service.js +5 -8
  91. package/dist/modules/playwright/services/playwright.browser.service.js.map +1 -1
  92. package/dist/modules/playwright/services/playwright.config.service.d.ts +19 -0
  93. package/dist/modules/playwright/services/playwright.config.service.js +71 -0
  94. package/dist/modules/playwright/services/playwright.config.service.js.map +1 -0
  95. package/dist/modules/playwright/services/playwright.hook.service.d.ts +2 -3
  96. package/dist/modules/playwright/services/playwright.hook.service.js +3 -6
  97. package/dist/modules/playwright/services/playwright.hook.service.js.map +1 -1
  98. package/dist/modules/playwright/types/playwright.config.d.ts +13 -0
  99. package/dist/modules/playwright/types/playwright.config.js +3 -0
  100. package/dist/modules/playwright/types/playwright.config.js.map +1 -0
  101. package/package.json +23 -1
  102. package/dist/common/util/boolean.validator.js.map +0 -1
  103. /package/dist/common/util/{boolean.validator.d.ts → boolean.joi.d.ts} +0 -0
@@ -11,16 +11,13 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.PlaywrightHookService = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
- const config_1 = require("@nestjs/config");
15
14
  const logger_1 = require("../../../common/logger/logger");
16
15
  const playwright_service_1 = require("../playwright.service");
17
- const playwright_env_constant_1 = require("../constant/playwright.env.constant");
16
+ const playwright_config_service_1 = require("./playwright.config.service");
18
17
  let PlaywrightHookService = class PlaywrightHookService {
19
18
  constructor(config) {
20
19
  this.config = config;
21
20
  this.logger = new logger_1.Logger(playwright_service_1.PlaywrightService.name);
22
- const enabled = this.config.get(playwright_env_constant_1.HANDLE_CLOUDFLARE_CHALLENGE, false);
23
- this.shouldHandleCloudflareChallenge = enabled;
24
21
  }
25
22
  getPreNavigationHooks() {
26
23
  return [
@@ -32,7 +29,7 @@ let PlaywrightHookService = class PlaywrightHookService {
32
29
  getPostNavigationHooks() {
33
30
  return [
34
31
  async ({ handleCloudflareChallenge }) => {
35
- if (this.shouldHandleCloudflareChallenge) {
32
+ if (this.config.handleCloudflareChallenge) {
36
33
  await handleCloudflareChallenge();
37
34
  }
38
35
  },
@@ -75,6 +72,6 @@ let PlaywrightHookService = class PlaywrightHookService {
75
72
  exports.PlaywrightHookService = PlaywrightHookService;
76
73
  exports.PlaywrightHookService = PlaywrightHookService = __decorate([
77
74
  (0, common_1.Injectable)(),
78
- __metadata("design:paramtypes", [config_1.ConfigService])
75
+ __metadata("design:paramtypes", [playwright_config_service_1.PlaywrightConfigService])
79
76
  ], PlaywrightHookService);
80
77
  //# sourceMappingURL=playwright.hook.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"playwright.hook.service.js","sourceRoot":"","sources":["../../../../src/modules/playwright/services/playwright.hook.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwD;AACxD,2CAA+C;AAG/C,0DAAuD;AACvD,8DAA0D;AAC1D,iFAAgG;AAGzF,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAIhC,YAA6B,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;QAHjC,WAAM,GAAG,IAAI,eAAM,CAAC,sCAAiB,CAAC,IAAI,CAAC,CAAC;QAI3D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAU,qDAAU,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,+BAA+B,GAAG,OAAO,CAAC;IACjD,CAAC;IAED,qBAAqB;QACnB,OAAO;YACL,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACvC,CAAC;SACF,CAAC;IACJ,CAAC;IAED,sBAAsB;QACpB,OAAO;YACL,KAAK,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE;gBACtC,IAAI,IAAI,CAAC,+BAA+B,EAAE,CAAC;oBACzC,MAAM,yBAAyB,EAAE,CAAC;gBACpC,CAAC;YACH,CAAC;YACD,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACxB,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;gBACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAErC,QAAQ,UAAwB,EAAE,CAAC;oBACjC,KAAK,mBAAU,CAAC,EAAE;wBAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC1C,MAAM;oBACR,KAAK,mBAAU,CAAC,WAAW;wBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR,KAAK,mBAAU,CAAC,YAAY;wBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR,KAAK,mBAAU,CAAC,SAAS;wBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR,KAAK,mBAAU,CAAC,iBAAiB;wBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC3C,MAAM;oBACR,KAAK,mBAAU,CAAC,qBAAqB;wBACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR,KAAK,mBAAU,CAAC,WAAW;wBACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR,KAAK,mBAAU,CAAC,mBAAmB;wBACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR;wBACE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC3C,MAAM;gBACV,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA5DY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAK0B,sBAAa;GAJvC,qBAAqB,CA4DjC"}
1
+ {"version":3,"file":"playwright.hook.service.js","sourceRoot":"","sources":["../../../../src/modules/playwright/services/playwright.hook.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwD;AAGxD,0DAAuD;AACvD,8DAA0D;AAC1D,2EAAsE;AAG/D,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAGhC,YAA6B,MAA+B;QAA/B,WAAM,GAAN,MAAM,CAAyB;QAF3C,WAAM,GAAG,IAAI,eAAM,CAAC,sCAAiB,CAAC,IAAI,CAAC,CAAC;IAEE,CAAC;IAEhE,qBAAqB;QACnB,OAAO;YACL,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACvC,CAAC;SACF,CAAC;IACJ,CAAC;IAED,sBAAsB;QACpB,OAAO;YACL,KAAK,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE;gBACtC,IAAI,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,CAAC;oBAC1C,MAAM,yBAAyB,EAAE,CAAC;gBACpC,CAAC;YACH,CAAC;YACD,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACxB,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;gBACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAErC,QAAQ,UAAwB,EAAE,CAAC;oBACjC,KAAK,mBAAU,CAAC,EAAE;wBAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC1C,MAAM;oBACR,KAAK,mBAAU,CAAC,WAAW;wBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR,KAAK,mBAAU,CAAC,YAAY;wBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR,KAAK,mBAAU,CAAC,SAAS;wBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR,KAAK,mBAAU,CAAC,iBAAiB;wBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC3C,MAAM;oBACR,KAAK,mBAAU,CAAC,qBAAqB;wBACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR,KAAK,mBAAU,CAAC,WAAW;wBACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR,KAAK,mBAAU,CAAC,mBAAmB;wBACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACR;wBACE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC3C,MAAM;gBACV,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAxDY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAI0B,mDAAuB;GAHjD,qBAAqB,CAwDjC"}
@@ -0,0 +1,13 @@
1
+ import { BrowserType } from '../enum/playwright.browser-type.enum';
2
+ export type PlaywrightConfig = {
3
+ maxRequests: number;
4
+ timeoutSecs: number;
5
+ maxConcurrency: number;
6
+ minConcurrency: number;
7
+ maxRequestRetries: number;
8
+ initialPage: number;
9
+ browser: BrowserType;
10
+ headless: boolean;
11
+ useIncognitoPages: boolean;
12
+ handleCloudflareChallenge: boolean;
13
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=playwright.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright.config.js","sourceRoot":"","sources":["../../../../src/modules/playwright/types/playwright.config.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rafikidota/scoutee",
3
- "version": "0.12.0",
3
+ "version": "0.15.0",
4
4
  "description": "Sometimes, the best way to solve your own problems is to help someone else.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,6 +14,28 @@
14
14
  "main": "./dist/index.js",
15
15
  "module": "./dist/index.js",
16
16
  "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "./cheerio": {
23
+ "types": "./dist/exports/cheerio.d.ts",
24
+ "default": "./dist/exports/cheerio.js"
25
+ },
26
+ "./http": {
27
+ "types": "./dist/exports/http.d.ts",
28
+ "default": "./dist/exports/http.js"
29
+ },
30
+ "./playwright": {
31
+ "types": "./dist/exports/playwright.d.ts",
32
+ "default": "./dist/exports/playwright.js"
33
+ },
34
+ "./camoufox": {
35
+ "types": "./dist/exports/camoufox.d.ts",
36
+ "default": "./dist/exports/camoufox.js"
37
+ }
38
+ },
17
39
  "devDependencies": {
18
40
  "@crawlee/playwright": "3.16.0",
19
41
  "@eslint/eslintrc": "3.3.3",
@@ -1 +0,0 @@
1
- {"version":3,"file":"boolean.validator.js","sourceRoot":"","sources":["../../../src/common/util/boolean.validator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAC3B,uEAAkE;AAErD,QAAA,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAChD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,YAAY,GAAG;YACnB,yCAAkB,CAAC,IAAI;YACvB,yCAAkB,CAAC,GAAG;YACtB,yCAAkB,CAAC,GAAG;YACtB,yCAAkB,CAAC,EAAE;SACtB,CAAC;QAEF,MAAM,WAAW,GAAG;YAClB,yCAAkB,CAAC,KAAK;YACxB,yCAAkB,CAAC,IAAI;YACvB,yCAAkB,CAAC,EAAE;YACrB,yCAAkB,CAAC,GAAG;SACvB,CAAC;QAEF,IAAI,YAAY,CAAC,QAAQ,CAAC,OAA6B,CAAC,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,WAAW,CAAC,QAAQ,CAAC,OAA6B,CAAC,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE;YACnC,KAAK;YACL,WAAW,EAAE,CAAC,GAAG,YAAY,EAAE,GAAG,WAAW,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC"}