testeranto 0.62.0 → 0.70.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 (151) hide show
  1. package/README.md +42 -21
  2. package/dist/cjs-shim.js +2 -2
  3. package/dist/common/Node.js +7 -24
  4. package/dist/common/NodeWriter.js +7 -9
  5. package/dist/common/Project.js +103 -266
  6. package/dist/common/SubPackages/puppeteer.js +1 -1
  7. package/dist/common/SubPackages/react-dom/component/web.js +1 -1
  8. package/dist/common/SubPackages/react-dom/jsx/web.js +15 -7
  9. package/dist/common/SubPackages/react-test-renderer/MemoExoticComponent/node.js +1 -1
  10. package/dist/common/SubPackages/react-test-renderer/component/index.js +0 -1
  11. package/dist/common/SubPackages/react-test-renderer/fc/web.js +1 -1
  12. package/dist/common/SubPackages/react-test-renderer/jsx/index.js +1 -2
  13. package/dist/common/SubPackages/react-test-renderer/jsx/web.js +1 -1
  14. package/dist/common/SubPackages/react-test-renderer/jsx-promised/index.js +1 -1
  15. package/dist/common/Types.js +2 -32
  16. package/dist/common/Web.js +25 -18
  17. package/dist/common/electron.js +177 -107
  18. package/dist/common/esbuildConfigs/index.js +5 -5
  19. package/dist/common/esbuildConfigs/node.js +17 -15
  20. package/dist/common/esbuildConfigs/report.js +12 -47
  21. package/dist/common/esbuildConfigs/tests.js +0 -1
  22. package/dist/common/esbuildConfigs/web.js +14 -11
  23. package/dist/common/lib/abstractBase.js +13 -6
  24. package/dist/common/lib/basebuilder.js +11 -11
  25. package/dist/common/lib/classBuilder.js +2 -3
  26. package/dist/common/lib/core.js +37 -8
  27. package/dist/common/lib/index.js +10 -8
  28. package/dist/common/lib/types.js +2 -0
  29. package/dist/common/preload.js +15 -25
  30. package/dist/common/puppeteerConfiger.js +24 -0
  31. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  32. package/dist/module/Node.js +7 -24
  33. package/dist/module/NodeWriter.js +7 -9
  34. package/dist/module/Project.js +104 -267
  35. package/dist/module/SubPackages/puppeteer.js +1 -1
  36. package/dist/module/SubPackages/react/jsx/web.js +1 -1
  37. package/dist/module/SubPackages/react-dom/component/node.js +2 -2
  38. package/dist/module/SubPackages/react-dom/component/web.js +1 -1
  39. package/dist/module/SubPackages/react-dom/jsx/web.js +17 -9
  40. package/dist/module/SubPackages/react-test-renderer/MemoExoticComponent/node.js +1 -1
  41. package/dist/module/SubPackages/react-test-renderer/component/index.js +0 -1
  42. package/dist/module/SubPackages/react-test-renderer/fc/web.js +1 -1
  43. package/dist/module/SubPackages/react-test-renderer/jsx/index.js +1 -2
  44. package/dist/module/SubPackages/react-test-renderer/jsx/web.js +1 -1
  45. package/dist/module/SubPackages/react-test-renderer/jsx-promised/index.js +1 -1
  46. package/dist/module/Types.js +3 -30
  47. package/dist/module/Web.js +26 -19
  48. package/dist/module/electron.js +179 -109
  49. package/dist/module/esbuildConfigs/index.js +5 -5
  50. package/dist/module/esbuildConfigs/node.js +17 -15
  51. package/dist/module/esbuildConfigs/report.js +11 -48
  52. package/dist/module/esbuildConfigs/tests.js +0 -1
  53. package/dist/module/esbuildConfigs/web.js +14 -11
  54. package/dist/module/lib/abstractBase.js +13 -6
  55. package/dist/module/lib/basebuilder.js +11 -11
  56. package/dist/module/lib/classBuilder.js +2 -3
  57. package/dist/module/lib/core.js +39 -10
  58. package/dist/module/lib/index.js +10 -8
  59. package/dist/module/lib/types.js +1 -0
  60. package/dist/module/preload.js +12 -25
  61. package/dist/module/puppeteerConfiger.js +19 -0
  62. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  63. package/dist/types/Node.d.ts +3 -2
  64. package/dist/types/Project.d.ts +1 -2
  65. package/dist/types/SubPackages/puppeteer.d.ts +3 -3
  66. package/dist/types/SubPackages/react/component/node.d.ts +1 -1
  67. package/dist/types/SubPackages/react/component/web.d.ts +1 -1
  68. package/dist/types/SubPackages/react/jsx/index.d.ts +1 -1
  69. package/dist/types/SubPackages/react/jsx/node.d.ts +1 -1
  70. package/dist/types/SubPackages/react/jsx/web.d.ts +2 -2
  71. package/dist/types/SubPackages/react-dom/component/node.d.ts +2 -2
  72. package/dist/types/SubPackages/react-dom/component/web.d.ts +1 -1
  73. package/dist/types/SubPackages/react-dom/jsx/node.d.ts +1 -1
  74. package/dist/types/SubPackages/react-dom/jsx/web.d.ts +1 -1
  75. package/dist/types/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +1 -1
  76. package/dist/types/SubPackages/react-test-renderer/component/index.d.ts +1 -1
  77. package/dist/types/SubPackages/react-test-renderer/component/node.d.ts +1 -1
  78. package/dist/types/SubPackages/react-test-renderer/component/web.d.ts +1 -1
  79. package/dist/types/SubPackages/react-test-renderer/fc/node.d.ts +1 -1
  80. package/dist/types/SubPackages/react-test-renderer/fc/web.d.ts +1 -1
  81. package/dist/types/SubPackages/react-test-renderer/jsx/node.d.ts +1 -1
  82. package/dist/types/SubPackages/react-test-renderer/jsx/web.d.ts +3 -3
  83. package/dist/types/SubPackages/react-test-renderer/jsx-promised/index.d.ts +1 -1
  84. package/dist/types/SubPackages/react-test-renderer/jsx-promised/node.d.ts +1 -1
  85. package/dist/types/SubPackages/react-test-renderer/jsx-promised/web.d.ts +1 -1
  86. package/dist/types/Types.d.ts +19 -100
  87. package/dist/types/Web.d.ts +3 -2
  88. package/dist/types/esbuildConfigs/features.d.ts +1 -1
  89. package/dist/types/esbuildConfigs/index.d.ts +1 -1
  90. package/dist/types/esbuildConfigs/node.d.ts +1 -1
  91. package/dist/types/esbuildConfigs/report.d.ts +4 -0
  92. package/dist/types/esbuildConfigs/tests.d.ts +1 -1
  93. package/dist/types/esbuildConfigs/web.d.ts +1 -1
  94. package/dist/types/lib/abstractBase.d.ts +25 -24
  95. package/dist/types/lib/basebuilder.d.ts +8 -7
  96. package/dist/types/lib/classBuilder.d.ts +3 -2
  97. package/dist/types/lib/core.d.ts +3 -2
  98. package/dist/types/lib/index.d.ts +4 -3
  99. package/dist/types/lib/types.d.ts +70 -0
  100. package/dist/types/puppeteerConfiger.d.ts +4 -0
  101. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  102. package/package.json +4 -3
  103. package/src/Node.ts +24 -54
  104. package/src/NodeWriter.ts +21 -18
  105. package/src/Project.ts +165 -620
  106. package/src/Report.tsx +1 -1
  107. package/src/SubPackages/puppeteer.ts +19 -14
  108. package/src/SubPackages/react/component/node.ts +20 -32
  109. package/src/SubPackages/react/component/web.ts +20 -30
  110. package/src/SubPackages/react/jsx/index.ts +13 -24
  111. package/src/SubPackages/react/jsx/web.ts +10 -8
  112. package/src/SubPackages/react-dom/component/node.ts +17 -23
  113. package/src/SubPackages/react-dom/component/web.ts +30 -50
  114. package/src/SubPackages/react-dom/jsx/web.ts +41 -48
  115. package/src/SubPackages/react-test-renderer/MemoExoticComponent/node.ts +27 -37
  116. package/src/SubPackages/react-test-renderer/component/index.ts +16 -30
  117. package/src/SubPackages/react-test-renderer/component/node.ts +5 -11
  118. package/src/SubPackages/react-test-renderer/component/web.ts +5 -11
  119. package/src/SubPackages/react-test-renderer/fc/node.ts +36 -50
  120. package/src/SubPackages/react-test-renderer/fc/web.ts +37 -50
  121. package/src/SubPackages/react-test-renderer/jsx/index.ts +16 -21
  122. package/src/SubPackages/react-test-renderer/jsx/node.ts +6 -10
  123. package/src/SubPackages/react-test-renderer/jsx/web.ts +7 -7
  124. package/src/SubPackages/react-test-renderer/jsx-promised/index.ts +13 -16
  125. package/src/Types.ts +73 -307
  126. package/src/Web.ts +54 -53
  127. package/src/cjs-shim.js +2 -2
  128. package/src/electron.ts +258 -191
  129. package/src/esbuildConfigs/features.ts +3 -4
  130. package/src/esbuildConfigs/index.ts +8 -8
  131. package/src/esbuildConfigs/node.ts +21 -20
  132. package/src/esbuildConfigs/report.ts +15 -51
  133. package/src/esbuildConfigs/tests.ts +3 -9
  134. package/src/esbuildConfigs/web.ts +18 -18
  135. package/src/lib/abstractBase.ts +78 -125
  136. package/src/lib/basebuilder.ts +109 -134
  137. package/src/lib/classBuilder.ts +26 -45
  138. package/src/lib/core.ts +101 -69
  139. package/src/lib/index.ts +53 -52
  140. package/src/lib/types.ts +206 -0
  141. package/src/preload.ts +12 -28
  142. package/src/puppeteerConfiger.ts +26 -0
  143. package/src/web.html.ts +1 -1
  144. package/dist/common/lib/browser.js +0 -26
  145. package/dist/common/nodeWriterElectron.js +0 -55
  146. package/dist/module/lib/browser.js +0 -22
  147. package/dist/module/nodeWriterElectron.js +0 -52
  148. package/dist/types/lib/browser.d.ts +0 -6
  149. package/dist/types/nodeWriterElectron.d.ts +0 -2
  150. package/src/lib/browser.ts +0 -34
  151. package/src/nodeWriterElectron.ts +0 -71
