testeranto 0.85.0 → 0.94.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 (98) hide show
  1. package/README.md +1 -3
  2. package/bin/init-docs.js +24 -0
  3. package/bundle.js +53 -0
  4. package/dist/common/dist/module/src/Init.js +40 -0
  5. package/dist/common/src/Init.js +30 -0
  6. package/dist/common/src/Node.js +5 -3
  7. package/dist/common/src/PM/main.js +136 -90
  8. package/dist/common/src/Project.js +82 -0
  9. package/dist/common/src/Puppeteer.js +0 -2
  10. package/dist/common/src/SubPackages/puppeteer.js +1 -1
  11. package/dist/common/src/SubPackages/react/jsx/index.js +14 -6
  12. package/dist/common/src/SubPackages/react/jsx/node.js +7 -2
  13. package/dist/common/src/SubPackages/react-dom/component/web.js +13 -39
  14. package/dist/common/src/SubPackages/react-test-renderer/component/interface.js +2 -10
  15. package/dist/common/src/Web.js +25 -21
  16. package/dist/common/{run-tests.js → src/build-tests.js} +10 -5
  17. package/dist/common/src/defaultConfig.js +19 -0
  18. package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +26 -16
  19. package/dist/common/src/init-docs.js +43 -0
  20. package/dist/common/src/lib/abstractBase.js +29 -248
  21. package/dist/common/src/lib/basebuilder.js +1 -11
  22. package/dist/common/src/lib/classBuilder.js +1 -1
  23. package/dist/common/src/lib/core.js +8 -26
  24. package/dist/common/{build-tests.js → src/run-tests.js} +10 -9
  25. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  26. package/dist/module/src/Init.js +30 -0
  27. package/dist/module/src/Node.js +5 -3
  28. package/dist/module/src/PM/main.js +136 -90
  29. package/dist/module/src/Project.js +82 -0
  30. package/dist/module/src/Puppeteer.js +0 -2
  31. package/dist/module/src/SubPackages/puppeteer.js +1 -1
  32. package/dist/module/src/SubPackages/react/jsx/index.js +14 -6
  33. package/dist/module/src/SubPackages/react/jsx/node.js +7 -2
  34. package/dist/module/src/SubPackages/react-dom/component/web.js +13 -39
  35. package/dist/module/src/SubPackages/react-test-renderer/component/interface.js +2 -10
  36. package/dist/module/src/Web.js +25 -21
  37. package/dist/module/src/build-tests.js +11 -0
  38. package/dist/module/src/defaultConfig.js +17 -0
  39. package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +26 -16
  40. package/dist/module/src/init-docs.js +15 -0
  41. package/dist/module/src/lib/abstractBase.js +29 -248
  42. package/dist/module/src/lib/basebuilder.js +1 -11
  43. package/dist/module/src/lib/classBuilder.js +1 -1
  44. package/dist/module/src/lib/core.js +8 -26
  45. package/dist/module/src/run-tests.js +11 -0
  46. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  47. package/dist/prebuild/build-tests.mjs +553 -0
  48. package/dist/prebuild/init-docs.mjs +48 -0
  49. package/dist/prebuild/run-tests.mjs +871 -0
  50. package/dist/types/dist/module/src/Init.d.ts +2 -0
  51. package/dist/types/src/Node.d.ts +4 -1
  52. package/dist/types/src/PM/main.d.ts +2 -1
  53. package/dist/types/src/SubPackages/react/jsx/node.d.ts +1 -1
  54. package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +1 -1
  55. package/dist/types/src/Web.d.ts +2 -2
  56. package/dist/types/src/build-tests.d.ts +1 -0
  57. package/dist/types/src/defaultConfig.d.ts +3 -0
  58. package/dist/types/src/init-docs.d.ts +1 -0
  59. package/dist/types/src/lib/abstractBase.d.ts +6 -2
  60. package/dist/types/src/lib/core.d.ts +3 -3
  61. package/dist/types/src/lib/types.d.ts +5 -1
  62. package/dist/types/src/run-tests.d.ts +1 -0
  63. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  64. package/package.json +21 -24
  65. package/src/Init.ts +28 -0
  66. package/src/Node.ts +6 -3
  67. package/src/PM/main.ts +168 -110
  68. package/src/Project.ts +103 -0
  69. package/src/Puppeteer.ts +0 -2
  70. package/src/SubPackages/puppeteer.ts +1 -1
  71. package/src/SubPackages/react/jsx/index.ts +15 -7
  72. package/src/SubPackages/react/jsx/node.ts +6 -5
  73. package/src/SubPackages/react-dom/component/web.ts +28 -51
  74. package/src/SubPackages/react-test-renderer/component/interface.ts +4 -11
  75. package/src/Web.ts +45 -23
  76. package/src/build-tests.ts +12 -0
  77. package/src/defaultConfig.ts +20 -0
  78. package/src/esbuildConfigs/inputFilesPlugin.ts +46 -17
  79. package/src/init-docs.ts +19 -0
  80. package/src/lib/abstractBase.ts +38 -255
  81. package/src/lib/basebuilder.ts +1 -12
  82. package/src/lib/classBuilder.ts +2 -1
  83. package/src/lib/core.ts +17 -29
  84. package/src/lib/types.ts +3 -1
  85. package/src/run-tests.ts +12 -0
  86. package/tsconfig.json +1 -1
  87. package/build-tests.ts +0 -16
  88. package/dist/common/init-docs.js +0 -8
  89. package/dist/module/build-tests.js +0 -10
  90. package/dist/module/init-docs.js +0 -3
  91. package/dist/module/run-tests.js +0 -6
  92. package/dist/prebuild/Puppeteer.mjs +0 -82033
  93. package/dist/types/build-tests.d.ts +0 -3
  94. package/dist/types/init-docs.d.ts +0 -2
  95. package/dist/types/run-tests.d.ts +0 -2
  96. package/init-docs.ts +0 -5
  97. package/pupBuild.js +0 -18
  98. package/run-tests.ts +0 -9
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "testeranto",
3
- "description": "teeny tiny tightly-typed typescript tests",
4
- "version": "0.85.0",
3
+ "description": "the AI powered BDD test framework for typescript projects",
4
+ "version": "0.94.0",
5
5
  "engines": {
6
6
  "node": "18.18.0"
7
7
  },
