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
package/src/electron.ts CHANGED
@@ -1,31 +1,79 @@
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
- import { IBuiltConfig, IJsonConfig, IRunTime, ITestTypes } from "./Types";
5
5
  import fs from "fs";
6
6
  import path from "path";
7
- import { jsonc } from 'jsonc';
7
+ import { jsonc } from "jsonc";
8
+ import { v4 as uuidv4 } from "uuid";
9
+
10
+ import { IBuiltConfig, IRunTime } from "./lib/types";
11
+
12
+ var mode: "DEV" | "PROD" = process.argv[2] === "-dev" ? "DEV" : "PROD";
13
+
14
+ console.log("hello electron", mode);
15
+
16
+ const nodeChildren: Record<string, Electron.UtilityProcess> = {};
17
+ const webChildren: Record<string, BrowserWindow> = {};
18
+ const node2web: Record<string, string[]> = {};
19
+ const web2node: Record<string, string[]> = {};
20
+ const childProcesses: Record<string, "loaded" | "running" | "done"> = {};
21
+
22
+ readline.emitKeypressEvents(process.stdin);
23
+ if (process.stdin.isTTY) process.stdin.setRawMode(true);
24
+
25
+ console.log("\n Electron is running. Press 'q' to quit\n");
26
+ process.stdin.on("keypress", (str, key) => {
27
+ if (key.name === "q") {
28
+ mode = "PROD";
29
+ // process.exit();
30
+ console.log("Switching to prod mode. Begin shutdown sequence...");
31
+ // process.exit(-1);
32
+ const allDone = Object.values(childProcesses).every((v) => v === "done");
33
+ if (allDone && mode === "PROD") {
34
+ console.log("Goodbye Testeranto by manual shutdown");
35
+ process.exit();
36
+ } else {
37
+ console.log(childProcesses);
38
+ }
39
+ }
40
+ });
41
+
42
+ const onDone = (test: string) => {
43
+ console.log("onDone", test);
44
+ childProcesses[test] = "done";
45
+
46
+ const allDone = Object.values(childProcesses).every((v) => v === "done");
47
+ if (allDone && mode === "PROD") {
48
+ console.log("Goodbye Testeranto by auto shutdown");
49
+ process.exit();
50
+ } else {
51
+ console.log(childProcesses);
52
+ }
53
+ };
54
+
55
+ process.on("message", function (message) {
56
+ console.log("message: " + message);
57
+ process.exit();
58
+ });
8
59
 
9
60
  const remoteMain = require("@electron/remote/main");
10
61
 
11
62
  remoteMain.initialize();
12
63
 
13
64
  const main = async () => {
14
-
15
65
  const configs = jsonc.parse(
16
66
  (await fs.readFileSync("./docs/testeranto.json")).toString()
17
67
  ) as IBuiltConfig;
18
68
 
19
69
  const loadReport = (configs: IBuiltConfig) => {
20
- const win = new BrowserWindow(
21
- {
22
- show: true,
23
- webPreferences: {
24
- offscreen: false,
25
- devTools: true,
26
- }
27
- }
28
- );
70
+ const win = new BrowserWindow({
71
+ show: true,
72
+ webPreferences: {
73
+ offscreen: false,
74
+ devTools: true,
75
+ },
76
+ });
29
77
 
30
78
  win.loadFile(`/${configs.buildDir}/report.html`).then(async (x) => {
31
79
  // pie.connect(app, puppeteer).then(async (browser) => {
@@ -35,216 +83,235 @@ const main = async () => {
35
83
  // });
36
84
  // })
37
85
  // })
38
- })
39
- }
86
+ });
87
+ };
40
88
 
