testeranto 0.125.3 → 0.129.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 (99) hide show
  1. package/README.md +248 -6
  2. package/dist/common/src/Node.js +5 -0
  3. package/dist/common/src/PM/base.js +6 -0
  4. package/dist/common/src/PM/index.js +0 -1
  5. package/dist/common/src/PM/main.js +84 -22
  6. package/dist/common/src/PM/web.js +1 -1
  7. package/dist/common/src/ReportServer.js +39 -2
  8. package/dist/common/src/build.js +41 -6
  9. package/dist/common/src/lib/abstractBase.js +22 -107
  10. package/dist/common/src/lib/basebuilder.js +20 -21
  11. package/dist/common/src/lib/classBuilder.js +12 -1
  12. package/dist/common/src/lib/core.js +1 -8
  13. package/dist/common/src/lib/index.js +2 -5
  14. package/dist/common/src/lib/pmProxy.js +294 -0
  15. package/dist/common/testeranto.config.js +43 -34
  16. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  17. package/dist/module/src/Node.js +5 -0
  18. package/dist/module/src/PM/base.js +6 -0
  19. package/dist/module/src/PM/index.js +0 -1
  20. package/dist/module/src/PM/main.js +84 -22
  21. package/dist/module/src/PM/web.js +1 -1
  22. package/dist/module/src/Project.js +6 -6
  23. package/dist/module/src/ReportClient.js +3 -3
  24. package/dist/module/src/ReportServer.js +39 -2
  25. package/dist/module/src/build.js +41 -6
  26. package/dist/module/src/lib/abstractBase.js +22 -107
  27. package/dist/module/src/lib/basebuilder.js +20 -21
  28. package/dist/module/src/lib/classBuilder.js +12 -1
  29. package/dist/module/src/lib/core.js +1 -8
  30. package/dist/module/src/lib/index.js +2 -5
  31. package/dist/module/src/lib/pmProxy.js +285 -0
  32. package/dist/module/testeranto.config.js +40 -34
  33. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  34. package/dist/prebuild/Project.css +1 -26
  35. package/dist/prebuild/Project.js +4 -4
  36. package/dist/prebuild/ReportClient.css +1 -26
  37. package/dist/prebuild/ReportClient.js +3 -3
  38. package/dist/prebuild/ReportServer.mjs +1 -2
  39. package/dist/prebuild/TestReport.css +1 -26
  40. package/dist/prebuild/build.mjs +42 -7
  41. package/dist/prebuild/run.mjs +95 -20
  42. package/dist/tsconfig.tsbuildinfo +1 -1
  43. package/dist/types/src/PM/web.d.ts +1 -1
  44. package/dist/types/src/Types.d.ts +2 -1
  45. package/dist/types/src/lib/abstractBase.d.ts +4 -6
  46. package/dist/types/src/lib/index.d.ts +1 -1
  47. package/dist/types/src/lib/pmProxy.d.ts +7 -0
  48. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  49. package/package.json +14 -7
  50. package/src/Init.ts +1 -0
  51. package/src/Node.ts +6 -0
  52. package/src/PM/base.ts +8 -0
  53. package/src/PM/index.ts +2 -7
  54. package/src/PM/main.ts +128 -26
  55. package/src/PM/web.ts +3 -3
  56. package/src/Project.tsx +6 -6
  57. package/src/ReportClient.tsx +3 -3
  58. package/src/ReportServer.ts +43 -2
  59. package/src/Types.ts +3 -2
  60. package/src/build.ts +47 -6
  61. package/src/lib/abstractBase.ts +45 -184
  62. package/src/lib/basebuilder.ts +25 -28
  63. package/src/lib/classBuilder.ts +13 -2
  64. package/src/lib/core.ts +10 -14
  65. package/src/lib/index.ts +6 -29
  66. package/src/lib/pmProxy.ts +366 -0
  67. package/testeranto/bundles/node/{react → redux}/metafile.json +186 -254
  68. package/testeranto/bundles/pure/redux/metafile.json +554 -0
  69. package/testeranto/bundles/web/redux/metafile.json +504 -0
  70. package/testeranto/bundles/web/{react/src/SubPackages/react-test-renderer/component → redux}/test/web.html +1 -1
  71. package/testeranto/index.html +1 -1
  72. package/testeranto/reports/{react → redux}/config.json +26 -10
  73. package/testeranto/reports/{react → redux}/index.html +5 -5
  74. package/testeranto/reports/redux/summary.json +20 -0
  75. package/testeranto.config.ts +46 -34
  76. package/tsc.log +3 -1
  77. package/testeranto/bundles/node/react/src/SubPackages/react-test-renderer/component/test/node.mjs +0 -24687
  78. package/testeranto/bundles/pure/react/metafile.json +0 -8
  79. package/testeranto/bundles/pure/react/src/SubPackages/react-test-renderer/component/test/pure.mjs +0 -24625
  80. package/testeranto/bundles/web/react/metafile.json +0 -8
  81. package/testeranto/bundles/web/react/src/SubPackages/react-test-renderer/component/test/web.mjs +0 -21290
  82. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/node/node/console_log.txt +0 -0
  83. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/bdd_errors.txt +0 -1
  84. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/featurePrompt.txt +0 -0
  85. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/lint_errors.json +0 -3381
  86. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/littleBoard.html +0 -20
  87. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/log.txt +0 -40
  88. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/prompt.txt +0 -24
  89. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/tests.json +0 -132
  90. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/type_errors.txt +0 -17
  91. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/bdd_errors.txt +0 -1
  92. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/console_log.txt +0 -1
  93. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/lint_errors.json +0 -2947
  94. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/littleBoard.html +0 -20
  95. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/log.txt +0 -40
  96. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/prompt.txt +0 -23
  97. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/tests.json +0 -132
  98. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/type_errors.txt +0 -18
  99. package/testeranto/reports/react/summary.json +0 -8
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "testeranto",
3
3
  "description": "the AI powered BDD test framework for typescript projects",