8
+ "bin": {
9
+ "testeranto-init": "bin/init-docs.js testeranto.mts"
10
+ },
8
11
  "type": "module",
9
12
  "types": "./dist/index.d.mts",
10
13
  "module": "dist/module/index.js",
@@ -22,16 +25,16 @@
22
25
  "require": "./dist/common/SubPackages/puppeteer.js"
23
26
  },
24
27
  "./src/SubPackages/react/jsx/index": {
25
- "import": "./dist/module/SubPackages/react/jsx/index.js",
26
- "require": "./dist/common/SubPackages/react/jsx/index.js"
28
+ "import": "./dist/module/src/SubPackages/react/jsx/index.js",
29
+ "require": "./dist/common/src/SubPackages/react/jsx/index.js"
27
30
  },
28
31
  "./src/SubPackages/react/jsx/web": {
29
32
  "import": "./src/SubPackages/react/jsx/web.ts",
30
33
  "require": "./src/SubPackages/react/jsx/web.ts"
31
34
  },
32
35
  "./src/SubPackages/react/jsx/node": {
33
- "import": "./dist/module/SubPackages/react/jsx/node.js",
34
- "require": "./dist/common/SubPackages/react/jsx/node.js"
36
+ "import": "./dist/module/src/SubPackages/react/jsx/node.js",
37
+ "require": "./dist/common/src/SubPackages/react/jsx/node.js"
35
38
  },
36
39
  "./src/SubPackages/react/component/index": {
37
40
  "import": "./dist/module/SubPackages/react/component/index.js",
@@ -54,12 +57,12 @@
54
57
  "require": "./src/SubPackages/react-test-renderer/component/index.ts"
55
58
  },
56
59
  "./src/SubPackages/react-test-renderer/component/web": {
57
- "import": "./dist/module/SubPackages/react-test-renderer/component/web.js",
58
- "require": "./dist/common/SubPackages/react-test-renderer/component/web.js"
60
+ "import": "./dist/module/src/SubPackages/react-test-renderer/component/web.js",
61
+ "require": "./dist/common/src/SubPackages/react-test-renderer/component/web.js"
59
62
  },
