testeranto 0.74.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 +8 -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
@@ -1,8 +1,8 @@
1
1
  import readline from "readline";
2
2
  import fs from "fs";
3
- import path from "path";
4
3
  import { jsonc } from "jsonc";
5
4
  import { PM_Main } from "./PM/main.js";
5
+ import { destinationOfRuntime } from "./utils.js";
6
6
  var mode = process.argv[2] === "-dev" ? "DEV" : "PROD";
7
7
  const node2web = {};
8
8
  const web2node = {};
@@ -23,18 +23,20 @@ const main = async () => {
23
23
  waitForInitialPage: false,
24
24
  executablePath: "/opt/homebrew/bin/chromium",
25
25
  headless: true,
26
- dumpio: true,
26
+ // dumpio: true,
27
27
  args: [
28
+ "--disable-features=IsolateOrigins,site-per-process",
29
+ "--disable-site-isolation-trials",
30
+ "--allow-insecure-localhost",
28
31
  "--allow-file-access-from-files",
29
32
  "--allow-running-insecure-content",
30
- "--auto-open-devtools-for-tabs",
33
+ // "--auto-open-devtools-for-tabs",
31
34
  "--disable-dev-shm-usage",
32
35
  "--disable-extensions",
33
36
  "--disable-gpu",
34
37
  "--disable-setuid-sandbox",
35
38
  "--disable-site-isolation-trials",
36
39
  "--disable-web-security",
37
- "--disable-web-security",
38
40
  "--no-first-run",
39
41
  "--no-sandbox",
40
42
  "--no-startup-window",
@@ -53,19 +55,12 @@ const main = async () => {
53
55
  // "--start-maximized",
54
56
  ],
55
57
  }, ".");