4
- "version": "0.125.3",
4
+ "version": "0.129.0",
5
5
  "engines": {
6
6
  "node": "18.18.0"
7
7
  },
@@ -121,6 +121,10 @@
121
121
  "import": "./dist/module/SubPackages/react-dom/component/node.js",
122
122
  "require": "./dist/common/SubPackages/react-dom/component/node.js"
123
123
  },
124
+ "./src/lib/abstractBase": {
125
+ "import": "./src/lib/abstractBase.ts",
126
+ "require": "./src/lib/abstractBase.ts"
127
+ },
124
128
  "./src/Types": {
125
129
  "import": "./src/Types.ts",
126
130
  "require": "./src/Types.ts"
@@ -185,7 +189,7 @@
185
189
  "import": "./dist/module/NodeWriter.js",
186
190
  "require": "./dist/common/NodeWriter.js"
187
191
  },
188
- "./**/*": "./src/**/*.ts"
192
+ "./src/**/*": "./src/**/*.ts"
189
193
  },
190
194
  "repository": "git@github.com:adamwong246/testeranto.git",
191
195
  "homepage": "https://github.com/adamwong246/testeranto",
@@ -208,9 +212,10 @@
208
212
  "build-types": "tsc -p tsconfig.types.json",
209
213
  "type-check": "yarn tsc --noEmit > tsc.log",
210
214
  "type-fix": "aider --model deepseek/deepseek-chat --load type-fix.txt",
211
- "t-build": "tsx node_modules/testeranto/dist/prebuild/build.mjs",
212
- "t-run": "tsx node_modules/testeranto/dist/prebuild/run.mjs",
213
- "t-init": "tsx node_modules/testeranto/dist/prebuild/init-docs.mjs"
215
+ "t-build": "tsx dist/prebuild/build.mjs",
216
+ "t-run": "tsx dist/prebuild/run.mjs",
217
+ "t-init": "tsx dist/prebuild/init-docs.mjs",
218
+ "t-report": "tsx dist/prebuild/ReportServer.mjs"
214
219
  },