60
63
  "./src/SubPackages/react-test-renderer/component/node": {
61
- "import": "./dist/module/SubPackages/react-test-renderer/component/node.js",
62
- "require": "./dist/common/SubPackages/react-test-renderer/component/node.js"
64
+ "import": "./dist/module/src/SubPackages/react-test-renderer/component/node.js",
65
+ "require": "./dist/common/src/SubPackages/react-test-renderer/component/node.js"
63
66
  },
64
67
  "./src/SubPackages/react-test-renderer/jsx/index.js": {
65
68
  "import": "./dist/module/src/SubPackages/react-test-renderer/jsx/index.js",
@@ -106,12 +109,12 @@
106
109
  "require": "./dist/common/SubPackages/react-dom/jsx/index.js"
107
110
  },
108
111
  "./src/SubPackages/react-dom/component/web": {
109
- "import": "./dist/module/SubPackages/react-dom/component/web.js",
110
- "require": "./dist/common/SubPackages/react-dom/component/web.js"
112
+ "import": "./dist/module/src/SubPackages/react-dom/component/web.js",
113
+ "require": "./dist/common/src/SubPackages/react-dom/component/web.js"
111
114
  },
112
115
  "./src/SubPackages/react-dom/component/node": {
113
- "import": "./dist/module/SubPackages/react-dom/component/node.js",
114
- "require": "./dist/common/SubPackages/react-dom/component/node.js"
116
+ "import": "./dist/module/src/SubPackages/react-dom/component/node.js",
117
+ "require": "./dist/common/src/SubPackages/react-dom/component/node.js"
115
118
  },
116
119
  "./src/Types": {
117
120
  "import": "./src/Types.ts",
@@ -185,19 +188,13 @@
185
188
  "ATDD"
186
189
  ],
187
190
  "scripts": {
188
- "commit": "yarn build; git add --all && git commit -m 'stash'",
189
191
  "doit": "rm -rf node_modules && yarn install && yarn build",
190
- "build": "sh prebuild.sh; cp ./src/cjs-shim.js ./dist/cjs-shim.js; tsc -p tsconfig.module.json; tsc -p tsconfig.common.json; tsc -p tsconfig.types.json; sh postBuild.sh",
192
+ "build": "sh prebuild.sh; cp ./src/cjs-shim.js ./dist/cjs-shim.js; tsc -p tsconfig.module.json; tsc -p tsconfig.common.json; tsc -p tsconfig.types.json; sh postBuild.sh; yarn bundle",
191
193
  "dev": "cp ./src/cjs-shim.js ./dist/cjs-shim.js && tsc -p tsconfig.module.json --watch & tsc -p tsconfig.common.json --watch & tsc -p tsconfig.types.json --watch ",
192
- "prebuild-puppeteer": "node pupBuild.js",
194
+ "bundle": "node bundle.js",
193
195
  "build-module": "tsc -p tsconfig.module.json",
194
196
  "build-common": "tsc -p tsconfig.common.json",
195
- "build-types": "tsc -p tsconfig.types.json",
196
- "build-tests": "ts-node-esm ./project.ts",
197
- "run-tests": "ts-node-esm ./run-tests.ts",
198
- "init-docs": "ts-node-esm init-docs.ts",
199
- "test": "yarn build-tests & yarn run-tests",
200
- "scratch": "node scratch/build.js && node dist/scratch/server.js"
197
+ "build-types": "tsc -p tsconfig.types.json"
201
198
  },
202
199
  "peerDependencies": {
203
200
  "@types/react": "18.2.0",
@@ -252,4 +249,4 @@
252
249
  "why-is-node-running": "^3.2.2",
253
250
  "ws": "^8.16.0"
254
251
  }
255
- }
252
+ }
package/src/Init.ts CHANGED
@@ -6,6 +6,12 @@ export default async (partialConfig) => {
6
6
  buildDir: process.cwd() + "/" + partialConfig.outdir,
7
7
  };
8
8
 