@@ -12,5 +12,5 @@ export const testInterface = {
12
12
  andWhen: async function (renderer, whenCB) {
13
13
  await act(() => whenCB()(renderer));
14
14
  return renderer;
15
- }
15
+ },
16
16
  };
@@ -1,30 +1,3 @@
1
- // export class TPage extends Page {
2
- // // screenshot(options?: puppeteer.ScreenshotOptions) {
3
- // // return super.screenshot({
4
- // // ...options,
5
- // // path: "dist/" + (options ? options : { path: "" }).path,
6
- // // });
7
- // // }
8
- // }
9
- export class TBrowser {
10
- constructor(browser) {
11
- this.browser = browser;
12
- }
13
- pages() {
14
- return new Promise(async (res, rej) => {
15
- res((await this.browser.pages()).map((p) => {
16
- // const handler = {
17
- // apply: function (target, thisArg, argumentsList) {
18
- // console.log('screenshot was called with ' + JSON.stringify(argumentsList));
19
- // const x: ScreenshotOptions = argumentsList[0]
20
- // x.path = "./dist/" + x.path;
21
- // console.log('x.path' + x.path, target, thisArg);
22
- // return target(...argumentsList);
23
- // }
24
- // };
25
- // p.screenshot = new Proxy(p.screenshot, handler);
26
- return p;
27
- }));
28
- });
29
- }
30
- }
1
+ export {};
2
+ // export type ITTestShape = {
3
+ // };
@@ -1,24 +1,23 @@
1
1
  import Testeranto from "./lib/core.js";
