doc-detective 4.0.1-dev.2 → 4.0.1-dev.3

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 (130) hide show
  1. package/dist/common/src/detectTests.d.ts +101 -0
  2. package/dist/common/src/detectTests.d.ts.map +1 -0
  3. package/dist/common/src/detectTests.js +662 -0
  4. package/dist/common/src/detectTests.js.map +1 -0
  5. package/dist/common/src/fileTypes.d.ts +35 -0
  6. package/dist/common/src/fileTypes.d.ts.map +1 -0
  7. package/dist/common/src/fileTypes.js +293 -0
  8. package/dist/common/src/fileTypes.js.map +1 -0
  9. package/dist/common/src/index.d.ts +10 -0
  10. package/dist/common/src/index.d.ts.map +1 -0
  11. package/dist/common/src/index.js +5 -0
  12. package/dist/common/src/index.js.map +1 -0
  13. package/dist/common/src/schemas/index.d.ts +5 -0
  14. package/dist/common/src/schemas/index.d.ts.map +1 -0
  15. package/dist/common/src/schemas/index.js +3 -0
  16. package/dist/common/src/schemas/index.js.map +1 -0
  17. package/dist/common/src/schemas/schemas.json +128117 -0
  18. package/dist/common/src/types/generated/checkLink_v3.d.ts +27 -0
  19. package/dist/common/src/types/generated/checkLink_v3.d.ts.map +1 -0
  20. package/dist/common/src/types/generated/checkLink_v3.js +7 -0
  21. package/dist/common/src/types/generated/checkLink_v3.js.map +1 -0
  22. package/dist/common/src/types/generated/click_v3.d.ts +16 -0
  23. package/dist/common/src/types/generated/click_v3.d.ts.map +1 -0
  24. package/dist/common/src/types/generated/click_v3.js +7 -0
  25. package/dist/common/src/types/generated/click_v3.js.map +1 -0
  26. package/dist/common/src/types/generated/config_v3.d.ts +398 -0
  27. package/dist/common/src/types/generated/config_v3.d.ts.map +1 -0
  28. package/dist/common/src/types/generated/config_v3.js +7 -0
  29. package/dist/common/src/types/generated/config_v3.js.map +1 -0
  30. package/dist/common/src/types/generated/context_v3.d.ts +108 -0
  31. package/dist/common/src/types/generated/context_v3.d.ts.map +1 -0
  32. package/dist/common/src/types/generated/context_v3.js +7 -0
  33. package/dist/common/src/types/generated/context_v3.js.map +1 -0
  34. package/dist/common/src/types/generated/dragAndDrop_v3.d.ts +37 -0
  35. package/dist/common/src/types/generated/dragAndDrop_v3.d.ts.map +1 -0
  36. package/dist/common/src/types/generated/dragAndDrop_v3.js +7 -0
  37. package/dist/common/src/types/generated/dragAndDrop_v3.js.map +1 -0
  38. package/dist/common/src/types/generated/endRecord_v3.d.ts +9 -0
  39. package/dist/common/src/types/generated/endRecord_v3.d.ts.map +1 -0
  40. package/dist/common/src/types/generated/endRecord_v3.js +7 -0
  41. package/dist/common/src/types/generated/endRecord_v3.js.map +1 -0
  42. package/dist/common/src/types/generated/find_v3.d.ts +16 -0
  43. package/dist/common/src/types/generated/find_v3.d.ts.map +1 -0
  44. package/dist/common/src/types/generated/find_v3.js +7 -0
  45. package/dist/common/src/types/generated/find_v3.js.map +1 -0
  46. package/dist/common/src/types/generated/goTo_v3.d.ts +46 -0
  47. package/dist/common/src/types/generated/goTo_v3.d.ts.map +1 -0
  48. package/dist/common/src/types/generated/goTo_v3.js +7 -0
  49. package/dist/common/src/types/generated/goTo_v3.js.map +1 -0
  50. package/dist/common/src/types/generated/httpRequest_v3.d.ts +16 -0
  51. package/dist/common/src/types/generated/httpRequest_v3.d.ts.map +1 -0
  52. package/dist/common/src/types/generated/httpRequest_v3.js +7 -0
  53. package/dist/common/src/types/generated/httpRequest_v3.js.map +1 -0
  54. package/dist/common/src/types/generated/loadCookie_v3.d.ts +16 -0
  55. package/dist/common/src/types/generated/loadCookie_v3.d.ts.map +1 -0
  56. package/dist/common/src/types/generated/loadCookie_v3.js +7 -0
  57. package/dist/common/src/types/generated/loadCookie_v3.js.map +1 -0
  58. package/dist/common/src/types/generated/loadVariables_v3.d.ts +9 -0
  59. package/dist/common/src/types/generated/loadVariables_v3.d.ts.map +1 -0
  60. package/dist/common/src/types/generated/loadVariables_v3.js +7 -0
  61. package/dist/common/src/types/generated/loadVariables_v3.js.map +1 -0
  62. package/dist/common/src/types/generated/openApi_v3.d.ts +62 -0
  63. package/dist/common/src/types/generated/openApi_v3.d.ts.map +1 -0
  64. package/dist/common/src/types/generated/openApi_v3.js +7 -0
  65. package/dist/common/src/types/generated/openApi_v3.js.map +1 -0
  66. package/dist/common/src/types/generated/record_v3.d.ts +32 -0
  67. package/dist/common/src/types/generated/record_v3.d.ts.map +1 -0
  68. package/dist/common/src/types/generated/record_v3.js +7 -0
  69. package/dist/common/src/types/generated/record_v3.js.map +1 -0
  70. package/dist/common/src/types/generated/report_v3.d.ts +174 -0
  71. package/dist/common/src/types/generated/report_v3.d.ts.map +1 -0
  72. package/dist/common/src/types/generated/report_v3.js +7 -0
  73. package/dist/common/src/types/generated/report_v3.js.map +1 -0
  74. package/dist/common/src/types/generated/resolvedTests_v3.d.ts +571 -0
  75. package/dist/common/src/types/generated/resolvedTests_v3.d.ts.map +1 -0
  76. package/dist/common/src/types/generated/resolvedTests_v3.js +7 -0
  77. package/dist/common/src/types/generated/resolvedTests_v3.js.map +1 -0
  78. package/dist/common/src/types/generated/runCode_v3.d.ts +57 -0
  79. package/dist/common/src/types/generated/runCode_v3.d.ts.map +1 -0
  80. package/dist/common/src/types/generated/runCode_v3.js +7 -0
  81. package/dist/common/src/types/generated/runCode_v3.js.map +1 -0
  82. package/dist/common/src/types/generated/runShell_v3.d.ts +56 -0
  83. package/dist/common/src/types/generated/runShell_v3.d.ts.map +1 -0
  84. package/dist/common/src/types/generated/runShell_v3.js +7 -0
  85. package/dist/common/src/types/generated/runShell_v3.js.map +1 -0
  86. package/dist/common/src/types/generated/saveCookie_v3.d.ts +16 -0
  87. package/dist/common/src/types/generated/saveCookie_v3.d.ts.map +1 -0
  88. package/dist/common/src/types/generated/saveCookie_v3.js +7 -0
  89. package/dist/common/src/types/generated/saveCookie_v3.js.map +1 -0
  90. package/dist/common/src/types/generated/screenshot_v3.d.ts +74 -0
  91. package/dist/common/src/types/generated/screenshot_v3.d.ts.map +1 -0
  92. package/dist/common/src/types/generated/screenshot_v3.js +7 -0
  93. package/dist/common/src/types/generated/screenshot_v3.js.map +1 -0
  94. package/dist/common/src/types/generated/sourceIntegration_v3.d.ts +30 -0
  95. package/dist/common/src/types/generated/sourceIntegration_v3.d.ts.map +1 -0
  96. package/dist/common/src/types/generated/sourceIntegration_v3.js +7 -0
  97. package/dist/common/src/types/generated/sourceIntegration_v3.js.map +1 -0
  98. package/dist/common/src/types/generated/spec_v3.d.ts +159 -0
  99. package/dist/common/src/types/generated/spec_v3.d.ts.map +1 -0
  100. package/dist/common/src/types/generated/spec_v3.js +7 -0
  101. package/dist/common/src/types/generated/spec_v3.js.map +1 -0
  102. package/dist/common/src/types/generated/step_v3.d.ts +1558 -0
  103. package/dist/common/src/types/generated/step_v3.d.ts.map +1 -0
  104. package/dist/common/src/types/generated/step_v3.js +7 -0
  105. package/dist/common/src/types/generated/step_v3.js.map +1 -0
  106. package/dist/common/src/types/generated/stopRecord_v3.d.ts +9 -0
  107. package/dist/common/src/types/generated/stopRecord_v3.d.ts.map +1 -0
  108. package/dist/common/src/types/generated/stopRecord_v3.js +7 -0
  109. package/dist/common/src/types/generated/stopRecord_v3.js.map +1 -0
  110. package/dist/common/src/types/generated/test_v3.d.ts +3491 -0
  111. package/dist/common/src/types/generated/test_v3.d.ts.map +1 -0
  112. package/dist/common/src/types/generated/test_v3.js +7 -0
  113. package/dist/common/src/types/generated/test_v3.js.map +1 -0
  114. package/dist/common/src/types/generated/type_v3.d.ts +54 -0
  115. package/dist/common/src/types/generated/type_v3.d.ts.map +1 -0
  116. package/dist/common/src/types/generated/type_v3.js +7 -0
  117. package/dist/common/src/types/generated/type_v3.js.map +1 -0
  118. package/dist/common/src/types/generated/wait_v3.d.ts +12 -0
  119. package/dist/common/src/types/generated/wait_v3.d.ts.map +1 -0
  120. package/dist/common/src/types/generated/wait_v3.js +7 -0
  121. package/dist/common/src/types/generated/wait_v3.js.map +1 -0
  122. package/dist/common/src/validate.d.ts +41 -0
  123. package/dist/common/src/validate.d.ts.map +1 -0
  124. package/dist/common/src/validate.js +557 -0
  125. package/dist/common/src/validate.js.map +1 -0
  126. package/package.json +6 -1
  127. package/.doc-detective.json +0 -1
  128. package/CONTRIBUTIONS.md +0 -27
  129. package/screenshot-boolean.png +0 -0
  130. package/scripts/createCjsWrapper.js +0 -31