41
- const launchNode = (t: string, x: string) => {
42
- const f = x.replace(".ts", ".mjs");
43
-
44
- const a = JSON.stringify(
45
- {
46
- scheduled: true,
47
- name: x,
48
- ports: [],
49
- fs:
50
- path.resolve(
51
- configs.buildDir,
52
- "node",
53
- t,
54
- ),
55
- }
56
- )
57
- console.log("launchNode", f, a);
58
-
59
- const child = utilityProcess.fork(f, [a], {});
60
- child.postMessage({ message: 'hello' })
61
- child.on('message', (data) => {
62
- console.log("from child", data);
63
- launchWebSecondary(process.cwd() + data);
64
- })
65
- child.on('exit', (data) => {
66
- console.log("node process ended with: ", data);
67
- fileStream.close()
68
- })
69
- // child.stdout
70
- // child..on("", (data) => {
71
- // console.log("from child", data) // hello world!
72
- // launchWebSecondary(process.cwd() + data);
73
- // })
74
- // Create a write stream for the file
75
- const fileStream = fs.createWriteStream('errors.txt');
76
-
77
- // Pipe the child process's stdout to the file
78
- child.stdout?.pipe(fileStream);
79
-
80
- // // Handle errors
81
- // child.on('error', (err) => {
82
- // console.error('Error spawning child process:', err);
83
- // });
84
-
85
- // fileStream.on('error', (err) => {
86
- // console.error('Error writing to file:', err);
87
- // });
88
-
89
- // // Log a message when the child process exits
90
- // child.on('close', (code) => {
91
- // console.log(`Child process exited with code ${code}`);
92
- // });
93
- // console.log("child", child);
94
- // child.stdout?.on("data", (x) => {
95
- // console.log("x", x)
96
- // })
97
- }
89
+ const launchNode = (src: string, dest: string) => {
90
+ console.log("launchNode", src);
91
+ childProcesses[src] = "running";
92
+ const destFolder = dest.replace(".mjs", "");
93
+
94
+ const argz = JSON.stringify({
95
+ scheduled: true,
96
+ name: src,
97
+ ports: [3333],
98
+ // fs: path.resolve(configs.buildDir, "web", destFolder + "/"),
99
+ // fs: destFolder,
100
+ fs: ".",
101
+ });
98
102
 
99
- const launchWebSecondary = (htmlFile: string) => {
100
- console.log("launchWebSecondary", htmlFile)
101
- const subWin = new BrowserWindow(
102
- {
103
- show: true,
104
-
105
- webPreferences: {
106
- nodeIntegration: true,
107
- nodeIntegrationInWorker: true,
108
- contextIsolation: false,
109
- preload: path.join(app.getAppPath(), 'preload.js'),
110
- offscreen: false,
111
- devTools: false,
103
+ // console.log("launchNode", src, dest, " -> ", destFolder, argz);
104
+
105
+ const child = utilityProcess.fork(dest + ".mjs", [argz], {
106
+ cwd: destFolder,
107
+ stdio: "pipe",
108
+ });
109
+ const nodeGuid = uuidv4();
110
+ nodeChildren[nodeGuid] = child;
111
+
112
+ if (!fs.existsSync(destFolder)) {
113
+ fs.mkdirSync(destFolder, { recursive: true });
114
+ }
115
+
116
+ fs.rmSync(`${destFolder}/stdout.log`, { force: true });
117
+ fs.rmSync(`${destFolder}/stderr.log`, { force: true });
118
+ const stdout = fs.createWriteStream(`${destFolder}/stdout.log`);
119
+ const stderr = fs.createWriteStream(`${destFolder}/stderr.log`);
120
+
121
+ child
122
+ .on("message", (data) => {
123
+ console.log("from child", JSON.stringify(data));
124
+ if (data.launchWeb) {
125
+ const guid = uuidv4();
126
+ const webChild = launchWebSecondary(process.cwd() + data.launchWeb);
127
+ // child.postMessage({ webLaunched: guid });
128
+
129
+ webChild.webContents.on("did-finish-load", () => {
130
+ // webChild.webContents.send("message", "hello world");
131
+ child.postMessage({ webLaunched: guid });
132
+ webChildren[guid] = webChild;
133
+ node2web[nodeGuid] = [...(node2web[nodeGuid] || []), guid];
134
+ });
112
135
  }
113
- }
136
+ if (data.teardown) {
137
+ webChildren[data.teardown].close();
138
+ delete webChildren[data.teardown];
139
+ node2web[nodeGuid] = node2web[nodeGuid].filter(
140
+ (x) => x !== data.teardown
141
+ );
142
+ }
143
+ })
144
+ .on("exit", (data) => {
145
+ stdout.close();
146
+ stderr.close();
147
+ console.log(`ending node ${src}`);
148
+ onDone(src);
149
+ });
150
+
151
+ child.stdout?.pipe(stdout);
152
+ child.stderr?.pipe(stderr);
153
+ };
114
154
 
115
- )
155
+ const launchWebSecondary = (htmlFile: string): BrowserWindow => {
156
+ console.log("launchWebSecondary", htmlFile);
157
+ const subWin = new BrowserWindow({
158
+ show: false,
159
+
160
+ webPreferences: {
161
+ nodeIntegration: true,
162
+ nodeIntegrationInWorker: true,
163
+ contextIsolation: false,
164
+ preload: path.join(app.getAppPath(), "preload.js"),
165
+ offscreen: false,
166
+ devTools: true,
167
+ },
168
+ });
116
169
  remoteMain.enable(subWin.webContents);
117
- subWin.webContents.openDevTools()
170
+ subWin.webContents.openDevTools();
118
171
  subWin.loadFile(htmlFile);
172
+ return subWin;
119
173
 
120
- }
174
+ // const uuid = uuidv4();
175
+ // windows[uuid] = subWin;
176
+ // return uuid;
177
+ };
121
178
 
122
- const launchWeb = (t: string, changedFile: string) => {
123
- console.log("launchWeb", changedFile)
124
- const subWin = new BrowserWindow(
125
- {
126
- show: true,
127
-
128
- webPreferences: {
129
- nodeIntegration: true,
130
- nodeIntegrationInWorker: true,
131
- contextIsolation: false,
132
- preload: path.join(app.getAppPath(), 'preload.js'),
133
- offscreen: false,
134
- devTools: true,
135
- }
136
- }
179
+ const launchWeb = (t: string, dest: string) => {
180
+ console.log("launchWeb", t);
181
+ childProcesses[t] = "running";
182
+ const destFolder = dest.replace(".mjs", "");
183
+
184
+ const subWin = new BrowserWindow({
185
+ show: true,
186
+ webPreferences: {
187
+ nodeIntegration: true,
188
+ nodeIntegrationInWorker: true,
189
+ contextIsolation: false,
190
+ preload: path.join(app.getAppPath(), "preload.js"),
191
+ offscreen: false,
192
+ devTools: true,
193
+ },
194
+ });
195
+
196
+ webChildren[uuidv4()] = subWin;
137
197
 
138
- )
139
198
  remoteMain.enable(subWin.webContents);
140
- // subWin.webContents.openDevTools()
141
199
 
142
- const htmlFile = changedFile.split(".").slice(0, -1).concat("html").join(".")
200
+ const webArgz = JSON.stringify({
201
+ name: dest,
202
+ ports: [].toString(),
203
+ fs: destFolder,
204
+ });
143
205
 
144
- subWin.loadFile(htmlFile, {
206
+ // console.log("webArgz", webArgz);
207
+ subWin.loadFile(`${dest}.html`, {
145
208
  query: {
146
- requesting: encodeURIComponent(JSON.stringify({
147
- name: changedFile,
148
- ports: [].toString(),
149
- fs:
150
- path.resolve(
151
- configs.buildDir,
152
- "web",
153
- t,
154
- ),
155
- }
156
- ))
157
- }
158
- })
159
-
160
- }
209
+ requesting: encodeURIComponent(webArgz),
210
+ },
211
+ });
161
212
 
162
- const watcher = (test: string, runtime: IRunTime) => {
163
- return path.normalize(
164
- `${configs.buildDir}/${runtime}/${test.split('.').slice(0, -1).concat('mjs').join('.')}`
213
+ if (!fs.existsSync(destFolder)) {
214
+ fs.mkdirSync(destFolder, { recursive: true });
215
+ }
216
+ const stdout = fs.createWriteStream(`${destFolder}/stdout.log`);
217
+
218
+ subWin.webContents.on(
219
+ "console-message",
220
+ (event, level, message, line, sourceId) => {
221
+ stdout.write(
222
+ JSON.stringify(
223
+ {
224
+ event,
225
+ level,
226
+ message: JSON.stringify(message),
227
+ line,
228
+ sourceId,
229
+ },
230
+ null,
231
+ 2
232
+ )
233
+ );
234
+ stdout.write("\n");
235
+ }
165
236
  );
237
+ subWin.on("closed", () => {
238
+ stdout.close();
239
+ console.log(`ending web ${t}`);
240
+ // childProcesses[t] = "done";
241
+ onDone(t);
242
+ });
243
+ ipcMain.on("message", (message, data) => {
244
+ console.log("ipcMain message: " + JSON.stringify(data));
245
+ // process.exit();
246
+ });
166
247
  };
167
248
 
168
- const changer = (f: string) => {
169
- return path.normalize(`${configs.buildDir}/${f}`);
170
- };
171
- const changer2 = (f: string, r: IRunTime) => {
172
- return path.normalize(`${configs.buildDir}/${r}/${f}`);
249
+ const destinationOfRuntime = (f: string, r: IRunTime) => {
250
+ return path
251
+ .normalize(`${configs.buildDir}/${r}/${f}`)
252
+ .split(".")
253
+ .slice(0, -1)
254
+ .join(".");
173
255
  };
174
256
 
175
257
  pie.initialize(app, 2999).then(async () => {
176
-
177
258
  app.on("ready", () => {
178
259
  loadReport(configs);
179
260
 
180
- console.log("running all the tests once initially");;
181
- configs.modules.forEach((t) => {
182
- if (t.runtime === "node") {
183
- launchNode(t.test, changer2(t.test, "node"));
184
- } else if (t.runtime === "web") {
185
- launchWeb(t.test, changer2(t.test, "web"));
261
+ console.log("running all the tests once initially");
262
+ configs.tests.forEach(([test, runtime, secondaryArtifacts]) => {
263
+ childProcesses[test] = "loaded";
264
+ if (runtime === "node") {
265
+ launchNode(test, destinationOfRuntime(test, "node"));
266
+ } else if (runtime === "web") {
267
+ launchWeb(test, destinationOfRuntime(test, "web"));
186
268
  } else {
187
- console.error("runtime makes no sense", t.runtime);
269
+ console.error("runtime makes no sense", runtime);
188
270
  }
189
- })
190
-
271
+ });
191
272
 
192
273
  console.log("ready and watching for changes...", configs.buildDir);
193
- fs.watch(configs.buildDir, {
194
- recursive: true,
195
- }, (eventType, changedFile) => {
196
- console.log(eventType, changedFile);
197
- if (changedFile) {
198
- configs.modules.forEach((t) => {
199
- if (watcher(t.test, t.runtime) === changer(changedFile)) {
200
- if (t.runtime === "node") {
201
- launchNode(t.test, changer(changedFile))
202
- } else if (t.runtime === "web") {
203
- launchWeb(t.test, changer(changedFile))
204
- } else {
205
- console.error("runtime makes no sense", t.runtime);
274
+ fs.watch(
275
+ configs.buildDir,
276
+ {
277
+ recursive: true,
278
+ },
279
+ (eventType, changedFile) => {
280
+ // console.log(eventType);
281
+ if (changedFile) {
282
+ configs.tests.forEach(([test, runtime, secondaryArtifacts]) => {
283
+ if (eventType === "change" || eventType === "rename") {
284
+ if (
285
+ changedFile ===
286
+ test
287
+ .replace("./", "node/")
288
+ .split(".")
289
+ .slice(0, -1)
290
+ .concat("mjs")
291
+ .join(".")
292
+ ) {
293
+ launchNode(test, destinationOfRuntime(test, "node"));
294
+ }
295
+
296
+ if (
297
+ changedFile ===
298
+ test
299
+ .replace("./", "web/")
300
+ .split(".")
301
+ .slice(0, -1)
302
+ .concat("mjs")
303
+ .join(".")
304
+ ) {
305
+ launchWeb(test, destinationOfRuntime(test, "web"));
306
+ }
206
307
  }
207
- }
208
- })
308
+ });
309
+ }
209
310
  }
210
-
211
- })
311
+ );
212
312
  });
213
313
  });
214
-
215
314
  await pie.connect(app, puppeteer);
216
-
217
315
  };
218
316
 
219
317
  main();
220
-
221
- // ipcMain.handle('web-log', (x, message: string) => {
222
- // console.log("web-log)", message);
223
- // });
224
-
225
- // ipcMain.handle('web-error', (x, message: string) => {
226
- // console.log("web-error)", message);
227
- // });
228
-
229
- // ipcMain.handle('web-warn', (x, message: string) => {
230
- // console.log("web-warn)", message);
231
- // });
232
-
233
- // ipcMain.handle('web-info', (x, message: string) => {
234
- // console.log("web-info)", message);
235
- // });
236
-
237
- // ipcMain.handle('quit-app', (x, failed: number) => {
238
- // console.log("quit-app", failed);
239
- // app.exit(failed);
240
- // });
241
-
242
- // process.stdin.on("data", (configTests) => {
243
- // main(JSON.parse(configTests.toString()) as ITestTypes[]);
244
- // });
245
-
246
- // const watchables = (tests: ITestTypes[]) => {
247
- // return tests.map((t) => {
248
- // return [t[1], `dist/${t[1]}/${t[0].replace(".mts", ".mjs")}`]
249
- // })
250
- // }
@@ -1,6 +1,5 @@
1
- import { IBaseConfig } from "../Types";
2
-
3
1
  import { BuildOptions } from "esbuild";
2
+ import { IBaseConfig } from "../lib/types";
4
3
 
5
4
  export default (config: IBaseConfig): BuildOptions => {
6
5
  return {
@@ -14,5 +13,5 @@ export default (config: IBaseConfig): BuildOptions => {
14
13
  // external: ["graphology"],
15
14
 
16
15
  format: "esm",
17
- }
18
- }
16
+ };
17
+ };
@@ -1,22 +1,22 @@
1
1
  import { BuildOptions } from "esbuild";
2
- import { config } from "process";
3
- import { IBaseConfig } from "../Types";
2
+
3
+ import { IBaseConfig } from "../lib/types";
4
4
 
5
5
  export default (config: IBaseConfig): BuildOptions => {
6
6
  return {
7
7
  target: "esnext",
8
8
  format: "esm",
9
9
  splitting: true,
10
- outExtension: { '.js': '.mjs' },
10
+ outExtension: { ".js": ".mjs" },
11
11
  outbase: config.outbase,
12
- jsx: 'transform',
12
+ jsx: "transform",
13
13
  bundle: true,
14
14
  minify: config.minify === true,
15
15
  write: true,
16
16
  loader: {
17
- '.js': 'jsx',
18
- '.png': 'binary',
19
- '.jpg': 'binary',
17
+ ".js": "jsx",
18
+ ".png": "binary",
19
+ ".jpg": "binary",
20
20
  },
21
21
  };
22
- }
22
+ };
@@ -1,12 +1,8 @@
1
1
  import { BuildOptions } from "esbuild";
2
2
 
3
- import { IBaseConfig, IJsonConfig } from "../Types";
3
+ import { IBaseConfig } from "../lib/types";
4
4
 
5
5
  import baseEsBuildConfig from "./index.js";
6
- import { jsonc } from "jsonc";
7
- import fs from "fs"
8
-
9
- // const jsonConfig = jsonc.parse((await fs.readFileSync("./testeranto.json")).toString()) as IJsonConfig;
10
6
 
11
7
  export default (
12
8
  config: IBaseConfig,
@@ -15,45 +11,50 @@ export default (
15
11
  return {
16
12
  ...baseEsBuildConfig(config),
17
13
 
14
+ splitting: true,
15
+
18
16
  outdir: config.outdir + "/node",
19
17
 
20
18
  inject: [`./node_modules/testeranto/dist/cjs-shim.js`],
21
19
 
22
20
  supported: {
23
- "dynamic-import": true
21
+ "dynamic-import": true,
24
22
  },
25
23
 
26
24
  define: {
27
- "process.env.FLUENTFFMPEG_COV": "0"
25
+ "process.env.FLUENTFFMPEG_COV": "0",
28
26
  },
29
27
  absWorkingDir: process.cwd(),
30
28
  banner: {
31
- js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`
29
+ js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`,
32
30
  },
33
31
  platform: "node",
34
32
 
35
33
  external: [
36
- "testeranto.json",
37
- "features.test.js",
38
- "react",
39
- "events",
34
+ // "testeranto.json",
35
+ // "features.test.js",
36
+ // "react",
37
+ // "events",
40
38
  // "ganache"
41
- ...config.externals
39
+ ...config.externals,
42
40
  ],
43
41
 
44
42
  entryPoints: [...entryPoints],
45
43
  plugins: [
46
44
  ...(config.nodePlugins || []),
47
45
  {
48
- name: 'rebuild-notify',
46
+ name: "rebuild-notify",
49
47
  setup(build) {
50
- build.onEnd(result => {
48
+ build.onEnd((result) => {
51
49
  console.log(`node build ended with ${result.errors.length} errors`);
52
- console.log(result)
53
- result.errors.length !== 0 && process.exit(-1);
54
- })
55
- }
50
+ if (result.errors.length > 0) {
51
+ console.log(result);
52
+ }
53
+ // console.log(result);
54
+ // result.errors.length !== 0 && process.exit(-1);
55
+ });
56
+ },
56
57
  },
57
58
  ],
58
59
  };
59
- }
60
+ };