@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.
Files changed (206) 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/export.d.js +5 -0
  6. package/dist/ai/export.d.ts +641 -0
  7. package/dist/ai/extractStructuredData.js +320 -0
  8. package/dist/ai/extractStructuredDataUsingAi.js +139 -0
  9. package/dist/ai/extractionHelpers/screenshotHelpers.js +56 -0
  10. package/dist/ai/extractionHelpers/validateSchema.js +148 -0
  11. package/dist/ai/index.d.ts +641 -0
  12. package/dist/ai/index.js +19 -0
  13. package/dist/ai/isPageLoaded.js +77 -0
  14. package/dist/ai/prompt.js +39 -0
  15. package/dist/ai/tests/testCheckAllTypesAreStrings.spec.js +137 -0
  16. package/dist/ai/tests/testExtractFromContent.spec.js +372 -0
  17. package/dist/ai/tests/testExtractStructuredData.spec.js +646 -0
  18. package/dist/ai/tests/testIsPageLoaded.spec.js +277 -0
  19. package/dist/ai/tools/index.js +48 -0
  20. package/dist/ai/types/errors.js +67 -0
  21. package/dist/ai/types/models.js +45 -0
  22. package/dist/ai/types/types.js +48 -0
  23. package/dist/ai/validators.js +167 -0
  24. package/dist/common/Logger/index.js +60 -0
  25. package/dist/common/Logger/types.js +5 -0
  26. package/dist/common/SdkError.js +50 -0
  27. package/dist/common/aiModelsValidations.js +32 -0
  28. package/dist/common/browser_scripts.js +2596 -0
  29. package/dist/common/ensureBrowserScripts.js +18 -0
  30. package/dist/common/extendedTest.js +148 -0
  31. package/dist/common/extractionHelpers.js +19 -0
  32. package/dist/common/formatZodError.js +18 -0
  33. package/dist/common/fuzzySearch/fuzzySearch.test.js +250 -0
  34. package/dist/common/fuzzySearch/levenshtein-search.js +298 -0
  35. package/dist/common/fuzzySearch/utils.js +23 -0
  36. package/dist/common/getModelProvider.js +18 -0
  37. package/dist/common/getSimplifiedHtml.js +122 -0
  38. package/dist/common/hashObject.js +32 -0
  39. package/dist/common/html2markdown/convertElementToMarkdown.js +469 -0
  40. package/dist/common/html2markdown/index.js +19 -0
  41. package/dist/common/jwtTokenManager.js +18 -0
  42. package/dist/common/loadRuntime.js +16 -0
  43. package/dist/common/locatorHelpers.js +41 -0
  44. package/dist/common/matching/collectStrings.js +32 -0
  45. package/dist/common/matching/levenshtein.js +40 -0
  46. package/dist/common/matching/matching.js +317 -0
  47. package/dist/common/matching/types.js +1 -0
  48. package/dist/common/noEmpty.js +9 -0
  49. package/dist/common/saveSnapshotWithExamples.js +60 -0
  50. package/dist/common/tests/testEnsureBrowserScript.spec.js +31 -0
  51. package/dist/common/xpathMapping.js +107 -0
  52. package/dist/helpers/clickUntilExhausted.js +85 -0
  53. package/dist/helpers/downloadFile.js +125 -0
  54. package/dist/helpers/export.d.js +5 -0
  55. package/dist/helpers/export.d.ts +1220 -0
  56. package/dist/helpers/extractMarkdown.js +35 -0
  57. package/dist/helpers/filterEmptyValues.js +54 -0
  58. package/dist/helpers/gotoUrl.js +98 -0
  59. package/dist/helpers/index.d.ts +1220 -0
  60. package/dist/helpers/index.js +128 -0
  61. package/dist/helpers/processDate.js +25 -0
  62. package/dist/helpers/resolveUrl.js +64 -0
  63. package/dist/helpers/sanitizeHtml.js +74 -0
  64. package/dist/helpers/saveFileToS3.js +50 -0
  65. package/dist/helpers/scrollToLoadContent.js +57 -0
  66. package/dist/helpers/tests/extendedTest.js +130 -0
  67. package/dist/helpers/tests/testClickUntilExhausted.spec.js +387 -0
  68. package/dist/helpers/tests/testDownloadFile.spec.js +204 -0
  69. package/dist/helpers/tests/testExtractMarkdown.spec.js +290 -0
  70. package/dist/helpers/tests/testFilterEmptyValues.spec.js +151 -0
  71. package/dist/helpers/tests/testGoToUrl.spec.js +37 -0
  72. package/dist/helpers/tests/testProcessDate.spec.js +13 -0
  73. package/dist/helpers/tests/testResolveUrl.spec.js +341 -0
  74. package/dist/helpers/tests/testSanitizeHtml.spec.js +330 -0
  75. package/dist/helpers/tests/testScrollToLoadContent.spec.js +163 -0
  76. package/dist/helpers/tests/testValidateDataUsingSchema.spec.js +342 -0
  77. package/dist/helpers/tests/testWithDomSettledWait.spec.js +164 -0
  78. package/dist/helpers/tests/testWithNetworkIdleWait.spec.js +114 -0
  79. package/dist/helpers/types/Attachment.js +115 -0
  80. package/dist/helpers/types/CustomTypeRegistry.js +48 -0
  81. package/dist/helpers/types/RunEnvironment.js +18 -0
  82. package/dist/helpers/types/ValidationError.js +17 -0
  83. package/dist/helpers/types/index.js +51 -0
  84. package/dist/helpers/uploadFileToS3.js +154 -0
  85. package/dist/helpers/utils/getS3Client.js +22 -0
  86. package/dist/helpers/utils/index.js +73 -0
  87. package/dist/helpers/utils/isDownload.js +10 -0
  88. package/dist/helpers/utils/isGenerateCodeMode.js +9 -0
  89. package/dist/helpers/utils/isLocator.js +9 -0
  90. package/dist/helpers/utils/jwtTokenManager.js +18 -0
  91. package/dist/helpers/validateDataUsingSchema.js +103 -0
  92. package/dist/helpers/waitForDomSettled.js +90 -0
  93. package/dist/helpers/withNetworkSettledWait.js +91 -0
  94. package/dist/index.d.js +16 -0
  95. package/dist/index.d.ts +10 -0
  96. package/dist/index.js +16 -0
  97. package/dist/intunedServices/ApiGateway/aiApiGateway.js +99 -0
  98. package/dist/intunedServices/ApiGateway/factory.js +13 -0
  99. package/dist/intunedServices/ApiGateway/providers/Anthropic.js +26 -0
  100. package/dist/intunedServices/ApiGateway/providers/Gemini.js +29 -0
  101. package/dist/intunedServices/ApiGateway/providers/OpenAI.js +29 -0
  102. package/dist/intunedServices/ApiGateway/tests/testApiGateway.spec.js +224 -0
  103. package/dist/intunedServices/ApiGateway/types.js +11 -0
  104. package/dist/intunedServices/cache/cache.js +61 -0
  105. package/dist/intunedServices/cache/index.js +12 -0
  106. package/dist/intunedServices/cache/tests/testCache.spec.js +117 -0
  107. package/dist/optimized-extractors/common/buildExamplesPrompt.js +12 -0
  108. package/dist/optimized-extractors/common/buildImagesFromPage.js +55 -0
  109. package/dist/optimized-extractors/common/extractStructuredDataUsingClaude.js +135 -0
  110. package/dist/optimized-extractors/common/extractStructuredDataUsingGoogle.js +37 -0
  111. package/dist/optimized-extractors/common/extractStructuredDataUsingOpenAi.js +132 -0
  112. package/dist/optimized-extractors/common/extractStrucutredDataUsingAiInstance.js +122 -0
  113. package/dist/optimized-extractors/common/findTableHeaders.js +162 -0
  114. package/dist/optimized-extractors/common/index.js +55 -0
  115. package/dist/optimized-extractors/common/isTableHeaderOrFooter.js +84 -0
  116. package/dist/optimized-extractors/common/matching/matching.js +212 -0
  117. package/dist/optimized-extractors/common/matching/matching.test.js +655 -0
  118. package/dist/optimized-extractors/common/matching/types.js +18 -0
  119. package/dist/optimized-extractors/common/matching/utils.js +184 -0
  120. package/dist/optimized-extractors/common/utils.js +58 -0
  121. package/dist/optimized-extractors/export.d.js +5 -0
  122. package/dist/optimized-extractors/export.d.ts +397 -0
  123. package/dist/optimized-extractors/extractArray.js +120 -0
  124. package/dist/optimized-extractors/extractObject.js +104 -0
  125. package/dist/optimized-extractors/index.d.ts +397 -0
  126. package/dist/optimized-extractors/index.js +31 -0
  127. package/dist/optimized-extractors/listExtractionHelpers/__tests__/dynamicListExtractor.spec.js +312 -0
  128. package/dist/optimized-extractors/listExtractionHelpers/__tests__/findSetOfXpathsToCreateAnArrayExtractor.test.js +22 -0
  129. package/dist/optimized-extractors/listExtractionHelpers/__tests__/getContainerElement.test.js +21 -0
  130. package/dist/optimized-extractors/listExtractionHelpers/__tests__/partOfSameArrayXpath.test.js +42 -0
  131. package/dist/optimized-extractors/listExtractionHelpers/__tests__/verifyThatAllXpathsArePartOfSameArray.test.js +9 -0
  132. package/dist/optimized-extractors/listExtractionHelpers/dynamicListExtractor.js +152 -0
  133. package/dist/optimized-extractors/listExtractionHelpers/errors.js +46 -0
  134. package/dist/optimized-extractors/listExtractionHelpers/getListMatches.js +14 -0
  135. package/dist/optimized-extractors/listExtractionHelpers/runAiExtraction.js +240 -0
  136. package/dist/optimized-extractors/listExtractionHelpers/typesAndSchema.js +5 -0
  137. package/dist/optimized-extractors/listExtractionHelpers/utils/extractPropertiesUsingGPTFromArray.js +277 -0
  138. package/dist/optimized-extractors/listExtractionHelpers/utils/extractStructuredListUsingAi.js +44 -0
  139. package/dist/optimized-extractors/listExtractionHelpers/utils/getListContainerXpath.js +94 -0
  140. package/dist/optimized-extractors/listExtractionHelpers/utils/getRelativeContainerXpathSelector.js +20 -0
  141. package/dist/optimized-extractors/listExtractionHelpers/utils/getSimplifiedHtmlPerListItem.js +21 -0
  142. package/dist/optimized-extractors/listExtractionHelpers/utils/tablesUtils.js +48 -0
  143. package/dist/optimized-extractors/listExtractionHelpers/utils/validateOptions.js +52 -0
  144. package/dist/optimized-extractors/models/anthropicModel.js +23 -0
  145. package/dist/optimized-extractors/models/openaiModel.js +23 -0
  146. package/dist/optimized-extractors/objectExtractionHelpers/AIExtractors.js +73 -0
  147. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/checksumUtils.test.js +103 -0
  148. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromLocator.spec.js +107 -0
  149. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromPage.spec.js +107 -0
  150. package/dist/optimized-extractors/objectExtractionHelpers/calculateObjectExampleHash.js +28 -0
  151. package/dist/optimized-extractors/objectExtractionHelpers/captureSnapshot.js +26 -0
  152. package/dist/optimized-extractors/objectExtractionHelpers/checksumUtils.js +32 -0
  153. package/dist/optimized-extractors/objectExtractionHelpers/constants.js +7 -0
  154. package/dist/optimized-extractors/objectExtractionHelpers/dynamicObjectExtractor.js +106 -0
  155. package/dist/optimized-extractors/objectExtractionHelpers/errors.js +42 -0
  156. package/dist/optimized-extractors/objectExtractionHelpers/findDomMatches.js +54 -0
  157. package/dist/optimized-extractors/objectExtractionHelpers/getSimplifiedHtml.js +122 -0
  158. package/dist/optimized-extractors/objectExtractionHelpers/typesAndSchemas.js +5 -0
  159. package/dist/optimized-extractors/objectExtractionHelpers/validateDynamicObjectExtractorOptions.js +52 -0
  160. package/dist/optimized-extractors/types/aiModelsValidation.js +45 -0
  161. package/dist/optimized-extractors/types/errors.js +42 -0
  162. package/dist/optimized-extractors/types/jsonSchema.d.js +5 -0
  163. package/dist/optimized-extractors/types/jsonSchema.d.ts +50 -0
  164. package/dist/optimized-extractors/types/types.js +5 -0
  165. package/dist/optimized-extractors/validators.js +152 -0
  166. package/dist/vite-env.d.js +1 -0
  167. package/dist/vite-env.d.ts +9 -0
  168. package/docs.md +14 -0
  169. package/generated-docs/ai/functions/extractStructuredData.mdx +255 -0
  170. package/generated-docs/ai/functions/isPageLoaded.mdx +88 -0
  171. package/generated-docs/ai/interfaces/ArraySchema.mdx +36 -0
  172. package/generated-docs/ai/interfaces/BasicSchema.mdx +14 -0
  173. package/generated-docs/ai/interfaces/BooleanSchema.mdx +28 -0
  174. package/generated-docs/ai/interfaces/ImageBufferContentItem.mdx +16 -0
  175. package/generated-docs/ai/interfaces/ImageUrlContentItem.mdx +16 -0
  176. package/generated-docs/ai/interfaces/NumberSchema.mdx +35 -0
  177. package/generated-docs/ai/interfaces/ObjectSchema.mdx +39 -0
  178. package/generated-docs/ai/interfaces/StringSchema.mdx +35 -0
  179. package/generated-docs/ai/interfaces/TextContentItem.mdx +14 -0
  180. package/generated-docs/ai/type-aliases/ContentItem.mdx +12 -0
  181. package/generated-docs/ai/type-aliases/JsonSchema.mdx +47 -0
  182. package/generated-docs/ai/type-aliases/SUPPORTED_MODELS.mdx +85 -0
  183. package/generated-docs/helpers/functions/downloadFile.mdx +99 -0
  184. package/generated-docs/helpers/functions/extractMarkdown.mdx +56 -0
  185. package/generated-docs/helpers/functions/filterEmptyValues.mdx +51 -0
  186. package/generated-docs/helpers/functions/goToUrl.mdx +124 -0
  187. package/generated-docs/helpers/functions/processDate.mdx +55 -0
  188. package/generated-docs/helpers/functions/resolveUrl.mdx +165 -0
  189. package/generated-docs/helpers/functions/sanitizeHtml.mdx +113 -0
  190. package/generated-docs/helpers/functions/saveFileToS3.mdx +127 -0
  191. package/generated-docs/helpers/functions/scrollToLoadContent.mdx +89 -0
  192. package/generated-docs/helpers/functions/uploadFileToS3.mdx +121 -0
  193. package/generated-docs/helpers/functions/validateDataUsingSchema.mdx +90 -0
  194. package/generated-docs/helpers/functions/waitForDomSettled.mdx +91 -0
  195. package/generated-docs/helpers/functions/withNetworkSettledWait.mdx +76 -0
  196. package/generated-docs/helpers/interfaces/Attachment.mdx +56 -0
  197. package/generated-docs/helpers/interfaces/S3Configs.mdx +52 -0
  198. package/generated-docs/helpers/interfaces/SanitizeHtmlOptions.mdx +22 -0
  199. package/generated-docs/helpers/type-aliases/AttachmentType.mdx +10 -0
  200. package/generated-docs/helpers/type-aliases/FileType.mdx +61 -0
  201. package/generated-docs/helpers/type-aliases/Trigger.mdx +62 -0
  202. package/how-to-run-tests.md +10 -0
  203. package/intuned-runtime-setup.md +13 -0
  204. package/package.json +119 -0
  205. package/tsconfig.eslint.json +5 -0
  206. package/tsconfig.json +26 -0