@@ -0,0 +1,557 @@
1
+ import { schemas } from "./schemas/index.js";
2
+ import Ajv from "ajv";
3
+ // Ajv extra formats: https://ajv.js.org/packages/ajv-formats.html
4
+ import addFormats from "ajv-formats";
5
+ // Ajv extra keywords: https://ajv.js.org/packages/ajv-keywords.html
6
+ import addKeywords from "ajv-keywords";
7
+ // Ajv custom errors: https://ajv.js.org/packages/ajv-errors.html
8
+ import addErrors from "ajv-errors";
9
+ import dynamicDefaultsDef from "ajv-keywords/dist/definitions/dynamicDefaults.js";
10
+ // Browser-compatible UUID function
11
+ /* c8 ignore next 10 - crypto.randomUUID always available in Node.js; fallback is for browsers */
12
+ function getRandomUUID() {
13
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
14
+ return crypto.randomUUID();
15
+ }
16
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
17
+ const r = Math.random() * 16 | 0;
18
+ const v = c === 'x' ? r : (r & 0x3 | 0x8);
19
+ return v.toString(16);
20
+ });
21
+ }
22
+ // Configure base Ajv
23
+ // @ts-expect-error - CJS/ESM interop: Ajv constructor is callable at runtime
24
+ const ajv = new Ajv({
25
+ strictSchema: false,
26
+ useDefaults: true,
27
+ allErrors: true,
28
+ allowUnionTypes: true,
29
+ coerceTypes: true,
30
+ });
31
+ // Enable `uuid` dynamic default
32
+ // @ts-expect-error - CJS/ESM interop: dynamicDefaultsDef.DEFAULTS exists at runtime
33
+ dynamicDefaultsDef.DEFAULTS.uuid = (_args) => getRandomUUID;
34
+ // Enhance Ajv
35
+ // @ts-expect-error - CJS/ESM interop: ajv plugin functions are callable at runtime
36
+ addFormats(ajv);
37
+ // @ts-expect-error - CJS/ESM interop: ajv plugin functions are callable at runtime
38
+ addKeywords(ajv);
39
+ // @ts-expect-error - CJS/ESM interop: ajv plugin functions are callable at runtime
40
+ addErrors(ajv);
41
+ // Add all schemas from `schema` object.
42
+ for (const [key, value] of Object.entries(schemas)) {
43
+ ajv.addSchema(value, key);
44
+ }
45
+ // Define the specific schemas that have compatibility mappings
46
+ const compatibleSchemas = {
47
+ config_v3: ["config_v2"],
48
+ context_v3: ["context_v2"],
49
+ openApi_v3: ["openApi_v2"],
50
+ spec_v3: ["spec_v2"],
51
+ step_v3: [
52
+ "checkLink_v2",
53
+ "find_v2",
54
+ "goTo_v2",
55
+ "httpRequest_v2",
56
+ "runShell_v2",
57
+ "runCode_v2",
58
+ "saveScreenshot_v2",
59
+ "setVariables_v2",
60
+ "startRecording_v2",
61
+ "stopRecording_v2",
62
+ "typeKeys_v2",
63
+ "wait_v2",
64
+ ],
65
+ test_v3: ["test_v2"],
66
+ };
67
+ /**
68
+ * Escapes special characters in a string for safe use in a regular expression pattern.
69
+ *
70
+ * @param string - The input string to escape.
71
+ * @returns The escaped string, safe for use in regular expressions.
72
+ */
73
+ function escapeRegExp(string) {
74
+ return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
75
+ }
76
+ /**
77
+ * Validates an object against a specified JSON schema, supporting backward compatibility and automatic transformation from older schema versions if needed.
78
+ *
79
+ * If validation against the target schema fails and compatible older schemas are defined, attempts validation against each compatible schema. On a match, transforms the object to the target schema and revalidates. Returns the validation result, any errors, and the (possibly transformed) object.
80
+ *
81
+ * @param options - Validation options
82
+ * @param options.schemaKey - The key identifying the target JSON schema.
83
+ * @param options.object - The object to validate.
84
+ * @param options.addDefaults - Whether to include default values in the returned object.
85
+ * @returns Validation result, error messages, and the validated (and possibly transformed) object.
86
+ *
87
+ * @throws {Error} If {@link schemaKey} or {@link object} is missing.
88
+ */
89
+ export function validate({ schemaKey, object, addDefaults = true, }) {
90
+ if (!schemaKey) {
91
+ throw new Error("Schema key is required.");
92
+ }
93
+ if (!object) {
94
+ throw new Error("Object is required.");
95
+ }
96
+ const result = {
97
+ valid: false,
98
+ errors: "",
99
+ object: object,
100
+ };
101
+ let validationObject;
102
+ let check = ajv.getSchema(schemaKey);
103
+ if (!check) {
104
+ result.valid = false;
105
+ result.errors = `Schema not found: ${schemaKey}`;
106
+ result.object = object;
107
+ return result;
108
+ }
109
+ // Clone the object to avoid modifying the original object
110
+ validationObject = JSON.parse(JSON.stringify(object));
111
+ // Check if the object is compatible with the schema
112
+ result.valid = check(validationObject);
113
+ result.errors = "";
114
+ if (check.errors) {
115
+ // Check if the object is compatible with another schema
116
+ const compatibleSchemasList = compatibleSchemas[schemaKey];
117
+ if (!compatibleSchemasList) {
118
+ result.errors = check.errors
119
+ .map((error) => `${error.instancePath} ${error.message} (${JSON.stringify(error.params)})`)
120
+ .join(", ");
121
+ result.object = object;
122
+ result.valid = false;
123
+ return result;
124
+ }
125
+ const matchedSchemaKey = compatibleSchemasList.find((key) => {
126
+ validationObject = JSON.parse(JSON.stringify(object));
127
+ const check = ajv.getSchema(key);
128
+ if (check && check(validationObject))
129
+ return key;
130
+ });
131
+ if (!matchedSchemaKey) {
132
+ result.errors = check.errors
133
+ .map((error) => `${error.instancePath} ${error.message} (${JSON.stringify(error.params)})`)
134
+ .join(", ");
135
+ result.object = object;
136
+ result.valid = false;
137
+ return result;
138
+ }
139
+ else {
140
+ const transformedObject = transformToSchemaKey({
141
+ currentSchema: matchedSchemaKey,
142
+ targetSchema: schemaKey,
143
+ object: validationObject,
144
+ });
145
+ result.valid = check(transformedObject);
146
+ if (result.valid) {
147
+ validationObject = transformedObject;
148
+ object = transformedObject;
149
+ /* c8 ignore start - Defensive: transformToSchemaKey validates internally, so this is unreachable */
150
+ }
151
+ else if (check.errors) {
152
+ const errors = check.errors.map((error) => `${error.instancePath} ${error.message} (${JSON.stringify(error.params)})`);
153
+ result.errors = errors.join(", ");
154
+ return result;
155
+ }
156
+ /* c8 ignore stop */
157
+ }
158
+ }
159
+ if (addDefaults) {
160
+ result.object = validationObject;
161
+ }
162
+ else {
163
+ result.object = object;
164
+ }
165
+ return result;
166
+ }
167
+ /**
168
+ * Transform an object from one schema key to another and return a validated instance of the target schema.
169
+ *
170
+ * @param params - Function parameters.
171
+ * @param params.currentSchema - Schema key representing the object's current version.
172
+ * @param params.targetSchema - Schema key to transform the object into.
173
+ * @param params.object - The source object to transform.
174
+ * @returns The transformed object conforming to the target schema.
175
+ * @throws {Error} If transformation between the specified schemas is not supported or if the transformed object fails validation.
176
+ */
177
+ export function transformToSchemaKey({ currentSchema = "", targetSchema = "", object = {}, }) {
178
+ // Check if the current schema is the same as the target schema
179
+ if (currentSchema === targetSchema) {
180
+ return object;
181
+ }
182
+ // Check if the current schema is compatible with the target schema
183
+ const compatibleList = compatibleSchemas[targetSchema];
184
+ if (!compatibleList ||
185
+ !compatibleList.includes(currentSchema)) {
186
+ throw new Error(`Can't transform from ${currentSchema} to ${targetSchema}.`);
187
+ }
188
+ // Transform the object
189
+ if (targetSchema === "step_v3") {
190
+ const transformedObject = {
191
+ stepId: object.id,
192
+ description: object.description,
193
+ };
194
+ if (currentSchema === "goTo_v2") {
195
+ transformedObject.goTo = {
196
+ url: object.url,
197
+ origin: object.origin,
198
+ };
199
+ }
200
+ else if (currentSchema === "checkLink_v2") {
201
+ transformedObject.checkLink = {
202
+ url: object.url,
203
+ origin: object.origin,
204
+ statusCodes: object.statusCodes,
205
+ };
206
+ }
207
+ else if (currentSchema === "find_v2") {
208
+ transformedObject.find = {
209
+ selector: object.selector,
210
+ elementText: object.matchText,
211
+ timeout: object.timeout,
212
+ moveTo: object.moveTo,
213
+ click: object.click,
214
+ type: object.typeKeys,
215
+ };
216
+ // Handle typeKeys.delay key change
217
+ if (typeof object.typeKeys === "object" && object.typeKeys.keys) {
218
+ transformedObject.find.type.inputDelay = object.typeKeys.delay;
219
+ delete transformedObject.find.type.delay;
220
+ }
221
+ transformedObject.variables = {};
222
+ object.setVariables?.forEach((variable) => {
223
+ transformedObject.variables[variable.name] =
224
+ `extract($$element.text, "${variable.regex}")`;
225
+ });
226
+ }
227
+ else if (currentSchema === "httpRequest_v2") {
228
+ transformedObject.httpRequest = {
229
+ method: object.method,
230
+ url: object.url,
231
+ openApi: object.openApi,
232
+ request: {
233
+ body: object.requestData,
234
+ headers: object.requestHeaders,
235
+ parameters: object.requestParams,
236
+ },
237
+ response: {
238
+ body: object.responseData,
239
+ headers: object.responseHeaders,
240
+ },
241
+ statusCodes: object.statusCodes,
242
+ allowAdditionalFields: object.allowAdditionalFields,
243
+ timeout: object.timeout,
244
+ path: object.savePath,
245
+ directory: object.saveDirectory,
246
+ maxVariation: object.maxVariation / 100,
247
+ overwrite: object.overwrite === "byVariation"
248
+ ? "aboveVariation"
249
+ : object.overwrite,
250
+ };
251
+ // Handle openApi.requestHeaders key change
252
+ if (object.openApi) {
253
+ transformedObject.httpRequest.openApi = transformToSchemaKey({
254
+ currentSchema: "openApi_v2",
255
+ targetSchema: "openApi_v3",
256
+ object: object.openApi,
257
+ });
258
+ }
259
+ transformedObject.variables = {};
260
+ object.envsFromResponseData?.forEach((variable) => {
261
+ transformedObject.variables[variable.name] =
262
+ `jq($$response.body, "${variable.jqFilter}")`;
263
+ });
264
+ }
265
+ else if (currentSchema === "runShell_v2") {
266
+ transformedObject.runShell = {
267
+ command: object.command,
268
+ args: object.args,
269
+ workingDirectory: object.workingDirectory,
270
+ exitCodes: object.exitCodes,
271
+ stdio: object.output,
272
+ path: object.savePath,
273
+ directory: object.saveDirectory,
274
+ maxVariation: object.maxVariation / 100,
275
+ overwrite: object.overwrite === "byVariation"
276
+ ? "aboveVariation"
277
+ : object.overwrite,
278
+ timeout: object.timeout,
279
+ };
280
+ transformedObject.variables = {};
281
+ object.setVariables?.forEach((variable) => {
282
+ transformedObject.variables[variable.name] =
283
+ `extract($$stdio.stdout, "${variable.regex}")`;
284
+ });
285
+ }
286
+ else if (currentSchema === "runCode_v2") {
287
+ transformedObject.runCode = {
288
+ language: object.language,
289
+ code: object.code,
290
+ args: object.args,
291
+ workingDirectory: object.workingDirectory,
292
+ exitCodes: object.exitCodes,
293
+ stdio: object.output,
294
+ path: object.savePath,
295
+ directory: object.saveDirectory,
296
+ maxVariation: object.maxVariation / 100,
297
+ overwrite: object.overwrite === "byVariation"
298
+ ? "aboveVariation"
299
+ : object.overwrite,
300
+ timeout: object.timeout,
301
+ };
302
+ transformedObject.variables = {};
303
+ object?.setVariables?.forEach((variable) => {
304
+ transformedObject.variables[variable.name] =
305
+ `extract($$stdio.stdout, "${variable.regex}")`;
306
+ });
307
+ }
308
+ else if (currentSchema === "setVariables_v2") {
309
+ transformedObject.loadVariables = object.path;
310
+ }
311
+ else if (currentSchema === "typeKeys_v2") {
312
+ transformedObject.type = {
313
+ keys: object.keys,
314
+ inputDelay: object.delay,
315
+ };
316
+ }
317
+ else if (currentSchema === "saveScreenshot_v2") {
318
+ transformedObject.screenshot = {
319
+ path: object.path,
320
+ directory: object.directory,
321
+ maxVariation: object.maxVariation / 100,
322
+ overwrite: object.overwrite === "byVariation"
323
+ ? "aboveVariation"
324
+ : object.overwrite,
325
+ crop: object.crop,
326
+ };
327
+ }
328
+ else if (currentSchema === "startRecording_v2") {
329
+ transformedObject.record = {
330
+ path: object.path,
331
+ directory: object.directory,
332
+ overwrite: object.overwrite,
333
+ };
334
+ }
335
+ else if (currentSchema === "stopRecording_v2") {
336
+ transformedObject.stopRecord = true;
337
+ }
338
+ else if (currentSchema === "wait_v2") {
339
+ transformedObject.wait = object;
340
+ }
341
+ const result = validate({
342
+ schemaKey: "step_v3",
343
+ object: transformedObject,
344
+ });
345
+ if (!result.valid) {
346
+ throw new Error(`Invalid object: ${result.errors}`);
347
+ }
348
+ return result.object;
349
+ }
350
+ else if (targetSchema === "config_v3") {
351
+ // Handle config_v2 to config_v3 transformation
352
+ const transformedObject = {
353
+ loadVariables: object.envVariables,
354
+ input: object?.runTests?.input || object.input,
355
+ output: object?.runTests?.output || object.output,
356
+ recursive: object?.runTests?.recursive || object.recursive,
357
+ relativePathBase: object.relativePathBase,
358
+ detectSteps: object?.runTests?.detectSteps,
359
+ beforeAny: object?.runTests?.setup,
360
+ afterAll: object?.runTests?.cleanup,
361
+ logLevel: object.logLevel,
362
+ telemetry: object.telemetry,
363
+ };
364
+ // Handle context transformation
365
+ if (object?.runTests?.contexts)
366
+ transformedObject.runOn = object.runTests.contexts.map((context) => transformToSchemaKey({
367
+ currentSchema: "context_v2",
368
+ targetSchema: "context_v3",
369
+ object: context,
370
+ }));
371
+ // Handle openApi transformation
372
+ if (object?.integrations?.openApi) {
373
+ transformedObject.integrations = {};
374
+ transformedObject.integrations.openApi = object.integrations.openApi.map((description) => transformToSchemaKey({
375
+ currentSchema: "openApi_v2",
376
+ targetSchema: "openApi_v3",
377
+ object: description,
378
+ }));
379
+ }
380
+ // Handle fileTypes transformation
381
+ if (object?.fileTypes)
382
+ transformedObject.fileTypes = object.fileTypes.map((fileType) => {
383
+ const transformedFileType = {
384
+ name: fileType.name,
385
+ extensions: fileType.extensions.map((extension) =>
386
+ // Trim leading `.` from extension
387
+ extension.replace(/^\./, "")),
388
+ inlineStatements: {
389
+ // Convert strings to regex, escaping special characters
390
+ testStart: `${escapeRegExp(fileType.testStartStatementOpen)}(.*?)${escapeRegExp(fileType.testStartStatementClose)}`,
391
+ testEnd: escapeRegExp(fileType.testEndStatement),
392
+ ignoreStart: escapeRegExp(fileType.testIgnoreStatement),
393
+ step: `${escapeRegExp(fileType.stepStatementOpen)}(.*?)${escapeRegExp(fileType.stepStatementClose)}`,
394
+ },
395
+ };
396
+ if (fileType.markup)
397
+ transformedFileType.markup = fileType.markup.map((markup) => {
398
+ const transformedMarkup = {
399
+ name: markup.name,
400
+ regex: markup.regex,
401
+ };
402
+ if (markup.actions)
403
+ transformedMarkup.actions = markup.actions.map((action) => {
404
+ if (typeof action === "string")
405
+ return action;
406
+ if (typeof action === "object") {
407
+ if (action.params) {
408
+ action = {
409
+ action: action.name,
410
+ ...action.params,
411
+ };
412
+ }
413
+ const transformedAction = transformToSchemaKey({
414
+ currentSchema: `${action.action}_v2`,
415
+ targetSchema: "step_v3",
416
+ object: action,
417
+ });
418
+ return transformedAction;
419
+ }
420
+ });
421
+ return transformedMarkup;
422
+ });
423
+ return transformedFileType;
424
+ });
425
+ const result = validate({
426
+ schemaKey: "config_v3",
427
+ object: transformedObject,
428
+ });
429
+ // Defensive: transformation always produces valid config_v3, unreachable
430
+ /* c8 ignore next 3 */
431
+ if (!result.valid) {
432
+ throw new Error(`Invalid object: ${result.errors}`);
433
+ }
434
+ return result.object;
435
+ }
436
+ else if (targetSchema === "context_v3") {
437
+ const transformedObject = {};
438
+ // Handle context_v2 to context_v3 transformation
439
+ transformedObject.platforms = object.platforms;
440
+ if (object.app?.name) {
441
+ const name = object.app.name === "edge" ? "chrome" : object.app?.name;
442
+ transformedObject.browsers = [];
443
+ transformedObject.browsers.push({
444
+ name,
445
+ headless: object.app?.options?.headless,
446
+ window: {
447
+ width: object.app?.options?.width,
448
+ height: object.app?.options?.height,
449
+ },
450
+ viewport: {
451
+ width: object.app?.options?.viewport_width,
452
+ height: object.app?.options?.viewport_height,
453
+ },
454
+ });
455
+ }
456
+ const result = validate({
457
+ schemaKey: "context_v3",
458
+ object: transformedObject,
459
+ });
460
+ if (!result.valid) {
461
+ throw new Error(`Invalid object: ${result.errors}`);
462
+ }
463
+ return result.object;
464
+ }
465
+ else if (targetSchema === "openApi_v3") {
466
+ let transformedObject;
467
+ // Handle openApi_v2 to openApi_v3 transformation
468
+ const { name, requestHeaders, ...intermediaryObject } = object;
469
+ intermediaryObject.name = object.name;
470
+ intermediaryObject.headers = object.requestHeaders;
471
+ transformedObject = { ...intermediaryObject };
472
+ const result = validate({
473
+ schemaKey: "openApi_v3",
474
+ object: transformedObject,
475
+ });
476
+ if (!result.valid) {
477
+ throw new Error(`Invalid object: ${result.errors}`);
478
+ }
479
+ return result.object;
480
+ }
481
+ else if (targetSchema === "spec_v3") {
482
+ // Handle spec_v2 to spec_v3 transformation
483
+ const transformedObject = {
484
+ specId: object.id,
485
+ description: object.description,
486
+ contentPath: object.file,
487
+ };
488
+ if (object.contexts)
489
+ transformedObject.runOn = object.contexts.map((context) => transformToSchemaKey({
490
+ currentSchema: "context_v2",
491
+ targetSchema: "context_v3",
492
+ object: context,
493
+ }));
494
+ if (object.openApi)
495
+ transformedObject.openApi = object.openApi.map((description) => transformToSchemaKey({
496
+ currentSchema: "openApi_v2",
497
+ targetSchema: "openApi_v3",
498
+ object: description,
499
+ }));
500
+ transformedObject.tests = object.tests.map((test) => transformToSchemaKey({
501
+ currentSchema: "test_v2",
502
+ targetSchema: "test_v3",
503
+ object: test,
504
+ }));
505
+ const result = validate({
506
+ schemaKey: "spec_v3",
507
+ object: transformedObject,
508
+ });
509
+ // Defensive: nested transforms validate; this is unreachable
510
+ /* c8 ignore next 3 */
511
+ if (!result.valid) {
512
+ throw new Error(`Invalid object: ${result.errors}`);
513
+ }
514
+ return result.object;
515
+ }
516
+ else if (targetSchema === "test_v3") {
517
+ // Handle test_v2 to test_v3 transformation
518
+ const transformedObject = {
519
+ testId: object.id,
520
+ description: object.description,
521
+ contentPath: object.file,
522
+ detectSteps: object.detectSteps,
523
+ before: object.setup,
524
+ after: object.cleanup,
525
+ };
526
+ if (object.contexts)
527
+ transformedObject.runOn = object.contexts.map((context) => transformToSchemaKey({
528
+ currentSchema: "context_v2",
529
+ targetSchema: "context_v3",
530
+ object: context,
531
+ }));
532
+ if (object.openApi)
533
+ transformedObject.openApi = object.openApi.map((description) => transformToSchemaKey({
534
+ currentSchema: "openApi_v2",
535
+ targetSchema: "openApi_v3",
536
+ object: description,
537
+ }));
538
+ transformedObject.steps = object.steps.map((step) => transformToSchemaKey({
539
+ currentSchema: `${step.action}_v2`,
540
+ targetSchema: "step_v3",
541
+ object: step,
542
+ }));
543
+ const result = validate({
544
+ schemaKey: "test_v3",
545
+ object: transformedObject,
546
+ });
547
+ // Defensive: nested transforms validate; this is unreachable
548
+ /* c8 ignore next 3 */
549
+ if (!result.valid) {
550
+ throw new Error(`Invalid object: ${result.errors}`);
551
+ }
552
+ return result.object;
553
+ }
554
+ /* c8 ignore next 2 - Dead code: incompatible schemas throw at line 226-228 */
555
+ return null;
556
+ }
557
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/common/src/validate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "doc-detective",
3
- "version": "4.0.1-dev.2",
3
+ "version": "4.0.1-dev.3",
4
4
  "description": "Treat doc content as testable assertions to validate doc accuracy and product UX.",