215
220
  "peerDependencies": {
216
221
  "@types/react": "18.2.0",
@@ -236,6 +241,8 @@
236
241
  "@types/ws": "^8.5.10",
237
242
  "@typescript-eslint/eslint-plugin": "^5.46.0",
238
243
  "@typescript-eslint/parser": "^5.46.0",
244
+ "testeranto-solidity": "latest",
245
+ "testeranto_with_reduxjs_toolkit": "latest",
239
246
  "ts-node": "^10.9.1",
240
247
  "typescript": "^5.8.2"
241
248
  },
@@ -277,7 +284,7 @@
277
284
  "react-test-renderer": "18.2.0",
278
285
  "recursive-watch": "^1.1.4",
279
286
  "rpc-over-ipc": "^1.0.0",
280
- "testeranto": "^0.121.1",
287
+ "testeranto": "^0.125.3",
281
288
  "tsc-prog": "^2.3.0",
282
289
  "tsx": "^4.19.3",
283
290
  "typescript-eslint": "^8.29.1",
@@ -286,4 +293,4 @@
286
293
  "why-is-node-running": "^3.2.2",
287
294
  "ws": "^8.16.0"
288
295
  }
289
- }
296
+ }
package/src/Init.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import fs from "fs";
2
+ import esbuild from "esbuild";
2
3
 
