@intuned/browser-dev 2.2.3-unify-sdks.20

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 (195) hide show
  1. package/.babelrc +21 -0
  2. package/.eslintignore +10 -0
  3. package/.eslintrc.js +39 -0
  4. package/LICENSE +43 -0
  5. package/dist/ai-extractors/AnthropicClient/index.js +23 -0
  6. package/dist/ai-extractors/export.d.js +5 -0
  7. package/dist/ai-extractors/export.d.ts +422 -0
  8. package/dist/ai-extractors/extractStructuredData.js +79 -0
  9. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/constants.js +7 -0
  10. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/errors.js +42 -0
  11. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStructuredDataUsingClaude.js +149 -0
  12. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStructuredDataUsingGoogle.js +37 -0
  13. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStructuredDataUsingOpenAi.js +144 -0
  14. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStrucutredDataUsingAiInstance.js +123 -0
  15. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/index.js +55 -0
  16. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/isItemTableHeaderOrFooter.js +96 -0
  17. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/screenshotHelpers.js +55 -0
  18. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/types.js +5 -0
  19. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/utils.js +53 -0
  20. package/dist/ai-extractors/extractionHelpers/types.js +5 -0
  21. package/dist/ai-extractors/fileExtractors.js +176 -0
  22. package/dist/ai-extractors/index.js +31 -0
  23. package/dist/ai-extractors/jsonSchema.d.js +5 -0
  24. package/dist/ai-extractors/jsonSchema.d.ts +49 -0
  25. package/dist/ai-extractors/openAiClients/index.js +23 -0
  26. package/dist/ai-extractors/validators.js +239 -0
  27. package/dist/browser/ai/export.d.js +3 -0
  28. package/dist/browser/ai/export.d.ts +587 -0
  29. package/dist/browser/ai/extractMarkdown.js +15 -0
  30. package/dist/browser/ai/extractStructuredData.js +231 -0
  31. package/dist/browser/ai/extractStructuredDataUsingAi.js +140 -0
  32. package/dist/browser/ai/extractionHelpers/screenshotHelpers.js +55 -0
  33. package/dist/browser/ai/extractionHelpers/validateSchema.js +148 -0
  34. package/dist/browser/ai/index.d.ts +587 -0
  35. package/dist/browser/ai/index.js +19 -0
  36. package/dist/browser/ai/isPageLoaded.js +67 -0
  37. package/dist/browser/ai/prompt.js +39 -0
  38. package/dist/browser/ai/tests/testCheckAllTypesAreStrings.spec.js +143 -0
  39. package/dist/browser/ai/tests/testExtractStructuredData.spec.js +622 -0
  40. package/dist/browser/ai/tools/index.js +48 -0
  41. package/dist/browser/ai/types/errors.js +67 -0
  42. package/dist/browser/ai/types/models.js +45 -0
  43. package/dist/browser/ai/types/types.js +48 -0
  44. package/dist/browser/ai/validators.js +136 -0
  45. package/dist/common/Logger/index.js +60 -0
  46. package/dist/common/Logger/types.js +5 -0
  47. package/dist/common/SdkError.js +50 -0
  48. package/dist/common/aiModelsValidations.js +50 -0
  49. package/dist/common/browser_scripts.js +2596 -0
  50. package/dist/common/ensureBrowserScripts.js +17 -0
  51. package/dist/common/environmentVariables.js +16 -0
  52. package/dist/common/eventTracking/getAiTrackingHeaders.js +31 -0
  53. package/dist/common/eventTracking/getFileTrackingHeaders.js +23 -0
  54. package/dist/common/extendedTest.js +148 -0
  55. package/dist/common/extractionHelpers.js +19 -0
  56. package/dist/common/formatZodError.js +18 -0
  57. package/dist/common/fuzzySearch/fuzzySearch.test.js +250 -0
  58. package/dist/common/fuzzySearch/levenshtein-search.js +298 -0
  59. package/dist/common/fuzzySearch/utils.js +23 -0
  60. package/dist/common/getModelProvider.js +18 -0
  61. package/dist/common/getSimplifiedHtml.js +122 -0
  62. package/dist/common/hashObject.js +32 -0
  63. package/dist/common/html2markdown/convertElementToMarkdown.js +469 -0
  64. package/dist/common/html2markdown/index.js +19 -0
  65. package/dist/common/jwtTokenManager.js +18 -0
  66. package/dist/common/loadRuntime.js +16 -0
  67. package/dist/common/locatorHelpers.js +41 -0
  68. package/dist/common/matching/collectStrings.js +32 -0
  69. package/dist/common/matching/levenshtein.js +40 -0
  70. package/dist/common/matching/matching.js +317 -0
  71. package/dist/common/matching/types.js +1 -0
  72. package/dist/common/noEmpty.js +9 -0
  73. package/dist/common/saveSnapshotWithExamples.js +60 -0
  74. package/dist/common/tests/testEnsureBrowserScript.spec.js +31 -0
  75. package/dist/common/xpathMapping.js +107 -0
  76. package/dist/helpers/downloadFile.js +125 -0
  77. package/dist/helpers/export.d.js +1 -0
  78. package/dist/helpers/export.d.ts +1294 -0
  79. package/dist/helpers/extractMarkdown.js +35 -0
  80. package/dist/helpers/filterEmptyValues.js +54 -0
  81. package/dist/helpers/gotoUrl.js +93 -0
  82. package/dist/helpers/index.d.ts +1294 -0
  83. package/dist/helpers/index.js +115 -0
  84. package/dist/helpers/processDate.js +25 -0
  85. package/dist/helpers/resolveUrl.js +63 -0
  86. package/dist/helpers/sanitizeHtml.js +73 -0
  87. package/dist/helpers/saveFileToS3.js +46 -0
  88. package/dist/helpers/scrollToLoadContent.js +50 -0
  89. package/dist/helpers/tests/extendedTest.js +130 -0
  90. package/dist/helpers/tests/testDownloadFile.spec.js +197 -0
  91. package/dist/helpers/tests/testFilterEmptyValues.spec.js +151 -0
  92. package/dist/helpers/tests/testGoToUrl.spec.js +37 -0
  93. package/dist/helpers/tests/testIsPageLoaded.spec.js +285 -0
  94. package/dist/helpers/tests/testProcessDate.spec.js +13 -0
  95. package/dist/helpers/tests/testResolveUrl.spec.js +341 -0
  96. package/dist/helpers/tests/testSanitizeHtml.spec.js +330 -0
  97. package/dist/helpers/tests/testSimplifyHtml.spec.js +251 -0
  98. package/dist/helpers/tests/testValidateDataUsingSchema.spec.js +380 -0
  99. package/dist/helpers/tests/testWaitForDomSettled.spec.js +169 -0
  100. package/dist/helpers/tests/testWaitForNetworkIdle.spec.js +115 -0
  101. package/dist/helpers/types/Attachment.js +81 -0
  102. package/dist/helpers/types/CustomTypeRegistry.js +48 -0
  103. package/dist/helpers/types/RunEnvironment.js +18 -0
  104. package/dist/helpers/types/ValidationError.js +17 -0
  105. package/dist/helpers/types/index.js +51 -0
  106. package/dist/helpers/uploadFileToS3.js +153 -0
  107. package/dist/helpers/utils/getS3Client.js +21 -0
  108. package/dist/helpers/utils/index.js +73 -0
  109. package/dist/helpers/utils/isDownload.js +10 -0
  110. package/dist/helpers/utils/isGenerateCodeMode.js +9 -0
  111. package/dist/helpers/utils/isLocator.js +9 -0
  112. package/dist/helpers/utils/jwtTokenManager.js +18 -0
  113. package/dist/helpers/validateDataUsingSchema.js +119 -0
  114. package/dist/helpers/waitForDomSettled.js +182 -0
  115. package/dist/helpers/waitForNetworkIdle.js +191 -0
  116. package/dist/index.d.js +82 -0
  117. package/dist/index.d.ts +11 -0
  118. package/dist/index.js +84 -0
  119. package/dist/intunedServices/ApiGateway/aiApiGateway.js +87 -0
  120. package/dist/intunedServices/ApiGateway/factory.js +13 -0
  121. package/dist/intunedServices/ApiGateway/providers/Anthropic.js +26 -0
  122. package/dist/intunedServices/ApiGateway/providers/Gemini.js +29 -0
  123. package/dist/intunedServices/ApiGateway/providers/OpenAI.js +29 -0
  124. package/dist/intunedServices/ApiGateway/tests/testApiGateway.spec.js +221 -0
  125. package/dist/intunedServices/ApiGateway/types.js +11 -0
  126. package/dist/intunedServices/cache/cache.js +61 -0
  127. package/dist/intunedServices/cache/index.js +12 -0
  128. package/dist/intunedServices/cache/tests/testCache.spec.js +117 -0
  129. package/dist/optimized-extractors/common/buildExamplesPrompt.js +12 -0
  130. package/dist/optimized-extractors/common/buildImagesFromPage.js +55 -0
  131. package/dist/optimized-extractors/common/extractStructuredDataUsingClaude.js +149 -0
  132. package/dist/optimized-extractors/common/extractStructuredDataUsingGoogle.js +37 -0
  133. package/dist/optimized-extractors/common/extractStructuredDataUsingOpenAi.js +145 -0
  134. package/dist/optimized-extractors/common/extractStrucutredDataUsingAiInstance.js +122 -0
  135. package/dist/optimized-extractors/common/findTableHeaders.js +175 -0
  136. package/dist/optimized-extractors/common/index.js +55 -0
  137. package/dist/optimized-extractors/common/isTableHeaderOrFooter.js +97 -0
  138. package/dist/optimized-extractors/common/matching/matching.js +212 -0
  139. package/dist/optimized-extractors/common/matching/matching.test.js +655 -0
  140. package/dist/optimized-extractors/common/matching/types.js +18 -0
  141. package/dist/optimized-extractors/common/matching/utils.js +184 -0
  142. package/dist/optimized-extractors/common/utils.js +58 -0
  143. package/dist/optimized-extractors/export.d.js +5 -0
  144. package/dist/optimized-extractors/export.d.ts +397 -0
  145. package/dist/optimized-extractors/extractArray.js +120 -0
  146. package/dist/optimized-extractors/extractObject.js +104 -0
  147. package/dist/optimized-extractors/index.d.ts +397 -0
  148. package/dist/optimized-extractors/index.js +31 -0
  149. package/dist/optimized-extractors/listExtractionHelpers/__tests__/dynamicListExtractor.spec.js +312 -0
  150. package/dist/optimized-extractors/listExtractionHelpers/__tests__/findSetOfXpathsToCreateAnArrayExtractor.test.js +22 -0
  151. package/dist/optimized-extractors/listExtractionHelpers/__tests__/getContainerElement.test.js +21 -0
  152. package/dist/optimized-extractors/listExtractionHelpers/__tests__/partOfSameArrayXpath.test.js +42 -0
  153. package/dist/optimized-extractors/listExtractionHelpers/__tests__/verifyThatAllXpathsArePartOfSameArray.test.js +9 -0
  154. package/dist/optimized-extractors/listExtractionHelpers/dynamicListExtractor.js +152 -0
  155. package/dist/optimized-extractors/listExtractionHelpers/errors.js +46 -0
  156. package/dist/optimized-extractors/listExtractionHelpers/getListMatches.js +14 -0
  157. package/dist/optimized-extractors/listExtractionHelpers/runAiExtraction.js +240 -0
  158. package/dist/optimized-extractors/listExtractionHelpers/typesAndSchema.js +5 -0
  159. package/dist/optimized-extractors/listExtractionHelpers/utils/extractPropertiesUsingGPTFromArray.js +277 -0
  160. package/dist/optimized-extractors/listExtractionHelpers/utils/extractStructuredListUsingAi.js +44 -0
  161. package/dist/optimized-extractors/listExtractionHelpers/utils/getListContainerXpath.js +94 -0
  162. package/dist/optimized-extractors/listExtractionHelpers/utils/getRelativeContainerXpathSelector.js +20 -0
  163. package/dist/optimized-extractors/listExtractionHelpers/utils/getSimplifiedHtmlPerListItem.js +21 -0
  164. package/dist/optimized-extractors/listExtractionHelpers/utils/tablesUtils.js +48 -0
  165. package/dist/optimized-extractors/listExtractionHelpers/utils/validateOptions.js +52 -0
  166. package/dist/optimized-extractors/models/anthropicModel.js +23 -0
  167. package/dist/optimized-extractors/models/openaiModel.js +23 -0
  168. package/dist/optimized-extractors/objectExtractionHelpers/AIExtractors.js +73 -0
  169. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/checksumUtils.test.js +103 -0
  170. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromLocator.spec.js +107 -0
  171. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromPage.spec.js +107 -0
  172. package/dist/optimized-extractors/objectExtractionHelpers/calculateObjectExampleHash.js +28 -0
  173. package/dist/optimized-extractors/objectExtractionHelpers/captureSnapshot.js +26 -0
  174. package/dist/optimized-extractors/objectExtractionHelpers/checksumUtils.js +32 -0
  175. package/dist/optimized-extractors/objectExtractionHelpers/constants.js +7 -0
  176. package/dist/optimized-extractors/objectExtractionHelpers/dynamicObjectExtractor.js +106 -0
  177. package/dist/optimized-extractors/objectExtractionHelpers/errors.js +42 -0
  178. package/dist/optimized-extractors/objectExtractionHelpers/findDomMatches.js +54 -0
  179. package/dist/optimized-extractors/objectExtractionHelpers/getSimplifiedHtml.js +122 -0
  180. package/dist/optimized-extractors/objectExtractionHelpers/typesAndSchemas.js +5 -0
  181. package/dist/optimized-extractors/objectExtractionHelpers/validateDynamicObjectExtractorOptions.js +52 -0
  182. package/dist/optimized-extractors/types/aiModelsValidation.js +45 -0
  183. package/dist/optimized-extractors/types/errors.js +42 -0
  184. package/dist/optimized-extractors/types/jsonSchema.d.js +5 -0
  185. package/dist/optimized-extractors/types/jsonSchema.d.ts +50 -0
  186. package/dist/optimized-extractors/types/types.js +5 -0
  187. package/dist/optimized-extractors/validators.js +152 -0
  188. package/dist/vite-env.d.js +1 -0
  189. package/dist/vite-env.d.ts +9 -0
  190. package/docs.md +14 -0
  191. package/how-to-run-tests.md +10 -0
  192. package/intuned-runtime-setup.md +13 -0
  193. package/package.json +124 -0
  194. package/tsconfig.eslint.json +5 -0
  195. package/tsconfig.json +26 -0
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+
3
+ var _extendedTest = require("./extendedTest");
4
+ var _playwrightCore = require("playwright-core");
5
+ var _getSimplifiedHtml = require("../../common/getSimplifiedHtml");
6
+ (0, _extendedTest.describe)("HTML Simplification Tests", () => {
7
+ let browser;
8
+ let page;
9
+ (0, _extendedTest.beforeAll)(async () => {
10
+ browser = await _playwrightCore.chromium.launch({
11
+ headless: false
12
+ });
13
+ });
14
+ (0, _extendedTest.afterAll)(async () => {
15
+ await browser.close();
16
+ });
17
+ (0, _extendedTest.beforeEach)(async () => {
18
+ page = await browser.newPage();
19
+ });
20
+ (0, _extendedTest.afterEach)(async () => {
21
+ await page.close();
22
+ });
23
+ (0, _extendedTest.test)("should perform basic HTML simplification", async () => {
24
+ await page.setContent(`
25
+ <html>
26
+ <head><title>Basic Test</title></head>
27
+ <body>
28
+ <h1>Main Heading</h1>
29
+ <p>This is a paragraph with some text content.</p>
30
+ <div>
31
+ <span>Nested content</span>
32
+ <ul>
33
+ <li>List item 1</li>
34
+ <li>List item 2</li>
35
+ </ul>
36
+ </div>
37
+ <img src="test.jpg" alt="Test image">
38
+ </body>
39
+ </html>
40
+ `);
41
+ await page.waitForTimeout(1000);
42
+ const bodyHandle = await page.locator("body").elementHandle();
43
+ (0, _extendedTest.expect)(bodyHandle).not.toBeNull();
44
+ const simplifiedHtml = await (0, _getSimplifiedHtml.getSimplifiedHtml)(bodyHandle);
45
+ console.log(simplifiedHtml);
46
+ (0, _extendedTest.expect)(simplifiedHtml).toBeTruthy();
47
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("<body");
48
+ });
49
+ (0, _extendedTest.test)("should handle interactive elements", async () => {
50
+ await page.setContent(`
51
+ <html>
52
+ <body>
53
+ <form>
54
+ <input type="text" name="username" placeholder="Enter username">
55
+ <input type="password" name="password" placeholder="Enter password">
56
+ <textarea name="comments" placeholder="Your comments"></textarea>
57
+ <select name="country">
58
+ <option value="us">United States</option>
59
+ <option value="uk">United Kingdom</option>
60
+ </select>
61
+ <button type="submit">Submit</button>
62
+ <button type="button" onclick="alert('clicked')">Click Me</button>
63
+ </form>
64
+ <a href="https://example.com">Link to example</a>
65
+ <div style="cursor: pointer;">Clickable div</div>
66
+ <span onmousedown="console.log('mouse down')">Mouse event span</span>
67
+ </body>
68
+ </html>
69
+ `);
70
+ await page.waitForTimeout(2000);
71
+ const bodyHandle = await page.locator("body").elementHandle();
72
+ (0, _extendedTest.expect)(bodyHandle).not.toBeNull();
73
+ const simplifiedHtml = await (0, _getSimplifiedHtml.getSimplifiedHtml)(bodyHandle);
74
+ console.log(simplifiedHtml);
75
+ (0, _extendedTest.expect)(simplifiedHtml).toBeTruthy();
76
+ const lowerHtml = simplifiedHtml.toLowerCase();
77
+ const hasInteractiveElements = ["input", "button", "textarea"].some(tag => lowerHtml.includes(tag));
78
+ (0, _extendedTest.expect)(hasInteractiveElements).toBe(true);
79
+ });
80
+ (0, _extendedTest.test)("should work with options", async () => {
81
+ await page.setContent(`
82
+ <html>
83
+ <body>
84
+ <div onclick="handleClick()">Clickable content</div>
85
+ <button onclick="submitForm()">Submit Form</button>
86
+ <a href="#" onclick="navigate()">Navigation Link</a>
87
+ <span onmouseup="handleMouse()">Mouse handler</span>
88
+ <div onkeydown="handleKey()">Key handler</div>
89
+ <p>Regular paragraph with lots of text content that should be included as content prop</p>
90
+ <article>
91
+ <h2>Article Title</h2>
92
+ <p>Article content with meaningful text that should be preserved</p>
93
+ </article>
94
+ </body>
95
+ </html>
96
+ `);
97
+ await page.waitForTimeout(1000);
98
+ const bodyHandle = await page.locator("body").elementHandle();
99
+ (0, _extendedTest.expect)(bodyHandle).not.toBeNull();
100
+ const simplifiedHtml = await (0, _getSimplifiedHtml.getSimplifiedHtml)(bodyHandle, {
101
+ shouldIncludeOnClick: true,
102
+ shouldIncludeContentAsProp: true
103
+ });
104
+ console.log(simplifiedHtml);
105
+ (0, _extendedTest.expect)(simplifiedHtml).toBeTruthy();
106
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("<body");
107
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("onclick");
108
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("content=");
109
+ });
110
+ (0, _extendedTest.test)("should filter invisible elements", async () => {
111
+ await page.setContent(`
112
+ <html>
113
+ <body>
114
+ <div style="display: none;">Hidden div</div>
115
+ <div>Visible div</div>
116
+ <button style="visibility: hidden;">Hidden button</button>
117
+ <button>Visible button</button>
118
+ <span style="opacity: 0;">Invisible span</span>
119
+ <span>Visible span</span>
120
+ <p style="display: block;">Visible paragraph</p>
121
+ </body>
122
+ </html>
123
+ `);
124
+ const bodyHandle = await page.locator("body").elementHandle();
125
+ (0, _extendedTest.expect)(bodyHandle).not.toBeNull();
126
+ const simplifiedHtml = await (0, _getSimplifiedHtml.getSimplifiedHtml)(bodyHandle, {
127
+ keepOnlyVisibleElements: true
128
+ });
129
+ console.log(simplifiedHtml);
130
+ (0, _extendedTest.expect)(simplifiedHtml.includes("Visible div") || simplifiedHtml.toLowerCase().includes("visible")).toBe(true);
131
+ (0, _extendedTest.expect)(simplifiedHtml).not.toContain("Hidden div");
132
+ (0, _extendedTest.expect)(simplifiedHtml).not.toContain("Hidden button");
133
+ (0, _extendedTest.expect)(simplifiedHtml).not.toContain("Invisible span");
134
+ });
135
+ (0, _extendedTest.test)("should handle full HTML element", async () => {
136
+ await page.setContent(`
137
+ <html lang="en">
138
+ <head>
139
+ <title>Full HTML Test</title>
140
+ <meta charset="UTF-8">
141
+ </head>
142
+ <body>
143
+ <header>
144
+ <h1>Website Header</h1>
145
+ <nav>
146
+ <a href="/">Home</a>
147
+ <a href="/about">About</a>
148
+ </nav>
149
+ </header>
150
+ <main>
151
+ <section>
152
+ <h2>Main Section</h2>
153
+ <p>Main content area</p>
154
+ </section>
155
+ </main>
156
+ <footer>
157
+ <p>&copy; 2024 Test Site</p>
158
+ </footer>
159
+ </body>
160
+ </html>
161
+ `);
162
+ await page.waitForTimeout(1000);
163
+ const htmlHandle = await page.locator("html").elementHandle();
164
+ (0, _extendedTest.expect)(htmlHandle).not.toBeNull();
165
+ const simplifiedHtml = await (0, _getSimplifiedHtml.getSimplifiedHtml)(htmlHandle);
166
+ console.log(simplifiedHtml);
167
+ (0, _extendedTest.expect)(simplifiedHtml).toBeTruthy();
168
+ (0, _extendedTest.expect)(simplifiedHtml.startsWith("<html")).toBe(true);
169
+ });
170
+ (0, _extendedTest.test)("should preserve allowed attributes", async () => {
171
+ await page.setContent(`
172
+ <html>
173
+ <body>
174
+ <div aria-label="Main content area" data-testid="main-div" data-custom="value">
175
+ <input type="text" name="search" placeholder="Search..." value="test value">
176
+ <button role="button" title="Submit search">Search</button>
177
+ <a href="https://example.com" id="main-link">External Link</a>
178
+ <img src="test.jpg" alt="Test image" data-src="fallback.jpg">
179
+ </div>
180
+ <form data-form-id="contact">
181
+ <input type="email" name="email" placeholder="Your email">
182
+ <textarea name="message" placeholder="Your message" title="Message field"></textarea>
183
+ </form>
184
+ </body>
185
+ </html>
186
+ `);
187
+ const bodyHandle = await page.locator("body").elementHandle();
188
+ (0, _extendedTest.expect)(bodyHandle).not.toBeNull();
189
+ const simplifiedHtml = await (0, _getSimplifiedHtml.getSimplifiedHtml)(bodyHandle);
190
+ console.log(simplifiedHtml);
191
+ (0, _extendedTest.expect)(simplifiedHtml).toBeTruthy();
192
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("aria-label=");
193
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("data-");
194
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("name=");
195
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("type=");
196
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("placeholder=");
197
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("role=");
198
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("title=");
199
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("href=");
200
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("id=");
201
+ (0, _extendedTest.expect)(simplifiedHtml).toContain("alt=");
202
+ });
203
+ (0, _extendedTest.test)("should handle input elements with values", async () => {
204
+ await page.setContent(`
205
+ <html>
206
+ <body>
207
+ <form>
208
+ <input type="text" name="filled" value="has value" style="display: none;">
209
+ <input type="text" name="empty" value="" style="display: none;">
210
+ <input type="hidden" name="hidden" value="hidden value">
211
+ <input type="text" name="visible" value="visible value">
212
+ </form>
213
+ </body>
214
+ </html>
215
+ `);
216
+ const bodyHandle = await page.locator("body").elementHandle();
217
+ (0, _extendedTest.expect)(bodyHandle).not.toBeNull();
218
+ const simplifiedHtml = await (0, _getSimplifiedHtml.getSimplifiedHtml)(bodyHandle);
219
+ console.log(simplifiedHtml);
220
+ (0, _extendedTest.expect)(simplifiedHtml).toBeTruthy();
221
+ (0, _extendedTest.expect)(simplifiedHtml.includes('value="has value"') || simplifiedHtml.includes("has value")).toBe(true);
222
+ (0, _extendedTest.expect)(simplifiedHtml.includes('value="hidden value"') || simplifiedHtml.includes("hidden value")).toBe(true);
223
+ });
224
+ (0, _extendedTest.test)("should handle iframe elements", async () => {
225
+ await page.setContent(`
226
+ <html>
227
+ <body>
228
+ <div>Main content</div>
229
+ <iframe src="about:blank" title="Test iframe">
230
+ <p>Iframe fallback content</p>
231
+ </iframe>
232
+ <div>More content after iframe</div>
233
+ </body>
234
+ </html>
235
+ `);
236
+ const bodyHandle = await page.locator("body").elementHandle();
237
+ (0, _extendedTest.expect)(bodyHandle).not.toBeNull();
238
+ const simplifiedHtmlNoIframe = await (0, _getSimplifiedHtml.getSimplifiedHtml)(bodyHandle, {
239
+ shouldIncludeIframes: false
240
+ });
241
+ const simplifiedHtmlWithIframe = await (0, _getSimplifiedHtml.getSimplifiedHtml)(bodyHandle, {
242
+ shouldIncludeIframes: true
243
+ });
244
+ console.log("Without iframe:", simplifiedHtmlNoIframe);
245
+ console.log("With iframe:", simplifiedHtmlWithIframe);
246
+ (0, _extendedTest.expect)(simplifiedHtmlNoIframe).toBeTruthy();
247
+ (0, _extendedTest.expect)(simplifiedHtmlWithIframe).toBeTruthy();
248
+ (0, _extendedTest.expect)(simplifiedHtmlNoIframe).toContain("Main content");
249
+ (0, _extendedTest.expect)(simplifiedHtmlWithIframe).toContain("Main content");
250
+ });
251
+ });
@@ -0,0 +1,380 @@
1
+ "use strict";
2
+
3
+ var _types = require("../types");
4
+ var _validateDataUsingSchema = require("../validateDataUsingSchema");
5
+ var _extendedTest = require("./extendedTest");
6
+ (0, _extendedTest.describe)("Data Validation Tests", () => {
7
+ (0, _extendedTest.describe)("clean_data function", () => {
8
+ const testCases = [[{
9
+ name: "test",
10
+ empty: "",
11
+ none: null,
12
+ age: 25
13
+ }, {
14
+ name: "test",
15
+ age: 25
16
+ }, "should clean object with empty string and null values"], [[{
17
+ name: "test1",
18
+ empty: ""
19
+ }, {
20
+ name: "test2",
21
+ none: null
22
+ }], [{
23
+ name: "test1"
24
+ }, {
25
+ name: "test2"
26
+ }], "should clean array of objects with empty values"], [{
27
+ name: "test",
28
+ nested: {
29
+ key: "value",
30
+ empty: ""
31
+ }
32
+ }, {
33
+ name: "test",
34
+ nested: {
35
+ key: "value"
36
+ }
37
+ }, "should clean nested object with empty values"]];
38
+ for (const [inputData, expectedOutput, description] of testCases) {
39
+ (0, _extendedTest.test)(description, async () => {
40
+ const result = (0, _validateDataUsingSchema.cleanData)(inputData);
41
+ (0, _extendedTest.expect)(result).toEqual(expectedOutput);
42
+ });
43
+ }
44
+ });
45
+ (0, _extendedTest.describe)("validate_data_using_schema function", () => {
46
+ (0, _extendedTest.test)("should validate data using schema with valid data", async () => {
47
+ const schema = {
48
+ type: "object",
49
+ properties: {
50
+ name: {
51
+ type: "string"
52
+ },
53
+ age: {
54
+ type: "integer"
55
+ }
56
+ },
57
+ required: ["name", "age"]
58
+ };
59
+ const data = {
60
+ name: "John Doe",
61
+ age: 30,
62
+ extra_field: "allowed"
63
+ };
64
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
65
+ data,
66
+ schema
67
+ })).resolves.not.toThrow();
68
+ });
69
+ (0, _extendedTest.test)("should validate data using schema with invalid data (missing required field)", async () => {
70
+ const schema = {
71
+ type: "object",
72
+ properties: {
73
+ name: {
74
+ type: "string"
75
+ },
76
+ age: {
77
+ type: "integer"
78
+ }
79
+ },
80
+ required: ["name", "age"]
81
+ };
82
+ const invalidData = {
83
+ name: "John Doe"
84
+ };
85
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
86
+ data: invalidData,
87
+ schema
88
+ })).rejects.toThrow(_types.ValidationError);
89
+ try {
90
+ await (0, _validateDataUsingSchema.validateDataUsingSchema)({
91
+ data: invalidData,
92
+ schema
93
+ });
94
+ } catch (error) {
95
+ (0, _extendedTest.expect)(error).toBeInstanceOf(_types.ValidationError);
96
+ (0, _extendedTest.expect)(error.message).toContain("Data validation failed");
97
+ (0, _extendedTest.expect)(error.data).toEqual(invalidData);
98
+ }
99
+ });
100
+ (0, _extendedTest.test)("should validate data using schema with list of valid objects", async () => {
101
+ const schema = {
102
+ type: "array",
103
+ items: {
104
+ type: "object",
105
+ properties: {
106
+ name: {
107
+ type: "string"
108
+ },
109
+ age: {
110
+ type: "integer"
111
+ }
112
+ },
113
+ required: ["name", "age"]
114
+ }
115
+ };
116
+ const data = [{
117
+ name: "John Doe",
118
+ age: 30,
119
+ extra: "field"
120
+ }, {
121
+ name: "Jane Doe",
122
+ age: 25,
123
+ other: "value"
124
+ }];
125
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
126
+ data,
127
+ schema
128
+ })).resolves.not.toThrow();
129
+ });
130
+ (0, _extendedTest.test)("should validate data using schema with list containing invalid object", async () => {
131
+ const schema = {
132
+ type: "array",
133
+ items: {
134
+ type: "object",
135
+ properties: {
136
+ name: {
137
+ type: "string"
138
+ },
139
+ age: {
140
+ type: "integer"
141
+ }
142
+ },
143
+ required: ["name", "age"]
144
+ }
145
+ };
146
+ const invalidData = [{
147
+ name: "John Doe",
148
+ age: 30
149
+ }, {
150
+ name: "Jane Doe",
151
+ age: "25"
152
+ }];
153
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
154
+ data: invalidData,
155
+ schema
156
+ })).rejects.toThrow(_types.ValidationError);
157
+ try {
158
+ await (0, _validateDataUsingSchema.validateDataUsingSchema)({
159
+ data: invalidData,
160
+ schema
161
+ });
162
+ } catch (error) {
163
+ console.log(`exc_info: ${error}`);
164
+ (0, _extendedTest.expect)(error).toBeInstanceOf(_types.ValidationError);
165
+ (0, _extendedTest.expect)(error.message).toContain("Data validation failed");
166
+ (0, _extendedTest.expect)(error.data).toEqual(invalidData);
167
+ }
168
+ });
169
+ (0, _extendedTest.test)("should validate data using schema with attachment custom type", async () => {
170
+ const schema = {
171
+ type: "object",
172
+ properties: {
173
+ file: {
174
+ type: "attachment"
175
+ },
176
+ name: {
177
+ type: "string"
178
+ }
179
+ },
180
+ required: ["file", "name"]
181
+ };
182
+ const validData = {
183
+ file: {
184
+ fileName: "documents/report.pdf",
185
+ bucket: "my-bucket",
186
+ region: "us-east-1",
187
+ endpoint: null,
188
+ suggestedFileName: "Monthly Report.pdf",
189
+ fileType: "document"
190
+ },
191
+ name: "Test File Upload"
192
+ };
193
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
194
+ data: validData,
195
+ schema
196
+ })).resolves.not.toThrow();
197
+ });
198
+ (0, _extendedTest.test)("should validate data using schema with invalid attachment custom type", async () => {
199
+ const schema = {
200
+ type: "object",
201
+ properties: {
202
+ file: {
203
+ type: "attachment"
204
+ },
205
+ name: {
206
+ type: "string"
207
+ }
208
+ },
209
+ required: ["file", "name"]
210
+ };
211
+ const invalidData = {
212
+ file: {
213
+ fileName: "documents/report.pdf"
214
+ },
215
+ name: "Test File Upload"
216
+ };
217
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
218
+ data: invalidData,
219
+ schema
220
+ })).rejects.toThrow(_types.ValidationError);
221
+ try {
222
+ await (0, _validateDataUsingSchema.validateDataUsingSchema)({
223
+ data: invalidData,
224
+ schema
225
+ });
226
+ } catch (error) {
227
+ (0, _extendedTest.expect)(error).toBeInstanceOf(_types.ValidationError);
228
+ (0, _extendedTest.expect)(error.message).toContain("Data validation failed");
229
+ (0, _extendedTest.expect)(error.message).toContain("does not match custom type 'attachment'");
230
+ (0, _extendedTest.expect)(error.data).toEqual(invalidData);
231
+ }
232
+ });
233
+ (0, _extendedTest.test)("should validate data using schema with attachment in array", async () => {
234
+ const schema = {
235
+ type: "array",
236
+ items: {
237
+ type: "object",
238
+ properties: {
239
+ file: {
240
+ type: "attachment"
241
+ },
242
+ description: {
243
+ type: "string"
244
+ }
245
+ },
246
+ required: ["file", "description"]
247
+ }
248
+ };
249
+ const validData = [{
250
+ file: {
251
+ fileName: "doc1.pdf",
252
+ bucket: "bucket1",
253
+ region: "us-east-1",
254
+ suggestedFileName: "Document 1.pdf"
255
+ },
256
+ description: "First document"
257
+ }, {
258
+ file: {
259
+ fileName: "doc2.pdf",
260
+ bucket: "bucket2",
261
+ region: "us-west-2",
262
+ suggestedFileName: "Document 2.pdf"
263
+ },
264
+ description: "Second document"
265
+ }];
266
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
267
+ data: validData,
268
+ schema
269
+ })).resolves.not.toThrow();
270
+ });
271
+ (0, _extendedTest.test)("should validate data using schema with invalid attachment in array", async () => {
272
+ const schema = {
273
+ type: "array",
274
+ items: {
275
+ type: "object",
276
+ properties: {
277
+ file: {
278
+ type: "attachment"
279
+ },
280
+ description: {
281
+ type: "string"
282
+ }
283
+ },
284
+ required: ["file", "description"]
285
+ }
286
+ };
287
+ const invalidData = [{
288
+ file: {
289
+ fileName: "doc1.pdf",
290
+ bucket: "bucket1",
291
+ region: "us-east-1",
292
+ suggestedFileName: "Document 1.pdf"
293
+ },
294
+ description: "First document"
295
+ }, {
296
+ file: {
297
+ fileName: "doc2.pdf"
298
+ },
299
+ description: "Second document"
300
+ }];
301
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
302
+ data: invalidData,
303
+ schema
304
+ })).rejects.toThrow(_types.ValidationError);
305
+ try {
306
+ await (0, _validateDataUsingSchema.validateDataUsingSchema)({
307
+ data: invalidData,
308
+ schema
309
+ });
310
+ } catch (error) {
311
+ (0, _extendedTest.expect)(error).toBeInstanceOf(_types.ValidationError);
312
+ (0, _extendedTest.expect)(error.message).toContain("Data validation failed");
313
+ (0, _extendedTest.expect)(error.message).toContain("does not match custom type 'attachment'");
314
+ (0, _extendedTest.expect)(error.data).toEqual(invalidData);
315
+ }
316
+ });
317
+ (0, _extendedTest.test)("should handle mixed custom and standard types", async () => {
318
+ const schema = {
319
+ type: "object",
320
+ properties: {
321
+ attachment: {
322
+ type: "attachment"
323
+ },
324
+ title: {
325
+ type: "string"
326
+ },
327
+ count: {
328
+ type: "integer"
329
+ },
330
+ active: {
331
+ type: "boolean"
332
+ }
333
+ },
334
+ required: ["attachment", "title", "count"]
335
+ };
336
+ const validData = {
337
+ attachment: {
338
+ fileName: "mixed-test.pdf",
339
+ bucket: "test-bucket",
340
+ region: "us-east-1",
341
+ suggestedFileName: "Mixed Test.pdf"
342
+ },
343
+ title: "Mixed validation test",
344
+ count: 42,
345
+ active: true
346
+ };
347
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
348
+ data: validData,
349
+ schema
350
+ })).resolves.not.toThrow();
351
+ const invalidStandardData = {
352
+ attachment: {
353
+ fileName: "mixed-test.pdf",
354
+ bucket: "test-bucket",
355
+ region: "us-east-1",
356
+ suggestedFileName: "Mixed Test.pdf"
357
+ },
358
+ title: "Mixed validation test",
359
+ count: "not-a-number",
360
+ active: true
361
+ };
362
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
363
+ data: invalidStandardData,
364
+ schema
365
+ })).rejects.toThrow(_types.ValidationError);
366
+ const invalidCustomData = {
367
+ attachment: {
368
+ fileName: "mixed-test.pdf"
369
+ },
370
+ title: "Mixed validation test",
371
+ count: 42,
372
+ active: true
373
+ };
374
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
375
+ data: invalidCustomData,
376
+ schema
377
+ })).rejects.toThrow(_types.ValidationError);
378
+ });
379
+ });
380
+ });