56
- const destinationOfRuntime = (f, r) => {
57
- return path
58
- .normalize(`${configs.buildDir}/${r}/${f}`)
59
- .split(".")
60
- .slice(0, -1)
61
- .join(".");
62
- };
63
- configs.tests.forEach(([test, runtime, secondaryArtifacts]) => {
58
+ configs.tests.forEach(([test, runtime, tr, sidecars]) => {
64
59
  if (runtime === "node") {
65
- pm.launchNode(test, destinationOfRuntime(test, "node"));
60
+ pm.launchNode(test, destinationOfRuntime(test, "node", configs));
66
61
  }
67
62
  else if (runtime === "web") {
68
- pm.launchWeb(test, destinationOfRuntime(test, "web"));
63
+ pm.launchWeb(test, destinationOfRuntime(test, "web", configs), sidecars);
69
64
  }
70
65
  else {
71
66
  console.error("runtime makes no sense", runtime);
@@ -76,7 +71,7 @@ const main = async () => {
76
71
  recursive: true,
77
72
  }, (eventType, changedFile) => {
78
73
  if (changedFile) {
79
- configs.tests.forEach(([test, runtime, secondaryArtifacts]) => {
74
+ configs.tests.forEach(([test, runtime, tr, sidecars]) => {
80
75
  if (eventType === "change" || eventType === "rename") {
81
76
  if (changedFile ===
82
77
  test
@@ -85,7 +80,7 @@ const main = async () => {
85
80
  .slice(0, -1)
86
81
  .concat("mjs")
87
82
  .join(".")) {
88
- pm.launchNode(test, destinationOfRuntime(test, "node"));
83
+ pm.launchNode(test, destinationOfRuntime(test, "node", configs));
89
84
  }
90
85
  if (changedFile ===
91
86
  test
@@ -94,7 +89,7 @@ const main = async () => {
94
89
  .slice(0, -1)
95
90
  .concat("mjs")
96
91
  .join(".")) {
97
- pm.launchWeb(test, destinationOfRuntime(test, "web"));
92
+ pm.launchWeb(test, destinationOfRuntime(test, "web", configs), sidecars);
98
93
  }
99
94
  }
100
95
  });
@@ -56,14 +56,7 @@ const main = async () => {
56
56
  const page = await browser.newPage();
57
57
  await page.setViewport({ width: 0, height: 0 });
58
58
  console.log("Requesting url...");
59
- await page.goto(`file://${process.cwd()}/docs/report.html`);
60
- // const destinationOfRuntime = (f: string, r: IRunTime) => {
61
- // return path
62
- // .normalize(`${configs.buildDir}/${r}/${f}`)
63
- // .split(".")
64
- // .slice(0, -1)
65
- // .join(".");
66
- // };
59
+ await page.goto(`file://${process.cwd()}/docs/report.html?local=true`);
67
60
  // configs.tests.forEach(([test, runtime, secondaryArtifacts]) => {
68
61
  // if (runtime === "node") {
69
62
  // pm.launchNode(test, destinationOfRuntime(test, "node"));
@@ -1,7 +1,7 @@
1
1
  import { createElement } from "react";
2
2
  import ReactDom from "react-dom/client";
3
3
  import Testeranto from "../../../Web.js";
4
- export default (testInput, testSpecifications, testImplementations) => {
4
+ export default (testInput, testSpecifications, testImplementations, testInterface) => {
5
5
  class TesterantoComponent extends testInput {
6
6
  constructor(props) {
7
7
  super(props);
@@ -14,7 +14,6 @@ export default (testInput, testSpecifications, testImplementations) => {
14
14
  }
15
15
  const t = Testeranto(testInput, testSpecifications, testImplementations, {
16
16
  beforeAll: async (initialProps, artificer) => {
17
- console.log("mark5", initialProps);
18
17
  return await new Promise((resolve, rej) => {
19
18
  const htmlElement = document.getElementById("root");
20
19
  if (htmlElement) {
@@ -66,29 +65,10 @@ export default (testInput, testSpecifications, testImplementations) => {
66
65
  butThen: async function (s, thenCB) {
67
66
  return thenCB(s);
68
67
  },
69
- afterEach: async function (store, ndx, artificer, utils) {
70
- console.log("afterEach", store);
71
- utils.writeFileSync("aftereachlog", store.toString());
72
- const page = (await utils.browser.pages()).filter((x) => {
73
- const parsedUrl = new URL(x.url());
74
- parsedUrl.search = "";
75
- const strippedUrl = parsedUrl.toString();
76
- return (strippedUrl ===
77
- "file:///Users/adam/Code/kokomoBay/docs/web/src/ClassicalComponent/react-dom/client.web.test.html");
78
- // return true;
79
- })[0];
80
- const x = await page.screenshot({
81
- path: "afterEachLog.jpg",
82
- });
83
- console.log("x", x);
84
- // debugger;
85
- // const div_root = document.getElementById("root");
86
- // store.domRoot && store.domRoot.unmount(); //React 18
87
- // store.remove();
88
- // store.htmlElement.remove();
89
- // store.htmlElement = document.createElement("root");
90
- return store;
91
- },
68
+ afterEach: (testInterface === null || testInterface === void 0 ? void 0 : testInterface.afterEach) ||
69
+ async function (store, ndx, artificer, utils) {
70
+ return store;
71
+ },
92
72
  afterAll: async (store, artificer, utils) => {
93
73
  // setTimeout(() => {
94
74
  // console.log("This will run after 1 second");
@@ -1,65 +1,90 @@
1
1
  import React, { useEffect, useRef } from "react";
2
+ import { createElement } from "react";
3
+ import ReactDom from "react-dom/client";
2
4
  import { createPortal } from "react-dom";
3
5
  import Testeranto from "../../../Web.js";
4
6
  export default (testImplementations, testSpecifications, testInput) => {
5
- document.addEventListener("DOMContentLoaded", function () {
6
- const rootElement = document.getElementById("root");
7
- if (rootElement) {
8
- const TesterantoComponent = function ({ done, innerComp, }) {
9
- const myContainer = useRef(null);
10
- useEffect(() => {
11
- console.log("useEffect called", myContainer.current);
12
- done(myContainer.current);
13
- }, []);
14
- return React.createElement("div", { ref: myContainer }, innerComp());
15
- };
16
- Testeranto(testInput, testSpecifications, testImplementations, {
17
- beforeAll: async (input, artificer) => {
18
- return await new Promise((resolve, rej) => {
19
- resolve(rootElement);
20
- });
21
- },
22
- beforeEach: async (subject, ndx, testRsource, artificer) => {
23
- return new Promise((resolve, rej) => {
24
- createPortal(TesterantoComponent({
25
- innerComp: testInput,
26
- done: (reactElement) => {
27
- process.nextTick(() => {
28
- resolve(reactElement);
29
- });
30
- },
31
- }), rootElement);
32
- });
33
- },
34
- andWhen: function (s, whenCB) {
35
- return new Promise((resolve, rej) => {
36
- process.nextTick(() => {
37
- resolve(whenCB()(s));
38
- });
39
- });
40
- },
41
- butThen: async function (s) {
42
- return new Promise((resolve, rej) => {
43
- process.nextTick(() => {
44
- resolve(s);
45
- });
46
- });
47
- },
48
- afterEach: async function (store, ndx, artificer) {
49
- return new Promise((resolve, rej) => {
50
- process.nextTick(() => {
51
- resolve({});
52
- });
53
- });
54
- },
55
- afterAll: (store, artificer) => {
56
- return new Promise((resolve, rej) => {
7
+ console.log("testInput", testInput);
8
+ const TesterantoComponent = function ({ done, innerComp, }) {
9
+ const myContainer = useRef(null);
10
+ useEffect(() => {
11
+ console.log("useEffect called!", myContainer.current);
12
+ done(myContainer.current);
13
+ }, []);
14
+ // debugger;
15
+ return React.createElement("div", { ref: myContainer }, innerComp());
16
+ };
17
+ const t = Testeranto(testInput, testSpecifications, testImplementations, {
18
+ beforeAll: async (reactElement, itr) => {
19
+ return await new Promise((resolve, rej) => {
20
+ const htmlElement = document.getElementById("root");
21
+ if (htmlElement) {
22
+ const domRoot = ReactDom.createRoot(htmlElement);
23
+ domRoot.render(createElement(TesterantoComponent, {
24
+ // ...initialProps,
25
+ innerComp: reactElement,
26
+ done: (reactElement) => {
27
+ resolve({
28
+ htmlElement,
29
+ reactElement,
30
+ domRoot,
31
+ });
32
+ },
33
+ }, []));
34
+ // resolve({ htmlElement });
35
+ }
36
+ });
37
+ },
38
+ beforeEach: async (subject, initializer, artificer, testResource, pm) => {
39
+ return new Promise((resolve, rej) => {
40
+ createPortal(TesterantoComponent({
41
+ innerComp: () => testInput({
42
+ port: 3003,
43
+ address: "some-address",
44
+ secretKey: "someSecretKey",
45
+ abi: "foo",
46
+ }),
47
+ done: (reactElement) => {
57
48
  process.nextTick(() => {
58
- resolve({});
49
+ resolve(reactElement);
59
50
  });
60
- });
61
- },
51
+ },
52
+ }), subject.domRoot);
53
+ });
54
+ },
55
+ andWhen: function (s, whenCB) {
56
+ return new Promise((resolve, rej) => {
57
+ process.nextTick(() => {
58
+ resolve(whenCB()(s));
59
+ });
60
+ });
61
+ },
62
+ butThen: async function (s) {
63
+ return new Promise((resolve, rej) => {
64
+ process.nextTick(() => {
65
+ resolve(s);
66
+ });
67
+ });
68
+ },
69
+ afterEach: async function (store, ndx, artificer) {
70
+ return new Promise((resolve, rej) => {
71
+ process.nextTick(() => {
72
+ resolve({});
73
+ });
74
+ });
75
+ },
76
+ afterAll: (store, artificer) => {
77
+ return new Promise((resolve, rej) => {
78
+ process.nextTick(() => {
79
+ resolve({});
80
+ });
62
81
  });
82
+ },
83
+ });
84
+ document.addEventListener("DOMContentLoaded", function () {
85
+ const rootElement = document.getElementById("root");
86
+ if (rootElement) {
63
87
  }
64
88
  });
89
+ return t;
65
90
  };
@@ -1,59 +1 @@
1
- import React from "react";
2
- import renderer, { act } from "react-test-renderer";
3
- // export const testInterface = {
4
- // beforeEach: function (CComponent, props): Promise<renderer.ReactTestRenderer> {
5
- // return new Promise((res, rej) => {
6
- // let component: renderer.ReactTestRenderer;
7
- // act(() => {
8
- // component = renderer.create(
9
- // CComponent(props)
10
- // );
11
- // res(component);
12
- // });
13
- // });
14
- // },
15
- // andWhen: async function (
16
- // renderer: renderer.ReactTestRenderer,
17
- // whenCB: () => (any) => any
18
- // ): Promise<renderer.ReactTestRenderer> {
19
- // await act(() => whenCB()(renderer));
20
- // return renderer
21
- // }
22
- // }
23
- export const testInterface = {
24
- beforeEach: function (CComponent, propsAndChildren) {
25
- function Link(props) {
26
- const p = props.props;
27
- const c = props.children;
28
- return React.createElement(CComponent, p, c);
29
- }
30
- return new Promise((res, rej) => {
31
- act(async () => {
32
- const p = propsAndChildren;
33
- const y = new CComponent(p.props);
34
- const testRenderer = await renderer.create(Link(propsAndChildren));
35
- res(testRenderer);
36
- });
37
- });
38
- },
39
- andWhen: async function (renderer, whenCB) {
40
- // console.log("andWhen", whenCB)
41
- await act(() => whenCB(renderer));
42
- return renderer;
43
- },
44
- // andWhen: function (s: Store, whenCB): Promise<Selection> {
45
- // return whenCB()(s);
46
- // },
47
- butThen: async function (s, thenCB, tr) {
48
- console.log("butThen", thenCB.toString());
49
- return thenCB(s);
50
- },
51
- afterEach: async function (store, ndx, artificer) {
52
- // console.log("afterEach", store);
53
- return {};
54
- },
55
- afterAll: (store, artificer) => {
56
- // console.log("afterAll", store);
57
- return;
58
- },
59
- };
1
+ export {};
@@ -0,0 +1,39 @@
1
+ import React from "react";
2
+ import renderer, { act } from "react-test-renderer";
3
+ export const testInterface = {
4
+ beforeEach: function (CComponent, propsAndChildren) {
5
+ function Link(props) {
6
+ const p = props.props;
7
+ const c = props.children;
8
+ return React.createElement(CComponent, p, c);
9
+ }
10
+ return new Promise((res, rej) => {
11
+ act(async () => {
12
+ const p = propsAndChildren;
13
+ const y = new CComponent(p.props);
14
+ const testRenderer = await renderer.create(Link(propsAndChildren));
15
+ res(testRenderer);
16
+ });
17
+ });
18
+ },
19
+ andWhen: async function (renderer, whenCB) {
20
+ // console.log("andWhen", whenCB)
21
+ await act(() => whenCB(renderer));
22
+ return renderer;
23
+ },
24
+ // andWhen: function (s: Store, whenCB): Promise<Selection> {
25
+ // return whenCB()(s);
26
+ // },
27
+ butThen: async function (s, thenCB, tr) {
28
+ console.log("butThen", thenCB.toString());
29
+ return thenCB(s);
30
+ },
31
+ afterEach: async function (store, ndx, artificer) {
32
+ // console.log("afterEach", store);
33
+ return {};
34
+ },
35
+ afterAll: (store, artificer) => {
36
+ // console.log("afterAll", store);
37
+ return;
38
+ },
39
+ };
@@ -1,3 +1,3 @@
1
1
  import Testeranto from "../../../Node.js";
2
- import { testInterface } from "./index.js";
2
+ import { testInterface } from "./interface.js";
3
3
  export default (testImplementations, testSpecifications, testInput) => Testeranto(testInput, testSpecifications, testImplementations, testInterface);
@@ -1,3 +1,3 @@
1
1
  import Testeranto from "../../../Web.js";
2
- import { testInterface } from "./index.js";
2
+ import { testInterface } from "./interface";
3
3
  export default (testImplementations, testSpecifications, testInput) => Testeranto(testInput, testSpecifications, testImplementations, testInterface);
@@ -0,0 +1,151 @@
1
+ import express from "express";
2
+ import { MongoClient } from "mongodb";
3
+ import mongoose from "mongoose";
4
+ import path from "path";
5
+ import fs from "fs";
6
+ import { ganttSchema, kanbanSchema, userSchema, featuresSchema, RoomSchema, HuddleSchema, channelsFeature, chatCatMessageSchema, } from "./mongooseSchemas";
7
+ // export const chatChannel = new mongoose.Schema<IChatChannel>({
8
+ // // name: { type: String, required: true },
9
+ // users: [
10
+ // {
11
+ // type: mongoose.Schema.Types.ObjectId,
12
+ // ref: "User",
13
+ // required: true,
14
+ // },
15
+ // ],
16
+ // });
17
+ const app = express();
18
+ const port = 3000;
19
+ function findTextFiles(dir, fileList = []) {
20
+ const files = fs.readdirSync(dir);
21
+ for (const file of files) {
22
+ const filePath = path.join(dir, file);
23
+ const fileStat = fs.statSync(filePath);
24
+ if (fileStat.isDirectory() && file !== "node_modules") {
25
+ findTextFiles(filePath, fileList); // Recursive call for subdirectories
26
+ }
27
+ else if (path.extname(file) === ".txt") {
28
+ fileList.push(filePath);
29
+ }
30
+ else if (path.extname(file) === ".md") {
31
+ fileList.push(filePath);
32
+ }
33
+ }
34
+ return fileList;
35
+ }
36
+ function listToTree(fileList) {
37
+ const root = {
38
+ name: "root",
39
+ children: [],
40
+ };
41
+ for (const path of fileList) {
42
+ const parts = path.split("/");
43
+ let current = root;
44
+ for (let i = 0; i < parts.length; i++) {
45
+ const part = parts[i];
46
+ if (!part)
47
+ continue; // Skip empty parts (e.g., from leading '/')
48
+ let child = current.children.find((c) => c.name === part);
49
+ if (!child) {
50
+ child = { name: part, children: [] };
51
+ current.children.push(child);
52
+ }
53
+ current = child;
54
+ }
55
+ }
56
+ return root.children;
57
+ }
58
+ new MongoClient(`mongodb://localhost:27017`).connect().then(async (conn) => {
59
+ const db = conn.db("taskman");
60
+ await mongoose.connect("mongodb://127.0.0.1:27017/taskman");
61
+ const usersModel = mongoose.model("User", userSchema);
62
+ const kanbanModel = mongoose.model("Kanban", kanbanSchema);
63
+ const ganttModel = mongoose.model("Gantt", ganttSchema);
64
+ const featuresModel = mongoose.model("Features", featuresSchema);
65
+ // const roomsModel = mongoose.model<any>("Rooms", RoomSchema);
66
+ // const huddleModdle = mongoose.model<any>("Huddles", HuddleSchema);
67
+ const MessagesModel = mongoose.model("Messages", chatCatMessageSchema);
68
+ const ChatChannel = mongoose.model("ChatChannel", channelsFeature);
69
+ const huddleModdle = ChatChannel.discriminator("Huddle", HuddleSchema);
70
+ const roomsModel = ChatChannel.discriminator("Room", RoomSchema);
71
+ app.get(`/preMergeCheck`, async (req, res) => {
72
+ const commit = req.params["commit"];
73
+ // res.json(await keyedModels[key].find({}));
74
+ });
75
+ app.get("/TaskManFrontend.js", (req, res) => {
76
+ res.sendFile(`${process.cwd()}/node_modules/testeranto/dist/prebuild/TaskManFrontEnd.js`);
77
+ });
78
+ app.get("/TaskManFrontEnd.css", (req, res) => {
79
+ res.sendFile(`${process.cwd()}/node_modules/testeranto/dist/prebuild/TaskManFrontEnd.css`);
80
+ });
81
+ app.get("/testeranto.json", (req, res) => {
82
+ res.sendFile(`${process.cwd()}/docs/testeranto.json`);
83
+ });
84
+ app.get("/", (req, res) => {
85
+ res.send(`<!DOCTYPE html>
86
+ <html lang="en">
87
+
88
+ <head>
89
+ <meta name="description" content="Webpage description goes here" />
90
+ <meta charset="utf-8" />
91
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
92
+ <meta name="author" content="" />
93
+
94
+ <title>TaskMan</title>
95
+
96
+ <link rel="stylesheet" href="/TaskManFrontEnd.css" />
97
+ <script type="module" src="/TaskManFrontEnd.js"></script>
98
+ </head>
99
+
100
+ <body><div id="root">react is loading</div></body>
101
+
102
+ </html>`);
103
+ });
104
+ app.listen(port, () => {
105
+ console.log(`Example app listening on port ${port}`);
106
+ });
107
+ ///////////////////////////////////////////////
108
+ const keyedModels = {
109
+ users: usersModel,
110
+ kanbans: kanbanModel,
111
+ features: featuresModel,
112
+ gantts: ganttModel,
113
+ rooms: roomsModel,
114
+ huddles: huddleModdle,
115
+ messages: MessagesModel,
116
+ };
117
+ Object.keys(keyedModels).forEach((key) => {
118
+ app.get(`/${key}.json`, async (req, res) => {
119
+ console.log("GET", key, keyedModels[key]);
120
+ res.json(await keyedModels[key].find({}));
121
+ });
122
+ app.get(`/${key}/:id.json`, async (req, res) => {
123
+ res.json(await keyedModels[key].find({ id: { $eq: req.params["id"] } }).toArray());
124
+ });
125
+ app.post(`/${key}/:id.json`, async (req, res) => {
126
+ res.json(await keyedModels[key].find({ id: { $eq: req.params["id"] } }).toArray());
127
+ });
128
+ app.post(`/${key}.json`, async (req, res) => {
129
+ res.json(await keyedModels[key].find({ id: { $eq: req.params["id"] } }).toArray());
130
+ });
131
+ });
132
+ app.use("/docs", express.static(path.join(process.cwd(), "docs")));
133
+ app.get("/docGal/fs.json", (req, res) => {
134
+ const directoryPath = "./"; // Replace with the desired directory path
135
+ // const textFiles = findTextFiles(directoryPath);
136
+ res.json(listToTree(findTextFiles(directoryPath)));
137
+ // res.send(`<!DOCTYPE html>
138
+ // <html lang="en">
139
+ // <head>
140
+ // <meta name="description" content="Webpage description goes here" />
141
+ // <meta charset="utf-8" />
142
+ // <meta name="viewport" content="width=device-width, initial-scale=1" />
143
+ // <meta name="author" content="" />
144
+ // <title>TaskMan</title>
145
+ // <link rel="stylesheet" href="/TaskManFrontEnd.css" />
146
+ // <script type="module" src="/TaskManFrontEnd.js"></script>
147
+ // </head>
148
+ // <body><div id="root">react is loading</div></body>
149
+ // </html>`);
150
+ });
151
+ });