9
+ try {
10
+ fs.mkdirSync(`${process.cwd()}/${config.outdir}`);
11
+ } catch {
12
+ // console.log()
13
+ }
14
+
9
15
  fs.writeFileSync(
10
16
  `${config.outdir}/testeranto.json`,
11
17
  JSON.stringify(
@@ -17,4 +23,26 @@ export default async (partialConfig) => {
17
23
  2
18
24
  )
19
25
  );
26
+
27
+ try {
28
+ fs.mkdirSync(`${process.cwd()}/${config.outdir}/node`);
29
+ } catch {
30
+ // console.log()
31
+ }
32
+
33
+ try {
34
+ fs.mkdirSync(`${process.cwd()}/${config.outdir}/web`);
35
+ } catch {
36
+ // console.log()
37
+ }
38
+ try {
39
+ fs.mkdirSync(`${process.cwd()}/${config.outdir}/features`);
40
+ } catch {
41
+ // console.log()
42
+ }
43
+ try {
44
+ fs.mkdirSync(`${process.cwd()}/${config.outdir}/ts`);
45
+ } catch {
46
+ // console.log()
47
+ }
20
48
  };
package/src/Node.ts CHANGED
@@ -40,7 +40,10 @@ export class NodeTesteranto<
40
40
  testSpecification,
41
41
  testImplementation,
42
42
  testResourceRequirement,
43
- testInterface
43
+ testInterface,
44
+ () => {
45
+ // no-op
46
+ }
44
47
  );
45
48
  }
46
49
 
@@ -49,8 +52,8 @@ export class NodeTesteranto<
49
52
  const pm = new PM_Node(t);
50
53
  const { failed, artifacts, logPromise, features } =
51
54
  await this.testJobs[0].receiveTestResourceConfig(pm);
52
- pm.customclose();
53
- return features;
55
+ // pm.customclose();
56
+ return { features, failed };
54
57
  }
55
58
  }
56
59
 
package/src/PM/main.ts CHANGED
@@ -1,20 +1,26 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
- import puppeteer, { Browser, ScreenshotOptions } from "puppeteer-core";
3
+ import puppeteer, {
4
+ Browser,
5
+ ConsoleMessage,
6
+ ScreenshotOptions,
7
+ } from "puppeteer-core";
4
8
  import { PassThrough } from "stream";
5
9
  import crypto from "crypto";
6
10
 
7
- import { IBuiltConfig, ITestTypes } from "../lib/types";
11
+ import { IBuiltConfig, IFinalResults, ITestTypes } from "../lib/types";
8
12
 
9
13
  import { PM } from "./index.js";
10
14
  import { destinationOfRuntime } from "../utils.js";
11
15
  import { ITLog } from "../lib/index.js";
12
16
  import { Page } from "puppeteer-core/lib/esm/puppeteer";
13
17
 
18
+ const fileStreams3: fs.WriteStream[] = [];
19
+
14
20
  type IFPaths = string[];
15
21
 
16
22
  const fPaths: IFPaths = [];
17
- const fileStreams3: fs.WriteStream[] = [];
23
+
18
24
  const files: Record<string, Set<string>> = {};
19
25
  const screenshots: Record<string, Promise<Uint8Array>[]> = {};
20
26
 
@@ -51,14 +57,19 @@ export class PM_Main extends PM {
51
57
  contents: string,
52
58
  testName: string
53
59
  ) => {
54
- // console.log("globalThis-writeFileSync", filepath);
60
+ // console.log(testName, "writeFileSync", filepath, testName);
55
61
 
56
62
  // Create directories if they don't exist
57
- const dir = path.dirname(filepath.split("/").slice(0, -1).join("/"));
63
+ const dir = path.dirname(filepath);
64
+
65
+ // console.log(testName, "mkdirSync", dir);
58
66
 
59
67
  fs.mkdirSync(dir, {
60
68
  recursive: true,
61
69
  });
70
+
71
+ // console.log(testName, "mkdirSync2");
72
+
62
73
  if (!files[testName]) {
63
74
  files[testName] = new Set();
64
75
  }
@@ -116,17 +127,17 @@ export class PM_Main extends PM {
116
127
  return sPromise;
117
128
  };
118
129
 
119
- globalThis["customclose"] = (p: string, testName: string) => {
120
- if (!files[testName]) {
121
- files[testName] = new Set();
122
- }
123
-
124
- fs.writeFileSync(
125
- p + "/manifest.json",
126
- JSON.stringify(Array.from(files[testName]))
127
- );
128
- delete files[testName];
129
- };
130
+ // globalThis["customclose"] = (p: string, testName: string) => {
131
+ // if (!files[testName]) {
132
+ // files[testName] = new Set();
133
+ // }
134
+
135
+ // fs.writeFileSync(
136
+ // p + "/manifest.json",
137
+ // JSON.stringify(Array.from(files[testName]))
138
+ // );
139
+ // delete files[testName];
140
+ // };
130
141
  }