@@ -0,0 +1,342 @@
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)("validate_data_using_schema function", () => {
8
+ (0, _extendedTest.test)("should validate data using schema with valid data", async () => {
9
+ const schema = {
10
+ type: "object",
11
+ properties: {
12
+ name: {
13
+ type: "string"
14
+ },
15
+ age: {
16
+ type: "integer"
17
+ }
18
+ },
19
+ required: ["name", "age"]
20
+ };
21
+ const data = {
22
+ name: "John Doe",
23
+ age: 30,
24
+ extra_field: "allowed"
25
+ };
26
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
27
+ data,
28
+ schema
29
+ })).resolves.not.toThrow();
30
+ });
31
+ (0, _extendedTest.test)("should validate data using schema with invalid data (missing required field)", async () => {
32
+ const schema = {
33
+ type: "object",
34
+ properties: {
35
+ name: {
36
+ type: "string"
37
+ },
38
+ age: {
39
+ type: "integer"
40
+ }
41
+ },
42
+ required: ["name", "age"]
43
+ };
44
+ const invalidData = {
45
+ name: "John Doe"
46
+ };
47
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
48
+ data: invalidData,
49
+ schema
50
+ })).rejects.toThrow(_types.ValidationError);
51
+ try {
52
+ await (0, _validateDataUsingSchema.validateDataUsingSchema)({
53
+ data: invalidData,
54
+ schema
55
+ });
56
+ } catch (error) {
57
+ (0, _extendedTest.expect)(error).toBeInstanceOf(_types.ValidationError);
58
+ (0, _extendedTest.expect)(error.message).toContain("Data validation failed");
59
+ (0, _extendedTest.expect)(error.data).toEqual(invalidData);
60
+ }
61
+ });
62
+ (0, _extendedTest.test)("should validate data using schema with list of valid objects", async () => {
63
+ const schema = {
64
+ type: "array",
65
+ items: {
66
+ type: "object",
67
+ properties: {
68
+ name: {
69
+ type: "string"
70
+ },
71
+ age: {
72
+ type: "integer"
73
+ }
74
+ },
75
+ required: ["name", "age"]
76
+ }
77
+ };
78
+ const data = [{
79
+ name: "John Doe",
80
+ age: 30,
81
+ extra: "field"
82
+ }, {
83
+ name: "Jane Doe",
84
+ age: 25,
85
+ other: "value"
86
+ }];
87
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
88
+ data,
89
+ schema
90
+ })).resolves.not.toThrow();
91
+ });
92
+ (0, _extendedTest.test)("should validate data using schema with list containing invalid object", async () => {
93
+ const schema = {
94
+ type: "array",
95
+ items: {
96
+ type: "object",
97
+ properties: {
98
+ name: {
99
+ type: "string"
100
+ },
101
+ age: {
102
+ type: "integer"
103
+ }
104
+ },
105
+ required: ["name", "age"]
106
+ }
107
+ };
108
+ const invalidData = [{
109
+ name: "John Doe",
110
+ age: 30
111
+ }, {
112
+ name: "Jane Doe",
113
+ age: "25"
114
+ }];
115
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
116
+ data: invalidData,
117
+ schema
118
+ })).rejects.toThrow(_types.ValidationError);
119
+ try {
120
+ await (0, _validateDataUsingSchema.validateDataUsingSchema)({
121
+ data: invalidData,
122
+ schema
123
+ });
124
+ } catch (error) {
125
+ console.log(`exc_info: ${error}`);
126
+ (0, _extendedTest.expect)(error).toBeInstanceOf(_types.ValidationError);
127
+ (0, _extendedTest.expect)(error.message).toContain("Data validation failed");
128
+ (0, _extendedTest.expect)(error.data).toEqual(invalidData);
129
+ }
130
+ });
131
+ (0, _extendedTest.test)("should validate data using schema with attachment custom type", async () => {
132
+ const schema = {
133
+ type: "object",
134
+ properties: {
135
+ file: {
136
+ type: "attachment"
137
+ },
138
+ name: {
139
+ type: "string"
140
+ }
141
+ },
142
+ required: ["file", "name"]
143
+ };
144
+ const validData = {
145
+ file: {
146
+ fileName: "documents/report.pdf",
147
+ bucket: "my-bucket",
148
+ region: "us-east-1",
149
+ endpoint: null,
150
+ suggestedFileName: "Monthly Report.pdf",
151
+ fileType: "document"
152
+ },
153
+ name: "Test File Upload"
154
+ };
155
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
156
+ data: validData,
157
+ schema
158
+ })).resolves.not.toThrow();
159
+ });
160
+ (0, _extendedTest.test)("should validate data using schema with invalid attachment custom type", async () => {
161
+ const schema = {
162
+ type: "object",
163
+ properties: {
164
+ file: {
165
+ type: "attachment"
166
+ },
167
+ name: {
168
+ type: "string"
169
+ }
170
+ },
171
+ required: ["file", "name"]
172
+ };
173
+ const invalidData = {
174
+ file: {
175
+ fileName: "documents/report.pdf"
176
+ },
177
+ name: "Test File Upload"
178
+ };
179
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
180
+ data: invalidData,
181
+ schema
182
+ })).rejects.toThrow(_types.ValidationError);
183
+ try {
184
+ await (0, _validateDataUsingSchema.validateDataUsingSchema)({
185
+ data: invalidData,
186
+ schema
187
+ });
188
+ } catch (error) {
189
+ (0, _extendedTest.expect)(error).toBeInstanceOf(_types.ValidationError);
190
+ (0, _extendedTest.expect)(error.message).toContain("Data validation failed");
191
+ (0, _extendedTest.expect)(error.message).toContain("does not match custom type 'attachment'");
192
+ (0, _extendedTest.expect)(error.data).toEqual(invalidData);
193
+ }
194
+ });
195
+ (0, _extendedTest.test)("should validate data using schema with attachment in array", async () => {
196
+ const schema = {
197
+ type: "array",
198
+ items: {
199
+ type: "object",
200
+ properties: {
201
+ file: {
202
+ type: "attachment"
203
+ },
204
+ description: {
205
+ type: "string"
206
+ }
207
+ },
208
+ required: ["file", "description"]
209
+ }
210
+ };
211
+ const validData = [{
212
+ file: {
213
+ fileName: "doc1.pdf",
214
+ bucket: "bucket1",
215
+ region: "us-east-1",
216
+ suggestedFileName: "Document 1.pdf"
217
+ },
218
+ description: "First document"
219
+ }, {
220
+ file: {
221
+ fileName: "doc2.pdf",
222
+ bucket: "bucket2",
223
+ region: "us-west-2",
224
+ suggestedFileName: "Document 2.pdf"
225
+ },
226
+ description: "Second document"
227
+ }];
228
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
229
+ data: validData,
230
+ schema
231
+ })).resolves.not.toThrow();
232
+ });
233
+ (0, _extendedTest.test)("should validate data using schema with invalid 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 invalidData = [{
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
+ },
261
+ description: "Second document"
262
+ }];
263
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
264
+ data: invalidData,
265
+ schema
266
+ })).rejects.toThrow(_types.ValidationError);
267
+ try {
268
+ await (0, _validateDataUsingSchema.validateDataUsingSchema)({
269
+ data: invalidData,
270
+ schema
271
+ });
272
+ } catch (error) {
273
+ (0, _extendedTest.expect)(error).toBeInstanceOf(_types.ValidationError);
274
+ (0, _extendedTest.expect)(error.message).toContain("Data validation failed");
275
+ (0, _extendedTest.expect)(error.message).toContain("does not match custom type 'attachment'");
276
+ (0, _extendedTest.expect)(error.data).toEqual(invalidData);
277
+ }
278
+ });
279
+ (0, _extendedTest.test)("should handle mixed custom and standard types", async () => {
280
+ const schema = {
281
+ type: "object",
282
+ properties: {
283
+ attachment: {
284
+ type: "attachment"
285
+ },
286
+ title: {
287
+ type: "string"
288
+ },
289
+ count: {
290
+ type: "integer"
291
+ },
292
+ active: {
293
+ type: "boolean"
294
+ }
295
+ },
296
+ required: ["attachment", "title", "count"]
297
+ };
298
+ const validData = {
299
+ attachment: {
300
+ fileName: "mixed-test.pdf",
301
+ bucket: "test-bucket",
302
+ region: "us-east-1",
303
+ suggestedFileName: "Mixed Test.pdf"
304
+ },
305
+ title: "Mixed validation test",
306
+ count: 42,
307
+ active: true
308
+ };
309
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
310
+ data: validData,
311
+ schema
312
+ })).resolves.not.toThrow();
313
+ const invalidStandardData = {
314
+ attachment: {
315
+ fileName: "mixed-test.pdf",
316
+ bucket: "test-bucket",
317
+ region: "us-east-1",
318
+ suggestedFileName: "Mixed Test.pdf"
319
+ },
320
+ title: "Mixed validation test",
321
+ count: "not-a-number",
322
+ active: true
323
+ };
324
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
325
+ data: invalidStandardData,
326
+ schema
327
+ })).rejects.toThrow(_types.ValidationError);
328
+ const invalidCustomData = {
329
+ attachment: {
330
+ fileName: "mixed-test.pdf"
331
+ },
332
+ title: "Mixed validation test",
333
+ count: 42,
334
+ active: true
335
+ };
336
+ await (0, _extendedTest.expect)((0, _validateDataUsingSchema.validateDataUsingSchema)({
337
+ data: invalidCustomData,
338
+ schema
339
+ })).rejects.toThrow(_types.ValidationError);
340
+ });
341
+ });
342
+ });
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+
3
+ var _extendedTest = require("./extendedTest");
4
+ var _ = require("..");
5
+ var _playwrightCore = require("playwright-core");
6
+ var _waitForDomSettled = require("../waitForDomSettled");
7
+ (0, _extendedTest.describe)("Test waitForDomSettled", () => {
8
+ let browser;
9
+ let page;
10
+ (0, _extendedTest.beforeAll)(async () => {
11
+ browser = await _playwrightCore.chromium.launch({
12
+ headless: false
13
+ });
14
+ });
15
+ (0, _extendedTest.afterAll)(async () => {
16
+ await browser.close();
17
+ });
18
+ (0, _extendedTest.beforeEach)(async () => {
19
+ page = await browser.newPage();
20
+ });
21
+ (0, _extendedTest.afterEach)(async () => {
22
+ await page.close();
23
+ });
24
+ (0, _extendedTest.test)("should wait for DOM to settle after navigation", async () => {
25
+ await page.goto("data:text/html,<html><body><div id='target'></div></body></html>");
26
+ await page.evaluate(() => {
27
+ const intervalId = setInterval(() => {
28
+ const target = document.getElementById("target");
29
+ const div = document.createElement("div");
30
+ div.textContent = String(Date.now());
31
+ target === null || target === void 0 || target.appendChild(div);
32
+ if (target && target.children.length > 10 && target.firstChild) {
33
+ target.removeChild(target.firstChild);
34
+ }
35
+ }, 100);
36
+ setTimeout(() => {
37
+ clearInterval(intervalId);
38
+ }, 5000);
39
+ });
40
+ const settled = await (0, _waitForDomSettled.waitForDomSettled)({
41
+ source: page,
42
+ settleDurationMs: 4000,
43
+ timeoutInMs: 10000
44
+ });
45
+ (0, _extendedTest.expect)(settled).toBe(true);
46
+ });
47
+ (0, _extendedTest.test)("should wait for specific element to settle while ignoring other mutations", async () => {
48
+ await page.goto(`
49
+ data:text/html,
50
+ <html>
51
+ <body>
52
+ <div id='watched-element'></div>
53
+ <div id='ignored-element'></div>
54
+ </body>
55
+ </html>
56
+ `);
57
+ await page.evaluate(() => {
58
+ const watchedElement = document.getElementById("watched-element");
59
+ const ignoredElement = document.getElementById("ignored-element");
60
+ const ignoredInterval = setInterval(() => {
61
+ const div = document.createElement("div");
62
+ div.textContent = `Ignored: ${Date.now()}`;
63
+ ignoredElement === null || ignoredElement === void 0 || ignoredElement.appendChild(div);
64
+ if (ignoredElement && ignoredElement.children.length > 5 && ignoredElement.firstChild) {
65
+ ignoredElement.removeChild(ignoredElement.firstChild);
66
+ }
67
+ }, 50);
68
+ const watchedInterval = setInterval(() => {
69
+ const div = document.createElement("div");
70
+ div.textContent = `Watched: ${Date.now()}`;
71
+ watchedElement === null || watchedElement === void 0 || watchedElement.appendChild(div);
72
+ if (watchedElement && watchedElement.children.length > 3 && watchedElement.firstChild) {
73
+ watchedElement.removeChild(watchedElement.firstChild);
74
+ }
75
+ }, 200);
76
+ setTimeout(() => {
77
+ clearInterval(watchedInterval);
78
+ }, 3000);
79
+ setTimeout(() => {
80
+ clearInterval(ignoredInterval);
81
+ }, 15000);
82
+ });
83
+ const settled = await (0, _waitForDomSettled.waitForDomSettled)({
84
+ source: page.locator("#watched-element"),
85
+ settleDurationMs: 3000,
86
+ timeoutInMs: 10000
87
+ });
88
+ (0, _extendedTest.expect)(settled).toBe(true);
89
+ });
90
+ (0, _extendedTest.test)("should handle no mutations gracefully", async () => {
91
+ await page.goto("data:text/html,<html><body><div id='target'></div></body></html>");
92
+ const settled = await (0, _waitForDomSettled.waitForDomSettled)({
93
+ source: page.locator("#target"),
94
+ settleDurationMs: 3000,
95
+ timeoutInMs: 10000
96
+ });
97
+ (0, _extendedTest.expect)(settled).toBe(true);
98
+ });
99
+ (0, _extendedTest.test)("should wait for loading to be complete", async () => {
100
+ await (0, _.goToUrl)({
101
+ page,
102
+ url: "https://www.galvestoncountytx.gov/county-offices/purchasing/solicitations-bids",
103
+ waitForLoadingStateUsingAi: false
104
+ });
105
+ const settled = await (0, _waitForDomSettled.waitForDomSettled)({
106
+ source: page,
107
+ settleDurationMs: 5000,
108
+ timeoutInMs: 10000
109
+ });
110
+ const loading = await page.getByText("Loading...").isVisible();
111
+ (0, _extendedTest.expect)(loading).toBe(false);
112
+ });
113
+ (0, _extendedTest.test)("should work with manual DOM changes", async () => {
114
+ await page.goto("data:text/html,<html><body><div id='target'></div></body></html>");
115
+ await page.evaluate(() => {
116
+ const target = document.getElementById("target");
117
+ const div = document.createElement("div");
118
+ div.textContent = "Added content";
119
+ target === null || target === void 0 || target.appendChild(div);
120
+ });
121
+ const settled = await (0, _waitForDomSettled.waitForDomSettled)({
122
+ source: page,
123
+ settleDurationMs: 5000,
124
+ timeoutInMs: 7000
125
+ });
126
+ (0, _extendedTest.expect)(settled).toBe(true);
127
+ const content = await page.textContent("#target");
128
+ (0, _extendedTest.expect)(content).toContain("Added content");
129
+ });
130
+ (0, _extendedTest.test)("should work with custom settle duration", async () => {
131
+ await page.goto("data:text/html,<html><body><div id='target'></div></body></html>");
132
+ await page.evaluate(() => {
133
+ const target = document.getElementById("target");
134
+ const div = document.createElement("div");
135
+ div.textContent = "Custom duration content";
136
+ target === null || target === void 0 || target.appendChild(div);
137
+ });
138
+ const settled = await (0, _waitForDomSettled.waitForDomSettled)({
139
+ source: page,
140
+ settleDurationMs: 2000,
141
+ timeoutInMs: 30000
142
+ });
143
+ (0, _extendedTest.expect)(settled).toBe(true);
144
+ const content = await page.textContent("#target");
145
+ (0, _extendedTest.expect)(content).toContain("Custom duration content");
146
+ });
147
+ (0, _extendedTest.test)("should work with locator source", async () => {
148
+ await page.goto("data:text/html,<html><body><div id='target'></div></body></html>");
149
+ await page.evaluate(() => {
150
+ const target = document.getElementById("target");
151
+ const div = document.createElement("div");
152
+ div.textContent = "Locator source content";
153
+ target === null || target === void 0 || target.appendChild(div);
154
+ });
155
+ const settled = await (0, _waitForDomSettled.waitForDomSettled)({
156
+ source: page.locator("#target"),
157
+ settleDurationMs: 6000,
158
+ timeoutInMs: 30000
159
+ });
160
+ (0, _extendedTest.expect)(settled).toBe(true);
161
+ const content = await page.textContent("#target");
162
+ (0, _extendedTest.expect)(content).toContain("Locator source content");
163
+ });
164
+ });
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ var _extendedTest = require("./extendedTest");
4
+ var _playwright = require("playwright");
5
+ var _ = require("..");
6
+ (0, _extendedTest.describe)("TestWaitForNetworkIdle", () => {
7
+ let browser;
8
+ let page;
9
+ (0, _extendedTest.beforeEach)(async () => {
10
+ browser = await _playwright.chromium.launch({
11
+ headless: false
12
+ });
13
+ page = await browser.newPage();
14
+ });
15
+ (0, _extendedTest.afterEach)(async () => {
16
+ await browser.close();
17
+ });
18
+ (0, _extendedTest.test)("wait for network idle click element 1", async () => {
19
+ await page.goto("https://www.txsmartbuy.gov/esbd?");
20
+ await page.waitForTimeout(10000);
21
+ await (0, _.withNetworkSettledWait)(async page => {
22
+ await page.locator("xpath=(//*[@id='Next'])[1]").first().click({
23
+ timeout: 10000
24
+ });
25
+ }, {
26
+ page,
27
+ timeoutInMs: 10000
28
+ });
29
+ const currentPage = await page.locator("[aria-label='Current Page']").first().textContent();
30
+ (0, _extendedTest.expect)(currentPage).toBe("2");
31
+ });
32
+ (0, _extendedTest.test)("wait for network idle click element 2", async () => {
33
+ await page.goto("https://www.biddingo.com/soundtransit", {
34
+ timeout: 0
35
+ });
36
+ await page.waitForTimeout(3000);
37
+ await (0, _.withNetworkSettledWait)(async page => {
38
+ await page.locator("[aria-label='Next page']").first().click({
39
+ timeout: 10000
40
+ });
41
+ }, {
42
+ page,
43
+ timeoutInMs: 10000
44
+ });
45
+ const currentPage = await page.locator(".mat-paginator-range-label").first().textContent();
46
+ (0, _extendedTest.expect)(currentPage).toContain("11");
47
+ });
48
+ (0, _extendedTest.test)("wait for network idle press key combination", async () => {
49
+ await page.goto("https://www.txsmartbuy.gov/esbd?&page=3");
50
+ await page.waitForTimeout(10000);
51
+ await page.click("input[name='agencyNumber']");
52
+ await (0, _.withNetworkSettledWait)(async page => {
53
+ await page.keyboard.press("Enter");
54
+ }, {
55
+ page,
56
+ timeoutInMs: 10000
57
+ });
58
+ const currentPage = await page.locator("[aria-label='Current Page']").first().textContent();
59
+ (0, _extendedTest.expect)(currentPage).toBe("1");
60
+ });
61
+ (0, _extendedTest.test)("wait for network idle enter text and click", async () => {
62
+ await page.goto("https://www.txsmartbuy.gov/esbd?&page=3", {
63
+ timeout: 20000
64
+ });
65
+ await page.waitForTimeout(10000);
66
+ await (0, _.withNetworkSettledWait)(async page => {
67
+ await page.fill("input[name='agencyNumber']", "123456");
68
+ await page.click("#content > div > div > form > div.browse-contract-search-actions [type='submit']");
69
+ }, {
70
+ page,
71
+ timeoutInMs: 10000
72
+ });
73
+ await page.getByText("No results found", {
74
+ exact: false
75
+ }).first().textContent();
76
+ });
77
+ (0, _extendedTest.test)("wait for click element 3", async () => {
78
+ await page.goto("https://www.commbuys.com/bso/view/search/external/advancedSearchBid.xhtml");
79
+ await page.waitForTimeout(4000);
80
+ await (0, _.withNetworkSettledWait)(async page => {
81
+ await page.locator("#bidSearchForm\\:btnBidSearch").first().click({
82
+ timeout: 10000
83
+ });
84
+ }, {
85
+ page,
86
+ timeoutInMs: 20000
87
+ });
88
+ (0, _extendedTest.expect)(await page.locator("[aria-label='Page 1']").first().isVisible()).toBe(true);
89
+ });
90
+ (0, _extendedTest.test)("simple callback usage", async () => {
91
+ const result = await (0, _.withNetworkSettledWait)(async page => {
92
+ await page.goto("data:text/html,<html><body><h1>Test</h1></body></html>");
93
+ return "navigation complete";
94
+ }, {
95
+ page
96
+ });
97
+ (0, _extendedTest.expect)(result).toBe("navigation complete");
98
+ const title = await page.textContent("h1");
99
+ (0, _extendedTest.expect)(title).toBe("Test");
100
+ });
101
+ (0, _extendedTest.test)("direct call with callback and options", async () => {
102
+ const result = await (0, _.withNetworkSettledWait)(async page => {
103
+ await page.goto("data:text/html,<html><body><h1>Direct Call</h1></body></html>");
104
+ return "direct call complete";
105
+ }, {
106
+ page: page,
107
+ timeoutInMs: 10000,
108
+ maxInflightRequests: 0
109
+ });
110
+ (0, _extendedTest.expect)(result).toBe("direct call complete");
111
+ const title = await page.textContent("h1");
112
+ (0, _extendedTest.expect)(title).toBe("Direct Call");
113
+ });
114
+ });