testeranto 0.75.0 → 0.79.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 (136) hide show
  1. package/README.md +25 -24
  2. package/devBot.dockerfile +12 -0
  3. package/dist/common/Node.js +1 -0
  4. package/dist/common/PM/index.js +0 -64
  5. package/dist/common/PM/main.js +278 -7
  6. package/dist/common/PM/node.js +4 -0
  7. package/dist/common/PM/web.js +3 -0
  8. package/dist/common/Project.js +6 -2
  9. package/dist/common/Puppeteer.js +12 -17
  10. package/dist/common/Reporter.js +1 -8
  11. package/dist/common/SubPackages/react-dom/component/web.js +5 -25
  12. package/dist/common/SubPackages/react-dom/jsx/web.js +80 -55
  13. package/dist/common/SubPackages/react-test-renderer/component/index.js +0 -86
  14. package/dist/common/SubPackages/react-test-renderer/component/interface.js +68 -0
  15. package/dist/common/SubPackages/react-test-renderer/component/node.js +2 -2
  16. package/dist/common/SubPackages/react-test-renderer/component/web.js +2 -2
  17. package/dist/common/TaskManBackEnd.js +156 -0
  18. package/dist/common/Types.js +0 -2
  19. package/dist/common/esbuildConfigs/index.js +1 -0
  20. package/dist/common/esbuildConfigs/inputFilesPlugin.js +49 -0
  21. package/dist/common/esbuildConfigs/node.js +3 -1
  22. package/dist/common/esbuildConfigs/web.js +3 -1
  23. package/dist/common/lib/abstractBase.js +222 -17
  24. package/dist/common/lib/basebuilder.js +4 -38
  25. package/dist/common/lib/classBuilder.js +1 -3
  26. package/dist/common/lib/core.js +3 -5
  27. package/dist/common/mongooseSchemas.js +56 -0
  28. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  29. package/dist/common/utils.js +16 -0
  30. package/dist/module/ExampleTab.js +112 -0
  31. package/dist/module/Node.js +1 -0
  32. package/dist/module/PM/index.js +0 -64
  33. package/dist/module/PM/main.js +278 -7
  34. package/dist/module/PM/node.js +4 -0
  35. package/dist/module/PM/web.js +3 -0
  36. package/dist/module/Project.js +6 -2
  37. package/dist/module/Puppeteer.js +12 -17
  38. package/dist/module/Reporter.js +1 -8
  39. package/dist/module/SubPackages/react-dom/component/web.js +5 -25
  40. package/dist/module/SubPackages/react-dom/jsx/web.js +80 -55
  41. package/dist/module/SubPackages/react-test-renderer/component/index.js +1 -59
  42. package/dist/module/SubPackages/react-test-renderer/component/interface.js +39 -0
  43. package/dist/module/SubPackages/react-test-renderer/component/node.js +1 -1
  44. package/dist/module/SubPackages/react-test-renderer/component/web.js +1 -1
  45. package/dist/module/TaskManBackEnd.js +151 -0
  46. package/dist/module/TaskManFrontEnd.js +600 -0
  47. package/dist/module/Types.js +0 -2
  48. package/dist/module/esbuildConfigs/index.js +1 -0
  49. package/dist/module/esbuildConfigs/inputFilesPlugin.js +44 -0
  50. package/dist/module/esbuildConfigs/node.js +3 -1
  51. package/dist/module/esbuildConfigs/web.js +3 -1
  52. package/dist/module/lib/abstractBase.js +222 -17
  53. package/dist/module/lib/basebuilder.js +4 -38
  54. package/dist/module/lib/classBuilder.js +1 -3
  55. package/dist/module/lib/core.js +3 -5
  56. package/dist/module/mongooseSchemas.js +50 -0
  57. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  58. package/dist/module/utils.js +9 -0
  59. package/dist/prebuild/Report.js +117 -36
  60. package/dist/prebuild/TaskManBackEnd.mjs +185 -0
  61. package/dist/prebuild/TaskManFrontEnd.css +12301 -0
  62. package/dist/prebuild/TaskManFrontEnd.js +81737 -0
  63. package/dist/types/Node.d.ts +1 -1
  64. package/dist/types/PM/index.d.ts +2 -1
  65. package/dist/types/PM/main.d.ts +6 -3
  66. package/dist/types/PM/node.d.ts +2 -0
  67. package/dist/types/PM/web.d.ts +1 -0
  68. package/dist/types/SubPackages/puppeteer.d.ts +1 -1
  69. package/dist/types/SubPackages/react/component/node.d.ts +1 -1
  70. package/dist/types/SubPackages/react/component/web.d.ts +1 -1
  71. package/dist/types/SubPackages/react/jsx/node.d.ts +2 -2
  72. package/dist/types/SubPackages/react/jsx/web.d.ts +2 -2
  73. package/dist/types/SubPackages/react-dom/component/node.d.ts +2 -2
  74. package/dist/types/SubPackages/react-dom/component/web.d.ts +8 -2
  75. package/dist/types/SubPackages/react-dom/jsx/node.d.ts +2 -2
  76. package/dist/types/SubPackages/react-dom/jsx/web.d.ts +2 -2
  77. package/dist/types/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +2 -2
  78. package/dist/types/SubPackages/react-test-renderer/component/index.d.ts +0 -7
  79. package/dist/types/SubPackages/react-test-renderer/component/interface.d.ts +9 -0
  80. package/dist/types/SubPackages/react-test-renderer/component/node.d.ts +1 -2
  81. package/dist/types/SubPackages/react-test-renderer/component/web.d.ts +1 -2
  82. package/dist/types/SubPackages/react-test-renderer/fc/node.d.ts +1 -1
  83. package/dist/types/SubPackages/react-test-renderer/fc/web.d.ts +1 -1
  84. package/dist/types/SubPackages/react-test-renderer/jsx/node.d.ts +1 -2
  85. package/dist/types/SubPackages/react-test-renderer/jsx/web.d.ts +1 -2
  86. package/dist/types/SubPackages/react-test-renderer/jsx-promised/node.d.ts +1 -2
  87. package/dist/types/SubPackages/react-test-renderer/jsx-promised/web.d.ts +1 -2
  88. package/dist/types/TaskManBackEnd.d.ts +1 -0
  89. package/dist/types/Types.d.ts +19 -19
  90. package/dist/types/Web.d.ts +1 -1
  91. package/dist/types/esbuildConfigs/inputFilesPlugin.d.ts +5 -0
  92. package/dist/types/lib/abstractBase.d.ts +8 -8
  93. package/dist/types/lib/basebuilder.d.ts +1 -1
  94. package/dist/types/lib/classBuilder.d.ts +1 -1
  95. package/dist/types/lib/core.d.ts +1 -1
  96. package/dist/types/lib/index.d.ts +5 -5
  97. package/dist/types/lib/types.d.ts +15 -13
  98. package/dist/types/mongooseSchemas.d.ts +124 -0
  99. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  100. package/dist/types/utils.d.ts +2 -0
  101. package/docker-compose-dev.yml +9 -0
  102. package/docker-compose-prod.yml +18 -0
  103. package/package.json +20 -7
  104. package/src/ExampleTab.tsx +219 -0
  105. package/src/Node.ts +31 -2
  106. package/src/PM/index.ts +6 -83
  107. package/src/PM/main.ts +389 -11
  108. package/src/PM/node.ts +6 -0
  109. package/src/PM/web.ts +4 -0
  110. package/src/Project.ts +10 -2
  111. package/src/Puppeteer.ts +16 -17
  112. package/src/Report.tsx +17 -40
  113. package/src/Reporter.ts +1 -9
  114. package/src/SubPackages/react-dom/component/web.ts +10 -30
  115. package/src/SubPackages/react-dom/jsx/web.ts +111 -74
  116. package/src/SubPackages/react-test-renderer/component/index.ts +0 -66
  117. package/src/SubPackages/react-test-renderer/component/interface.ts +48 -0
  118. package/src/SubPackages/react-test-renderer/component/node.ts +2 -1
  119. package/src/SubPackages/react-test-renderer/component/web.ts +2 -1
  120. package/src/TaskManBackEnd.ts +200 -0
  121. package/src/TaskManFrontEnd.tsx +1222 -0
  122. package/src/Types.ts +136 -28
  123. package/src/Web.ts +32 -2
  124. package/src/esbuildConfigs/index.ts +1 -0
  125. package/src/esbuildConfigs/inputFilesPlugin.ts +65 -0
  126. package/src/esbuildConfigs/node.ts +3 -1
  127. package/src/esbuildConfigs/web.ts +4 -0
  128. package/src/lib/abstractBase.ts +337 -34
  129. package/src/lib/basebuilder.ts +17 -52
  130. package/src/lib/classBuilder.ts +14 -2
  131. package/src/lib/core.ts +18 -7
  132. package/src/lib/index.ts +115 -7
  133. package/src/lib/types.ts +143 -35
  134. package/src/mongooseSchemas.ts +105 -0
  135. package/src/utils.ts +15 -0
  136. package/yarn-error.log +3144 -0
