@intuned/browser-dev 2.2.3-test-build.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.
- package/.babelrc +21 -0
- package/.eslintignore +10 -0
- package/.eslintrc.js +39 -0
- package/LICENSE +43 -0
- package/dist/ai/export.d.js +5 -0
- package/dist/ai/export.d.ts +641 -0
- package/dist/ai/extractStructuredData.js +320 -0
- package/dist/ai/extractStructuredDataUsingAi.js +139 -0
- package/dist/ai/extractionHelpers/screenshotHelpers.js +56 -0
- package/dist/ai/extractionHelpers/validateSchema.js +148 -0
- package/dist/ai/index.d.ts +641 -0
- package/dist/ai/index.js +19 -0
- package/dist/ai/isPageLoaded.js +77 -0
- package/dist/ai/prompt.js +39 -0
- package/dist/ai/tests/testCheckAllTypesAreStrings.spec.js +137 -0
- package/dist/ai/tests/testExtractFromContent.spec.js +372 -0
- package/dist/ai/tests/testExtractStructuredData.spec.js +646 -0
- package/dist/ai/tests/testIsPageLoaded.spec.js +277 -0
- package/dist/ai/tools/index.js +48 -0
- package/dist/ai/types/errors.js +67 -0
- package/dist/ai/types/models.js +45 -0
- package/dist/ai/types/types.js +48 -0
- package/dist/ai/validators.js +167 -0
- package/dist/common/Logger/index.js +60 -0
- package/dist/common/Logger/types.js +5 -0
- package/dist/common/SdkError.js +50 -0
- package/dist/common/aiModelsValidations.js +32 -0
- package/dist/common/browser_scripts.js +2596 -0
- package/dist/common/ensureBrowserScripts.js +18 -0
- package/dist/common/extendedTest.js +148 -0
- package/dist/common/extractionHelpers.js +19 -0
- package/dist/common/formatZodError.js +18 -0
- package/dist/common/fuzzySearch/fuzzySearch.test.js +250 -0
- package/dist/common/fuzzySearch/levenshtein-search.js +298 -0
- package/dist/common/fuzzySearch/utils.js +23 -0
- package/dist/common/getModelProvider.js +18 -0
- package/dist/common/getSimplifiedHtml.js +122 -0
- package/dist/common/hashObject.js +32 -0
- package/dist/common/html2markdown/convertElementToMarkdown.js +469 -0
- package/dist/common/html2markdown/index.js +19 -0
- package/dist/common/jwtTokenManager.js +18 -0
- package/dist/common/loadRuntime.js +16 -0
- package/dist/common/locatorHelpers.js +41 -0
- package/dist/common/matching/collectStrings.js +32 -0
- package/dist/common/matching/levenshtein.js +40 -0
- package/dist/common/matching/matching.js +317 -0
- package/dist/common/matching/types.js +1 -0
- package/dist/common/noEmpty.js +9 -0
- package/dist/common/saveSnapshotWithExamples.js +60 -0
- package/dist/common/tests/testEnsureBrowserScript.spec.js +31 -0
- package/dist/common/xpathMapping.js +107 -0
- package/dist/helpers/clickUntilExhausted.js +85 -0
- package/dist/helpers/downloadFile.js +125 -0
- package/dist/helpers/export.d.js +5 -0
- package/dist/helpers/export.d.ts +1220 -0
- package/dist/helpers/extractMarkdown.js +35 -0
- package/dist/helpers/filterEmptyValues.js +54 -0
- package/dist/helpers/gotoUrl.js +98 -0
- package/dist/helpers/index.d.ts +1220 -0
- package/dist/helpers/index.js +128 -0
- package/dist/helpers/processDate.js +25 -0
- package/dist/helpers/resolveUrl.js +64 -0
- package/dist/helpers/sanitizeHtml.js +74 -0
- package/dist/helpers/saveFileToS3.js +50 -0
- package/dist/helpers/scrollToLoadContent.js +57 -0
- package/dist/helpers/tests/extendedTest.js +130 -0
- package/dist/helpers/tests/testClickUntilExhausted.spec.js +387 -0
- package/dist/helpers/tests/testDownloadFile.spec.js +204 -0
- package/dist/helpers/tests/testExtractMarkdown.spec.js +290 -0
- package/dist/helpers/tests/testFilterEmptyValues.spec.js +151 -0
- package/dist/helpers/tests/testGoToUrl.spec.js +37 -0
- package/dist/helpers/tests/testProcessDate.spec.js +13 -0
- package/dist/helpers/tests/testResolveUrl.spec.js +341 -0
- package/dist/helpers/tests/testSanitizeHtml.spec.js +330 -0
- package/dist/helpers/tests/testScrollToLoadContent.spec.js +163 -0
- package/dist/helpers/tests/testValidateDataUsingSchema.spec.js +342 -0
- package/dist/helpers/tests/testWithDomSettledWait.spec.js +164 -0
- package/dist/helpers/tests/testWithNetworkIdleWait.spec.js +114 -0
- package/dist/helpers/types/Attachment.js +115 -0
- package/dist/helpers/types/CustomTypeRegistry.js +48 -0
- package/dist/helpers/types/RunEnvironment.js +18 -0
- package/dist/helpers/types/ValidationError.js +17 -0
- package/dist/helpers/types/index.js +51 -0
- package/dist/helpers/uploadFileToS3.js +154 -0
- package/dist/helpers/utils/getS3Client.js +22 -0
- package/dist/helpers/utils/index.js +73 -0
- package/dist/helpers/utils/isDownload.js +10 -0
- package/dist/helpers/utils/isGenerateCodeMode.js +9 -0
- package/dist/helpers/utils/isLocator.js +9 -0
- package/dist/helpers/utils/jwtTokenManager.js +18 -0
- package/dist/helpers/validateDataUsingSchema.js +103 -0
- package/dist/helpers/waitForDomSettled.js +90 -0
- package/dist/helpers/withNetworkSettledWait.js +91 -0
- package/dist/index.d.js +16 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +16 -0
- package/dist/intunedServices/ApiGateway/aiApiGateway.js +99 -0
- package/dist/intunedServices/ApiGateway/factory.js +13 -0
- package/dist/intunedServices/ApiGateway/providers/Anthropic.js +26 -0
- package/dist/intunedServices/ApiGateway/providers/Gemini.js +29 -0
- package/dist/intunedServices/ApiGateway/providers/OpenAI.js +29 -0
- package/dist/intunedServices/ApiGateway/tests/testApiGateway.spec.js +224 -0
- package/dist/intunedServices/ApiGateway/types.js +11 -0
- package/dist/intunedServices/cache/cache.js +61 -0
- package/dist/intunedServices/cache/index.js +12 -0
- package/dist/intunedServices/cache/tests/testCache.spec.js +117 -0
- package/dist/optimized-extractors/common/buildExamplesPrompt.js +12 -0
- package/dist/optimized-extractors/common/buildImagesFromPage.js +55 -0
- package/dist/optimized-extractors/common/extractStructuredDataUsingClaude.js +135 -0
- package/dist/optimized-extractors/common/extractStructuredDataUsingGoogle.js +37 -0
- package/dist/optimized-extractors/common/extractStructuredDataUsingOpenAi.js +132 -0
- package/dist/optimized-extractors/common/extractStrucutredDataUsingAiInstance.js +122 -0
- package/dist/optimized-extractors/common/findTableHeaders.js +162 -0
- package/dist/optimized-extractors/common/index.js +55 -0
- package/dist/optimized-extractors/common/isTableHeaderOrFooter.js +84 -0
- package/dist/optimized-extractors/common/matching/matching.js +212 -0
- package/dist/optimized-extractors/common/matching/matching.test.js +655 -0
- package/dist/optimized-extractors/common/matching/types.js +18 -0
- package/dist/optimized-extractors/common/matching/utils.js +184 -0
- package/dist/optimized-extractors/common/utils.js +58 -0
- package/dist/optimized-extractors/export.d.js +5 -0
- package/dist/optimized-extractors/export.d.ts +397 -0
- package/dist/optimized-extractors/extractArray.js +120 -0
- package/dist/optimized-extractors/extractObject.js +104 -0
- package/dist/optimized-extractors/index.d.ts +397 -0
- package/dist/optimized-extractors/index.js +31 -0
- package/dist/optimized-extractors/listExtractionHelpers/__tests__/dynamicListExtractor.spec.js +312 -0
- package/dist/optimized-extractors/listExtractionHelpers/__tests__/findSetOfXpathsToCreateAnArrayExtractor.test.js +22 -0
- package/dist/optimized-extractors/listExtractionHelpers/__tests__/getContainerElement.test.js +21 -0
- package/dist/optimized-extractors/listExtractionHelpers/__tests__/partOfSameArrayXpath.test.js +42 -0
- package/dist/optimized-extractors/listExtractionHelpers/__tests__/verifyThatAllXpathsArePartOfSameArray.test.js +9 -0
- package/dist/optimized-extractors/listExtractionHelpers/dynamicListExtractor.js +152 -0
- package/dist/optimized-extractors/listExtractionHelpers/errors.js +46 -0
- package/dist/optimized-extractors/listExtractionHelpers/getListMatches.js +14 -0
- package/dist/optimized-extractors/listExtractionHelpers/runAiExtraction.js +240 -0
- package/dist/optimized-extractors/listExtractionHelpers/typesAndSchema.js +5 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/extractPropertiesUsingGPTFromArray.js +277 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/extractStructuredListUsingAi.js +44 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/getListContainerXpath.js +94 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/getRelativeContainerXpathSelector.js +20 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/getSimplifiedHtmlPerListItem.js +21 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/tablesUtils.js +48 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/validateOptions.js +52 -0
- package/dist/optimized-extractors/models/anthropicModel.js +23 -0
- package/dist/optimized-extractors/models/openaiModel.js +23 -0
- package/dist/optimized-extractors/objectExtractionHelpers/AIExtractors.js +73 -0
- package/dist/optimized-extractors/objectExtractionHelpers/__tests__/checksumUtils.test.js +103 -0
- package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromLocator.spec.js +107 -0
- package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromPage.spec.js +107 -0
- package/dist/optimized-extractors/objectExtractionHelpers/calculateObjectExampleHash.js +28 -0
- package/dist/optimized-extractors/objectExtractionHelpers/captureSnapshot.js +26 -0
- package/dist/optimized-extractors/objectExtractionHelpers/checksumUtils.js +32 -0
- package/dist/optimized-extractors/objectExtractionHelpers/constants.js +7 -0
- package/dist/optimized-extractors/objectExtractionHelpers/dynamicObjectExtractor.js +106 -0
- package/dist/optimized-extractors/objectExtractionHelpers/errors.js +42 -0
- package/dist/optimized-extractors/objectExtractionHelpers/findDomMatches.js +54 -0
- package/dist/optimized-extractors/objectExtractionHelpers/getSimplifiedHtml.js +122 -0
- package/dist/optimized-extractors/objectExtractionHelpers/typesAndSchemas.js +5 -0
- package/dist/optimized-extractors/objectExtractionHelpers/validateDynamicObjectExtractorOptions.js +52 -0
- package/dist/optimized-extractors/types/aiModelsValidation.js +45 -0
- package/dist/optimized-extractors/types/errors.js +42 -0
- package/dist/optimized-extractors/types/jsonSchema.d.js +5 -0
- package/dist/optimized-extractors/types/jsonSchema.d.ts +50 -0
- package/dist/optimized-extractors/types/types.js +5 -0
- package/dist/optimized-extractors/validators.js +152 -0
- package/dist/vite-env.d.js +1 -0
- package/dist/vite-env.d.ts +9 -0
- package/docs.md +14 -0
- package/generated-docs/ai/functions/extractStructuredData.mdx +255 -0
- package/generated-docs/ai/functions/isPageLoaded.mdx +88 -0
- package/generated-docs/ai/interfaces/ArraySchema.mdx +36 -0
- package/generated-docs/ai/interfaces/BasicSchema.mdx +14 -0
- package/generated-docs/ai/interfaces/BooleanSchema.mdx +28 -0
- package/generated-docs/ai/interfaces/ImageBufferContentItem.mdx +16 -0
- package/generated-docs/ai/interfaces/ImageUrlContentItem.mdx +16 -0
- package/generated-docs/ai/interfaces/NumberSchema.mdx +35 -0
- package/generated-docs/ai/interfaces/ObjectSchema.mdx +39 -0
- package/generated-docs/ai/interfaces/StringSchema.mdx +35 -0
- package/generated-docs/ai/interfaces/TextContentItem.mdx +14 -0
- package/generated-docs/ai/type-aliases/ContentItem.mdx +12 -0
- package/generated-docs/ai/type-aliases/JsonSchema.mdx +47 -0
- package/generated-docs/ai/type-aliases/SUPPORTED_MODELS.mdx +85 -0
- package/generated-docs/helpers/functions/downloadFile.mdx +99 -0
- package/generated-docs/helpers/functions/extractMarkdown.mdx +56 -0
- package/generated-docs/helpers/functions/filterEmptyValues.mdx +51 -0
- package/generated-docs/helpers/functions/goToUrl.mdx +124 -0
- package/generated-docs/helpers/functions/processDate.mdx +55 -0
- package/generated-docs/helpers/functions/resolveUrl.mdx +165 -0
- package/generated-docs/helpers/functions/sanitizeHtml.mdx +113 -0
- package/generated-docs/helpers/functions/saveFileToS3.mdx +127 -0
- package/generated-docs/helpers/functions/scrollToLoadContent.mdx +89 -0
- package/generated-docs/helpers/functions/uploadFileToS3.mdx +121 -0
- package/generated-docs/helpers/functions/validateDataUsingSchema.mdx +90 -0
- package/generated-docs/helpers/functions/waitForDomSettled.mdx +91 -0
- package/generated-docs/helpers/functions/withNetworkSettledWait.mdx +76 -0
- package/generated-docs/helpers/interfaces/Attachment.mdx +56 -0
- package/generated-docs/helpers/interfaces/S3Configs.mdx +52 -0
- package/generated-docs/helpers/interfaces/SanitizeHtmlOptions.mdx +22 -0
- package/generated-docs/helpers/type-aliases/AttachmentType.mdx +10 -0
- package/generated-docs/helpers/type-aliases/FileType.mdx +61 -0
- package/generated-docs/helpers/type-aliases/Trigger.mdx +62 -0
- package/how-to-run-tests.md +10 -0
- package/intuned-runtime-setup.md +13 -0
- package/package.json +119 -0
- package/tsconfig.eslint.json +5 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _extendedTest = require("./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("");
|
|
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("./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("./extendedTest");
|
|
4
|
+
var _ = require("..");
|
|
5
|
+
var _playwrightCore = require("playwright-core");
|
|
6
|
+
var _dotenv = require("dotenv");
|
|
7
|
+
(0, _dotenv.config)();
|
|
8
|
+
(0, _extendedTest.describe)("goToUrl E2E Tests", () => {
|
|
9
|
+
let browser;
|
|
10
|
+
let page;
|
|
11
|
+
(0, _extendedTest.beforeAll)(async () => {
|
|
12
|
+
browser = await _playwrightCore.chromium.launch({
|
|
13
|
+
headless: false
|
|
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("./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
|
+
});
|