3
4
  export default async () => {
4
5
  [
package/src/Node.ts CHANGED
@@ -64,7 +64,13 @@ const testeranto = async <I extends IT, O extends OT, M>(
64
64
  testInterface
65
65
  );
66
66
 
67
+ process.on("unhandledRejection", (reason, promise) => {
68
+ console.error("Unhandled Rejection at:", promise, "reason:", reason);
69
+ // Optionally, terminate the process or perform cleanup
70
+ });
71
+
67
72
  try {
73
+ console.log(process.argv);
68
74
  const f = await t.receiveTestResourceConfig(process.argv[2]);
69
75
 
70
76
  console.error("goodbye node error", f.fails);
package/src/PM/base.ts CHANGED
@@ -175,7 +175,15 @@ export abstract class PM_Base {
175
175
  }
176
176
 
177
177
  async createWriteStream(filepath: string, testName: string): Promise<number> {
178
+ const folder = filepath.split("/").slice(0, -1).join("/");
179
+
178
180
  return new Promise<number>((res) => {
181
+ if (!fs.existsSync(folder)) {
182
+ return fs.mkdirSync(folder, {
183
+ recursive: true,
184
+ });
185
+ }
186
+
179
187
  const f = fs.createWriteStream(filepath);
180
188
  fileStreams3.push(f);
181
189
  if (!files[testName]) {
package/src/PM/index.ts CHANGED
@@ -1,12 +1,7 @@
1
1
  import { Page } from "puppeteer-core";
2
- import {
3
- CdpPage,
4
- ScreenRecorderOptions,
5
- } from "puppeteer-core/lib/esm/puppeteer";
6
- import { ITLog, ITTestResourceConfiguration } from "../lib";
2
+ import { ScreenRecorderOptions } from "puppeteer-core/lib/esm/puppeteer";
7
3
 
8
- type IFPaths = string[];
9
- const fPaths: IFPaths = [];
4
+ import { ITLog, ITTestResourceConfiguration } from "../lib";
10
5
 
11
6
  export abstract class PM {
12
7
  server: any;
package/src/PM/main.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { spawn } from "node:child_process";
1
+ import { exec, spawn } from "node:child_process";
2
2
 
3
3
  import ts from "typescript";
4
4
  import net from "net";
@@ -61,7 +61,9 @@ async function fileHash(filePath, algorithm = "md5") {
61
61
 
62
62
  const statusMessagePretty = (failures: number, test: string) => {
63
63
  if (failures === 0) {
64
- console.log(ansiC.green(ansiC.inverse(`> ${test} completed successfully`)));
64
+ console.log(
65
+ ansiC.green(ansiC.inverse(`> ${test} completed successfully?!?`))
66
+ );
65
67
  } else {
66
68
  console.log(ansiC.red(ansiC.inverse(`> ${test} failed ${failures} times`)));
67
69
  }
@@ -275,7 +277,9 @@ export class PM_Main extends PM_Base {
275
277
  const hash = await fileHash(outputFile);
276
278
  if (fileHashes[k] !== hash) {
277
279
  fileHashes[k] = hash;
278
- console.log(ansiC.green(ansiC.inverse(`< ${e} ${filename}`)));
280
+ console.log(
281
+ ansiC.yellow(ansiC.inverse(`< ${e} ${filename}`))
282
+ );
279
283
  launcher(k, outputFile);
280
284
  }
281
285
  });
@@ -290,7 +294,7 @@ export class PM_Main extends PM_Base {
290
294
  watcher(
291
295
  watch(metafile, async (e, filename) => {
292
296
  console.log(
293
- ansiC.green(ansiC.inverse(`< ${e} ${filename} (${runtime})`))
297
+ ansiC.yellow(ansiC.inverse(`< ${e} ${filename} (${runtime})`))
294
298
  );
295
299
  this.metafileOutputs(runtime);
296
300
  })
@@ -382,7 +386,6 @@ export class PM_Main extends PM_Base {
382
386
  basePath: process.cwd(), // always required, used for relative paths
383
387
  configFilePath: "tsconfig.json", // config to inherit from (optional)
384
388
  compilerOptions: {
385
- rootDir: "src",
386
389
  outDir: tscPather(entrypoint, platform, this.name),
387
390
  // declaration: true,
388
391
  // skipLibCheck: true,
@@ -683,24 +686,53 @@ ${addableFiles
683
686
  // })
684
687
  // );
685
688
 
686
- await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
687
- return module.default.then((defaultModule) => {
688
- defaultModule
689
- .receiveTestResourceConfig(argz)
690
- .then(async (results: IFinalResults) => {
691
- this.receiveFeatures(results.features, destFolder, src, "pure");
692
- statusMessagePretty(results.fails, src);
693
- this.bddTestIsNowDone(src, results.fails);
689
+ try {
690
+ await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
691
+ return module.default
692
+ .then((defaultModule) => {
693
+ defaultModule
694
+ .receiveTestResourceConfig(argz)
695
+ .then(async (results: IFinalResults) => {
696
+ this.receiveFeatures(results.features, destFolder, src, "pure");
697
+ statusMessagePretty(results.fails, src);
698
+ this.bddTestIsNowDone(src, results.fails);
699
+ })
700
+ .catch((e) => {
701
+ console.log(
702
+ ansiC.red(ansiC.inverse(`${src} errored with: ${e}`))
703
+ );
704
+ this.bddTestIsNowDone(src, -1);
705
+ })
706
+ .finally(() => {
707
+ webSideCares.forEach((webSideCar) => webSideCar.close());
708
+ });
694
709
  })
695
710
  .catch((e) => {
696
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
711
+ console.log(
712
+ ansiC.red(
713
+ ansiC.inverse(
714
+ `${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
715
+ )
716
+ )
717
+ );
718
+ this.writeFileSync(`${reportDest}/error.txt`, e.stack, src);
697
719
  this.bddTestIsNowDone(src, -1);
698
- })
699
- .finally(() => {
700
- webSideCares.forEach((webSideCar) => webSideCar.close());
720
+ statusMessagePretty(-1, src);
721
+ // console.error(e);
701
722
  });
702
723
  });
703
- });
724
+ } catch (e) {
725
+ console.log(
726
+ ansiC.red(
727
+ ansiC.inverse(
728
+ `${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
729
+ )
730
+ )
731
+ );
732
+ this.writeFileSync(`${reportDest}/error.txt`, e.stack, src);
733
+ this.bddTestIsNowDone(src, -1);
734
+ statusMessagePretty(-1, src);
735
+ }
704
736
 
705
737
  // console.log("portsToUse", portsToUse);
706
738
  for (let i = 0; i <= portsToUse.length; i++) {
@@ -731,7 +763,9 @@ ${addableFiles
731
763
  });
732
764
 
733
765
  if (!testConfig) {
734
- console.log(ansiC.inverse("missing test config! Exiting ungracefully!"));
766
+ console.log(
767
+ ansiC.inverse(`missing test config! Exiting ungracefully for '${src}'`)
768
+ );
735
769
  process.exit(-1);
736
770
  }
737
771
  const testConfigResource = testConfig[2];
@@ -808,6 +842,7 @@ ${addableFiles
808
842
  let haltReturns = false;
809
843
 
810
844
  let buffer: Buffer<ArrayBufferLike> = new Buffer("");
845
+
811
846
  const server = net.createServer((socket) => {
812
847
  socket.on("data", (data) => {
813
848
  buffer = Buffer.concat([buffer, data]);
@@ -850,12 +885,42 @@ ${addableFiles
850
885
 
851
886
  const oStream = fs.createWriteStream(`${reportDest}/console_log.txt`);
852
887
 
853
- const child = spawn("node", [builtfile, testResources], {
854
- stdio: ["pipe", "pipe", "pipe", "ipc"],
855
- // silent: true
856
- });
888
+ const child = spawn(
889
+ "node",
890
+ [builtfile, testResources, "--trace-warnings"],
891
+ {
892
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
893
+ // silent: true
894
+ }
895
+ );
896
+
897
+ const p = destFolder + "/tpipe";
898
+ // exec(`lsof`, (ec, out, err) => {
899
+ // console.log(ec, out, err);
900
+ // });
901
+
902
+ // if (fs.existsSync(p)) {
903
+ // fs.rmSync(p);
904
+ // }
905
+
906
+ const errFile = `${reportDest}/error.txt`;
907
+
908
+ if (fs.existsSync(errFile)) {
909
+ fs.rmSync(errFile);
910
+ }
911
+
912
+ // server.on("error", (e) => {
913
+ // if (e.code === "EADDRINUSE") {
914
+ // console.error(e);
915
+ // process.exit(-1);
916
+ // // console.error("Address in use, retrying...");
917
+ // // setTimeout(() => {
918
+ // // server.close();
919
+ // // server.listen(p);
920
+ // // }, 1000);
921
+ // }
922
+ // });
857
923
 
858
- const p = destFolder + "/pipe";
859
924
  server.listen(p, () => {
860
925
  child.stderr?.on("data", (data) => {
861
926
  oStream.write(`stderr data ${data}`);
@@ -864,6 +929,12 @@ ${addableFiles
864
929
  oStream.write(`stdout data ${data}`);
865
930
  });
866
931
  child.on("close", (code) => {
932
+ console.log("close");
933
+ console.log("deleting", p);
934
+ if (fs.existsSync(p)) {
935
+ fs.rmSync(p);
936
+ }
937
+
867
938
  oStream.close();
868
939
  server.close();
869
940
 
@@ -878,9 +949,40 @@ ${addableFiles
878
949
  statusMessagePretty(code, src);
879
950
  }
880
951
 
881
- // haltReturns = true;
952
+ haltReturns = true;
953
+ });
954
+ child.on("exit", (code) => {
955
+ console.log("exit");
956
+ console.log("deleting", p);
957
+ if (fs.existsSync(p)) {
958
+ fs.rmSync(p);
959
+ }
960
+
961
+ haltReturns = true;
962
+ });
963
+ child.on("error", (e) => {
964
+ console.log("error");
965
+ console.log("deleting", p);
966
+ if (fs.existsSync(p)) {
967
+ fs.rmSync(p);
968
+ }
969
+
970
+ haltReturns = true;
971
+
972
+ console.log(
973
+ ansiC.red(
974
+ ansiC.inverse(
975
+ `${src} errored with: ${e.name}. Check ${errFile}for more info`
976
+ )
977
+ )
978
+ );
979
+ this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
980
+ this.bddTestIsNowDone(src, -1);
981
+ statusMessagePretty(-1, src);
982
+
983
+ // this.bddTestIsNowDone(src, -1);
984
+ // statusMessagePretty(-1, src);
882
985
  });
883
- child.on("exit", (code) => {});
884
986
  });
885
987
 
886
988
  child.send({ path: p });
package/src/PM/web.ts CHANGED
@@ -43,7 +43,7 @@ export class PM_Web {
43
43
  return window["closePage"](p);
44
44
  }
45
45
 
46
- goto(p, url: string): any {
46
+ goto(p, url: string) {
47
47
  return window["goto"](p, url);
48
48
  }
49
49
 
@@ -60,10 +60,10 @@ export class PM_Web {
60
60
  }
61
61
 
62
62
  getAttribute(selector: string, attribute: string) {
63
- return window["getValue"](selector, attribute);
63
+ return window["getAttribute"](selector, attribute);
64
64
  }
65
65
 
66
- getValue(selector: string) {
66
+ getValue(selector: number) {
67
67
  return window["getValue"](selector);
68
68
  }
69
69
 
package/src/Project.tsx CHANGED
@@ -78,8 +78,8 @@ const BigBoard = () => {
78
78
  const x: Promise<[string, IBuiltConfig, ISummary]>[] = projects.map(async (p) => {
79
79
  return [
80
80
  p,
81
- (await (await fetch(`/kokomoBay/testeranto/reports/${p}/config.json`)).json()) as IBuiltConfig,
82
- (await (await fetch(`/kokomoBay/testeranto/reports/${p}/summary.json`)).json()) as ISummary
81
+ (await (await fetch(`./reports/${p}/config.json`)).json()) as IBuiltConfig,
82
+ (await (await fetch(`./reports/${p}/summary.json`)).json()) as ISummary
83
83
  ] as [string, IBuiltConfig, ISummary]
84
84
  })
85
85
 
@@ -158,9 +158,9 @@ const BigBoard = () => {
158
158
  return <tr>
159
159
  <td>{t[0]}</td>
160
160
  <td>{t[1]}</td>
161
- <td><a href={`/kokomoBay/testeranto/reports/${x}/littleBoard.html`}>{y.runTimeError}</a></td>
162
- <td><a href={`/kokomoBay/testeranto/reports/${x}/lint_errors.json`}>{y.staticErrors}</a></td>
163
- <td><a href={`/kokomoBay/testeranto/reports/${x}/type_errors.txt`}>{y.typeErrors}</a></td>
161
+ <td><a href={`./reports/${x}/index.html`}>{y.runTimeError}</a></td>
162
+ <td><a href={`./reports/${x}/lint_errors.json`}>{y.staticErrors}</a></td>
163
+ <td><a href={`./reports/${x}/type_errors.txt`}>{y.typeErrors}</a></td>
164
164
  <td>
165
165
  <pre>
166
166
 
@@ -197,4 +197,4 @@ document.addEventListener("DOMContentLoaded", function () {
197
197
  }
198
198
  });
199
199
 
200
- console.log("hello BigBoard!")
200
+ console.log("hello Project!")
@@ -35,7 +35,7 @@ const BigBoard = () => {
35
35
  const [configs, setConfigs] = useState<IBuiltConfig>();
36
36
  useEffect(() => {
37
37
  (async () => {
38
- fetch(`/kokomoBay/testeranto/reports/${window.location.pathname.split('/').pop()}/config.json`)
38
+ fetch(`./reports/${window.location.pathname.split('/').pop()}/config.json`)
39
39
  .then(response => response.json())
40
40
  .then(json => {
41
41
  setConfigs(json)
@@ -48,7 +48,7 @@ const BigBoard = () => {
48
48
  const [bigBoard, setBigBoard] = useState<Record<string, ISummary>>({});
49
49
  useEffect(() => {
50
50
  (async () => {
51
- fetch('/kokomoBay/docs/summary.json')
51
+ fetch('./docs/summary.json')
52
52
  .then(response => response.json())
53
53
  .then(json => {
54
54
  setBigBoard(json)
@@ -167,4 +167,4 @@ document.addEventListener("DOMContentLoaded", function () {
167
167
  }
168
168
  });
169
169
 
170
- console.log("hello BigBoard!")
170
+ console.log("hello ReportClient!")
@@ -1,10 +1,51 @@
1
1
  import staticServer from "node-static";
2
2
  import http from "http";
3
+ // import esbuild from "esbuild";
3
4
 
4
5
  const main = async () => {
5
- process.chdir("../"); // Navigate one level up
6
+ // esbuild
7
+ // .context(configer(config, Object.keys(entryPoints), testName))
8
+ // .then(async (ctx) => {
9
+ // if (mode === "dev") {
10
+ // await ctx.watch().then((v) => {
11
+ // done();
12
+ // });
13
+ // } else {
14
+ // ctx.rebuild().then((v) => {
15
+ // done();
16
+ // });
17
+ // }
6
18
 
7
- const fileServer = new staticServer.Server(".", {});
19
+ // return ctx;
20
+ // });
21
+ // }),
22
+
23
+ // await esbuild
24
+ // .context({
25
+ // entryPoints: [
26
+ // "node_modules/testeranto/src/ReportClient.tsx",
27
+ // "node_modules/testeranto/src/TestReport.tsx",
28
+ // "node_modules/testeranto/src/Project.tsx",
29
+ // ],
30
+ // bundle: true,
31
+ // format: "iife",
32
+ // platform: "browser",
33
+ // outdir: "./testeranto",
34
+ // define: {
35
+ // REPORT_ROOT: "localhost:8765",
36
+ // },
37
+ // })
38
+ // .then(async (ctx) => {
39
+ // await ctx.watch();
40
+
41
+ // let { host, port } = await ctx.serve({
42
+ // servedir: ".",
43
+ // });
44
+ // });
45
+
46
+ // process.chdir("../"); // Navigate one level up
47
+
48
+ const fileServer = new staticServer.Server("./testeranto", {});
8
49
 
9
50
  http
10
51
  .createServer(function (request, response) {
package/src/Types.ts CHANGED
@@ -176,8 +176,8 @@ export type Ibdd_in<
176
176
  ///////////////////////////////////////////////
177
177
 
178
178
  export type IPluginFactory = (
179
- register: (entrypoint: string, sources: string[]) => any,
180
- entrypoints: string[]
179
+ register?: (entrypoint: string, sources: string[]) => any,
180
+ entrypoints?: string[]
181
181
  ) => Plugin;
182
182
 
183
183
  export type IRunTime = `node` | `web` | "pure";
@@ -196,6 +196,7 @@ export type ITestconfig = {
196
196
  src: string;
197
197
  tests: ITestTypes[];
198
198
  webPlugins: IPluginFactory[];
199
+ reportDomain: string;
199
200
  };
200
201
 
201
202
  export type IBuiltConfig = { buildDir: string } & ITestconfig;
package/src/build.ts CHANGED
@@ -32,6 +32,7 @@ if (mode !== "once" && mode !== "dev") {
32
32
  console.log("testeranto is building", testName, mode);
33
33
 
34
34
  import(process.cwd() + "/" + "testeranto.config.ts").then(async (module) => {
35
+ const pckge = (await import(`${process.cwd()}/package.json`)).default;
35
36
  const bigConfig: IProject = module.default;
36
37
 
37
38
  const project = bigConfig.projects[testName];
@@ -128,12 +129,12 @@ import(process.cwd() + "/" + "testeranto.config.ts").then(async (module) => {
128
129
  <head>
129
130
  <meta name="description" content="Webpage description goes here" />
130
131
  <meta charset="utf-8" />
131
- <title>kokomoBay - testeranto</title>
132
+ <title>${pckge.name} - testeranto</title>
132
133
  <meta name="viewport" content="width=device-width, initial-scale=1" />
133
134
  <meta name="author" content="" />
134
135
 
135
- <link rel="stylesheet" href="/kokomoBay/testeranto/ReportClient.css" />
136
- <script type="module" src="/kokomoBay/testeranto/ReportClient.js"></script>
136
+ <link rel="stylesheet" href="../ReportClient.css" />
137
+ <script type="module" src="../ReportClient.js"></script>
137
138
 
138
139
  </head>
139
140
 
@@ -161,7 +162,7 @@ import(process.cwd() + "/" + "testeranto.config.ts").then(async (module) => {
161
162
  <head>
162
163
  <meta name="description" content="Webpage description goes here" />
163
164
  <meta charset="utf-8" />
164
- <title>kokomoBay - testeranto</title>
165
+ <title>${pckge.name} - testeranto</title>
165
166
  <meta name="viewport" content="width=device-width, initial-scale=1" />
166
167
  <meta name="author" content="" />
167
168
 
@@ -169,8 +170,8 @@ import(process.cwd() + "/" + "testeranto.config.ts").then(async (module) => {
169
170
  ${JSON.stringify(Object.keys(bigConfig.projects))}
170
171
  </script>
171
172
 
172
- <link rel="stylesheet" href="/kokomoBay/testeranto/Project.css" />
173
- <script type="module" src="/kokomoBay/testeranto/Project.js"></script>
173
+ <link rel="stylesheet" href="Project.css" />
174
+ <script type="module" src="Project.js"></script>
174
175
 
175
176
  </head>
176
177
 
@@ -222,6 +223,46 @@ import(process.cwd() + "/" + "testeranto.config.ts").then(async (module) => {
222
223
  // });
223
224
  // });
224
225
 
226
+ const x: [IRunTime, string[]][] = [
227
+ ["pure", Object.keys(importEntryPoints)],
228
+ ["node", Object.keys(nodeEntryPoints)],
229
+ ["web", Object.keys(webEntryPoints)],
230
+ ];
231
+
232
+ x.forEach(async ([runtime, keys]) => {
233
+ keys.forEach(async (k) => {
234
+ const folder = `testeranto/reports/${testName}/${k
235
+ .split(".")
236
+ .slice(0, -1)
237
+ .join(".")}/${runtime}`;
238
+
239
+ await fs.mkdirSync(folder, { recursive: true });
240
+ fs.writeFileSync(
241
+ `${folder}/index.html`,
242
+ `
243
+ <!DOCTYPE html>
244
+ <html lang="en">
245
+
246
+ <head>
247
+ <meta name="description" content="Webpage description goes here" />
248
+ <meta charset="utf-8" />
249
+ <title>${testName} - testeranto</title>
250
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
251
+ <meta name="author" content="" />
252
+
253
+ <link rel="stylesheet" href="../../../../../TestReport.css" />
254
+ <script src="../../../../../TestReport.js"></script>
255
+
256
+ </head>
257
+
258
+ <body>
259
+ <div id="root"/>
260
+ </body>
261
+ `
262
+ );
263
+ });
264
+ });
265
+
225
266
  await Promise.all([
226
267
  ...(
227
268
  [