@intuned/browser-dev 0.1.4-dev.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 (212) hide show
  1. package/.babelrc +21 -0
  2. package/.eslintignore +10 -0
  3. package/.eslintrc.js +39 -0
  4. package/BROWSER_SCRIPTS_SETUP.md +84 -0
  5. package/LICENSE +43 -0
  6. package/README.md +160 -0
  7. package/RELEASE.md +60 -0
  8. package/dist/ai/export.d.js +5 -0
  9. package/dist/ai/export.d.ts +641 -0
  10. package/dist/ai/extractStructuredData.js +320 -0
  11. package/dist/ai/extractStructuredDataUsingAi.js +142 -0
  12. package/dist/ai/extractionHelpers/screenshotHelpers.js +56 -0
  13. package/dist/ai/extractionHelpers/validateSchema.js +148 -0
  14. package/dist/ai/index.d.ts +641 -0
  15. package/dist/ai/index.js +19 -0
  16. package/dist/ai/isPageLoaded.js +80 -0
  17. package/dist/ai/prompt.js +39 -0
  18. package/dist/ai/tests/testCheckAllTypesAreStrings.spec.js +137 -0
  19. package/dist/ai/tests/testExtractFromContent.spec.js +372 -0
  20. package/dist/ai/tests/testExtractStructuredData.spec.js +646 -0
  21. package/dist/ai/tests/testIsPageLoaded.spec.js +277 -0
  22. package/dist/ai/tools/index.js +48 -0
  23. package/dist/ai/types/errors.js +67 -0
  24. package/dist/ai/types/models.js +45 -0
  25. package/dist/ai/types/types.js +48 -0
  26. package/dist/ai/validators.js +167 -0
  27. package/dist/common/Logger/index.js +60 -0
  28. package/dist/common/Logger/types.js +5 -0
  29. package/dist/common/SdkError.js +50 -0
  30. package/dist/common/aiModelsValidations.js +32 -0
  31. package/dist/common/ensureBrowserScripts.js +14 -0
  32. package/dist/common/extendedTest.js +157 -0
  33. package/dist/common/extractionHelpers.js +19 -0
  34. package/dist/common/formatZodError.js +18 -0
  35. package/dist/common/fuzzySearch/fuzzySearch.test.js +250 -0
  36. package/dist/common/fuzzySearch/levenshtein-search.js +298 -0
  37. package/dist/common/fuzzySearch/utils.js +23 -0
  38. package/dist/common/getModelProvider.js +18 -0
  39. package/dist/common/getSimplifiedHtml.js +122 -0
  40. package/dist/common/hashObject.js +32 -0
  41. package/dist/common/html2markdown/convertElementToMarkdown.js +469 -0
  42. package/dist/common/html2markdown/index.js +19 -0
  43. package/dist/common/jwtTokenManager.js +57 -0
  44. package/dist/common/loadRuntime.js +16 -0
  45. package/dist/common/locatorHelpers.js +41 -0
  46. package/dist/common/matching/collectStrings.js +32 -0
  47. package/dist/common/matching/levenshtein.js +40 -0
  48. package/dist/common/matching/matching.js +317 -0
  49. package/dist/common/matching/types.js +1 -0
  50. package/dist/common/noEmpty.js +9 -0
  51. package/dist/common/saveSnapshotWithExamples.js +60 -0
  52. package/dist/common/script.js +2602 -0
  53. package/dist/common/tests/testEnsureBrowserScript.spec.js +31 -0
  54. package/dist/common/xpathMapping.js +107 -0
  55. package/dist/helpers/clickUntilExhausted.js +85 -0
  56. package/dist/helpers/downloadFile.js +125 -0
  57. package/dist/helpers/export.d.js +5 -0
  58. package/dist/helpers/export.d.ts +1220 -0
  59. package/dist/helpers/extractMarkdown.js +35 -0
  60. package/dist/helpers/filterEmptyValues.js +54 -0
  61. package/dist/helpers/gotoUrl.js +98 -0
  62. package/dist/helpers/index.d.ts +1220 -0
  63. package/dist/helpers/index.js +122 -0
  64. package/dist/helpers/processDate.js +25 -0
  65. package/dist/helpers/resolveUrl.js +64 -0
  66. package/dist/helpers/sanitizeHtml.js +74 -0
  67. package/dist/helpers/saveFileToS3.js +50 -0
  68. package/dist/helpers/scrollToLoadContent.js +57 -0
  69. package/dist/helpers/tests/testClickUntilExhausted.spec.js +372 -0
  70. package/dist/helpers/tests/testDownloadFile.spec.js +206 -0
  71. package/dist/helpers/tests/testExtractMarkdown.spec.js +290 -0
  72. package/dist/helpers/tests/testFilterEmptyValues.spec.js +151 -0
  73. package/dist/helpers/tests/testGoToUrl.spec.js +37 -0
  74. package/dist/helpers/tests/testProcessDate.spec.js +13 -0
  75. package/dist/helpers/tests/testResolveUrl.spec.js +341 -0
  76. package/dist/helpers/tests/testSanitizeHtml.spec.js +330 -0
  77. package/dist/helpers/tests/testScrollToLoadContent.spec.js +163 -0
  78. package/dist/helpers/tests/testValidateDataUsingSchema.spec.js +342 -0
  79. package/dist/helpers/tests/testWithDomSettledWait.spec.js +164 -0
  80. package/dist/helpers/tests/testWithNetworkIdleWait.spec.js +114 -0
  81. package/dist/helpers/types/Attachment.js +115 -0
  82. package/dist/helpers/types/CustomTypeRegistry.js +48 -0
  83. package/dist/helpers/types/RunEnvironment.js +18 -0
  84. package/dist/helpers/types/ValidationError.js +17 -0
  85. package/dist/helpers/types/index.js +51 -0
  86. package/dist/helpers/uploadFileToS3.js +154 -0
  87. package/dist/helpers/utils/getS3Client.js +22 -0
  88. package/dist/helpers/utils/index.js +73 -0
  89. package/dist/helpers/utils/isDownload.js +10 -0
  90. package/dist/helpers/utils/isGenerateCodeMode.js +9 -0
  91. package/dist/helpers/utils/isLocator.js +9 -0
  92. package/dist/helpers/utils/jwtTokenManager.js +18 -0
  93. package/dist/helpers/validateDataUsingSchema.js +103 -0
  94. package/dist/helpers/waitForDomSettled.js +90 -0
  95. package/dist/helpers/withNetworkSettledWait.js +91 -0
  96. package/dist/index.d.js +16 -0
  97. package/dist/index.d.ts +10 -0
  98. package/dist/index.js +16 -0
  99. package/dist/intunedServices/ApiGateway/aiApiGateway.js +143 -0
  100. package/dist/intunedServices/ApiGateway/factory.js +16 -0
  101. package/dist/intunedServices/ApiGateway/providers/Anthropic.js +26 -0
  102. package/dist/intunedServices/ApiGateway/providers/Gemini.js +29 -0
  103. package/dist/intunedServices/ApiGateway/providers/OpenAI.js +29 -0
  104. package/dist/intunedServices/ApiGateway/tests/testApiGateway.spec.js +355 -0
  105. package/dist/intunedServices/ApiGateway/types.js +11 -0
  106. package/dist/intunedServices/cache/cache.js +61 -0
  107. package/dist/intunedServices/cache/index.js +12 -0
  108. package/dist/intunedServices/cache/tests/testCache.spec.js +117 -0
  109. package/dist/optimized-extractors/common/buildExamplesPrompt.js +12 -0
  110. package/dist/optimized-extractors/common/buildImagesFromPage.js +55 -0
  111. package/dist/optimized-extractors/common/extractStructuredDataUsingClaude.js +135 -0
  112. package/dist/optimized-extractors/common/extractStructuredDataUsingGoogle.js +37 -0
  113. package/dist/optimized-extractors/common/extractStructuredDataUsingOpenAi.js +132 -0
  114. package/dist/optimized-extractors/common/extractStrucutredDataUsingAiInstance.js +122 -0
  115. package/dist/optimized-extractors/common/findTableHeaders.js +162 -0
  116. package/dist/optimized-extractors/common/index.js +55 -0
  117. package/dist/optimized-extractors/common/isTableHeaderOrFooter.js +84 -0
  118. package/dist/optimized-extractors/common/matching/matching.js +212 -0
  119. package/dist/optimized-extractors/common/matching/matching.test.js +655 -0
  120. package/dist/optimized-extractors/common/matching/types.js +18 -0
  121. package/dist/optimized-extractors/common/matching/utils.js +184 -0
  122. package/dist/optimized-extractors/common/utils.js +58 -0
  123. package/dist/optimized-extractors/export.d.js +5 -0
  124. package/dist/optimized-extractors/export.d.ts +397 -0
  125. package/dist/optimized-extractors/extractArray.js +120 -0
  126. package/dist/optimized-extractors/extractObject.js +104 -0
  127. package/dist/optimized-extractors/index.d.ts +397 -0
  128. package/dist/optimized-extractors/index.js +31 -0
  129. package/dist/optimized-extractors/listExtractionHelpers/__tests__/dynamicListExtractor.spec.js +269 -0
  130. package/dist/optimized-extractors/listExtractionHelpers/__tests__/findSetOfXpathsToCreateAnArrayExtractor.test.js +22 -0
  131. package/dist/optimized-extractors/listExtractionHelpers/__tests__/getContainerElement.test.js +21 -0
  132. package/dist/optimized-extractors/listExtractionHelpers/__tests__/partOfSameArrayXpath.test.js +42 -0
  133. package/dist/optimized-extractors/listExtractionHelpers/__tests__/testArrayExtractorFromLocator.spec.js +146 -0
  134. package/dist/optimized-extractors/listExtractionHelpers/__tests__/testArrayExtractorFromPage.spec.js +130 -0
  135. package/dist/optimized-extractors/listExtractionHelpers/__tests__/verifyThatAllXpathsArePartOfSameArray.test.js +9 -0
  136. package/dist/optimized-extractors/listExtractionHelpers/dynamicListExtractor.js +160 -0
  137. package/dist/optimized-extractors/listExtractionHelpers/errors.js +46 -0
  138. package/dist/optimized-extractors/listExtractionHelpers/getListMatches.js +14 -0
  139. package/dist/optimized-extractors/listExtractionHelpers/runAiExtraction.js +243 -0
  140. package/dist/optimized-extractors/listExtractionHelpers/typesAndSchema.js +5 -0
  141. package/dist/optimized-extractors/listExtractionHelpers/utils/extractPropertiesUsingGPTFromArray.js +277 -0
  142. package/dist/optimized-extractors/listExtractionHelpers/utils/extractStructuredListUsingAi.js +44 -0
  143. package/dist/optimized-extractors/listExtractionHelpers/utils/getListContainerXpath.js +94 -0
  144. package/dist/optimized-extractors/listExtractionHelpers/utils/getRelativeContainerXpathSelector.js +20 -0
  145. package/dist/optimized-extractors/listExtractionHelpers/utils/getSimplifiedHtmlPerListItem.js +21 -0
  146. package/dist/optimized-extractors/listExtractionHelpers/utils/tablesUtils.js +48 -0
  147. package/dist/optimized-extractors/listExtractionHelpers/utils/validateOptions.js +52 -0
  148. package/dist/optimized-extractors/models/anthropicModel.js +23 -0
  149. package/dist/optimized-extractors/models/openaiModel.js +23 -0
  150. package/dist/optimized-extractors/objectExtractionHelpers/AIExtractors.js +73 -0
  151. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/checksumUtils.test.js +103 -0
  152. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromLocator.spec.js +107 -0
  153. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromPage.spec.js +107 -0
  154. package/dist/optimized-extractors/objectExtractionHelpers/calculateObjectExampleHash.js +28 -0
  155. package/dist/optimized-extractors/objectExtractionHelpers/captureSnapshot.js +26 -0
  156. package/dist/optimized-extractors/objectExtractionHelpers/checksumUtils.js +32 -0
  157. package/dist/optimized-extractors/objectExtractionHelpers/constants.js +7 -0
  158. package/dist/optimized-extractors/objectExtractionHelpers/dynamicObjectExtractor.js +106 -0
  159. package/dist/optimized-extractors/objectExtractionHelpers/errors.js +42 -0
  160. package/dist/optimized-extractors/objectExtractionHelpers/findDomMatches.js +54 -0
  161. package/dist/optimized-extractors/objectExtractionHelpers/getSimplifiedHtml.js +122 -0
  162. package/dist/optimized-extractors/objectExtractionHelpers/typesAndSchemas.js +5 -0
  163. package/dist/optimized-extractors/objectExtractionHelpers/validateDynamicObjectExtractorOptions.js +52 -0
  164. package/dist/optimized-extractors/types/aiModelsValidation.js +45 -0
  165. package/dist/optimized-extractors/types/errors.js +42 -0
  166. package/dist/optimized-extractors/types/jsonSchema.d.js +5 -0
  167. package/dist/optimized-extractors/types/jsonSchema.d.ts +50 -0
  168. package/dist/optimized-extractors/types/types.js +5 -0
  169. package/dist/optimized-extractors/validators.js +152 -0
  170. package/dist/types/intuned-runtime.d.js +1 -0
  171. package/dist/types/intuned-runtime.d.ts +64 -0
  172. package/dist/vite-env.d.js +1 -0
  173. package/dist/vite-env.d.ts +9 -0
  174. package/generated-docs/ai/functions/extractStructuredData.mdx +255 -0
  175. package/generated-docs/ai/functions/isPageLoaded.mdx +88 -0
  176. package/generated-docs/ai/interfaces/ArraySchema.mdx +36 -0
  177. package/generated-docs/ai/interfaces/BasicSchema.mdx +14 -0
  178. package/generated-docs/ai/interfaces/BooleanSchema.mdx +28 -0
  179. package/generated-docs/ai/interfaces/ImageBufferContentItem.mdx +16 -0
  180. package/generated-docs/ai/interfaces/ImageUrlContentItem.mdx +16 -0
  181. package/generated-docs/ai/interfaces/NumberSchema.mdx +35 -0
  182. package/generated-docs/ai/interfaces/ObjectSchema.mdx +39 -0
  183. package/generated-docs/ai/interfaces/StringSchema.mdx +35 -0
  184. package/generated-docs/ai/interfaces/TextContentItem.mdx +14 -0
  185. package/generated-docs/ai/type-aliases/ContentItem.mdx +12 -0
  186. package/generated-docs/ai/type-aliases/JsonSchema.mdx +47 -0
  187. package/generated-docs/ai/type-aliases/SUPPORTED_MODELS.mdx +85 -0
  188. package/generated-docs/helpers/functions/downloadFile.mdx +99 -0
  189. package/generated-docs/helpers/functions/extractMarkdown.mdx +56 -0
  190. package/generated-docs/helpers/functions/filterEmptyValues.mdx +51 -0
  191. package/generated-docs/helpers/functions/goToUrl.mdx +124 -0
  192. package/generated-docs/helpers/functions/processDate.mdx +55 -0
  193. package/generated-docs/helpers/functions/resolveUrl.mdx +165 -0
  194. package/generated-docs/helpers/functions/sanitizeHtml.mdx +113 -0
  195. package/generated-docs/helpers/functions/saveFileToS3.mdx +127 -0
  196. package/generated-docs/helpers/functions/scrollToLoadContent.mdx +89 -0
  197. package/generated-docs/helpers/functions/uploadFileToS3.mdx +121 -0
  198. package/generated-docs/helpers/functions/validateDataUsingSchema.mdx +90 -0
  199. package/generated-docs/helpers/functions/waitForDomSettled.mdx +91 -0
  200. package/generated-docs/helpers/functions/withNetworkSettledWait.mdx +76 -0
  201. package/generated-docs/helpers/interfaces/Attachment.mdx +56 -0
  202. package/generated-docs/helpers/interfaces/S3Configs.mdx +52 -0
  203. package/generated-docs/helpers/interfaces/SanitizeHtmlOptions.mdx +22 -0
  204. package/generated-docs/helpers/type-aliases/AttachmentType.mdx +10 -0
  205. package/generated-docs/helpers/type-aliases/FileType.mdx +61 -0
  206. package/generated-docs/helpers/type-aliases/Trigger.mdx +62 -0
  207. package/how-to-generate-docs.md +61 -0
  208. package/how-to-run-tests.md +42 -0
  209. package/intuned-runtime-setup.md +13 -0
  210. package/package.json +124 -0
  211. package/tsconfig.eslint.json +5 -0
  212. package/tsconfig.json +26 -0
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+
3
+ var _extendedTest = require("../../common/extendedTest");
4
+ var _ = require("..");
5
+ (0, _extendedTest.describe)("Extract Markdown Tests", () => {
6
+ (0, _extendedTest.test)("extract markdown from locator", async ({
7
+ page
8
+ }) => {
9
+ await page.setContent(`
10
+ <html>
11
+ <body>
12
+ <div id="test-content">
13
+ <h2>Test Header</h2>
14
+ <p>Test paragraph with <em>italic</em> text.</p>
15
+ </div>
16
+ </body>
17
+ </html>
18
+ `);
19
+ const locator = page.locator("#test-content");
20
+ const result = await (0, _.extractMarkdown)({
21
+ source: locator
22
+ });
23
+ (0, _extendedTest.expect)(result).toContain("## Test Header");
24
+ (0, _extendedTest.expect)(result).toContain("Test paragraph with _italic_ text.");
25
+ });
26
+ (0, _extendedTest.test)("extract markdown from locator with nested elements", async ({
27
+ page
28
+ }) => {
29
+ await page.setContent(`
30
+ <html>
31
+ <body>
32
+ <article id="article">
33
+ <header>
34
+ <h1>Article Title</h1>
35
+ <p class="meta">By Author Name</p>
36
+ </header>
37
+ <section>
38
+ <p>First paragraph of content.</p>
39
+ <p>Second paragraph with <code>inline code</code>.</p>
40
+ </section>
41
+ </article>
42
+ </body>
43
+ </html>
44
+ `);
45
+ const locator = page.locator("#article");
46
+ const result = await (0, _.extractMarkdown)({
47
+ source: locator
48
+ });
49
+ (0, _extendedTest.expect)(result).toContain("# Article Title");
50
+ (0, _extendedTest.expect)(result).toContain("By Author Name");
51
+ (0, _extendedTest.expect)(result).toContain("First paragraph of content.");
52
+ (0, _extendedTest.expect)(result).toContain("`inline code`");
53
+ });
54
+ (0, _extendedTest.test)("extract markdown from page", async ({
55
+ page
56
+ }) => {
57
+ await page.setContent(`
58
+ <html>
59
+ <body>
60
+ <div id="test-content">
61
+ <h2>Test Header</h2>
62
+ <p>Test paragraph with <em>italic</em> text.</p>
63
+ </div>
64
+ </body>
65
+ </html>
66
+ `);
67
+ const result = await (0, _.extractMarkdown)({
68
+ source: page
69
+ });
70
+ (0, _extendedTest.expect)(result).toContain("## Test Header");
71
+ (0, _extendedTest.expect)(result).toContain("Test paragraph with _italic_ text.");
72
+ });
73
+ (0, _extendedTest.test)("extract markdown with lists", async ({
74
+ page
75
+ }) => {
76
+ await page.setContent(`
77
+ <html>
78
+ <body>
79
+ <div id="content">
80
+ <h3>Shopping List</h3>
81
+ <ul>
82
+ <li>Apples</li>
83
+ <li>Bananas</li>
84
+ <li>Oranges</li>
85
+ </ul>
86
+ <ol>
87
+ <li>First item</li>
88
+ <li>Second item</li>
89
+ </ol>
90
+ </div>
91
+ </body>
92
+ </html>
93
+ `);
94
+ const locator = page.locator("#content");
95
+ const result = await (0, _.extractMarkdown)({
96
+ source: locator
97
+ });
98
+ (0, _extendedTest.expect)(result).toContain("### Shopping List");
99
+ (0, _extendedTest.expect)(result).toContain("- Apples");
100
+ (0, _extendedTest.expect)(result).toContain("- Bananas");
101
+ (0, _extendedTest.expect)(result).toContain("- Oranges");
102
+ (0, _extendedTest.expect)(result).toContain("1. First item");
103
+ (0, _extendedTest.expect)(result).toContain("2. Second item");
104
+ });
105
+ (0, _extendedTest.test)("extract markdown with links and images", async ({
106
+ page
107
+ }) => {
108
+ await page.setContent(`
109
+ <html>
110
+ <body>
111
+ <div id="content">
112
+ <p>Visit <a href="https://example.com">our website</a> for more info.</p>
113
+ <img src="image.jpg" alt="Test image" />
114
+ </div>
115
+ </body>
116
+ </html>
117
+ `);
118
+ const locator = page.locator("#content");
119
+ const result = await (0, _.extractMarkdown)({
120
+ source: locator
121
+ });
122
+ (0, _extendedTest.expect)(result).toContain("[our website](https://example.com)");
123
+ (0, _extendedTest.expect)(result).toContain("![Test image](image.jpg)");
124
+ });
125
+ (0, _extendedTest.test)("extract markdown with tables", async ({
126
+ page
127
+ }) => {
128
+ await page.setContent(`
129
+ <html>
130
+ <body>
131
+ <div id="content">
132
+ <table>
133
+ <thead>
134
+ <tr>
135
+ <th>Name</th>
136
+ <th>Age</th>
137
+ </tr>
138
+ </thead>
139
+ <tbody>
140
+ <tr>
141
+ <td>John</td>
142
+ <td>25</td>
143
+ </tr>
144
+ <tr>
145
+ <td>Jane</td>
146
+ <td>30</td>
147
+ </tr>
148
+ </tbody>
149
+ </table>
150
+ </div>
151
+ </body>
152
+ </html>
153
+ `);
154
+ const locator = page.locator("#content");
155
+ const result = await (0, _.extractMarkdown)({
156
+ source: locator
157
+ });
158
+ (0, _extendedTest.expect)(result).toContain("| Name | Age |");
159
+ (0, _extendedTest.expect)(result).toContain("| John | 25 |");
160
+ (0, _extendedTest.expect)(result).toContain("| Jane | 30 |");
161
+ });
162
+ (0, _extendedTest.test)("extract markdown with blockquotes", async ({
163
+ page
164
+ }) => {
165
+ await page.setContent(`
166
+ <html>
167
+ <body>
168
+ <div id="content">
169
+ <blockquote>
170
+ <p>This is a quoted text.</p>
171
+ </blockquote>
172
+ <p>Regular paragraph.</p>
173
+ </div>
174
+ </body>
175
+ </html>
176
+ `);
177
+ const locator = page.locator("#content");
178
+ const result = await (0, _.extractMarkdown)({
179
+ source: locator
180
+ });
181
+ (0, _extendedTest.expect)(result).toContain("> This is a quoted text.");
182
+ (0, _extendedTest.expect)(result).toContain("Regular paragraph.");
183
+ });
184
+ (0, _extendedTest.test)("extract markdown with code blocks", async ({
185
+ page
186
+ }) => {
187
+ await page.setContent(`
188
+ <html>
189
+ <body>
190
+ <div id="content">
191
+ <pre><code>function hello() {
192
+ console.log('Hello, world!');
193
+ }</code></pre>
194
+ <p>Some inline <code>code</code> here.</p>
195
+ </div>
196
+ </body>
197
+ </html>
198
+ `);
199
+ const locator = page.locator("#content");
200
+ const result = await (0, _.extractMarkdown)({
201
+ source: locator
202
+ });
203
+ (0, _extendedTest.expect)(result).toContain("function hello()");
204
+ (0, _extendedTest.expect)(result).toContain("console.log('Hello, world!');");
205
+ (0, _extendedTest.expect)(result).toContain("Some inline `code` here.");
206
+ });
207
+ (0, _extendedTest.test)("extract markdown with strong and emphasis", async ({
208
+ page
209
+ }) => {
210
+ await page.setContent(`
211
+ <html>
212
+ <body>
213
+ <div id="content">
214
+ <p>This is <strong>bold text</strong> and <em>italic text</em>.</p>
215
+ <p>This is <b>also bold</b> and <i>also italic</i>.</p>
216
+ </div>
217
+ </body>
218
+ </html>
219
+ `);
220
+ const locator = page.locator("#content");
221
+ const result = await (0, _.extractMarkdown)({
222
+ source: locator
223
+ });
224
+ (0, _extendedTest.expect)(result).toContain("**bold text**");
225
+ (0, _extendedTest.expect)(result).toContain("_italic text_");
226
+ (0, _extendedTest.expect)(result).toContain("**also bold**");
227
+ (0, _extendedTest.expect)(result).toContain("_also italic_");
228
+ });
229
+ (0, _extendedTest.test)("extract markdown handles empty content", async ({
230
+ page
231
+ }) => {
232
+ await page.setContent(`
233
+ <html>
234
+ <body>
235
+ <div id="empty-content"></div>
236
+ </body>
237
+ </html>
238
+ `);
239
+ const locator = page.locator("#empty-content");
240
+ const result = await (0, _.extractMarkdown)({
241
+ source: locator
242
+ });
243
+ (0, _extendedTest.expect)(result.trim()).toBe("");
244
+ });
245
+ (0, _extendedTest.test)("extract markdown with complex nested structure", async ({
246
+ page
247
+ }) => {
248
+ await page.setContent(`
249
+ <html>
250
+ <body>
251
+ <article id="complex">
252
+ <header>
253
+ <h1>Main Title</h1>
254
+ <p class="subtitle">A comprehensive guide</p>
255
+ </header>
256
+ <main>
257
+ <section>
258
+ <h2>Introduction</h2>
259
+ <p>This is the <strong>introduction</strong> section.</p>
260
+ <ul>
261
+ <li>Point one</li>
262
+ <li>Point two with <a href="#link">link</a></li>
263
+ </ul>
264
+ </section>
265
+ <section>
266
+ <h2>Details</h2>
267
+ <blockquote>
268
+ <p>Important quote here.</p>
269
+ </blockquote>
270
+ <p>More content with <code>inline code</code>.</p>
271
+ </section>
272
+ </main>
273
+ </article>
274
+ </body>
275
+ </html>
276
+ `);
277
+ const locator = page.locator("#complex");
278
+ const result = await (0, _.extractMarkdown)({
279
+ source: locator
280
+ });
281
+ (0, _extendedTest.expect)(result).toContain("# Main Title");
282
+ (0, _extendedTest.expect)(result).toContain("A comprehensive guide");
283
+ (0, _extendedTest.expect)(result).toContain("## Introduction");
284
+ (0, _extendedTest.expect)(result).toContain("**introduction**");
285
+ (0, _extendedTest.expect)(result).toContain("- Point one");
286
+ (0, _extendedTest.expect)(result).toContain("## Details");
287
+ (0, _extendedTest.expect)(result).toContain("> Important quote here.");
288
+ (0, _extendedTest.expect)(result).toContain("`inline code`");
289
+ });
290
+ });
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ var _extendedTest = require("../../common/extendedTest");
4
+ var _ = require("..");
5
+ (0, _extendedTest.describe)("Filter Empty Values Utility Functions Tests", () => {
6
+ (0, _extendedTest.test)("should filter empty JSON fields", async () => {
7
+ const inputData = {
8
+ field1: "value1",
9
+ field2: "",
10
+ field3: null,
11
+ field4: 0,
12
+ field5: [],
13
+ field6: {},
14
+ field7: "value2"
15
+ };
16
+ const expectedOutput = {
17
+ field1: "value1",
18
+ field4: 0,
19
+ field7: "value2"
20
+ };
21
+ const filteredResults = (0, _.filterEmptyValues)({
22
+ data: inputData
23
+ });
24
+ console.log("Filtered results:", filteredResults);
25
+ (0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
26
+ });
27
+ (0, _extendedTest.test)("should filter nested empty JSON fields", async () => {
28
+ const inputData = {
29
+ field1: "value1",
30
+ field2: {
31
+ subfield1: "",
32
+ subfield2: null,
33
+ subfield3: "value3"
34
+ },
35
+ field3: [],
36
+ field4: {
37
+ subfield4: 0,
38
+ subfield5: {}
39
+ }
40
+ };
41
+ const expectedOutput = {
42
+ field1: "value1",
43
+ field2: {
44
+ subfield3: "value3"
45
+ },
46
+ field4: {
47
+ subfield4: 0
48
+ }
49
+ };
50
+ const filteredResults = (0, _.filterEmptyValues)({
51
+ data: inputData
52
+ });
53
+ console.log("Filtered results:", filteredResults);
54
+ (0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
55
+ });
56
+ (0, _extendedTest.test)("should handle empty input object", async () => {
57
+ const inputData = {};
58
+ const expectedOutput = {};
59
+ const filteredResults = (0, _.filterEmptyValues)({
60
+ data: inputData
61
+ });
62
+ (0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
63
+ });
64
+ (0, _extendedTest.test)("should handle object with all empty values", async () => {
65
+ const inputData = {
66
+ field1: "",
67
+ field2: null,
68
+ field3: undefined,
69
+ field4: [],
70
+ field5: {}
71
+ };
72
+ const expectedOutput = {};
73
+ const filteredResults = (0, _.filterEmptyValues)({
74
+ data: inputData
75
+ });
76
+ (0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
77
+ });
78
+ (0, _extendedTest.test)("should preserve falsy values that are not empty", async () => {
79
+ const inputData = {
80
+ field1: 0,
81
+ field2: false,
82
+ field3: "",
83
+ field4: null,
84
+ field5: "valid string"
85
+ };
86
+ const expectedOutput = {
87
+ field1: 0,
88
+ field2: false,
89
+ field5: "valid string"
90
+ };
91
+ const filteredResults = (0, _.filterEmptyValues)({
92
+ data: inputData
93
+ });
94
+ (0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
95
+ });
96
+ (0, _extendedTest.test)("should handle deeply nested objects", async () => {
97
+ const inputData = {
98
+ level1: {
99
+ level2: {
100
+ level3: {
101
+ field1: "value",
102
+ field2: "",
103
+ field3: null
104
+ },
105
+ emptyField: {}
106
+ },
107
+ field4: "another value"
108
+ },
109
+ emptyArray: []
110
+ };
111
+ const expectedOutput = {
112
+ level1: {
113
+ level2: {
114
+ level3: {
115
+ field1: "value"
116
+ }
117
+ },
118
+ field4: "another value"
119
+ }
120
+ };
121
+ const filteredResults = (0, _.filterEmptyValues)({
122
+ data: inputData
123
+ });
124
+ (0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
125
+ });
126
+ (0, _extendedTest.test)("should handle arrays with objects", async () => {
127
+ const inputData = {
128
+ field1: "value1",
129
+ arrayField: [{
130
+ subfield1: "value",
131
+ subfield2: ""
132
+ }, {
133
+ subfield3: null,
134
+ subfield4: "value2"
135
+ }],
136
+ emptyArray: []
137
+ };
138
+ const expectedOutput = {
139
+ field1: "value1",
140
+ arrayField: [{
141
+ subfield1: "value"
142
+ }, {
143
+ subfield4: "value2"
144
+ }]
145
+ };
146
+ const filteredResults = (0, _.filterEmptyValues)({
147
+ data: inputData
148
+ });
149
+ (0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
150
+ });
151
+ });
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ var _extendedTest = require("../../common/extendedTest");
4
+ var _ = require("..");
5
+ var _playwrightCore = require("playwright-core");
6
+ var _dotenv = require("dotenv");
7
+ (0, _dotenv.config)();
8
+ _extendedTest.describe.skip("goToUrl E2E Tests", () => {
9
+ let browser;
10
+ let page;
11
+ (0, _extendedTest.beforeAll)(async () => {
12
+ browser = await _playwrightCore.chromium.launch({
13
+ headless: true
14
+ });
15
+ });
16
+ (0, _extendedTest.afterAll)(async () => {
17
+ await browser.close();
18
+ });
19
+ (0, _extendedTest.beforeEach)(async () => {
20
+ page = await browser.newPage();
21
+ });
22
+ (0, _extendedTest.afterEach)(async () => {
23
+ await page.close();
24
+ });
25
+ (0, _extendedTest.describe)("successful navigation", () => {
26
+ const urls = ["https://mhtml-viewer.com/test-html2", "https://www.google.com", "https://github.com"];
27
+ for (const url of urls) {
28
+ (0, _extendedTest.test)(`should navigate to ${url}`, async () => {
29
+ await (0, _.goToUrl)({
30
+ page,
31
+ url,
32
+ waitForLoadingStateUsingAi: false
33
+ });
34
+ });
35
+ }
36
+ });
37
+ });
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ var _extendedTest = require("../../common/extendedTest");
4
+ var _ = require("..");
5
+ const dates = [["22/11/2024 21:19:05", new Date(2024, 10, 22)], ["13/12/2024", new Date(2024, 11, 13)], ["22/11/2024 15:35:06", new Date(2024, 10, 22)], ["01/17/2025 3:00:00 PM CT", new Date(2025, 0, 17)], ["10/25/2024", new Date(2024, 9, 25)], ["09/18/2024", new Date(2024, 8, 18)], ["10/23/2024 12:06 PM CST", new Date(2024, 9, 23)], ["11/24/2024", new Date(2024, 10, 24)], ["11/28/2024 1:59:59 AM", new Date(2024, 10, 28)], ["11/1/2024 10:30:00 PM", new Date(2024, 10, 1)], ["12/09/2024 9:00 AM", new Date(2024, 11, 9)], ["12/05/2024 9:00 AM", new Date(2024, 11, 5)], ["11/07/2024", new Date(2024, 10, 7)], ["12/10/2024", new Date(2024, 11, 10)], ["10/21/2024", new Date(2024, 9, 21)], ["10/08/2024", new Date(2024, 9, 8)], ["12/19/2024 - 2:00 PM", new Date(2024, 11, 19)], ["11/15/2024", new Date(2024, 10, 15)], ["8/16/2019", new Date(2019, 7, 16)], ["9/28/2024", new Date(2024, 8, 28)], ["5 Dec 2024 8:00 AM PST", new Date(2024, 11, 5)], ["11 Sep 2024", new Date(2024, 8, 11)], ["November 14, 2024", new Date(2024, 10, 14)], ["January 31, 2025, 5:00 pm", new Date(2025, 0, 31)], ["22/11/2024 19:45:00", new Date(2024, 10, 22)], ["09/01/2025 15:00:00", new Date(2025, 8, 1)], ["06/01/2023 11:00:00", new Date(2023, 5, 1)], ["04/30/2023 14:00:00", new Date(2023, 3, 30)]];
6
+ dates.forEach(([dateString, expectedDate]) => {
7
+ (0, _extendedTest.test)(`process_date: ${dateString}`, async () => {
8
+ const result = (0, _.processDate)({
9
+ date: dateString
10
+ });
11
+ (0, _extendedTest.expect)(result).toEqual(expectedDate);
12
+ });
13
+ });