5
5
  "workspaces": [
6
6
  "src/common"
@@ -9,6 +9,11 @@
9
9
  "doc-detective": "bin/doc-detective.js"
10
10
  },
11
11
  "type": "module",
12
+ "files": [
13
+ "dist/",
14
+ "bin/",
15
+ "scripts/postinstall.js"
16
+ ],
12
17
  "main": "dist/index.cjs",
13
18
  "types": "dist/index.d.ts",
14
19
  "exports": {
@@ -1 +0,0 @@
1
- {}
package/CONTRIBUTIONS.md DELETED
@@ -1,27 +0,0 @@
1
- # How to contribute
2
-
3
- `doc-detective` welcomes contributions of all sorts (as do all Doc Detective projects). If you can't contribute code, you can still help by reporting issues, suggesting new features, improving the documentation, or sponsoring the project. Please follow the guidelines below.
4
-
5
- ## Reporting issues
6
-
7
- If you find a bug, report it on the [GitHub issue tracker](https://github.com/doc-detective/doc-detective/issues).
8
-
9
- ## Contributing code
10
-
11
- To contribute code,
12
-
13
- 1. Fork the project.
14
- 2. Create a new branch.
15
- 3. Make your changes.
16
- 4. Submit a pull request to the `rc` (release candidate) branch.
17
- 5. Wait for your pull request to be reviewed.
18
- 6. Make any necessary changes to your pull request.
19
- 7. Your pull request will be merged once it has been reviewed and approved.
20
-
21
- ## License
22
-
23
- By contributing to `doc-detective`, you agree that your contributions will be licensed under the [AGPL license](https://github.com/doc-detective/doc-detective/blob/main/LICENCE).
24
-
25
- ## Thank you
26
-
27
- Thank you for your contributions! We appreciate your help in making the project better.
Binary file
@@ -1,31 +0,0 @@
1
- import { build } from "esbuild";
2
- import { copyFile } from "fs/promises";
3
- import { fileURLToPath } from "url";
4
- import path from "path";
5
-
6
- const __filename = fileURLToPath(import.meta.url);
7
- const __dirname = path.dirname(__filename);
8
- const distDir = path.join(__dirname, "..", "dist");
9
-
10
- await build({
11
- entryPoints: [path.join(distDir, "index.js")],
12
- outfile: path.join(distDir, "index.cjs"),
13
- bundle: true,
14
- format: "cjs",
15
- platform: "node",
16
- packages: "external",
17
- define: {
18
- "import.meta.url": "importMetaUrl",
19
- },
20
- banner: {
21
- js: "const importMetaUrl = require('url').pathToFileURL(__filename).href;",
22
- },
23
- });
24
-
25
- await copyFile(
26
- path.join(distDir, "index.d.ts"),
27
- path.join(distDir, "index.d.cts")
28
- );
29
-
30
- console.log("Created CJS bundle at dist/index.cjs");
31
- console.log("Copied type definitions to dist/index.d.cts");