131
142
 
132
143
  $(selector: string): boolean {
@@ -334,14 +345,18 @@ export class PM_Main extends PM {
334
345
 
335
346
  const builtfile = dest + ".mjs";
336
347
 
348
+ const webSideCares: Page[] = [];
349
+
337
350
  await Promise.all(
338
- testConfig[3].map((sidecar) => {
351
+ testConfig[3].map(async (sidecar) => {
339
352
  if (sidecar[1] === "web") {
340
- return this.launchWebSideCar(
353
+ const s = await this.launchWebSideCar(
341
354
  sidecar[0],
342
355
  destinationOfRuntime(sidecar[0], "web", this.configs),
343
356
  sidecar
344
357
  );
358
+ webSideCares.push(s);
359
+ return s;
345
360
  }
346
361
 
347
362
  if (sidecar[1] === "node") {
@@ -360,13 +375,15 @@ export class PM_Main extends PM {
360
375
  return module.default.then((defaultModule) => {
361
376
  defaultModule
362
377
  .receiveTestResourceConfig(argz)
363
- .then(async (features: string[]) => {
378
+ .then(async ({ features, failed }: IFinalResults) => {
364
379
  this.receiveFeatures(features, destFolder);
380
+ console.log(`${src} completed with ${failed} errors`);
365
381
  })
366
382
  .catch((e) => {
367
- console.log("catch", e);
383
+ console.log(`${src} errored with`, e);
368
384
  })
369
385
  .finally(() => {
386
+ webSideCares.forEach((webSideCar) => webSideCar.close());
370
387
  this.deregister(src);
371
388
  });
372
389
  });
@@ -384,22 +401,16 @@ export class PM_Main extends PM {
384
401
  src: string,
385
402
  dest: string,
386
403
  testConfig: ITestTypes
387
- ) => {
404
+ ): Promise<Page> => {
388
405
  const d = dest + ".mjs";
389
406
  console.log("launchWebSideCar", src, dest, d);
390
407
  const destFolder = dest.replace(".mjs", "");
391
- const webArgz = JSON.stringify({
392
- name: dest,
393
- ports: [].toString(),
394
- fs: destFolder,
395
- browserWSEndpoint: this.browser.wsEndpoint(),
396
- });
397
-
398
- // const evaluation = `
399
- // console.log("importing ${dest}.mjs");
400
- // import('${dest}.mjs').then(async (x) => {
401
- // console.log("imported", x.default);
402
- // })`;
408
+ // const webArgz = JSON.stringify({
409
+ // name: dest,
410
+ // ports: [].toString(),
411
+ // fs: destFolder,
412
+ // browserWSEndpoint: this.browser.wsEndpoint(),
413
+ // });
403
414
 
404
415
  const fileStreams2: fs.WriteStream[] = [];
405
416
  const doneFileStream2: Promise<any>[] = [];
@@ -482,9 +493,9 @@ export class PM_Main extends PM {
482
493
  (fp: string, testName: string) => {
483
494
  const f = fs.createWriteStream(fp);
484
495
 
485
- if (!files[testName]) {
486
- files[testName] = new Set();
487
- }
496
+ // if (!files[testName]) {
497
+ // files[testName] = new Set();
498
+ // }
488
499
  files[testName].add(fp);
489
500
 
490
501
  const p = new Promise<string>((res, rej) => {
@@ -513,18 +524,18 @@ export class PM_Main extends PM {
513
524
  return fileStreams2[uid].end();
514
525
  });
515
526
 
516
- page.exposeFunction("customclose", (p: string, testName: string) => {
517
- fs.writeFileSync(
518
- p + "/manifest.json",
519
- JSON.stringify(Array.from(files[testName]))
520
- );
521
- delete files[testName];
522
-
523
- Promise.all(screenshots[testName] || []).then(() => {
524
- delete screenshots[testName];
525
- // page.close();
526
- });
527
- });
527
+ // page.exposeFunction("customclose", (p: string, testName: string) => {
528
+ // fs.writeFileSync(
529
+ // p + "/manifest.json",
530
+ // JSON.stringify(Array.from(files[testName]))
531
+ // );
532
+ // delete files[testName];
533
+
534
+ // Promise.all(screenshots[testName] || []).then(() => {
535
+ // delete screenshots[testName];
536
+ // // page.close();
537
+ // });
538
+ // });
528
539
 
529
540
  return page;
530
541
  })
@@ -659,6 +670,9 @@ export class PM_Main extends PM {
659
670
  const fileStreams2: fs.WriteStream[] = [];
660
671
  const doneFileStream2: Promise<any>[] = [];
661
672
 
673
+ const stdoutStream = fs.createWriteStream(`${dest}/stdout.log`);
674
+ const stderrStream = fs.createWriteStream(`${dest}/stderr.log`);
675
+
662
676
  this.browser
663
677
  .newPage()
664
678
  .then((page) => {
@@ -727,23 +741,24 @@ export class PM_Main extends PM {
727
741
  page.exposeFunction(
728
742
  "writeFileSync",
729
743
  (fp: string, contents: string, testName: string) => {
730
- const dir = path.dirname(fp);
731
-
732
- fs.mkdirSync(dir, {
733
- recursive: true,
734
- });
735
-
736
- const p = new Promise<string>(async (res, rej) => {
737
- fs.writeFileSync(fp, contents);
738
- res(fp);
739
- });
740
- doneFileStream2.push(p);
741
-
742
- if (!files[testName]) {
743
- files[testName] = new Set();
744
- }
745
- files[testName].add(fp);
746
- return p;
744
+ return globalThis["writeFileSync"](fp, contents, testName);
745
+ // const dir = path.dirname(fp);
746
+
747
+ // fs.mkdirSync(dir, {
748
+ // recursive: true,
749
+ // });
750
+
751
+ // const p = new Promise<string>(async (res, rej) => {
752
+ // fs.writeFileSync(fp, contents);
753
+ // res(fp);
754
+ // });
755
+ // doneFileStream2.push(p);
756
+
757
+ // if (!files[testName]) {
758
+ // files[testName] = new Set();
759
+ // }
760
+ // files[testName].add(fp);
761
+ // return p;
747
762
  }
748
763
  );
749
764
 
@@ -793,45 +808,44 @@ export class PM_Main extends PM {
793
808
  return fileStreams2[uid].end();
794
809
  });
795
810
 
796
- page.exposeFunction("customclose", (p: string, testName: string) => {
797
- // console.log("closing", p);
798
-
799
- fs.writeFileSync(
800
- p + "/manifest.json",
801
- JSON.stringify(Array.from(files[testName]))
802
- );
803
- delete files[testName];
804
-
805
- // console.log("screenshots[testName]", screenshots[testName]);
806
- Promise.all(screenshots[testName] || []).then(() => {
807
- delete screenshots[testName];
808
- // page.close();
809
- // console.log("\t GOODBYE");
810
- // whyIsNodeRunning();
811
- });
811
+ // page.exposeFunction("customclose", (p: string, testName: string) => {
812
+ // // console.log("closing", p);
812
813
 
813
- // globalThis["writeFileSync"](
814
- // p + "/manifest.json",
815
- // // files.entries()
816
- // JSON.stringify(Array.from(files[testName]))
817
- // );
814
+ // console.log("\t GOODBYE customclose");
818
815
 
819
- // console.log("closing doneFileStream2", doneFileStream2);
820
- // console.log("closing doneFileStream2", doneFileStream2);
821
- // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
822
- // page.close();
823
- // });
816
+ // fs.writeFileSync(
817
+ // p + "/manifest.json",
818
+ // JSON.stringify(Array.from(files[testName]))
819
+ // );
820
+ // delete files[testName];
824
821
 
825
- // Promise.all(screenshots).then(() => {
826
- // page.close();
827
- // });
828
- // setTimeout(() => {
829
- // console.log("Delayed for 1 second.");
830
- // page.close();
831
- // }, 5000);
822
+ // // console.log("screenshots[testName]", screenshots[testName]);
823
+ // Promise.all(screenshots[testName] || []).then(() => {
824
+ // delete screenshots[testName];
825
+ // });
832
826
 
833
- // return page.close();
834
- });
827
+ // // globalThis["writeFileSync"](
828
+ // // p + "/manifest.json",
829
+ // // // files.entries()
830
+ // // JSON.stringify(Array.from(files[testName]))
831
+ // // );
832
+
833
+ // // console.log("closing doneFileStream2", doneFileStream2);
834
+ // // console.log("closing doneFileStream2", doneFileStream2);
835
+ // // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
836
+ // // page.close();
837
+ // // });
838
+
839
+ // // Promise.all(screenshots).then(() => {
840
+ // // page.close();
841
+ // // });
842
+ // // setTimeout(() => {
843
+ // // console.log("Delayed for 1 second.");
844
+ // // page.close();
845
+ // // }, 5000);
846
+
847
+ // // return page.close();
848
+ // });
835
849
 
836
850
  page.exposeFunction("page", () => {
837
851
  return page.mainFrame()._id;
@@ -884,24 +898,69 @@ export class PM_Main extends PM {
884
898
  return page;
885
899
  })
886
900
  .then(async (page) => {
887
- // page.on("console", (log) =>
888
- // console.debug(`Log from client: [${log.text()}] `)
889
- // );
901
+ const close = () => {
902
+ if (!files[t]) {
903
+ files[t] = new Set();
904
+ }
905
+ // files[t].add(filepath);
906
+
907
+ fs.writeFileSync(
908
+ dest + "/manifest.json",
909
+ JSON.stringify(Array.from(files[t]))
910
+ );
911
+ delete files[t];
912
+
913
+ Promise.all(screenshots[t] || []).then(() => {
914
+ delete screenshots[t];
915
+ page.close();
916
+
917
+ this.deregister(t);
918
+ stderrStream.close();
919
+ stdoutStream.close();
920
+ });
921
+ };
922
+
923
+ page.on("pageerror", (err: Error) => {
924
+ console.debug(`Error from ${t}: [${err.name}] `);
925
+ stderrStream.write(err.name);
926
+
927
+ if (err.cause) {
928
+ console.debug(`Error from ${t} cause: [${err.cause}] `);
929
+ stderrStream.write(err.cause);
930
+ }
931
+
932
+ if (err.stack) {
933
+ console.debug(`Error from stack ${t}: [${err.stack}] `);
934
+ stderrStream.write(err.stack);
935
+ }
936
+
937
+ console.debug(`Error from message ${t}: [${err.message}] `);
938
+ stderrStream.write(err.message);
939
+ // close();
940
+ });
941
+ page.on("console", (log: ConsoleMessage) => {
942
+ // console.debug(`Log from ${t}: [${log.text()}] `);
943
+ // console.debug(`Log from ${t}: [${JSON.stringify(log.location())}] `);
944
+ // console.debug(
945
+ // `Log from ${t}: [${JSON.stringify(log.stackTrace())}] `
946
+ // );
947
+ stdoutStream.write(log.text());
948
+ stdoutStream.write(JSON.stringify(log.location()));
949
+ stdoutStream.write(JSON.stringify(log.stackTrace()));
950
+ });
890
951
  await page.goto(`file://${`${dest}.html`}`, {});
891
952
 
892
953
  await page
893
954
  .evaluate(evaluation)
894
- .then(async (features: string[]) => {
955
+ .then(async ({ failed, features }: IFinalResults) => {
895
956
  this.receiveFeatures(features, destFolder);
957
+ console.log(`${t} completed with ${failed} errors`);
896
958
  })
897
959
  .catch((e) => {
898
- console.log("evaluation failed.", dest);
899
- console.log(e);
960
+ console.log(`${t} errored with`, e);
900
961
  })
901
962
  .finally(() => {
902
- console.log("evaluation complete.", dest);
903
- // page.close();
904
- this.deregister(t);
963
+ close();
905
964
  });
906
965
 
907
966
  return page;
@@ -909,7 +968,6 @@ export class PM_Main extends PM {
909
968
  };
910
969
 
911
970
  receiveFeatures = (features: string[], destFolder: string) => {
912
- console.log("this.receiveFeatures", features);
913
971
  features
914
972
  .reduce(async (mm, featureStringKey) => {
915
973
  const accum = await mm;