2
- import { defaultTestResourceRequirement } from "./lib/index.js";
3
- const remote = require('@electron/remote');
2
+ import { defaultTestResourceRequirement, } from "./lib/index.js";
3
+ // const remote = require("@electron/remote");
4
+ // import remote from "@electron/remote";
5
+ // const electron = require("electron");
6
+ // const remote =
7
+ // process.type === "browser" ? electron : require("@electron/remote");
4
8
  class WebTesteranto extends Testeranto {
5
9
  constructor(input, testSpecification, testImplementation, testResourceRequirement, testInterface) {
6
10
  super(input, testSpecification, testImplementation, testResourceRequirement, window.NodeWriter, testInterface);
7
- if (process.argv[2]) {
8
- const testResourceArg = decodeURIComponent(new URLSearchParams(location.search).get('requesting') || '');
9
- try {
10
- const partialTestResource = JSON.parse(testResourceArg);
11
- this.receiveTestResourceConfig(this.testJobs[0], partialTestResource);
12
- }
13
- catch (e) {
14
- console.error(e);
15
- // process.exit(-1);
16
- }
11
+ const testResourceArg = decodeURIComponent(new URLSearchParams(location.search).get("requesting") || "");
12
+ try {
13
+ const partialTestResource = JSON.parse(testResourceArg);
14
+ this.receiveTestResourceConfig(this.testJobs[0], partialTestResource);
17
15
  }
18
- else {
19
- // no-op
16
+ catch (e) {
17
+ console.error(e);
18
+ // process.exit(-1);
20
19
  }
21
- const requesting = new URLSearchParams(location.search).get('requesting');
20
+ const requesting = new URLSearchParams(location.search).get("requesting");
22
21
  if (requesting) {
23
22
  const testResourceArg = decodeURIComponent(requesting);
24
23
  try {
@@ -31,17 +30,25 @@ class WebTesteranto extends Testeranto {
31
30
  // process.exit(-1);
32
31
  }
33
32
  }
34
- // const t: ITestJob = this.testJobs[0];
35
33
  }
36
34
  async receiveTestResourceConfig(t, partialTestResource) {
37
- const { failed, artifacts, logPromise } = await t.receiveTestResourceConfig(partialTestResource, remote);
35
+ const { failed, artifacts, logPromise } = await t.receiveTestResourceConfig(partialTestResource, {
36
+ browser: await window.browser,
37
+ ipc: window.ipcRenderer,
38
+ });
39
+ console.log("test is done, awaiting test result write to fs");
38
40
  Promise.all([...artifacts, logPromise]).then(async () => {
39
- var window = remote.getCurrentWindow();
41
+ // we can't close the window becuase we might be taking a screenshot
40
42
  // window.close();
43
+ // console.log(
44
+ // "(window as any).browser",
45
+ // JSON.stringify(await (window as any).browser)
46
+ // );
47
+ // var currentWindow = (await (window as any).browser).getCurrentWindow();
48
+ // currentWindow.close();
41
49
  });
42
50
  }
43
51
  }
44
- ;
45
52
  export default async (input, testSpecification, testImplementation, testInterface, testResourceRequirement = defaultTestResourceRequirement) => {
46
53
  return new WebTesteranto(input, testSpecification, testImplementation, testResourceRequirement, testInterface);
47
54
  };
@@ -1,9 +1,54 @@
1
- import { app, BrowserWindow, utilityProcess } from "electron";
1
+ import readline from "readline";
2
+ import { app, BrowserWindow, utilityProcess, ipcMain } from "electron";
2
3
  import pie from "puppeteer-in-electron";
3
4
  import puppeteer from "puppeteer-core";
4
5
  import fs from "fs";
5
6
  import path from "path";
6
- import { jsonc } from 'jsonc';
7
+ import { jsonc } from "jsonc";
8
+ import { v4 as uuidv4 } from "uuid";
9
+ var mode = process.argv[2] === "-dev" ? "DEV" : "PROD";
10
+ console.log("hello electron", mode);
11
+ const nodeChildren = {};
12
+ const webChildren = {};
13
+ const node2web = {};
14
+ const web2node = {};
15
+ const childProcesses = {};
16
+ readline.emitKeypressEvents(process.stdin);
17
+ if (process.stdin.isTTY)
18
+ process.stdin.setRawMode(true);
19
+ console.log("\n Electron is running. Press 'q' to quit\n");
20
+ process.stdin.on("keypress", (str, key) => {
21
+ if (key.name === "q") {
22
+ mode = "PROD";
23
+ // process.exit();
24
+ console.log("Switching to prod mode. Begin shutdown sequence...");
25
+ // process.exit(-1);
26
+ const allDone = Object.values(childProcesses).every((v) => v === "done");
27
+ if (allDone && mode === "PROD") {
28
+ console.log("Goodbye Testeranto by manual shutdown");
29
+ process.exit();
30
+ }
31
+ else {
32
+ console.log(childProcesses);
33
+ }
34
+ }
35
+ });
36
+ const onDone = (test) => {
37
+ console.log("onDone", test);
38
+ childProcesses[test] = "done";
39
+ const allDone = Object.values(childProcesses).every((v) => v === "done");
40
+ if (allDone && mode === "PROD") {
41
+ console.log("Goodbye Testeranto by auto shutdown");
42
+ process.exit();
43
+ }
44
+ else {
45
+ console.log(childProcesses);
46
+ }
47
+ };
48
+ process.on("message", function (message) {
49
+ console.log("message: " + message);
50
+ process.exit();
51
+ });
7
52
  const remoteMain = require("@electron/remote/main");
8
53
  remoteMain.initialize();
9
54
  const main = async () => {
@@ -14,7 +59,7 @@ const main = async () => {
14
59
  webPreferences: {
15
60
  offscreen: false,
16
61
  devTools: true,
17
- }
62
+ },
18
63
  });
19
64
  win.loadFile(`/${configs.buildDir}/report.html`).then(async (x) => {
20
65
  // pie.connect(app, puppeteer).then(async (browser) => {
@@ -26,135 +71,184 @@ const main = async () => {
26
71
  // })
27
72
  });
28
73
  };
29
- const launchNode = (t, x) => {
30
- var _a;
31
- const f = x.replace(".ts", ".mjs");
32
- const a = JSON.stringify({
74
+ const launchNode = (src, dest) => {
75
+ var _a, _b;
76
+ console.log("launchNode", src);
77
+ childProcesses[src] = "running";
78
+ const destFolder = dest.replace(".mjs", "");
79
+ const argz = JSON.stringify({
33
80
  scheduled: true,
34
- name: x,
35
- ports: [],
36
- fs: path.resolve(configs.buildDir, "node", t),
81
+ name: src,
82
+ ports: [3333],
83
+ // fs: path.resolve(configs.buildDir, "web", destFolder + "/"),
84
+ // fs: destFolder,
85
+ fs: ".",
37
86
  });
38
- console.log("launchNode", f, a);
39
- const child = utilityProcess.fork(f, [a], {});
40
- child.postMessage({ message: 'hello' });
41
- child.on('message', (data) => {
42
- console.log("from child", data);
43
- launchWebSecondary(process.cwd() + data);
87
+ // console.log("launchNode", src, dest, " -> ", destFolder, argz);
88
+ const child = utilityProcess.fork(dest + ".mjs", [argz], {
89
+ cwd: destFolder,
90
+ stdio: "pipe",
44
91
  });
45
- child.on('exit', (data) => {
46
- console.log("node process ended with: ", data);
47
- fileStream.close();
92
+ const nodeGuid = uuidv4();
93
+ nodeChildren[nodeGuid] = child;
94
+ if (!fs.existsSync(destFolder)) {
95
+ fs.mkdirSync(destFolder, { recursive: true });
96
+ }
97
+ fs.rmSync(`${destFolder}/stdout.log`, { force: true });
98
+ fs.rmSync(`${destFolder}/stderr.log`, { force: true });
99
+ const stdout = fs.createWriteStream(`${destFolder}/stdout.log`);
100
+ const stderr = fs.createWriteStream(`${destFolder}/stderr.log`);
101
+ child
102
+ .on("message", (data) => {
103
+ console.log("from child", JSON.stringify(data));
104
+ if (data.launchWeb) {
105
+ const guid = uuidv4();
106
+ const webChild = launchWebSecondary(process.cwd() + data.launchWeb);
107
+ // child.postMessage({ webLaunched: guid });
108
+ webChild.webContents.on("did-finish-load", () => {
109
+ // webChild.webContents.send("message", "hello world");
110
+ child.postMessage({ webLaunched: guid });
111
+ webChildren[guid] = webChild;
112
+ node2web[nodeGuid] = [...(node2web[nodeGuid] || []), guid];
113
+ });
114
+ }
115
+ if (data.teardown) {
116
+ webChildren[data.teardown].close();
117
+ delete webChildren[data.teardown];
118
+ node2web[nodeGuid] = node2web[nodeGuid].filter((x) => x !== data.teardown);
119
+ }
120
+ })
121
+ .on("exit", (data) => {
122
+ stdout.close();
123
+ stderr.close();
124
+ console.log(`ending node ${src}`);
125
+ onDone(src);
48
126
  });
49
- // child.stdout
50
- // child..on("", (data) => {
51
- // console.log("from child", data) // hello world!
52
- // launchWebSecondary(process.cwd() + data);
53
- // })
54
- // Create a write stream for the file
55
- const fileStream = fs.createWriteStream('errors.txt');
56
- // Pipe the child process's stdout to the file
57
- (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.pipe(fileStream);
58
- // // Handle errors
59
- // child.on('error', (err) => {
60
- // console.error('Error spawning child process:', err);
61
- // });
62
- // fileStream.on('error', (err) => {
63
- // console.error('Error writing to file:', err);
64
- // });
65
- // // Log a message when the child process exits
66
- // child.on('close', (code) => {
67
- // console.log(`Child process exited with code ${code}`);
68
- // });
69
- // console.log("child", child);
70
- // child.stdout?.on("data", (x) => {
71
- // console.log("x", x)
72
- // })
127
+ (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.pipe(stdout);
128
+ (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.pipe(stderr);
73
129
  };
74
130
  const launchWebSecondary = (htmlFile) => {
75
131
  console.log("launchWebSecondary", htmlFile);
76
132
  const subWin = new BrowserWindow({
77
- show: true,
133
+ show: false,
78
134
  webPreferences: {
79
135
  nodeIntegration: true,
80
136
  nodeIntegrationInWorker: true,
81
137
  contextIsolation: false,
82
- preload: path.join(app.getAppPath(), 'preload.js'),
138
+ preload: path.join(app.getAppPath(), "preload.js"),
83
139
  offscreen: false,
84
- devTools: false,
85
- }
140
+ devTools: true,
141
+ },
86
142
  });
87
143
  remoteMain.enable(subWin.webContents);
88
144
  subWin.webContents.openDevTools();
89
145
  subWin.loadFile(htmlFile);
146
+ return subWin;
147
+ // const uuid = uuidv4();
148
+ // windows[uuid] = subWin;
149
+ // return uuid;
90
150
  };
91
- const launchWeb = (t, changedFile) => {
92
- console.log("launchWeb", changedFile);
151
+ const launchWeb = (t, dest) => {
152
+ console.log("launchWeb", t);
153
+ childProcesses[t] = "running";
154
+ const destFolder = dest.replace(".mjs", "");
93
155
  const subWin = new BrowserWindow({
94
156
  show: true,
95
157
  webPreferences: {
96
158
  nodeIntegration: true,
97
159
  nodeIntegrationInWorker: true,
98
160
  contextIsolation: false,
99
- preload: path.join(app.getAppPath(), 'preload.js'),
161
+ preload: path.join(app.getAppPath(), "preload.js"),
100
162
  offscreen: false,
101
163
  devTools: true,
102
- }
164
+ },
103
165
  });
166
+ webChildren[uuidv4()] = subWin;
104
167
  remoteMain.enable(subWin.webContents);
105
- // subWin.webContents.openDevTools()
106
- const htmlFile = changedFile.split(".").slice(0, -1).concat("html").join(".");
107
- subWin.loadFile(htmlFile, {
168
+ const webArgz = JSON.stringify({
169
+ name: dest,
170
+ ports: [].toString(),
171
+ fs: destFolder,
172
+ });
173
+ // console.log("webArgz", webArgz);
174
+ subWin.loadFile(`${dest}.html`, {
108
175
  query: {
109
- requesting: encodeURIComponent(JSON.stringify({
110
- name: changedFile,
111
- ports: [].toString(),
112
- fs: path.resolve(configs.buildDir, "web", t),
113
- }))
114
- }
176
+ requesting: encodeURIComponent(webArgz),
177
+ },
178
+ });
179
+ if (!fs.existsSync(destFolder)) {
180
+ fs.mkdirSync(destFolder, { recursive: true });
181
+ }
182
+ const stdout = fs.createWriteStream(`${destFolder}/stdout.log`);
183
+ subWin.webContents.on("console-message", (event, level, message, line, sourceId) => {
184
+ stdout.write(JSON.stringify({
185
+ event,
186
+ level,
187
+ message: JSON.stringify(message),
188
+ line,
189
+ sourceId,
190
+ }, null, 2));
191
+ stdout.write("\n");
192
+ });
193
+ subWin.on("closed", () => {
194
+ stdout.close();
195
+ console.log(`ending web ${t}`);
196
+ // childProcesses[t] = "done";
197
+ onDone(t);
198
+ });
199
+ ipcMain.on("message", (message, data) => {
200
+ console.log("ipcMain message: " + JSON.stringify(data));
201
+ // process.exit();
115
202
  });
116
203
  };
117
- const watcher = (test, runtime) => {
118
- return path.normalize(`${configs.buildDir}/${runtime}/${test.split('.').slice(0, -1).concat('mjs').join('.')}`);
119
- };
120
- const changer = (f) => {
121
- return path.normalize(`${configs.buildDir}/${f}`);
122
- };
123
- const changer2 = (f, r) => {
124
- return path.normalize(`${configs.buildDir}/${r}/${f}`);
204
+ const destinationOfRuntime = (f, r) => {
205
+ return path
206
+ .normalize(`${configs.buildDir}/${r}/${f}`)
207
+ .split(".")
208
+ .slice(0, -1)
209
+ .join(".");
125
210
  };
126
211
  pie.initialize(app, 2999).then(async () => {
127
212
  app.on("ready", () => {
128
213
  loadReport(configs);
129
214
  console.log("running all the tests once initially");
130
- ;
131
- configs.modules.forEach((t) => {
132
- if (t.runtime === "node") {
133
- launchNode(t.test, changer2(t.test, "node"));
215
+ configs.tests.forEach(([test, runtime, secondaryArtifacts]) => {
216
+ childProcesses[test] = "loaded";
217
+ if (runtime === "node") {
218
+ launchNode(test, destinationOfRuntime(test, "node"));
134
219
  }
135
- else if (t.runtime === "web") {
136
- launchWeb(t.test, changer2(t.test, "web"));
220
+ else if (runtime === "web") {
221
+ launchWeb(test, destinationOfRuntime(test, "web"));
137
222
  }
138
223
  else {
139
- console.error("runtime makes no sense", t.runtime);
224
+ console.error("runtime makes no sense", runtime);
140
225
  }
141
226
  });
142
227
  console.log("ready and watching for changes...", configs.buildDir);
143
228
  fs.watch(configs.buildDir, {
144
229
  recursive: true,
145
230
  }, (eventType, changedFile) => {
146
- console.log(eventType, changedFile);
231
+ // console.log(eventType);
147
232
  if (changedFile) {
148
- configs.modules.forEach((t) => {
149
- if (watcher(t.test, t.runtime) === changer(changedFile)) {
150
- if (t.runtime === "node") {
151
- launchNode(t.test, changer(changedFile));
152
- }
153
- else if (t.runtime === "web") {
154
- launchWeb(t.test, changer(changedFile));
233
+ configs.tests.forEach(([test, runtime, secondaryArtifacts]) => {
234
+ if (eventType === "change" || eventType === "rename") {
235
+ if (changedFile ===
236
+ test
237
+ .replace("./", "node/")
238
+ .split(".")
239
+ .slice(0, -1)
240
+ .concat("mjs")
241
+ .join(".")) {
242
+ launchNode(test, destinationOfRuntime(test, "node"));
155
243
  }
156
- else {
157
- console.error("runtime makes no sense", t.runtime);
244
+ if (changedFile ===
245
+ test
246
+ .replace("./", "web/")
247
+ .split(".")
248
+ .slice(0, -1)
249
+ .concat("mjs")
250
+ .join(".")) {
251
+ launchWeb(test, destinationOfRuntime(test, "web"));
158
252
  }
159
253
  }
160
254
  });
@@ -165,27 +259,3 @@ const main = async () => {
165
259
  await pie.connect(app, puppeteer);
166
260
  };
167
261
  main();
168
- // ipcMain.handle('web-log', (x, message: string) => {
169
- // console.log("web-log)", message);
170
- // });
171
- // ipcMain.handle('web-error', (x, message: string) => {
172
- // console.log("web-error)", message);
173
- // });
174
- // ipcMain.handle('web-warn', (x, message: string) => {
175
- // console.log("web-warn)", message);
176
- // });
177
- // ipcMain.handle('web-info', (x, message: string) => {
178
- // console.log("web-info)", message);
179
- // });
180
- // ipcMain.handle('quit-app', (x, failed: number) => {
181
- // console.log("quit-app", failed);
182
- // app.exit(failed);
183
- // });
184
- // process.stdin.on("data", (configTests) => {
185
- // main(JSON.parse(configTests.toString()) as ITestTypes[]);
186
- // });
187
- // const watchables = (tests: ITestTypes[]) => {
188
- // return tests.map((t) => {
189
- // return [t[1], `dist/${t[1]}/${t[0].replace(".mts", ".mjs")}`]
190
- // })
191
- // }
@@ -3,16 +3,16 @@ export default (config) => {
3
3
  target: "esnext",
4
4
  format: "esm",
5
5
  splitting: true,
6
- outExtension: { '.js': '.mjs' },
6
+ outExtension: { ".js": ".mjs" },
7
7
  outbase: config.outbase,
8
- jsx: 'transform',
8
+ jsx: "transform",
9
9
  bundle: true,
10
10
  minify: config.minify === true,
11
11
  write: true,
12
12
  loader: {
13
- '.js': 'jsx',
14
- '.png': 'binary',
15
- '.jpg': 'binary',
13
+ ".js": "jsx",
14
+ ".png": "binary",
15
+ ".jpg": "binary",
16
16
  },
17
17
  };
18
18
  };
@@ -1,30 +1,32 @@
1
1
  import baseEsBuildConfig from "./index.js";
2
- // const jsonConfig = jsonc.parse((await fs.readFileSync("./testeranto.json")).toString()) as IJsonConfig;
3
2
  export default (config, entryPoints) => {
4
- return Object.assign(Object.assign({}, baseEsBuildConfig(config)), { outdir: config.outdir + "/node", inject: [`./node_modules/testeranto/dist/cjs-shim.js`], supported: {
5
- "dynamic-import": true
3
+ return Object.assign(Object.assign({}, baseEsBuildConfig(config)), { splitting: true, outdir: config.outdir + "/node", inject: [`./node_modules/testeranto/dist/cjs-shim.js`], supported: {
4
+ "dynamic-import": true,
6
5
  }, define: {
7
- "process.env.FLUENTFFMPEG_COV": "0"
6
+ "process.env.FLUENTFFMPEG_COV": "0",
8
7
  }, absWorkingDir: process.cwd(), banner: {
9
- js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`
8
+ js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`,
10
9
  }, platform: "node", external: [
11
- "testeranto.json",
12
- "features.test.js",
13
- "react",
14
- "events",
10
+ // "testeranto.json",
11
+ // "features.test.js",
12
+ // "react",
13
+ // "events",
15
14
  // "ganache"
16
- ...config.externals
15
+ ...config.externals,
17
16
  ], entryPoints: [...entryPoints], plugins: [
18
17
  ...(config.nodePlugins || []),
19
18
  {
20
- name: 'rebuild-notify',
19
+ name: "rebuild-notify",
21
20
  setup(build) {
22
- build.onEnd(result => {
21
+ build.onEnd((result) => {
23
22
  console.log(`node build ended with ${result.errors.length} errors`);
24
- console.log(result);
25
- result.errors.length !== 0 && process.exit(-1);
23
+ if (result.errors.length > 0) {
24
+ console.log(result);
25
+ }
26
+ // console.log(result);
27
+ // result.errors.length !== 0 && process.exit(-1);
26
28
  });
27
- }
29
+ },
28
30
  },
29
31
  ] });
30
32
  };
@@ -1,48 +1,11 @@
1
- "use strict";
2
- // import { jsonc } from "jsonc";
3
- // import { IBaseConfig, IJsonConfig } from "../Types";
4
- // import baseEsBuildConfig from "./index.js";
5
- // import fs from "fs"
6
- // import { BuildOptions } from "esbuild";
7
- // // import { CssModulesPlugin } from 'esbuild-css-modules-plugin';
8
- // const jsonConfig = jsonc.parse((await fs.readFileSync("./testeranto.json")).toString()) as IJsonConfig;
9
- // export default (config: IBaseConfig): BuildOptions => {
10
- // return {
11
- // bundle: true,
12
- // entryPoints: ["./node_modules/testeranto/dist/module/report.js"],
13
- // minify: config.minify === true,
14
- // outbase: config.outbase,
15
- // write: true,
16
- // outfile: `${jsonConfig.outdir}/report.js`,
17
- // external: [
18
- // "tests.json",
19
- // "features.test.js"
20
- // ],
21
- // // plugins: [
22
- // // CssModulesPlugin({
23
- // // // @see https://github.com/indooorsman/esbuild-css-modules-plugin/blob/main/index.d.ts for more details
24
- // // force: true,
25
- // // emitDeclarationFile: true,
26
- // // localsConvention: 'camelCaseOnly',
27
- // // namedExports: true,
28
- // // inject: false
29
- // // })
30
- // // ]
31
- // }
32
- // // return {
33
- // // bundle: true,
34
- // // entryPoints: [
35
- // // "./node_modules/testeranto/dist/module/Report.js",
36
- // // jsonConfig.features
37
- // // ],
38
- // // minify: config.minify === true,
39
- // // outbase: ".",
40
- // // outdir: 'docs',
41
- // // write: true,
42
- // // // outfile: `${jsonConfig.outdir}/Report.js`,
43
- // // external: [
44
- // // "features.test.js",
45
- // // "testeranto.json"
46
- // // ]
47
- // // }
48
- // }
1
+ export default (config) => {
2
+ return {
3
+ bundle: true,
4
+ entryPoints: ["./node_modules/testeranto/dist/module/report.js"],
5
+ minify: config.minify === true,
6
+ outbase: config.outbase,
7
+ write: true,
8
+ outfile: `${config.outdir}/report.js`,
9
+ external: ["tests.json", "features.test.js"],
10
+ };
11
+ };
@@ -1,4 +1,3 @@
1
- // const jsonConfig = jsonc.parse((await fs.readFileSync("./testeranto.json")).toString()) as IJsonConfig;
2
1
  export default (config) => {
3
2
  return {
4
3
  bundle: true,