package/src/PM/main.ts CHANGED
@@ -1,12 +1,13 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
- import puppeteer, { ScreenshotOptions } from "puppeteer-core";
3
+ import puppeteer, { Page, ScreenshotOptions } from "puppeteer-core";
4
4
  import { PassThrough } from "stream";
5
5
 
6
- import { ITLog } from "../lib";
7
- import { IBuiltConfig } from "../lib/types";
6
+ import { IBuiltConfig, ITestTypes } from "../lib/types";
8
7
 
9
8
  import { PM } from "./index.js";
9
+ import { destinationOfRuntime } from "../utils.js";
10
+ import { ITLog } from "../lib/index.js";
10
11
 
11
12
  type IFPaths = string[];
12
13
 
@@ -16,6 +17,9 @@ const files: Record<string, Set<string>> = {}; // = new Set<string>();
16
17
  const screenshots: Record<string, Promise<Uint8Array>[]> = {};
17
18
 
18
19
  export class PM_Main extends PM {
20
+ customScreenShot(opts: object) {
21
+ throw new Error("Method not implemented.");
22
+ }
19
23
  configs: IBuiltConfig;
20
24
  ports: Record<number, boolean>;
21
25
  queue: any[];
@@ -43,6 +47,8 @@ export class PM_Main extends PM {
43
47
  contents: string,
44
48
  testName: string
45
49
  ) => {
50
+ console.log("globalThis-writeFileSync", filepath);
51
+
46
52
  // Create directories if they don't exist
47
53
  const dir = path.dirname(filepath.split("/").slice(0, -1).join("/"));
48
54
 
@@ -78,6 +84,46 @@ export class PM_Main extends PM {
78
84
  fileStreams3[uid].end();
79
85
  };
80
86
 
87
+ globalThis["customScreenShot"] = async (
88
+ opts: { path: string },
89
+ page: Page
90
+ ) => {
91
+ // // fileStreams3[uid].write(contents);
92
+ // // console.log("asd", opts.path.split("/").slice(0, -1).join("/"));
93
+
94
+ // // const dir = path.dirname(opts.path.split("/").slice(0, -1).join("/"));
95
+ // // console.log("dir", dir);
96
+ // fs.mkdirSync(opts.path.split("/").slice(0, -1).join("/"), {
97
+ // recursive: true,
98
+ // });
99
+
100
+ // return page.screenshot(opts);
101
+
102
+ console.log("main.ts node custom-screenshot", page);
103
+ const p = opts.path as string;
104
+ const dir = path.dirname(p);
105
+ fs.mkdirSync(dir, {
106
+ recursive: true,
107
+ });
108
+ if (!files[opts.path]) {
109
+ files[opts.path] = new Set();
110
+ }
111
+ files[opts.path].add(opts.path as string);
112
+
113
+ const sPromise = page.screenshot({
114
+ ...opts,
115
+ path: p,
116
+ });
117
+
118
+ if (!screenshots[opts.path]) {
119
+ screenshots[opts.path] = [];
120
+ }
121
+ screenshots[opts.path].push(sPromise);
122
+
123
+ await sPromise;
124
+ return sPromise;
125
+ };
126
+
81
127
  globalThis["customclose"] = (p: string, testName: string) => {
82
128
  if (!files[testName]) {
83
129
  files[testName] = new Set();
@@ -151,9 +197,11 @@ export class PM_Main extends PM {
151
197
  const openPorts = Object.entries(this.ports).filter(
152
198
  ([portnumber, portopen]) => portopen
153
199
  );
200
+ console.log("openPorts", openPorts);
154
201
  if (openPorts.length >= testConfigResource.ports) {
155
202
  for (let i = 0; i < testConfigResource.ports; i++) {
156
203
  portsToUse.push(openPorts[i][0]);
204
+
157
205
  this.ports[openPorts[i][0]] = false; // port is now closed
158
206
  }
159
207
 
@@ -162,7 +210,7 @@ export class PM_Main extends PM {
162
210
  name: src,
163
211
  // ports: [3333],
164
212
  ports: portsToUse,
165
- fs: ".",
213
+ fs: destFolder,
166
214
  browserWSEndpoint: this.browser.wsEndpoint(),
167
215
  });
168
216
  } else {
@@ -176,6 +224,26 @@ export class PM_Main extends PM {
176
224
 
177
225
  const builtfile = dest + ".mjs";
178
226
 
227
+ await Promise.all(
228
+ testConfig[3].map((sidecar) => {
229
+ if (sidecar[1] === "web") {
230
+ return this.launchWebSideCar(
231
+ sidecar[0],
232
+ destinationOfRuntime(sidecar[0], "web", this.configs),
233
+ sidecar
234
+ );
235
+ }
236
+
237
+ if (sidecar[1] === "node") {
238
+ return this.launchNodeSideCar(
239
+ sidecar[0],
240
+ destinationOfRuntime(sidecar[0], "node", this.configs),
241
+ sidecar
242
+ );
243
+ }
244
+ })
245
+ );
246
+
179
247
  this.server[builtfile] = await import(
180
248
  `${builtfile}?cacheBust=${Date.now()}`
181
249
  ).then((module) => {
@@ -184,6 +252,7 @@ export class PM_Main extends PM {
184
252
  .receiveTestResourceConfig(argz)
185
253
  .then((x) => {
186
254
  console.log("then", x);
255
+
187
256
  return x;
188
257
  })
189
258
  .catch((e) => {
@@ -192,14 +261,309 @@ export class PM_Main extends PM {
192
261
  });
193
262
  });
194
263
 
264
+ console.log("portsToUse", portsToUse);
265
+ for (let i = 0; i <= portsToUse.length; i++) {
266
+ if (portsToUse[i]) {
267
+ this.ports[portsToUse[i]] = "true"; //port is open again
268
+ }
269
+ }
270
+ };
271
+
272
+ launchWebSideCar = async (
273
+ src: string,
274
+ dest: string,
275
+ testConfig: ITestTypes
276
+ ) => {
277
+ const d = dest + ".mjs";
278
+ console.log("launchWebSideCar", src, dest, d);
279
+ const destFolder = dest.replace(".mjs", "");
280
+ const webArgz = JSON.stringify({
281
+ name: dest,
282
+ ports: [].toString(),
283
+ fs: destFolder,
284
+ browserWSEndpoint: this.browser.wsEndpoint(),
285
+ });
286
+
287
+ const evaluation = `
288
+ console.log("importing ${dest}.mjs");
289
+ import('${dest}.mjs').then(async (x) => {
290
+ console.log("imported", x.default);
291
+ })`;
292
+
293
+ const fileStreams2: fs.WriteStream[] = [];
294
+ const doneFileStream2: Promise<any>[] = [];
295
+
296
+ return new Promise((res, rej) => {
297
+ this.browser
298
+ .newPage()
299
+ .then((page) => {
300
+ page.on("console", (msg) => {
301
+ console.log("web > ", msg.args(), msg.text());
302
+ // for (let i = 0; i < msg._args.length; ++i)
303
+ // console.log(`${i}: ${msg._args[i]}`);
304
+ });
305
+
306
+ page.exposeFunction(
307
+ "custom-screenshot",
308
+ async (ssOpts: ScreenshotOptions, testName: string) => {
309
+ console.log("main.ts browser custom-screenshot", testName);
310
+ const p = ssOpts.path as string;
311
+ const dir = path.dirname(p);
312
+ fs.mkdirSync(dir, {
313
+ recursive: true,
314
+ });
315
+ files[testName].add(ssOpts.path as string);
316
+
317
+ const sPromise = page.screenshot({
318
+ ...ssOpts,
319
+ path: p,
320
+ });
321
+
322
+ if (!screenshots[testName]) {
323
+ screenshots[testName] = [];
324
+ }
325
+ screenshots[testName].push(sPromise);
326
+ // sPromise.then(())
327
+ await sPromise;
328
+ return sPromise;
329
+ // page.evaluate(`window["screenshot done"]`);
330
+ }
331
+ );
332
+
333
+ page.exposeFunction(
334
+ "writeFileSync",
335
+ (fp: string, contents: string, testName: string) => {
336
+ const dir = path.dirname(fp);
337
+
338
+ fs.mkdirSync(dir, {
339
+ recursive: true,
340
+ });
341
+
342
+ const p = new Promise<string>(async (res, rej) => {
343
+ fs.writeFileSync(fp, contents);
344
+ res(fp);
345
+ });
346
+ doneFileStream2.push(p);
347
+
348
+ if (!files[testName]) {
349
+ files[testName] = new Set();
350
+ }
351
+ files[testName].add(fp);
352
+ return p;
353
+ }
354
+ );
355
+
356
+ page.exposeFunction("existsSync", (fp: string, contents: string) => {
357
+ return fs.existsSync(fp);
358
+ });
359
+
360
+ page.exposeFunction("mkdirSync", (fp: string) => {
361
+ if (!fs.existsSync(fp)) {
362
+ return fs.mkdirSync(fp, {
363
+ recursive: true,
364
+ });
365
+ }
366
+ return false;
367
+ });
368
+
369
+ page.exposeFunction(
370
+ "createWriteStream",
371
+ (fp: string, testName: string) => {
372
+ const f = fs.createWriteStream(fp);
373
+
374
+ if (!files[testName]) {
375
+ files[testName] = new Set();
376
+ }
377
+ files[testName].add(fp);
378
+
379
+ const p = new Promise<string>((res, rej) => {
380
+ res(fp);
381
+ });
382
+ doneFileStream2.push(p);
383
+ f.on("close", async () => {
384
+ await p;
385
+ });
386
+ fileStreams2.push(f);
387
+ return {
388
+ ...JSON.parse(JSON.stringify(f)),
389
+ uid: fileStreams2.length - 1,
390
+ };
391
+ }
392
+ );
393
+
394
+ page.exposeFunction(
395
+ "write",
396
+ async (uid: number, contents: string) => {
397
+ return fileStreams2[uid].write(contents);
398
+ }
399
+ );
400
+
401
+ page.exposeFunction("end", async (uid: number) => {
402
+ return fileStreams2[uid].end();
403
+ });
404
+
405
+ page.exposeFunction("customclose", (p: string, testName: string) => {
406
+ fs.writeFileSync(
407
+ p + "/manifest.json",
408
+ JSON.stringify(Array.from(files[testName]))
409
+ );
410
+ delete files[testName];
411
+
412
+ Promise.all(screenshots[testName] || []).then(() => {
413
+ delete screenshots[testName];
414
+ page.close();
415
+ });
416
+
417
+ // globalThis["writeFileSync"](
418
+ // p + "/manifest.json",
419
+ // // files.entries()
420
+ // JSON.stringify(Array.from(files[testName]))
421
+ // );
422
+
423
+ // console.log("closing doneFileStream2", doneFileStream2);
424
+ // console.log("closing doneFileStream2", doneFileStream2);
425
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
426
+ // page.close();
427
+ // });
428
+
429
+ // Promise.all(screenshots).then(() => {
430
+ // page.close();
431
+ // });
432
+ // setTimeout(() => {
433
+ // console.log("Delayed for 1 second.");
434
+ // page.close();
435
+ // }, 5000);
436
+
437
+ // return page.close();
438
+ });
439
+
440
+ return page;
441
+ })
442
+ .then(async (page) => {
443
+ page.on("console", (log) =>
444
+ console.debug(`Log from client: [${log.text()}] `)
445
+ );
446
+ await page.goto(`file://${`${dest}.html`}`, {});
447
+ res(page);
448
+
449
+ // page.evaluate(evaluation).finally(() => {
450
+ // console.log("evaluation failed.", dest);
451
+ // });
452
+
453
+ // return page;
454
+ });
455
+ });
456
+ };
457
+
458
+ // launchNodeSideCar = async (src: string, dest: string) => {};
459
+ launchNodeSideCar = async (
460
+ src: string,
461
+ dest: string,
462
+ testConfig: ITestTypes
463
+ ) => {
464
+ const d = dest + ".mjs";
465
+ console.log("launchNodeSideCar", src, dest, d);
466
+
467
+ const destFolder = dest.replace(".mjs", "");
468
+
469
+ let argz = "";
470
+
471
+ // const testConfig = this.configs.tests.find((t) => {
472
+ // return t[0] === src;
473
+ // });
474
+
475
+ // if (!testConfig) {
476
+ // console.error("missing test config");
477
+ // process.exit(-1);
478
+ // }
479
+ const testConfigResource = testConfig[2];
480
+
481
+ let portsToUse: string[] = [];
482
+ if (testConfigResource.ports === 0) {
483
+ argz = JSON.stringify({
484
+ scheduled: true,
485
+ name: src,
486
+ ports: portsToUse,
487
+ fs: destFolder,
488
+ browserWSEndpoint: this.browser.wsEndpoint(),
489
+ });
490
+ } else if (testConfigResource.ports > 0) {
491
+ const openPorts = Object.entries(this.ports).filter(
492
+ ([portnumber, portopen]) => portopen
493
+ );
494
+ console.log("openPorts", openPorts);
495
+ if (openPorts.length >= testConfigResource.ports) {
496
+ for (let i = 0; i < testConfigResource.ports; i++) {
497
+ portsToUse.push(openPorts[i][0]);
498
+
499
+ this.ports[openPorts[i][0]] = false; // port is now closed
500
+ }
501
+
502
+ argz = JSON.stringify({
503
+ scheduled: true,
504
+ name: src,
505
+ // ports: [3333],
506
+ ports: portsToUse,
507
+ fs: ".",
508
+ browserWSEndpoint: this.browser.wsEndpoint(),
509
+ });
510
+ } else {
511
+ this.queue.push(src);
512
+ return;
513
+ }
514
+ } else {
515
+ console.error("negative port makes no sense", src);
516
+ process.exit(-1);
517
+ }
518
+
519
+ const builtfile = dest + ".mjs";
520
+
521
+ // console.log(
522
+ // "node builtfile",
523
+ // (await import(`${builtfile}?cacheBust=${Date.now()}`)).default
524
+ // );
525
+ this.server[builtfile] = await import(
526
+ `${builtfile}?cacheBust=${Date.now()}`
527
+ ).then((module) => {
528
+ return module.default.then((defaultModule) => {
529
+ console.log("defaultModule", defaultModule);
530
+ const s = new defaultModule();
531
+ s.receiveTestResourceConfig(argz);
532
+ // Object.create(defaultModule);
533
+
534
+ // defaultModule
535
+ // .receiveTestResourceConfig(argz)
536
+ // .then((x) => {
537
+ // console.log("then", x);
538
+ // return x;
539
+ // })
540
+ // .catch((e) => {
541
+ // console.log("catch", e);
542
+ // });
543
+ });
544
+ });
545
+
546
+ console.log("portsToUse", portsToUse);
195
547
  for (let i = 0; i <= portsToUse.length; i++) {
196
- this.ports[i] = true; //port is open again
548
+ if (portsToUse[i]) {
549
+ this.ports[portsToUse[i]] = "true"; //port is open again
550
+ }
197
551
  }
198
552
  };
199
553
 
200
- launchWeb = (t: string, dest: string) => {
554
+ launchWeb = (t: string, dest: string, sidecars: ITestTypes[]) => {
201
555
  console.log("launchWeb", t, dest);
202
556
 
557
+ sidecars.map((sidecar) => {
558
+ if (sidecar[1] === "node") {
559
+ return this.launchNodeSideCar(
560
+ sidecar[0],
561
+ destinationOfRuntime(sidecar[0], "node", this.configs),
562
+ sidecar
563
+ );
564
+ }
565
+ });
566
+
203
567
  const destFolder = dest.replace(".mjs", "");
204
568
 
205
569
  const webArgz = JSON.stringify({
@@ -209,8 +573,10 @@ export class PM_Main extends PM {
209
573
  browserWSEndpoint: this.browser.wsEndpoint(),
210
574
  });
211
575
 
212
- const evaluation = `import('${dest}.mjs').then(async (x) => {
213
- console.log("imported", x, (x.default));
576
+ const evaluation = `
577
+ console.log("importing ${dest}.mjs");
578
+ import('${dest}.mjs').then(async (x) => {
579
+ console.log("imported", x.default);
214
580
  try {
215
581
  await (await x.default).receiveTestResourceConfig(${webArgz})
216
582
  } catch (e) {
@@ -219,15 +585,19 @@ export class PM_Main extends PM {
219
585
  })`;
220
586
 
221
587
  const fileStreams2: fs.WriteStream[] = [];
222
-
223
- // const screenshots2: Promise<any>[] = [];
224
588
  const doneFileStream2: Promise<any>[] = [];
225
589
 
226
590
  this.browser
227
591
  .newPage()
228
592
  .then((page) => {
593
+ page.on("console", (msg) => {
594
+ console.log("web > ", msg.args(), msg.text());
595
+ // for (let i = 0; i < msg._args.length; ++i)
596
+ // console.log(`${i}: ${msg._args[i]}`);
597
+ });
598
+
229
599
  page.exposeFunction(
230
- "custom-screenshot",
600
+ "customScreenShot",
231
601
  async (ssOpts: ScreenshotOptions, testName: string) => {
232
602
  console.log("main.ts browser custom-screenshot", testName);
233
603
  const p = ssOpts.path as string;
@@ -235,6 +605,9 @@ export class PM_Main extends PM {
235
605
  fs.mkdirSync(dir, {
236
606
  recursive: true,
237
607
  });
608
+ if (!files[testName]) {
609
+ files[testName] = new Set();
610
+ }
238
611
  files[testName].add(ssOpts.path as string);
239
612
 
240
613
  const sPromise = page.screenshot({
@@ -323,6 +696,8 @@ export class PM_Main extends PM {
323
696
  });
324
697
 
325
698
  page.exposeFunction("customclose", (p: string, testName: string) => {
699
+ console.log("\t closing", p);
700
+
326
701
  fs.writeFileSync(
327
702
  p + "/manifest.json",
328
703
  JSON.stringify(Array.from(files[testName]))
@@ -360,6 +735,9 @@ export class PM_Main extends PM {
360
735
  return page;
361
736
  })
362
737
  .then(async (page) => {
738
+ page.on("console", (log) =>
739
+ console.debug(`Log from client: [${log.text()}] `)
740
+ );
363
741
  await page.goto(`file://${`${dest}.html`}`, {});
364
742
 
365
743
  page.evaluate(evaluation).finally(() => {
package/src/PM/node.ts CHANGED
@@ -6,6 +6,7 @@ import { PassThrough } from "stream";
6
6
  import { ITLog, ITTestResourceConfiguration } from "../lib";
7
7
 
8
8
  import { PM } from "./index.js";
9
+ import { Page } from "puppeteer-core/lib/esm/puppeteer";
9
10
 
10
11
  type IFPaths = string[];
11
12
  const fPaths: IFPaths = [];
@@ -22,6 +23,10 @@ export class PM_Node extends PM {
22
23
  this.testResourceConfiguration = t;
23
24
  }
24
25
 
26
+ customScreenShot(opts: object, page: Page) {
27
+ return globalThis["customScreenShot"](opts, page);
28
+ }
29
+
25
30
  existsSync(destFolder: string): boolean {
26
31
  return globalThis["existsSync"](
27
32
  this.testResourceConfiguration.fs + "/" + destFolder
@@ -37,6 +42,7 @@ export class PM_Node extends PM {
37
42
  }
38
43
 
39
44
  writeFileSync(filepath: string, contents: string) {
45
+ console.log("pm_node-writeFileSync", this.testResourceConfiguration);
40
46
  return globalThis["writeFileSync"](
41
47
  this.testResourceConfiguration.fs + "/" + filepath,
42
48
  contents,
package/src/PM/web.ts CHANGED
@@ -15,6 +15,10 @@ export class PM_Web extends PM {
15
15
  this.testResourceConfiguration = t;
16
16
  }
17
17
 
18
+ customScreenShot(opts: object) {
19
+ window["customScreenShot"](opts);
20
+ }
21
+
18
22
  existsSync(destFolder: string): boolean {
19
23
  return window["existsSync"](destFolder);
20
24
  }
package/src/Project.ts CHANGED
@@ -109,6 +109,13 @@ export class ITProject {
109
109
 
110
110
  const [nodeEntryPoints, webEntryPoints] = getRunnables(this.config.tests);
111
111
 
112
+ console.log(
113
+ `this.getSecondaryEndpointsPoints("web")`,
114
+ this.getSecondaryEndpointsPoints("web")
115
+ );
116
+ // console.log("nodeEntryPoints", nodeEntryPoints);
117
+ // console.log("webEntryPoints", webEntryPoints);
118
+
112
119
  // nodeEntryPoints.forEach((nep) => {
113
120
  // const f = `${process.cwd()}/${nep}`;
114
121
  // console.log("nep", f);
@@ -208,11 +215,12 @@ export class ITProject {
208
215
  public getSecondaryEndpointsPoints(runtime?: IRunTime): string[] {
209
216
  const meta = (ts: ITestTypes[], st: Set<string>): Set<string> => {
210
217
  ts.forEach((t) => {
218
+ console.log("getSecondaryEndpointsPoints", t);
211
219
  if (t[1] === runtime) {
212
220
  st.add(t[0]);
213
221
  }
214
- if (Array.isArray(t[2])) {
215
- meta(t[2], st);
222
+ if (Array.isArray(t[3])) {
223
+ meta(t[3], st);
216
224
  }
217
225
  });
218
226
  return st;
package/src/Puppeteer.ts CHANGED
@@ -7,6 +7,7 @@ import { v4 as uuidv4 } from "uuid";
7
7
  import { IBuiltConfig, IRunTime } from "./lib/types";
8
8
 
9
9
  import { PM_Main } from "./PM/main.js";
10
+ import { destinationOfRuntime } from "./utils.js";
10
11
 
11
12
  var mode: "DEV" | "PROD" = process.argv[2] === "-dev" ? "DEV" : "PROD";
12
13
 
@@ -36,18 +37,20 @@ const main = async () => {
36
37
  waitForInitialPage: false,
37
38
  executablePath: "/opt/homebrew/bin/chromium",
38
39
  headless: true,
39
- dumpio: true,
40
+ // dumpio: true,
40
41
  args: [
42
+ "--disable-features=IsolateOrigins,site-per-process",
43
+ "--disable-site-isolation-trials",
44
+ "--allow-insecure-localhost",
41
45
  "--allow-file-access-from-files",
42
46
  "--allow-running-insecure-content",
43
- "--auto-open-devtools-for-tabs",
47
+ // "--auto-open-devtools-for-tabs",
44
48
  "--disable-dev-shm-usage",
45
49
  "--disable-extensions",
46
50
  "--disable-gpu",
47
51
  "--disable-setuid-sandbox",
48
52
  "--disable-site-isolation-trials",
49
53
  "--disable-web-security",
50
- "--disable-web-security",
51
54
  "--no-first-run",
52
55
  "--no-sandbox",
53
56
  "--no-startup-window",
@@ -70,19 +73,11 @@ const main = async () => {
70
73
  "."
71
74
  );
72
75
 
73
- const destinationOfRuntime = (f: string, r: IRunTime) => {
74
- return path
75
- .normalize(`${configs.buildDir}/${r}/${f}`)
76
- .split(".")
77
- .slice(0, -1)
78
- .join(".");
79
- };
80
-
81
- configs.tests.forEach(([test, runtime, secondaryArtifacts]) => {
76
+ configs.tests.forEach(([test, runtime, tr, sidecars]) => {
82
77
  if (runtime === "node") {
83
- pm.launchNode(test, destinationOfRuntime(test, "node"));
78
+ pm.launchNode(test, destinationOfRuntime(test, "node", configs));
84
79
  } else if (runtime === "web") {
85
- pm.launchWeb(test, destinationOfRuntime(test, "web"));
80
+ pm.launchWeb(test, destinationOfRuntime(test, "web", configs), sidecars);
86
81
  } else {
87
82
  console.error("runtime makes no sense", runtime);
88
83
  }
@@ -96,7 +91,7 @@ const main = async () => {
96
91
  },
97
92
  (eventType, changedFile) => {
98
93
  if (changedFile) {
99
- configs.tests.forEach(([test, runtime, secondaryArtifacts]) => {
94
+ configs.tests.forEach(([test, runtime, tr, sidecars]) => {
100
95
  if (eventType === "change" || eventType === "rename") {
101
96
  if (
102
97
  changedFile ===
@@ -107,7 +102,7 @@ const main = async () => {
107
102
  .concat("mjs")
108
103
  .join(".")
109
104
  ) {
110
- pm.launchNode(test, destinationOfRuntime(test, "node"));
105
+ pm.launchNode(test, destinationOfRuntime(test, "node", configs));
111
106
  }
112
107
 
113
108
  if (
@@ -119,7 +114,11 @@ const main = async () => {
119
114
  .concat("mjs")
120
115
  .join(".")
121
116
  ) {
122
- pm.launchWeb(test, destinationOfRuntime(test, "web"));
117
+ pm.launchWeb(
118
+ test,
119
+ destinationOfRuntime(test, "web", configs),
120
+ sidecars
121
+ );
123
122
  }
124
123
  }
125
124
  });