testeranto 0.94.0 → 0.110.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.
- package/README.md +1 -0
- package/bundle.js +80 -33
- package/dist/common/{src/Init.js → Init.js} +28 -0
- package/dist/common/{src/PM → PM}/main.js +272 -111
- package/dist/common/{src/PM → PM}/node.js +20 -5
- package/dist/common/{src/PM → PM}/web.js +19 -4
- package/dist/common/ReportServer.js +22 -0
- package/dist/common/{src/SubPackages → SubPackages}/react/jsx/index.js +0 -12
- package/dist/common/{src/SubPackages → SubPackages}/react/jsx/node.js +1 -6
- package/dist/common/{src/SubPackages → SubPackages}/react-dom/component/node.js +3 -16
- package/dist/common/{src/SubPackages → SubPackages}/react-dom/component/web.js +3 -3
- package/dist/common/{src/SubPackages → SubPackages}/react-dom/jsx/node.js +1 -1
- package/dist/common/{src/SubPackages → SubPackages}/react-dom/jsx/web.js +41 -30
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/MemoExoticComponent/node.js +17 -7
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/component/interface.js +17 -7
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/fc/node.js +17 -7
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/fc/web.js +17 -7
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/jsx/index.js +18 -14
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/jsx-promised/index.js +17 -7
- package/dist/common/build.js +222 -0
- package/dist/common/{src/defaultConfig.js → defaultConfig.js} +1 -0
- package/dist/common/esbuildConfigs/eslint-formatter-testeranto.js +6 -0
- package/dist/common/esbuildConfigs/inputFilesPlugin.js +27 -0
- package/dist/common/{src/esbuildConfigs → esbuildConfigs}/node.js +3 -14
- package/dist/common/{src/esbuildConfigs → esbuildConfigs}/web.js +3 -14
- package/dist/common/{src/init-docs.js → init-docs.js} +20 -10
- package/dist/common/{src/lib → lib}/abstractBase.js +20 -92
- package/dist/common/{src/lib → lib}/basebuilder.js +23 -10
- package/dist/common/{src/lib → lib}/classBuilder.js +1 -3
- package/dist/common/{src/lib → lib}/core.js +26 -10
- package/dist/common/{src/lib → lib}/index.js +0 -1
- package/dist/common/run.js +297 -0
- package/dist/common/tsconfig.common.tsbuildinfo +1 -1
- package/dist/common/utils.js +43 -0
- package/dist/module/Footer.js +4 -0
- package/dist/module/Init.js +63 -0
- package/dist/module/{src/PM → PM}/main.js +253 -102
- package/dist/module/{src/PM → PM}/node.js +20 -5
- package/dist/module/{src/PM → PM}/web.js +19 -4
- package/dist/module/ReportClient.js +97 -0
- package/dist/module/ReportServer.js +17 -0
- package/dist/module/SubPackages/react/jsx/index.js +15 -0
- package/dist/module/{src/SubPackages → SubPackages}/react/jsx/node.js +1 -6
- package/dist/module/{src/SubPackages → SubPackages}/react-dom/component/node.js +3 -16
- package/dist/module/{src/SubPackages → SubPackages}/react-dom/component/web.js +3 -3
- package/dist/module/{src/SubPackages → SubPackages}/react-dom/jsx/node.js +3 -3
- package/dist/module/{src/SubPackages → SubPackages}/react-dom/jsx/web.js +24 -23
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/jsx/index.js +1 -7
- package/dist/module/TestReport.js +91 -0
- package/dist/module/build.js +184 -0
- package/dist/module/{src/defaultConfig.js → defaultConfig.js} +1 -0
- package/dist/module/esbuildConfigs/eslint-formatter-testeranto.js +3 -0
- package/dist/module/esbuildConfigs/inputFilesPlugin.js +22 -0
- package/dist/module/{src/esbuildConfigs → esbuildConfigs}/node.js +3 -14
- package/dist/module/{src/esbuildConfigs → esbuildConfigs}/web.js +3 -14
- package/dist/module/{src/init-docs.js → init-docs.js} +1 -1
- package/dist/module/{src/lib → lib}/abstractBase.js +20 -92
- package/dist/module/{src/lib → lib}/basebuilder.js +23 -10
- package/dist/module/{src/lib → lib}/classBuilder.js +1 -3
- package/dist/module/{src/lib → lib}/core.js +26 -10
- package/dist/module/{src/lib → lib}/index.js +0 -1
- package/dist/module/run.js +259 -0
- package/dist/module/tsconfig.module.tsbuildinfo +1 -1
- package/dist/module/utils.js +29 -0
- package/dist/prebuild/ReportClient.css +11367 -0
- package/dist/prebuild/ReportClient.js +23641 -0
- package/dist/prebuild/ReportServer.mjs +16 -0
- package/dist/prebuild/TestReport.css +11367 -0
- package/dist/prebuild/TestReport.js +27484 -0
- package/dist/prebuild/build.mjs +376 -0
- package/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs +9 -0
- package/dist/prebuild/init-docs.mjs +64 -8
- package/dist/prebuild/{run-tests.mjs → run.mjs} +501 -182
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/Node.d.ts +12 -0
- package/dist/types/{src/PM → PM}/index.d.ts +11 -3
- package/dist/types/{src/PM → PM}/main.d.ts +24 -15
- package/dist/types/{src/PM → PM}/node.d.ts +11 -6
- package/dist/types/{src/PM → PM}/web.d.ts +11 -7
- package/dist/types/SubPackages/react/component/node.d.ts +7 -0
- package/dist/types/SubPackages/react/component/web.d.ts +7 -0
- package/dist/types/SubPackages/react/jsx/index.d.ts +12 -0
- package/dist/types/SubPackages/react/jsx/node.d.ts +4 -0
- package/dist/types/SubPackages/react/jsx/web.d.ts +4 -0
- package/dist/types/SubPackages/react-dom/component/node.d.ts +11 -0
- package/dist/types/SubPackages/react-dom/component/web.d.ts +20 -0
- package/dist/types/SubPackages/react-dom/jsx/index.d.ts +6 -0
- package/dist/types/SubPackages/react-dom/jsx/node.d.ts +7 -0
- package/dist/types/SubPackages/react-dom/jsx/web.d.ts +5 -0
- package/dist/types/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +6 -0
- package/dist/types/SubPackages/react-test-renderer/component/index.d.ts +13 -0
- package/dist/types/SubPackages/react-test-renderer/component/node.d.ts +4 -0
- package/dist/types/SubPackages/react-test-renderer/component/web.d.ts +4 -0
- package/dist/types/SubPackages/react-test-renderer/fc/node.d.ts +8 -0
- package/dist/types/SubPackages/react-test-renderer/fc/web.d.ts +9 -0
- package/dist/types/SubPackages/react-test-renderer/jsx/index.d.ts +16 -0
- package/dist/types/SubPackages/react-test-renderer/jsx/node.d.ts +9 -0
- package/dist/types/SubPackages/react-test-renderer/jsx/web.d.ts +9 -0
- package/dist/types/SubPackages/react-test-renderer/jsx-promised/index.d.ts +15 -0
- package/dist/types/SubPackages/react-test-renderer/jsx-promised/node.d.ts +5 -0
- package/dist/types/SubPackages/react-test-renderer/jsx-promised/web.d.ts +5 -0
- package/dist/types/Types.d.ts +61 -0
- package/dist/types/Web.d.ts +9 -0
- package/dist/types/defaultConfig.d.ts +3 -0
- package/dist/types/esbuildConfigs/eslint-formatter-testeranto.d.ts +2 -0
- package/dist/types/{src/esbuildConfigs → esbuildConfigs}/index.d.ts +1 -1
- package/dist/types/{src/esbuildConfigs → esbuildConfigs}/inputFilesPlugin.d.ts +0 -1
- package/dist/types/{src/esbuildConfigs → esbuildConfigs}/node.d.ts +1 -1
- package/dist/types/{src/esbuildConfigs → esbuildConfigs}/web.d.ts +1 -1
- package/dist/types/lib/abstractBase.d.ts +110 -0
- package/dist/types/lib/basebuilder.d.ts +27 -0
- package/dist/types/lib/classBuilder.d.ts +7 -0
- package/dist/types/lib/core.d.ts +7 -0
- package/dist/types/lib/index.d.ts +83 -0
- package/dist/types/lib/types.d.ts +14 -0
- package/dist/types/run.d.ts +1 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/types/utils.d.ts +9 -0
- package/package.json +50 -39
- package/src/Footer.tsx +4 -0
- package/src/Init.ts +48 -0
- package/src/Node.ts +23 -17
- package/src/PM/index.ts +13 -9
- package/src/PM/main.ts +337 -139
- package/src/PM/node.ts +43 -8
- package/src/PM/web.ts +34 -6
- package/src/ReportClient.tsx +155 -0
- package/src/ReportServer.ts +21 -0
- package/src/SubPackages/react/component/node.ts +68 -24
- package/src/SubPackages/react/component/web.ts +68 -25
- package/src/SubPackages/react/jsx/index.ts +39 -18
- package/src/SubPackages/react/jsx/node.ts +23 -10
- package/src/SubPackages/react/jsx/web.ts +27 -14
- package/src/SubPackages/react-dom/component/node.ts +42 -50
- package/src/SubPackages/react-dom/component/web.ts +28 -10
- package/src/SubPackages/react-dom/jsx/node.ts +54 -56
- package/src/SubPackages/react-dom/jsx/web.ts +55 -42
- package/src/SubPackages/react-test-renderer/MemoExoticComponent/node.ts +23 -7
- package/src/SubPackages/react-test-renderer/component/index.ts +38 -5
- package/src/SubPackages/react-test-renderer/component/node.ts +24 -5
- package/src/SubPackages/react-test-renderer/component/web.ts +22 -5
- package/src/SubPackages/react-test-renderer/fc/node.ts +41 -7
- package/src/SubPackages/react-test-renderer/fc/web.ts +43 -11
- package/src/SubPackages/react-test-renderer/jsx/index.ts +39 -16
- package/src/SubPackages/react-test-renderer/jsx/node.ts +22 -5
- package/src/SubPackages/react-test-renderer/jsx/web.ts +22 -5
- package/src/SubPackages/react-test-renderer/jsx-promised/index.ts +39 -6
- package/src/SubPackages/react-test-renderer/jsx-promised/node.ts +27 -10
- package/src/SubPackages/react-test-renderer/jsx-promised/web.ts +26 -12
- package/src/TestReport.tsx +176 -0
- package/src/Types.ts +131 -129
- package/src/Web.ts +24 -18
- package/src/build.ts +240 -0
- package/src/defaultConfig.ts +2 -1
- package/src/esbuildConfigs/eslint-formatter-testeranto.ts +5 -0
- package/src/esbuildConfigs/featuresPlugin.ts +0 -1
- package/src/esbuildConfigs/index.ts +1 -1
- package/src/esbuildConfigs/inputFilesPlugin.ts +2 -114
- package/src/esbuildConfigs/node.ts +7 -19
- package/src/esbuildConfigs/web.ts +6 -21
- package/src/init-docs.ts +2 -1
- package/src/lib/abstractBase.ts +140 -195
- package/src/lib/basebuilder.ts +57 -45
- package/src/lib/classBuilder.ts +15 -15
- package/src/lib/core.ts +44 -35
- package/src/lib/index.ts +47 -98
- package/src/lib/readme.md +12 -0
- package/src/lib/types.ts +40 -231
- package/src/run.ts +398 -0
- package/src/style.css +8 -0
- package/src/utils.ts +74 -2
- package/tsc.log +106 -0
- package/Bundle.Dockerfile +0 -52
- package/bin/init-docs.js +0 -24
- package/dist/common/dist/module/src/Init.js +0 -40
- package/dist/common/src/Aider.js +0 -143
- package/dist/common/src/Project.js +0 -227
- package/dist/common/src/Puppeteer.js +0 -111
- package/dist/common/src/SubPackages/puppeteer.js +0 -21
- package/dist/common/src/build-tests.js +0 -39
- package/dist/common/src/esbuildConfigs/features.js +0 -14
- package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +0 -87
- package/dist/common/src/esbuildConfigs/report.js +0 -14
- package/dist/common/src/esbuildConfigs/tests.js +0 -13
- package/dist/common/src/run-tests.js +0 -39
- package/dist/common/src/utils.js +0 -16
- package/dist/common/testeranto.js +0 -15
- package/dist/module/src/Aider.js +0 -136
- package/dist/module/src/Init.js +0 -35
- package/dist/module/src/Project.js +0 -220
- package/dist/module/src/Puppeteer.js +0 -106
- package/dist/module/src/SubPackages/puppeteer.js +0 -16
- package/dist/module/src/SubPackages/react/jsx/index.js +0 -27
- package/dist/module/src/build-tests.js +0 -11
- package/dist/module/src/esbuildConfigs/features.js +0 -12
- package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +0 -82
- package/dist/module/src/esbuildConfigs/report.js +0 -14
- package/dist/module/src/esbuildConfigs/tests.js +0 -11
- package/dist/module/src/run-tests.js +0 -11
- package/dist/module/src/utils.js +0 -9
- package/dist/module/testeranto.js +0 -13
- package/dist/prebuild/build-tests.mjs +0 -553
- package/dist/types/dist/module/src/Init.d.ts +0 -2
- package/dist/types/src/Aider.d.ts +0 -1
- package/dist/types/src/Node.d.ts +0 -13
- package/dist/types/src/Project.d.ts +0 -12
- package/dist/types/src/Puppeteer.d.ts +0 -2
- package/dist/types/src/SubPackages/puppeteer.d.ts +0 -6
- package/dist/types/src/SubPackages/react/component/node.d.ts +0 -7
- package/dist/types/src/SubPackages/react/component/web.d.ts +0 -7
- package/dist/types/src/SubPackages/react/jsx/index.d.ts +0 -12
- package/dist/types/src/SubPackages/react/jsx/node.d.ts +0 -4
- package/dist/types/src/SubPackages/react/jsx/web.d.ts +0 -4
- package/dist/types/src/SubPackages/react-dom/component/node.d.ts +0 -12
- package/dist/types/src/SubPackages/react-dom/component/web.d.ts +0 -11
- package/dist/types/src/SubPackages/react-dom/jsx/index.d.ts +0 -7
- package/dist/types/src/SubPackages/react-dom/jsx/node.d.ts +0 -6
- package/dist/types/src/SubPackages/react-dom/jsx/web.d.ts +0 -5
- package/dist/types/src/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +0 -5
- package/dist/types/src/SubPackages/react-test-renderer/component/index.d.ts +0 -13
- package/dist/types/src/SubPackages/react-test-renderer/component/node.d.ts +0 -8
- package/dist/types/src/SubPackages/react-test-renderer/component/web.d.ts +0 -3
- package/dist/types/src/SubPackages/react-test-renderer/fc/node.d.ts +0 -8
- package/dist/types/src/SubPackages/react-test-renderer/fc/web.d.ts +0 -8
- package/dist/types/src/SubPackages/react-test-renderer/jsx/index.d.ts +0 -17
- package/dist/types/src/SubPackages/react-test-renderer/jsx/node.d.ts +0 -8
- package/dist/types/src/SubPackages/react-test-renderer/jsx/web.d.ts +0 -8
- package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/index.d.ts +0 -16
- package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/node.d.ts +0 -4
- package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/web.d.ts +0 -4
- package/dist/types/src/Types.d.ts +0 -51
- package/dist/types/src/Web.d.ts +0 -10
- package/dist/types/src/defaultConfig.d.ts +0 -3
- package/dist/types/src/esbuildConfigs/features.d.ts +0 -4
- package/dist/types/src/esbuildConfigs/report.d.ts +0 -0
- package/dist/types/src/esbuildConfigs/tests.d.ts +0 -4
- package/dist/types/src/lib/abstractBase.d.ts +0 -110
- package/dist/types/src/lib/basebuilder.d.ts +0 -27
- package/dist/types/src/lib/classBuilder.d.ts +0 -7
- package/dist/types/src/lib/core.d.ts +0 -8
- package/dist/types/src/lib/index.d.ts +0 -60
- package/dist/types/src/lib/types.d.ts +0 -68
- package/dist/types/src/utils.d.ts +0 -2
- package/dist/types/testeranto.d.ts +0 -16
- package/docker-compose.yml +0 -37
- package/src/Aider.ts +0 -168
- package/src/Project.ts +0 -292
- package/src/Puppeteer.ts +0 -143
- package/src/SubPackages/puppeteer.ts +0 -51
- package/src/build-tests.ts +0 -12
- package/src/esbuildConfigs/features.ts +0 -17
- package/src/esbuildConfigs/report.ts +0 -15
- package/src/esbuildConfigs/tests.ts +0 -14
- package/src/run-tests.ts +0 -12
- package/testeranto.ts +0 -13
- package/dist/common/{src/Node.js → Node.js} +0 -0
- package/dist/common/{src/PM → PM}/index.js +0 -0
- package/dist/common/{src/SubPackages → SubPackages}/react/component/node.js +0 -0
- package/dist/common/{src/SubPackages → SubPackages}/react/component/web.js +0 -0
- package/dist/common/{src/SubPackages → SubPackages}/react/jsx/web.js +0 -0
- package/dist/common/{src/SubPackages → SubPackages}/react-dom/jsx/index.js +0 -0
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/component/index.js +0 -0
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/component/node.js +0 -0
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/component/web.js +0 -0
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/jsx/node.js +0 -0
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/jsx/web.js +0 -0
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/jsx-promised/node.js +1 -1
- package/dist/common/{src/SubPackages → SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
- package/dist/common/{src/Types.js → Types.js} +0 -0
- package/dist/common/{src/Web.js → Web.js} +0 -0
- package/dist/common/{src/esbuildConfigs → esbuildConfigs}/featuresPlugin.js +0 -0
- package/dist/common/{src/esbuildConfigs → esbuildConfigs}/index.js +0 -0
- package/dist/common/{src/lib → lib}/types.js +0 -0
- package/dist/common/{src/puppeteerConfiger.js → puppeteerConfiger.js} +0 -0
- package/dist/common/{src/web.html.js → web.html.js} +0 -0
- package/dist/module/{src/Node.js → Node.js} +0 -0
- package/dist/module/{src/PM → PM}/index.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react/component/node.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react/component/web.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react/jsx/web.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-dom/jsx/index.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/MemoExoticComponent/node.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/component/index.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/component/interface.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/component/node.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/component/web.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/fc/node.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/fc/web.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/jsx/node.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/jsx/web.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/jsx-promised/index.js +0 -0
- package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/jsx-promised/node.js +1 -1
- /package/dist/module/{src/SubPackages → SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
- /package/dist/module/{src/Types.js → Types.js} +0 -0
- /package/dist/module/{src/Web.js → Web.js} +0 -0
- /package/dist/module/{src/esbuildConfigs → esbuildConfigs}/featuresPlugin.js +0 -0
- /package/dist/module/{src/esbuildConfigs → esbuildConfigs}/index.js +0 -0
- /package/dist/module/{src/lib → lib}/types.js +0 -0
- /package/dist/module/{src/puppeteerConfiger.js → puppeteerConfiger.js} +0 -0
- /package/dist/module/{src/web.html.js → web.html.js} +0 -0
- /package/dist/types/{src/Init.d.ts → Init.d.ts} +0 -0
- /package/dist/types/{src/build-tests.d.ts → ReportServer.d.ts} +0 -0
- /package/dist/types/{src/SubPackages → SubPackages}/react-test-renderer/component/interface.d.ts +0 -0
- /package/dist/types/{src/init-docs.d.ts → build.d.ts} +0 -0
- /package/dist/types/{src/esbuildConfigs → esbuildConfigs}/featuresPlugin.d.ts +0 -0
- /package/dist/types/{src/run-tests.d.ts → init-docs.d.ts} +0 -0
- /package/dist/types/{src/puppeteerConfiger.d.ts → puppeteerConfiger.d.ts} +0 -0
- /package/dist/types/{src/web.html.d.ts → web.html.d.ts} +0 -0
|
@@ -1,64 +1,149 @@
|
|
|
1
1
|
import { createRequire } from 'module';const require = createRequire(import.meta.url);
|
|
2
2
|
|
|
3
|
-
// src/
|
|
4
|
-
import
|
|
3
|
+
// src/run.ts
|
|
4
|
+
import ansiC2 from "ansi-colors";
|
|
5
|
+
import { watch } from "fs";
|
|
6
|
+
import path3 from "path";
|
|
7
|
+
import crypto from "node:crypto";
|
|
5
8
|
import fs2 from "fs";
|
|
6
|
-
import
|
|
9
|
+
import tsc from "tsc-prog";
|
|
10
|
+
import { ESLint } from "eslint";
|
|
11
|
+
import ts from "typescript";
|
|
12
|
+
import readline from "readline";
|
|
7
13
|
|
|
8
14
|
// src/PM/main.ts
|
|
9
15
|
import fs from "fs";
|
|
10
16
|
import path2 from "path";
|
|
11
17
|
import puppeteer from "puppeteer-core";
|
|
12
|
-
import
|
|
13
|
-
|
|
14
|
-
// src/PM/index.ts
|
|
15
|
-
var PM = class {
|
|
16
|
-
};
|
|
18
|
+
import ansiC from "ansi-colors";
|
|
17
19
|
|
|
18
20
|
// src/utils.ts
|
|
19
21
|
import path from "path";
|
|
20
|
-
var
|
|
21
|
-
return path.
|
|
22
|
+
var tscPather = (entryPoint, platform) => {
|
|
23
|
+
return path.join(
|
|
24
|
+
"./docs/",
|
|
25
|
+
platform,
|
|
26
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
27
|
+
`type_errors.txt`
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
var tscExitCodePather = (entryPoint, platform) => {
|
|
31
|
+
return path.join(
|
|
32
|
+
"./docs/",
|
|
33
|
+
platform,
|
|
34
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
35
|
+
`type_errors.txt`
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
var lintPather = (entryPoint, platform) => {
|
|
39
|
+
return path.join(
|
|
40
|
+
"./docs/",
|
|
41
|
+
platform,
|
|
42
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
43
|
+
`lint_errors.json`
|
|
44
|
+
);
|
|
45
|
+
};
|
|
46
|
+
var lintExitCodePather = (entryPoint, platform) => {
|
|
47
|
+
return path.join(
|
|
48
|
+
"./docs/",
|
|
49
|
+
platform,
|
|
50
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
51
|
+
`lint_errors.txt`
|
|
52
|
+
);
|
|
53
|
+
};
|
|
54
|
+
var bddExitCodePather = (entryPoint, platform) => {
|
|
55
|
+
return path.join(
|
|
56
|
+
"./docs/",
|
|
57
|
+
platform,
|
|
58
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
59
|
+
`bdd_errors.txt`
|
|
60
|
+
);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// src/PM/index.ts
|
|
64
|
+
var PM = class {
|
|
22
65
|
};
|
|
23
66
|
|
|
24
67
|
// src/PM/main.ts
|
|
25
68
|
var fileStreams3 = [];
|
|
26
69
|
var fPaths = [];
|
|
27
70
|
var files = {};
|
|
71
|
+
var recorders = {};
|
|
28
72
|
var screenshots = {};
|
|
73
|
+
var statusMessagePretty = (failures, test) => {
|
|
74
|
+
if (failures === 0) {
|
|
75
|
+
console.log(ansiC.green(ansiC.inverse(`> ${test} completed successfully`)));
|
|
76
|
+
} else {
|
|
77
|
+
console.log(ansiC.red(ansiC.inverse(`> ${test} failed ${failures} times`)));
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
async function writeFileAndCreateDir(filePath, data) {
|
|
81
|
+
const dirPath = path2.dirname(filePath);
|
|
82
|
+
try {
|
|
83
|
+
await fs.promises.mkdir(dirPath, { recursive: true });
|
|
84
|
+
await fs.appendFileSync(filePath, data);
|
|
85
|
+
} catch (error) {
|
|
86
|
+
console.error(`Error writing file: ${error}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function isValidUrl(string) {
|
|
90
|
+
try {
|
|
91
|
+
new URL(string);
|
|
92
|
+
return true;
|
|
93
|
+
} catch (err) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
29
97
|
var PM_Main = class extends PM {
|
|
30
98
|
constructor(configs) {
|
|
31
99
|
super();
|
|
32
100
|
this.shutdownMode = false;
|
|
101
|
+
this.bigBoard = {};
|
|
33
102
|
this.checkForShutdown = () => {
|
|
34
|
-
const anyRunning = Object.values(this.
|
|
103
|
+
const anyRunning = Object.values(this.bigBoard).filter((x) => x.status === "running").length > 0;
|
|
35
104
|
if (anyRunning) {
|
|
36
105
|
} else {
|
|
37
106
|
this.browser.disconnect().then(() => {
|
|
38
|
-
|
|
107
|
+
const final = {
|
|
108
|
+
timestamp: Date.now(),
|
|
109
|
+
tests: this.configs.tests.reduce((mm, t) => {
|
|
110
|
+
const bddErrors = fs.readFileSync(bddExitCodePather(t[0], t[1])).toString();
|
|
111
|
+
const lintErrors = fs.readFileSync(lintExitCodePather(t[0], t[1])).toString();
|
|
112
|
+
const typeErrors = fs.readFileSync(tscExitCodePather(t[0], t[1])).toString();
|
|
113
|
+
mm[t[0]] = {
|
|
114
|
+
bddErrors,
|
|
115
|
+
lintErrors,
|
|
116
|
+
typeErrors
|
|
117
|
+
};
|
|
118
|
+
return mm;
|
|
119
|
+
}, {})
|
|
120
|
+
};
|
|
121
|
+
const s = JSON.stringify(final, null, 2);
|
|
122
|
+
fs.writeFileSync("docs/summary.json", s);
|
|
123
|
+
console.log(ansiC.inverse("Goodbye"));
|
|
39
124
|
process.exit();
|
|
40
125
|
});
|
|
41
126
|
}
|
|
42
127
|
};
|
|
43
|
-
this.
|
|
44
|
-
this.
|
|
128
|
+
this.testIsNowRunning = (src) => {
|
|
129
|
+
this.bigBoard[src].status = "running";
|
|
45
130
|
};
|
|
46
|
-
this.
|
|
47
|
-
this.
|
|
131
|
+
this.testIsNowDone = (src) => {
|
|
132
|
+
this.bigBoard[src].status = "waiting";
|
|
48
133
|
if (this.shutdownMode) {
|
|
49
134
|
this.checkForShutdown();
|
|
50
135
|
}
|
|
51
136
|
};
|
|
52
137
|
this.launchNode = async (src, dest) => {
|
|
53
|
-
console.log(
|
|
54
|
-
this.
|
|
138
|
+
console.log(ansiC.green(ansiC.inverse(`! node, ${src}`)));
|
|
139
|
+
this.testIsNowRunning(src);
|
|
55
140
|
const destFolder = dest.replace(".mjs", "");
|
|
56
141
|
let argz = "";
|
|
57
142
|
const testConfig = this.configs.tests.find((t) => {
|
|
58
143
|
return t[0] === src;
|
|
59
144
|
});
|
|
60
145
|
if (!testConfig) {
|
|
61
|
-
console.
|
|
146
|
+
console.log(ansiC.inverse("missing test config! Exiting ungracefully!"));
|
|
62
147
|
process.exit(-1);
|
|
63
148
|
}
|
|
64
149
|
const testConfigResource = testConfig[2];
|
|
@@ -96,38 +181,19 @@ var PM_Main = class extends PM {
|
|
|
96
181
|
console.error("negative port makes no sense", src);
|
|
97
182
|
process.exit(-1);
|
|
98
183
|
}
|
|
99
|
-
const builtfile = dest
|
|
184
|
+
const builtfile = dest;
|
|
100
185
|
const webSideCares = [];
|
|
101
|
-
await Promise.all(
|
|
102
|
-
testConfig[3].map(async (sidecar) => {
|
|
103
|
-
if (sidecar[1] === "web") {
|
|
104
|
-
const s = await this.launchWebSideCar(
|
|
105
|
-
sidecar[0],
|
|
106
|
-
destinationOfRuntime(sidecar[0], "web", this.configs),
|
|
107
|
-
sidecar
|
|
108
|
-
);
|
|
109
|
-
webSideCares.push(s);
|
|
110
|
-
return s;
|
|
111
|
-
}
|
|
112
|
-
if (sidecar[1] === "node") {
|
|
113
|
-
return this.launchNodeSideCar(
|
|
114
|
-
sidecar[0],
|
|
115
|
-
destinationOfRuntime(sidecar[0], "node", this.configs),
|
|
116
|
-
sidecar
|
|
117
|
-
);
|
|
118
|
-
}
|
|
119
|
-
})
|
|
120
|
-
);
|
|
121
186
|
this.server[builtfile] = await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
|
|
122
187
|
return module.default.then((defaultModule) => {
|
|
123
188
|
defaultModule.receiveTestResourceConfig(argz).then(async ({ features, failed }) => {
|
|
124
|
-
this.receiveFeatures(features, destFolder);
|
|
125
|
-
|
|
189
|
+
this.receiveFeatures(features, destFolder, src);
|
|
190
|
+
statusMessagePretty(failed, src);
|
|
191
|
+
this.receiveExitCode(src, failed);
|
|
126
192
|
}).catch((e) => {
|
|
127
|
-
console.log(`${src} errored with
|
|
193
|
+
console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
|
|
128
194
|
}).finally(() => {
|
|
129
195
|
webSideCares.forEach((webSideCar) => webSideCar.close());
|
|
130
|
-
this.
|
|
196
|
+
this.testIsNowDone(src);
|
|
131
197
|
});
|
|
132
198
|
});
|
|
133
199
|
});
|
|
@@ -139,7 +205,7 @@ var PM_Main = class extends PM {
|
|
|
139
205
|
};
|
|
140
206
|
this.launchWebSideCar = async (src, dest, testConfig) => {
|
|
141
207
|
const d = dest + ".mjs";
|
|
142
|
-
console.log(
|
|
208
|
+
console.log(ansiC.green(ansiC.inverse(`launchWebSideCar ${src}`)));
|
|
143
209
|
const destFolder = dest.replace(".mjs", "");
|
|
144
210
|
const fileStreams2 = [];
|
|
145
211
|
const doneFileStream2 = [];
|
|
@@ -233,7 +299,7 @@ var PM_Main = class extends PM {
|
|
|
233
299
|
};
|
|
234
300
|
this.launchNodeSideCar = async (src, dest, testConfig) => {
|
|
235
301
|
const d = dest + ".mjs";
|
|
236
|
-
console.log(
|
|
302
|
+
console.log(ansiC.green(ansiC.inverse(`launchNodeSideCar ${src}`)));
|
|
237
303
|
const destFolder = dest.replace(".mjs", "");
|
|
238
304
|
let argz = "";
|
|
239
305
|
const testConfigResource = testConfig[2];
|
|
@@ -284,18 +350,9 @@ var PM_Main = class extends PM {
|
|
|
284
350
|
}
|
|
285
351
|
}
|
|
286
352
|
};
|
|
287
|
-
this.launchWeb = (t, dest
|
|
288
|
-
console.log(
|
|
289
|
-
this.
|
|
290
|
-
sidecars.map((sidecar) => {
|
|
291
|
-
if (sidecar[1] === "node") {
|
|
292
|
-
return this.launchNodeSideCar(
|
|
293
|
-
sidecar[0],
|
|
294
|
-
destinationOfRuntime(sidecar[0], "node", this.configs),
|
|
295
|
-
sidecar
|
|
296
|
-
);
|
|
297
|
-
}
|
|
298
|
-
});
|
|
353
|
+
this.launchWeb = (t, dest) => {
|
|
354
|
+
console.log(ansiC.green(ansiC.inverse(`! web ${t}`)));
|
|
355
|
+
this.testIsNowRunning(t);
|
|
299
356
|
const destFolder = dest.replace(".mjs", "");
|
|
300
357
|
const webArgz = JSON.stringify({
|
|
301
358
|
name: dest,
|
|
@@ -303,10 +360,11 @@ var PM_Main = class extends PM {
|
|
|
303
360
|
fs: destFolder,
|
|
304
361
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
305
362
|
});
|
|
363
|
+
const d = `${dest}?cacheBust=${Date.now()}`;
|
|
306
364
|
const evaluation = `
|
|
307
|
-
|
|
308
|
-
import('${
|
|
309
|
-
|
|
365
|
+
|
|
366
|
+
import('${d}').then(async (x) => {
|
|
367
|
+
|
|
310
368
|
try {
|
|
311
369
|
return await (await x.default).receiveTestResourceConfig(${webArgz})
|
|
312
370
|
} catch (e) {
|
|
@@ -315,8 +373,8 @@ var PM_Main = class extends PM {
|
|
|
315
373
|
})`;
|
|
316
374
|
const fileStreams2 = [];
|
|
317
375
|
const doneFileStream2 = [];
|
|
318
|
-
const stdoutStream = fs.createWriteStream(`${
|
|
319
|
-
const stderrStream = fs.createWriteStream(`${
|
|
376
|
+
const stdoutStream = fs.createWriteStream(`${destFolder}/stdout.log`);
|
|
377
|
+
const stderrStream = fs.createWriteStream(`${destFolder}/stderr.log`);
|
|
320
378
|
this.browser.newPage().then((page) => {
|
|
321
379
|
page.exposeFunction(
|
|
322
380
|
"screencast",
|
|
@@ -458,14 +516,14 @@ var PM_Main = class extends PM {
|
|
|
458
516
|
files[t] = /* @__PURE__ */ new Set();
|
|
459
517
|
}
|
|
460
518
|
fs.writeFileSync(
|
|
461
|
-
|
|
519
|
+
destFolder + "/manifest.json",
|
|
462
520
|
JSON.stringify(Array.from(files[t]))
|
|
463
521
|
);
|
|
464
522
|
delete files[t];
|
|
465
523
|
Promise.all(screenshots[t] || []).then(() => {
|
|
466
524
|
delete screenshots[t];
|
|
467
525
|
page.close();
|
|
468
|
-
this.
|
|
526
|
+
this.testIsNowDone(t);
|
|
469
527
|
stderrStream.close();
|
|
470
528
|
stdoutStream.close();
|
|
471
529
|
});
|
|
@@ -483,25 +541,34 @@ var PM_Main = class extends PM {
|
|
|
483
541
|
}
|
|
484
542
|
console.debug(`Error from message ${t}: [${err.message}] `);
|
|
485
543
|
stderrStream.write(err.message);
|
|
544
|
+
close();
|
|
486
545
|
});
|
|
487
546
|
page.on("console", (log) => {
|
|
488
547
|
stdoutStream.write(log.text());
|
|
489
548
|
stdoutStream.write(JSON.stringify(log.location()));
|
|
490
549
|
stdoutStream.write(JSON.stringify(log.stackTrace()));
|
|
491
550
|
});
|
|
492
|
-
await page.goto(`file://${`${
|
|
551
|
+
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
493
552
|
await page.evaluate(evaluation).then(async ({ failed, features }) => {
|
|
494
|
-
this.receiveFeatures(features, destFolder);
|
|
495
|
-
|
|
553
|
+
this.receiveFeatures(features, destFolder, t);
|
|
554
|
+
statusMessagePretty(failed, t);
|
|
555
|
+
this.receiveExitCode(t, failed);
|
|
496
556
|
}).catch((e) => {
|
|
497
|
-
console.log(`${t} errored with
|
|
557
|
+
console.log(ansiC.red(ansiC.inverse(`${t} errored with: ${e}`)));
|
|
498
558
|
}).finally(() => {
|
|
499
559
|
close();
|
|
500
560
|
});
|
|
501
561
|
return page;
|
|
502
562
|
});
|
|
503
563
|
};
|
|
504
|
-
this.receiveFeatures = (features, destFolder) => {
|
|
564
|
+
this.receiveFeatures = (features, destFolder, srcTest) => {
|
|
565
|
+
const featureDestination = path2.resolve(
|
|
566
|
+
process.cwd(),
|
|
567
|
+
"docs",
|
|
568
|
+
"features",
|
|
569
|
+
"strings",
|
|
570
|
+
srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
|
|
571
|
+
);
|
|
505
572
|
features.reduce(async (mm, featureStringKey) => {
|
|
506
573
|
const accum = await mm;
|
|
507
574
|
const isUrl = isValidUrl(featureStringKey);
|
|
@@ -519,42 +586,82 @@ var PM_Main = class extends PM {
|
|
|
519
586
|
if (error.code !== "ENOENT") {
|
|
520
587
|
}
|
|
521
588
|
}
|
|
522
|
-
|
|
523
|
-
if (err) {
|
|
524
|
-
} else {
|
|
525
|
-
}
|
|
526
|
-
});
|
|
527
|
-
accum.push(newPath);
|
|
589
|
+
accum.files.push(newPath);
|
|
528
590
|
} else if (u.protocol === "http:" || u.protocol === "https:") {
|
|
529
591
|
const newPath = `${process.cwd()}/docs/features/external${u.hostname}${u.pathname}`;
|
|
530
592
|
const body = await this.configs.featureIngestor(featureStringKey);
|
|
531
593
|
writeFileAndCreateDir(newPath, body);
|
|
532
|
-
accum.push(newPath);
|
|
594
|
+
accum.files.push(newPath);
|
|
533
595
|
}
|
|
534
596
|
} else {
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
)
|
|
538
|
-
|
|
539
|
-
accum.push(newPath);
|
|
597
|
+
await fs.promises.mkdir(path2.dirname(featureDestination), {
|
|
598
|
+
recursive: true
|
|
599
|
+
});
|
|
600
|
+
accum.strings.push(featureStringKey);
|
|
540
601
|
}
|
|
541
602
|
return accum;
|
|
542
|
-
}, Promise.resolve([])).then((
|
|
603
|
+
}, Promise.resolve({ files: [], strings: [] })).then(({ files: files2, strings }) => {
|
|
543
604
|
fs.writeFileSync(
|
|
544
605
|
`${destFolder}/featurePrompt.txt`,
|
|
545
|
-
|
|
606
|
+
files2.map((f) => {
|
|
546
607
|
return `/read ${f}`;
|
|
547
608
|
}).join("\n")
|
|
548
609
|
);
|
|
549
610
|
});
|
|
611
|
+
this.writeBigBoard();
|
|
612
|
+
};
|
|
613
|
+
this.receiveExitCode = (srcTest, failures) => {
|
|
614
|
+
this.bigBoard[srcTest].runTimeError = failures;
|
|
615
|
+
this.writeBigBoard();
|
|
616
|
+
};
|
|
617
|
+
this.writeBigBoard = () => {
|
|
618
|
+
fs.writeFileSync(
|
|
619
|
+
"./docs/bigBoard.json",
|
|
620
|
+
JSON.stringify(this.bigBoard, null, 2)
|
|
621
|
+
);
|
|
550
622
|
};
|
|
551
623
|
this.server = {};
|
|
552
624
|
this.configs = configs;
|
|
553
625
|
this.ports = {};
|
|
554
|
-
this.
|
|
626
|
+
this.configs.tests.forEach(([t]) => {
|
|
627
|
+
this.bigBoard[t] = {
|
|
628
|
+
status: "?"
|
|
629
|
+
};
|
|
630
|
+
});
|
|
555
631
|
this.configs.ports.forEach((element) => {
|
|
556
632
|
this.ports[element] = "true";
|
|
557
633
|
});
|
|
634
|
+
globalThis["waitForSelector"] = async (pageKey, sel) => {
|
|
635
|
+
const page = (await this.browser.pages()).find(
|
|
636
|
+
/* @ts-ignore:next-line */
|
|
637
|
+
(p) => p.mainFrame()._id === pageKey
|
|
638
|
+
);
|
|
639
|
+
await page?.waitForSelector(sel);
|
|
640
|
+
};
|
|
641
|
+
globalThis["screencastStop"] = async (path4) => {
|
|
642
|
+
return recorders[path4].stop();
|
|
643
|
+
};
|
|
644
|
+
globalThis["closePage"] = async (pageKey) => {
|
|
645
|
+
const page = (await this.browser.pages()).find(
|
|
646
|
+
/* @ts-ignore:next-line */
|
|
647
|
+
(p) => p.mainFrame()._id === pageKey
|
|
648
|
+
);
|
|
649
|
+
return page.close();
|
|
650
|
+
};
|
|
651
|
+
globalThis["goto"] = async (pageKey, url) => {
|
|
652
|
+
const page = (await this.browser.pages()).find(
|
|
653
|
+
/* @ts-ignore:next-line */
|
|
654
|
+
(p) => p.mainFrame()._id === pageKey
|
|
655
|
+
);
|
|
656
|
+
await page?.goto(url);
|
|
657
|
+
return;
|
|
658
|
+
};
|
|
659
|
+
globalThis["newPage"] = () => {
|
|
660
|
+
return this.browser.newPage();
|
|
661
|
+
};
|
|
662
|
+
globalThis["pages"] = () => {
|
|
663
|
+
return this.browser.pages();
|
|
664
|
+
};
|
|
558
665
|
globalThis["mkdirSync"] = (fp) => {
|
|
559
666
|
if (!fs.existsSync(fp)) {
|
|
560
667
|
return fs.mkdirSync(fp, {
|
|
@@ -564,8 +671,7 @@ var PM_Main = class extends PM {
|
|
|
564
671
|
return false;
|
|
565
672
|
};
|
|
566
673
|
globalThis["writeFileSync"] = (filepath, contents, testName) => {
|
|
567
|
-
|
|
568
|
-
fs.mkdirSync(dir, {
|
|
674
|
+
fs.mkdirSync(path2.dirname(filepath), {
|
|
569
675
|
recursive: true
|
|
570
676
|
});
|
|
571
677
|
if (!files[testName]) {
|
|
@@ -592,7 +698,11 @@ var PM_Main = class extends PM {
|
|
|
592
698
|
globalThis["end"] = (uid) => {
|
|
593
699
|
fileStreams3[uid].end();
|
|
594
700
|
};
|
|
595
|
-
globalThis["customScreenShot"] = async (opts,
|
|
701
|
+
globalThis["customScreenShot"] = async (opts, pageKey, testName) => {
|
|
702
|
+
const page = (await this.browser.pages()).find(
|
|
703
|
+
/* @ts-ignore:next-line */
|
|
704
|
+
(p2) => p2.mainFrame()._id === pageKey
|
|
705
|
+
);
|
|
596
706
|
const p = opts.path;
|
|
597
707
|
const dir = path2.dirname(p);
|
|
598
708
|
fs.mkdirSync(dir, {
|
|
@@ -613,6 +723,38 @@ var PM_Main = class extends PM {
|
|
|
613
723
|
await sPromise;
|
|
614
724
|
return sPromise;
|
|
615
725
|
};
|
|
726
|
+
globalThis["screencast"] = async (opts, pageKey) => {
|
|
727
|
+
const page = (await this.browser.pages()).find(
|
|
728
|
+
/* @ts-ignore:next-line */
|
|
729
|
+
(p2) => p2.mainFrame()._id === pageKey
|
|
730
|
+
);
|
|
731
|
+
const p = opts.path;
|
|
732
|
+
const dir = path2.dirname(p);
|
|
733
|
+
fs.mkdirSync(dir, {
|
|
734
|
+
recursive: true
|
|
735
|
+
});
|
|
736
|
+
const recorder = await page?.screencast({
|
|
737
|
+
...opts,
|
|
738
|
+
path: p
|
|
739
|
+
});
|
|
740
|
+
recorders[opts.path] = recorder;
|
|
741
|
+
return opts.path;
|
|
742
|
+
};
|
|
743
|
+
}
|
|
744
|
+
customclose() {
|
|
745
|
+
throw new Error("Method not implemented.");
|
|
746
|
+
}
|
|
747
|
+
waitForSelector(p, s) {
|
|
748
|
+
throw new Error("Method not implemented.");
|
|
749
|
+
}
|
|
750
|
+
closePage(p) {
|
|
751
|
+
throw new Error("Method not implemented.");
|
|
752
|
+
}
|
|
753
|
+
newPage() {
|
|
754
|
+
throw new Error("Method not implemented.");
|
|
755
|
+
}
|
|
756
|
+
goto(p, url) {
|
|
757
|
+
throw new Error("Method not implemented.");
|
|
616
758
|
}
|
|
617
759
|
$(selector) {
|
|
618
760
|
throw new Error("Method not implemented.");
|
|
@@ -620,7 +762,7 @@ var PM_Main = class extends PM {
|
|
|
620
762
|
screencast(opts) {
|
|
621
763
|
throw new Error("Method not implemented.");
|
|
622
764
|
}
|
|
623
|
-
customScreenShot(opts) {
|
|
765
|
+
customScreenShot(opts, cdpPage) {
|
|
624
766
|
throw new Error("Method not implemented.");
|
|
625
767
|
}
|
|
626
768
|
end(accessObject) {
|
|
@@ -712,65 +854,265 @@ var PM_Main = class extends PM {
|
|
|
712
854
|
isDisabled(selector) {
|
|
713
855
|
throw new Error("Method not implemented.");
|
|
714
856
|
}
|
|
857
|
+
screencastStop(s) {
|
|
858
|
+
throw new Error("Method not implemented.");
|
|
859
|
+
}
|
|
715
860
|
////////////////////////////////////////////////////////////////////////////////
|
|
716
861
|
async startPuppeteer(options, destfolder) {
|
|
717
862
|
this.browser = await puppeteer.launch(options);
|
|
718
863
|
}
|
|
719
|
-
|
|
864
|
+
// goodbye = () => {
|
|
865
|
+
// this.browser.disconnect().then(() => {
|
|
866
|
+
// console.log("Goodbye");
|
|
867
|
+
// process.exit();
|
|
868
|
+
// });
|
|
869
|
+
// };
|
|
720
870
|
shutDown() {
|
|
721
|
-
console.log("shutting down...");
|
|
722
871
|
this.shutdownMode = true;
|
|
723
872
|
this.checkForShutdown();
|
|
724
873
|
}
|
|
725
874
|
};
|
|
726
|
-
async function writeFileAndCreateDir(filePath, data) {
|
|
727
|
-
const dirPath = path2.dirname(filePath);
|
|
728
|
-
try {
|
|
729
|
-
await fs.promises.mkdir(dirPath, { recursive: true });
|
|
730
|
-
await fs.promises.writeFile(filePath, data);
|
|
731
|
-
} catch (error) {
|
|
732
|
-
console.error(`Error writing file: ${error}`);
|
|
733
|
-
}
|
|
734
|
-
}
|
|
735
|
-
async function sha256(rawData) {
|
|
736
|
-
const data = typeof rawData === "object" ? JSON.stringify(rawData) : String(rawData);
|
|
737
|
-
const msgBuffer = new TextEncoder().encode(data);
|
|
738
|
-
const hashBuffer = await crypto.subtle.digest("SHA-256", msgBuffer);
|
|
739
|
-
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
740
|
-
return hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
741
|
-
}
|
|
742
|
-
function isValidUrl(string) {
|
|
743
|
-
try {
|
|
744
|
-
new URL(string);
|
|
745
|
-
return true;
|
|
746
|
-
} catch (err) {
|
|
747
|
-
return false;
|
|
748
|
-
}
|
|
749
|
-
}
|
|
750
875
|
|
|
751
|
-
// src/
|
|
876
|
+
// src/run.ts
|
|
877
|
+
console.log(ansiC2.inverse("Press 'x' to shutdown forcefully."));
|
|
752
878
|
readline.emitKeypressEvents(process.stdin);
|
|
753
879
|
if (process.stdin.isTTY)
|
|
754
880
|
process.stdin.setRawMode(true);
|
|
755
|
-
|
|
881
|
+
process.stdin.on("keypress", (str, key) => {
|
|
882
|
+
if (key.name === "x") {
|
|
883
|
+
console.log(ansiC2.inverse("Shutting down forcefully..."));
|
|
884
|
+
process.exit(-1);
|
|
885
|
+
}
|
|
886
|
+
});
|
|
887
|
+
async function fileHash(filePath, algorithm = "md5") {
|
|
888
|
+
return new Promise((resolve, reject) => {
|
|
889
|
+
const hash = crypto.createHash(algorithm);
|
|
890
|
+
const fileStream = fs2.createReadStream(filePath);
|
|
891
|
+
fileStream.on("data", (data) => {
|
|
892
|
+
hash.update(data);
|
|
893
|
+
});
|
|
894
|
+
fileStream.on("end", () => {
|
|
895
|
+
const fileHash2 = hash.digest("hex");
|
|
896
|
+
resolve(fileHash2);
|
|
897
|
+
});
|
|
898
|
+
fileStream.on("error", (error) => {
|
|
899
|
+
reject(`Error reading file: ${error.message}`);
|
|
900
|
+
});
|
|
901
|
+
});
|
|
902
|
+
}
|
|
903
|
+
async function filesHash(files2, algorithm = "md5") {
|
|
904
|
+
return new Promise((resolve, reject) => {
|
|
905
|
+
resolve(
|
|
906
|
+
files2.reduce(async (mm, f) => {
|
|
907
|
+
return await mm + await fileHash(f);
|
|
908
|
+
}, Promise.resolve(""))
|
|
909
|
+
);
|
|
910
|
+
});
|
|
911
|
+
}
|
|
912
|
+
var getRunnables = (tests, payload = {
|
|
913
|
+
nodeEntryPoints: {},
|
|
914
|
+
webEntryPoints: {}
|
|
915
|
+
}) => {
|
|
916
|
+
return tests.reduce((pt, cv, cndx, cry) => {
|
|
917
|
+
if (cv[1] === "node") {
|
|
918
|
+
pt.nodeEntryPoints[cv[0]] = path3.resolve(
|
|
919
|
+
`./docs/node/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
|
|
920
|
+
);
|
|
921
|
+
} else if (cv[1] === "web") {
|
|
922
|
+
pt.webEntryPoints[cv[0]] = path3.resolve(
|
|
923
|
+
`./docs/web/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
|
|
924
|
+
);
|
|
925
|
+
}
|
|
926
|
+
if (cv[3].length) {
|
|
927
|
+
getRunnables(cv[3], payload);
|
|
928
|
+
}
|
|
929
|
+
return pt;
|
|
930
|
+
}, payload);
|
|
931
|
+
};
|
|
932
|
+
var changes = {};
|
|
933
|
+
var tscCheck = async ({
|
|
934
|
+
entrypoint,
|
|
935
|
+
addableFiles,
|
|
936
|
+
platform
|
|
937
|
+
}) => {
|
|
938
|
+
console.log(ansiC2.green(ansiC2.inverse(`tsc < ${entrypoint}`)));
|
|
939
|
+
const program = tsc.createProgramFromConfig({
|
|
940
|
+
basePath: process.cwd(),
|
|
941
|
+
// always required, used for relative paths
|
|
942
|
+
configFilePath: "tsconfig.json",
|
|
943
|
+
// config to inherit from (optional)
|
|
944
|
+
compilerOptions: {
|
|
945
|
+
rootDir: "src",
|
|
946
|
+
outDir: tscPather(entrypoint, platform),
|
|
947
|
+
// declaration: true,
|
|
948
|
+
// skipLibCheck: true,
|
|
949
|
+
noEmit: true
|
|
950
|
+
},
|
|
951
|
+
include: addableFiles
|
|
952
|
+
//["src/**/*"],
|
|
953
|
+
// exclude: ["**/*.test.ts", "**/*.spec.ts"],
|
|
954
|
+
});
|
|
955
|
+
const tscPath = tscPather(entrypoint, platform);
|
|
956
|
+
let allDiagnostics = program.getSemanticDiagnostics();
|
|
957
|
+
const d = [];
|
|
958
|
+
allDiagnostics.forEach((diagnostic) => {
|
|
959
|
+
if (diagnostic.file) {
|
|
960
|
+
let { line, character } = ts.getLineAndCharacterOfPosition(
|
|
961
|
+
diagnostic.file,
|
|
962
|
+
diagnostic.start
|
|
963
|
+
);
|
|
964
|
+
let message = ts.flattenDiagnosticMessageText(
|
|
965
|
+
diagnostic.messageText,
|
|
966
|
+
"\n"
|
|
967
|
+
);
|
|
968
|
+
d.push(
|
|
969
|
+
`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`
|
|
970
|
+
);
|
|
971
|
+
} else {
|
|
972
|
+
d.push(ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n"));
|
|
973
|
+
}
|
|
974
|
+
});
|
|
975
|
+
fs2.writeFileSync(tscPath, d.join("\n"));
|
|
976
|
+
fs2.writeFileSync(
|
|
977
|
+
tscExitCodePather(entrypoint, platform),
|
|
978
|
+
d.length.toString()
|
|
979
|
+
);
|
|
980
|
+
};
|
|
981
|
+
var eslint = new ESLint();
|
|
982
|
+
var formatter = await eslint.loadFormatter(
|
|
983
|
+
"./node_modules/testeranto/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs"
|
|
984
|
+
);
|
|
985
|
+
var eslintCheck = async (entrypoint, platform, addableFiles) => {
|
|
986
|
+
console.log(ansiC2.green(ansiC2.inverse(`eslint < ${entrypoint}`)));
|
|
987
|
+
const results = (await eslint.lintFiles(addableFiles)).filter((r) => r.messages.length).filter((r) => {
|
|
988
|
+
return r.messages[0].ruleId !== null;
|
|
989
|
+
}).map((r) => {
|
|
990
|
+
delete r.source;
|
|
991
|
+
return r;
|
|
992
|
+
});
|
|
993
|
+
fs2.writeFileSync(
|
|
994
|
+
lintPather(entrypoint, platform),
|
|
995
|
+
await formatter.format(results)
|
|
996
|
+
);
|
|
997
|
+
fs2.writeFileSync(
|
|
998
|
+
lintExitCodePather(entrypoint, platform),
|
|
999
|
+
results.length.toString()
|
|
1000
|
+
);
|
|
1001
|
+
};
|
|
1002
|
+
var makePrompt = async (entryPoint, addableFiles, platform) => {
|
|
1003
|
+
const promptPath = path3.join(
|
|
1004
|
+
"./docs/",
|
|
1005
|
+
platform,
|
|
1006
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
1007
|
+
`prompt.txt`
|
|
1008
|
+
);
|
|
1009
|
+
const testPaths = path3.join(
|
|
1010
|
+
"./docs/",
|
|
1011
|
+
platform,
|
|
1012
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
1013
|
+
`tests.json`
|
|
1014
|
+
);
|
|
1015
|
+
const featuresPath = path3.join(
|
|
1016
|
+
"./docs/",
|
|
1017
|
+
platform,
|
|
1018
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
1019
|
+
`featurePrompt.txt`
|
|
1020
|
+
);
|
|
1021
|
+
fs2.writeFileSync(
|
|
1022
|
+
promptPath,
|
|
1023
|
+
`
|
|
1024
|
+
${addableFiles.map((x) => {
|
|
1025
|
+
return `/add ${x}`;
|
|
1026
|
+
}).join("\n")}
|
|
1027
|
+
|
|
1028
|
+
/read ${lintPather(entryPoint, platform)}
|
|
1029
|
+
/read ${tscPather(entryPoint, platform)}
|
|
1030
|
+
/read ${testPaths}
|
|
1031
|
+
|
|
1032
|
+
/load ${featuresPath}
|
|
1033
|
+
|
|
1034
|
+
/code Fix the failing tests described in ${testPaths}. Correct any type signature errors described in the files ${tscPather(
|
|
1035
|
+
entryPoint,
|
|
1036
|
+
platform
|
|
1037
|
+
)}. Implement any method which throws "Function not implemented. Resolve the lint errors described in ${lintPather(
|
|
1038
|
+
entryPoint,
|
|
1039
|
+
platform
|
|
1040
|
+
)}"
|
|
1041
|
+
`
|
|
1042
|
+
);
|
|
1043
|
+
};
|
|
1044
|
+
var metafileOutputs = async (platform) => {
|
|
1045
|
+
const metafile = JSON.parse(
|
|
1046
|
+
fs2.readFileSync(`docs/${platform}/metafile.json`).toString()
|
|
1047
|
+
).metafile;
|
|
1048
|
+
if (!metafile)
|
|
1049
|
+
return;
|
|
1050
|
+
const outputs = metafile.outputs;
|
|
1051
|
+
Object.keys(outputs).forEach(async (k) => {
|
|
1052
|
+
const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
|
|
1053
|
+
if (!fs2.existsSync(i))
|
|
1054
|
+
return false;
|
|
1055
|
+
if (i.startsWith("node_modules"))
|
|
1056
|
+
return false;
|
|
1057
|
+
return true;
|
|
1058
|
+
});
|
|
1059
|
+
const f = `${k.split(".").slice(0, -1).join(".")}/`;
|
|
1060
|
+
if (!fs2.existsSync(f)) {
|
|
1061
|
+
fs2.mkdirSync(f);
|
|
1062
|
+
}
|
|
1063
|
+
const entrypoint = outputs[k].entryPoint;
|
|
1064
|
+
if (entrypoint) {
|
|
1065
|
+
const changeDigest = await filesHash(addableFiles);
|
|
1066
|
+
if (changeDigest === changes[entrypoint]) {
|
|
1067
|
+
} else {
|
|
1068
|
+
changes[entrypoint] = changeDigest;
|
|
1069
|
+
tscCheck({ platform, addableFiles, entrypoint });
|
|
1070
|
+
eslintCheck(entrypoint, platform, addableFiles);
|
|
1071
|
+
makePrompt(entrypoint, addableFiles, platform);
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
});
|
|
1075
|
+
};
|
|
1076
|
+
import(process.cwd() + "/" + process.argv[2]).then(async (module) => {
|
|
1077
|
+
const rawConfig = module.default;
|
|
756
1078
|
const config = {
|
|
757
|
-
...
|
|
758
|
-
buildDir: process.cwd() + "/" +
|
|
1079
|
+
...rawConfig,
|
|
1080
|
+
buildDir: process.cwd() + "/" + rawConfig.outdir
|
|
759
1081
|
};
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
1082
|
+
let mode = config.devMode ? "DEV" : "PROD";
|
|
1083
|
+
const fileHashes = {};
|
|
1084
|
+
let pm = new PM_Main(config);
|
|
1085
|
+
console.log(ansiC2.inverse(`Press 'q' to shutdown gracefully`));
|
|
1086
|
+
process.stdin.on("keypress", (str, key) => {
|
|
1087
|
+
if (key.name === "q") {
|
|
1088
|
+
console.log(
|
|
1089
|
+
ansiC2.inverse("Testeranto-Run is shutting down gracefully...")
|
|
1090
|
+
);
|
|
1091
|
+
mode = "PROD";
|
|
1092
|
+
nodeMetafileWatcher.close();
|
|
1093
|
+
webMetafileWatcher.close();
|
|
1094
|
+
pm.shutDown();
|
|
1095
|
+
}
|
|
1096
|
+
});
|
|
1097
|
+
metafileOutputs("node");
|
|
1098
|
+
const nodeMetafileWatcher = watch(
|
|
1099
|
+
"docs/node/metafile.json",
|
|
1100
|
+
async (e, filename) => {
|
|
1101
|
+
console.log(ansiC2.green(ansiC2.inverse(`< ${e} ${filename} (node)`)));
|
|
1102
|
+
metafileOutputs("node");
|
|
1103
|
+
}
|
|
1104
|
+
);
|
|
1105
|
+
metafileOutputs("web");
|
|
1106
|
+
const webMetafileWatcher = watch(
|
|
1107
|
+
"docs/web/metafile.json",
|
|
1108
|
+
async (e, filename) => {
|
|
1109
|
+
console.log(ansiC2.green(ansiC2.inverse(`< ${e} ${filename} (web)`)));
|
|
1110
|
+
metafileOutputs("web");
|
|
1111
|
+
}
|
|
770
1112
|
);
|
|
771
|
-
const pm = new PM_Main(config);
|
|
772
1113
|
await pm.startPuppeteer(
|
|
773
1114
|
{
|
|
1115
|
+
slowMo: 1,
|
|
774
1116
|
// timeout: 1,
|
|
775
1117
|
waitForInitialPage: false,
|
|
776
1118
|
executablePath: (
|
|
@@ -814,58 +1156,35 @@ var Puppeteer_default = async (partialConfig) => {
|
|
|
814
1156
|
},
|
|
815
1157
|
"."
|
|
816
1158
|
);
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
config.tests.forEach(([test, runtime, tr, sidecars]) => {
|
|
829
|
-
if (runtime === "node") {
|
|
830
|
-
pm.launchNode(test, destinationOfRuntime(test, "node", config));
|
|
831
|
-
} else if (runtime === "web") {
|
|
832
|
-
pm.launchWeb(test, destinationOfRuntime(test, "web", config), sidecars);
|
|
833
|
-
} else {
|
|
834
|
-
console.error("runtime makes no sense", runtime);
|
|
835
|
-
}
|
|
836
|
-
});
|
|
837
|
-
if (config.devMode) {
|
|
838
|
-
console.log("ready and watching for changes...", config.buildDir);
|
|
839
|
-
watch(config.buildDir, (eventType, changedFile) => {
|
|
840
|
-
if (changedFile) {
|
|
841
|
-
config.tests.forEach(([test, runtime, tr, sidecars]) => {
|
|
842
|
-
if (eventType === "change" || eventType === "rename") {
|
|
843
|
-
if (changedFile === test.replace("./", "node/").split(".").slice(0, -1).concat("mjs").join(".")) {
|
|
844
|
-
pm.launchNode(test, destinationOfRuntime(test, "node", config));
|
|
845
|
-
}
|
|
846
|
-
if (changedFile === test.replace("./", "web/").split(".").slice(0, -1).concat("mjs").join(".")) {
|
|
847
|
-
pm.launchWeb(
|
|
848
|
-
test,
|
|
849
|
-
destinationOfRuntime(test, "web", config),
|
|
850
|
-
sidecars
|
|
851
|
-
);
|
|
852
|
-
}
|
|
1159
|
+
const { nodeEntryPoints, webEntryPoints } = getRunnables(config.tests);
|
|
1160
|
+
Object.entries(nodeEntryPoints).forEach(
|
|
1161
|
+
([k, outputFile]) => {
|
|
1162
|
+
pm.launchNode(k, outputFile);
|
|
1163
|
+
try {
|
|
1164
|
+
watch(outputFile, async (e, filename) => {
|
|
1165
|
+
const hash = await fileHash(outputFile);
|
|
1166
|
+
if (fileHashes[k] !== hash) {
|
|
1167
|
+
fileHashes[k] = hash;
|
|
1168
|
+
console.log(ansiC2.green(ansiC2.inverse(`< ${e} ${filename}`)));
|
|
1169
|
+
pm.launchNode(k, outputFile);
|
|
853
1170
|
}
|
|
854
1171
|
});
|
|
1172
|
+
} catch (e) {
|
|
1173
|
+
console.error(e);
|
|
855
1174
|
}
|
|
856
|
-
}
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
}
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
}
|
|
1175
|
+
}
|
|
1176
|
+
);
|
|
1177
|
+
Object.entries(webEntryPoints).forEach(
|
|
1178
|
+
([k, outputFile]) => {
|
|
1179
|
+
pm.launchWeb(k, outputFile);
|
|
1180
|
+
watch(outputFile, async (e, filename) => {
|
|
1181
|
+
const hash = await fileHash(outputFile);
|
|
1182
|
+
if (fileHashes[k] !== hash) {
|
|
1183
|
+
fileHashes[k] = hash;
|
|
1184
|
+
console.log(ansiC2.green(ansiC2.inverse(`< ${e} ${filename}`)));
|
|
1185
|
+
pm.launchWeb(k, outputFile);
|
|
1186
|
+
}
|
|
1187
|
+
});
|
|
1188
|
+
}
|
|
1189
|
+
);
|
|
1190
|
+
});
|