testeranto 0.177.0 → 0.197.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/ALL_LICENSES.txt +11246 -0
- package/LICENSE +21 -0
- package/README.md +24 -4
- package/default-project.json +44 -0
- package/design-editor/DesignEditor.tsx +247 -0
- package/design-editor/index.ts +2 -0
- package/design-editor/server.ts +121 -0
- package/design-editor/types.ts +16 -0
- package/designs/default-project.json +210 -0
- package/dist/common/design-editor/DesignEditor.js +239 -0
- package/dist/common/design-editor/index.js +18 -0
- package/dist/common/design-editor/server.js +98 -0
- package/dist/common/design-editor/types.js +2 -0
- package/dist/common/src/App.js +53 -0
- package/dist/common/src/Node.js +4 -8
- package/dist/common/src/PM/PM_WithEslintAndTsc.js +10 -34
- package/dist/common/src/PM/base.js +1 -1
- package/dist/common/src/PM/main.js +581 -113
- package/dist/common/src/PM/node.js +4 -2
- package/dist/common/src/PM/nodeSidecar.js +1 -0
- package/dist/common/src/PM/pure.js +20 -57
- package/dist/common/src/PM/pureSidecar.js +1 -1
- package/dist/common/src/PM/types.js +1 -0
- package/dist/common/src/PM/web.js +7 -4
- package/dist/common/src/Pure.js +1 -1
- package/dist/common/src/Pure.test.js +49 -79
- package/dist/common/src/ReportServer.js +8 -2
- package/dist/common/src/build.js +31 -40
- package/dist/common/src/components/DesignEditorPage.js +169 -0
- package/dist/common/src/components/SunriseAnimation.js +291 -0
- package/dist/common/src/components/SunriseAnimation.test/interface.js +67 -0
- package/dist/common/src/components/SunriseAnimation.test/types.js +2 -0
- package/dist/common/src/components/TestStatusBadge.js +1 -21
- package/dist/common/src/components/pure/AppFrame.js +69 -0
- package/dist/common/src/components/pure/AppFrame.test/implementation.js +63 -0
- package/dist/common/src/components/pure/AppFrame.test/index.js +14 -0
- package/dist/common/src/components/pure/AppFrame.test/specification.js +25 -0
- package/dist/common/src/components/pure/AppFrame.test/types.js +3 -0
- package/dist/common/src/components/pure/FeaturesReporterView.js +23 -0
- package/dist/common/src/components/pure/FeaturesReporterView.test/implementation.js +84 -0
- package/dist/common/src/components/pure/FeaturesReporterView.test/index.js +14 -0
- package/dist/common/src/components/pure/FeaturesReporterView.test/specification.js +27 -0
- package/dist/common/src/components/pure/FeaturesReporterView.test/types.js +2 -0
- package/dist/common/src/components/pure/ModalContent.js +86 -0
- package/dist/common/src/components/pure/ModalContent.test/implementation.js +35 -0
- package/dist/common/src/components/pure/ModalContent.test/index.js +58 -0
- package/dist/common/src/components/pure/ModalContent.test/specification.js +19 -0
- package/dist/common/src/components/pure/ModalContent.test/types.js +4 -0
- package/dist/common/src/{NavBar.js → components/pure/NavBar.js} +9 -10
- package/dist/common/src/components/pure/ProcessManager.js +112 -0
- package/dist/common/src/components/pure/ProcessManagerView.js +237 -0
- package/dist/common/src/components/pure/ProjectPageView.js +53 -76
- package/dist/common/src/components/pure/ProjectPageView.test/implementation.js +167 -54
- package/dist/common/src/components/pure/ProjectPageView.test/index.js +5 -1
- package/dist/common/src/components/pure/ProjectPageView.test/specification.js +15 -2
- package/dist/common/src/components/pure/ProjectPageView.test/types.js +2 -0
- package/dist/common/src/components/pure/ProjectsPageView.js +72 -0
- package/dist/common/src/components/pure/SettingsButton.js +13 -0
- package/dist/common/src/components/pure/SingleProcessView.js +214 -0
- package/dist/common/src/components/pure/TestPageView.js +513 -0
- package/dist/common/src/components/pure/TestPageView.test/implementation.js +157 -0
- package/dist/common/src/components/pure/TestPageView.test/index.js +15 -0
- package/dist/common/src/components/pure/TestPageView.test/specification.js +26 -0
- package/dist/common/src/components/pure/TestPageView.test/types.js +4 -0
- package/dist/common/src/components/pure/ThemeCard.js +15 -0
- package/dist/common/src/components/stateful/FeaturesReporter.js +59 -0
- package/dist/common/src/components/stateful/FileTree.js +40 -0
- package/dist/common/src/components/stateful/ProcessManagerPage.js +112 -0
- package/dist/common/src/components/stateful/ProjectPage.js +101 -0
- package/dist/common/src/components/stateful/ProjectsPage.js +118 -0
- package/dist/common/src/components/stateful/SettingsPage.js +72 -0
- package/dist/common/src/components/stateful/SingleProcessPage.js +147 -0
- package/dist/common/src/components/stateful/TestPage.js +229 -0
- package/dist/common/src/components/stateful/TextEditorPage.js +154 -0
- package/dist/common/src/defaultConfig.js +1 -0
- package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +3 -4
- package/dist/common/src/esbuildConfigs/web.js +1 -1
- package/dist/common/src/lib/BaseSuite.js +7 -3
- package/dist/common/src/lib/BaseSuite.test/mock.js +17 -41
- package/dist/common/src/lib/BaseSuite.test/test.js +33 -42
- package/dist/common/src/lib/Sidecar.js +1 -0
- package/dist/common/src/lib/abstractBase.js +40 -13
- package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.adapter.js +12 -12
- package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.implementation.js +15 -13
- package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.mock.js +28 -17
- package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.pure.js +2 -2
- package/dist/common/src/lib/basebuilder.js +29 -35
- package/dist/common/src/lib/classBuilder.js +5 -3
- package/dist/common/src/lib/core.js +3 -6
- package/dist/common/src/lib/core.test/MockCore.js +0 -14
- package/dist/common/src/lib/core.test/core.test.adapter.js +2 -9
- package/dist/common/src/lib/core.test/core.test.implementation.js +3 -7
- package/dist/common/src/lib/index.js +13 -14
- package/dist/common/src/lib/pmProxy.js +37 -16
- package/dist/common/src/lib/pmProxy.test/adapter.js +20 -4
- package/dist/common/src/lib/pmProxy.test/implementation.js +93 -34
- package/dist/common/src/lib/pmProxy.test/mockPMBase.js +9 -0
- package/dist/common/src/lib/pmProxy.test/specification.js +3 -0
- package/dist/common/src/mothership/index.js +5 -0
- package/dist/common/src/mothership/test.js +44 -25
- package/dist/common/src/types/features.js +34 -0
- package/dist/common/src/utils/api.js +57 -27
- package/dist/common/src/utils/featureUtils.js +29 -0
- package/dist/common/src/utils/logFiles.js +51 -0
- package/dist/common/src/utils/makePrompt.js +116 -0
- package/dist/common/src/web.html.js +2 -6
- package/dist/common/testeranto.config.js +54 -24
- package/dist/common/tsconfig.common.tsbuildinfo +1 -1
- package/dist/module/design-editor/DesignEditor.js +203 -0
- package/dist/module/design-editor/index.js +2 -0
- package/dist/module/design-editor/server.js +92 -0
- package/dist/module/design-editor/types.js +1 -0
- package/dist/module/src/App.js +19 -17
- package/dist/module/src/Node.js +4 -8
- package/dist/module/src/PM/PM_WithEslintAndTsc.js +11 -35
- package/dist/module/src/PM/base.js +1 -1
- package/dist/module/src/PM/main.js +577 -109
- package/dist/module/src/PM/node.js +4 -2
- package/dist/module/src/PM/nodeSidecar.js +1 -0
- package/dist/module/src/PM/pure.js +20 -57
- package/dist/module/src/PM/pureSidecar.js +1 -1
- package/dist/module/src/PM/types.js +1 -0
- package/dist/module/src/PM/web.js +7 -4
- package/dist/module/src/Pure.js +1 -1
- package/dist/module/src/Pure.test.js +49 -79
- package/dist/module/src/ReportServer.js +8 -2
- package/dist/module/src/build.js +26 -38
- package/dist/module/src/components/DesignEditorPage.js +132 -0
- package/dist/module/src/components/SunriseAnimation.test/interface.js +32 -1
- package/dist/module/src/components/SunriseAnimation.test/types.js +1 -0
- package/dist/module/src/components/TestStatusBadge.js +1 -21
- package/dist/module/src/components/pure/AppFrame.js +32 -0
- package/dist/module/src/components/pure/AppFrame.test/implementation.js +57 -0
- package/dist/module/src/components/pure/AppFrame.test/index.js +9 -0
- package/dist/module/src/components/pure/AppFrame.test/specification.js +21 -0
- package/dist/module/src/components/pure/AppFrame.test/types.js +2 -0
- package/dist/module/src/components/pure/FeaturesReporterView.js +16 -0
- package/dist/module/src/components/pure/FeaturesReporterView.test/implementation.js +81 -0
- package/dist/module/src/components/pure/FeaturesReporterView.test/index.js +9 -0
- package/dist/module/src/components/pure/FeaturesReporterView.test/specification.js +23 -0
- package/dist/module/src/components/pure/FeaturesReporterView.test/types.js +1 -0
- package/dist/module/src/components/pure/ModalContent.js +79 -0
- package/dist/module/src/components/pure/ModalContent.test/implementation.js +32 -0
- package/dist/module/src/components/pure/ModalContent.test/index.js +53 -0
- package/dist/module/src/components/pure/ModalContent.test/specification.js +15 -0
- package/dist/module/src/components/pure/ModalContent.test/types.js +3 -0
- package/dist/module/src/{NavBar.js → components/pure/NavBar.js} +10 -11
- package/dist/module/src/components/pure/ProcessManager.js +75 -0
- package/dist/module/src/components/pure/ProcessManagerView.js +200 -0
- package/dist/module/src/components/pure/ProjectPageView.js +54 -77
- package/dist/module/src/components/pure/ProjectPageView.test/implementation.js +167 -54
- package/dist/module/src/components/pure/ProjectPageView.test/index.js +5 -1
- package/dist/module/src/components/pure/ProjectPageView.test/specification.js +15 -2
- package/dist/module/src/components/pure/ProjectPageView.test/types.js +2 -0
- package/dist/module/src/components/pure/ProjectsPageView.js +21 -14
- package/dist/module/src/components/pure/SettingsButton.js +6 -0
- package/dist/module/src/components/pure/SingleProcessView.js +214 -0
- package/dist/module/src/components/pure/TestPageView.js +470 -142
- package/dist/module/src/components/pure/TestPageView.test/implementation.js +121 -0
- package/dist/module/src/components/pure/TestPageView.test/index.js +10 -0
- package/dist/module/src/components/pure/TestPageView.test/specification.js +22 -0
- package/dist/module/src/components/pure/TestPageView.test/types.js +3 -0
- package/dist/module/src/components/pure/ThemeCard.js +8 -0
- package/dist/module/src/components/stateful/FeaturesReporter.js +22 -0
- package/dist/module/src/components/stateful/FileTree.js +33 -0
- package/dist/module/src/components/stateful/ProcessManagerPage.js +75 -0
- package/dist/module/src/components/stateful/ProjectPage.js +7 -6
- package/dist/module/src/components/stateful/ProjectsPage.js +32 -6
- package/dist/module/src/components/stateful/SettingsPage.js +35 -0
- package/dist/module/src/components/stateful/SingleProcessPage.js +110 -0
- package/dist/module/src/components/stateful/TestPage.js +123 -13
- package/dist/module/src/components/stateful/TextEditorPage.js +117 -0
- package/dist/module/src/defaultConfig.js +1 -0
- package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +3 -4
- package/dist/module/src/esbuildConfigs/web.js +1 -1
- package/dist/module/src/lib/BaseSuite.js +7 -3
- package/dist/module/src/lib/BaseSuite.test/mock.js +17 -41
- package/dist/module/src/lib/BaseSuite.test/test.js +33 -42
- package/dist/module/src/lib/Sidecar.js +1 -0
- package/dist/module/src/lib/abstractBase.js +40 -13
- package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.adapter.js +12 -12
- package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.implementation.js +15 -13
- package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.mock.js +28 -17
- package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.pure.js +1 -1
- package/dist/module/src/lib/basebuilder.js +29 -35
- package/dist/module/src/lib/classBuilder.js +5 -3
- package/dist/module/src/lib/core.js +3 -6
- package/dist/module/src/lib/core.test/MockCore.js +0 -14
- package/dist/module/src/lib/core.test/core.test.adapter.js +2 -9
- package/dist/module/src/lib/core.test/core.test.implementation.js +3 -7
- package/dist/module/src/lib/index.js +13 -14
- package/dist/module/src/lib/pmProxy.js +37 -16
- package/dist/module/src/lib/pmProxy.test/adapter.js +20 -4
- package/dist/module/src/lib/pmProxy.test/implementation.js +93 -34
- package/dist/module/src/lib/pmProxy.test/mockPMBase.js +9 -0
- package/dist/module/src/lib/pmProxy.test/specification.js +3 -0
- package/dist/module/src/mothership/index.js +5 -0
- package/dist/module/src/mothership/test.js +44 -25
- package/dist/module/src/types/features.js +31 -0
- package/dist/module/src/utils/api.js +56 -25
- package/dist/module/src/utils/featureUtils.js +24 -0
- package/dist/module/src/utils/logFiles.js +46 -0
- package/dist/module/src/utils/makePrompt.js +109 -0
- package/dist/module/src/web.html.js +2 -6
- package/dist/module/testeranto.config.js +54 -24
- package/dist/module/tsconfig.module.tsbuildinfo +1 -1
- package/dist/prebuild/App.css +53 -80
- package/dist/prebuild/App.js +15520 -4397
- package/dist/prebuild/ReportServer.mjs +104 -6
- package/dist/prebuild/build.mjs +95 -108
- package/dist/prebuild/mothership/index.mjs +5 -0
- package/dist/prebuild/run.mjs +704 -221
- package/dist/types/design-editor/DesignEditor.d.ts +18 -0
- package/dist/types/design-editor/server.d.ts +1 -0
- package/dist/types/src/App.d.ts +1 -0
- package/dist/types/src/PM/index.d.ts +1 -1
- package/dist/types/src/PM/main.d.ts +37 -3
- package/dist/types/src/PM/pure.d.ts +10 -7
- package/dist/types/src/PM/web.d.ts +1 -1
- package/dist/types/src/Pure.test.d.ts +13 -1
- package/dist/types/src/Types.d.ts +1 -0
- package/dist/types/src/components/DesignEditorPage.d.ts +1 -0
- package/dist/types/src/components/SunriseAnimation.d.ts +5 -0
- package/dist/types/src/components/SunriseAnimation.test/interface.d.ts +11 -0
- package/dist/types/src/components/SunriseAnimation.test/types.d.ts +39 -0
- package/dist/types/src/components/pure/AppFrame.d.ts +11 -0
- package/dist/types/src/components/pure/AppFrame.test/implementation.d.ts +3 -0
- package/dist/types/src/components/pure/AppFrame.test/index.d.ts +5 -0
- package/dist/types/src/components/pure/AppFrame.test/specification.d.ts +3 -0
- package/dist/types/src/components/pure/AppFrame.test/types.d.ts +33 -0
- package/dist/types/src/components/pure/FeaturesReporterView.d.ts +7 -0
- package/dist/types/src/components/pure/FeaturesReporterView.test/implementation.d.ts +3 -0
- package/dist/types/src/components/pure/FeaturesReporterView.test/index.d.ts +2 -0
- package/dist/types/src/components/pure/FeaturesReporterView.test/specification.d.ts +3 -0
- package/dist/types/src/components/pure/FeaturesReporterView.test/types.d.ts +54 -0
- package/dist/types/src/components/pure/ModalContent.d.ts +7 -0
- package/dist/types/src/components/pure/ModalContent.test/implementation.d.ts +3 -0
- package/dist/types/src/components/pure/ModalContent.test/index.d.ts +3 -0
- package/dist/types/src/components/pure/ModalContent.test/specification.d.ts +3 -0
- package/dist/types/src/components/pure/ModalContent.test/types.d.ts +45 -0
- package/dist/types/src/{NavBar.d.ts → components/pure/NavBar.d.ts} +4 -0
- package/dist/types/src/components/pure/ProcessManager.d.ts +8 -0
- package/dist/types/src/components/pure/ProcessManagerView.d.ts +20 -0
- package/dist/types/src/components/pure/ProjectPageView.d.ts +7 -7
- package/dist/types/src/components/pure/ProjectPageView.test/index.d.ts +1 -2
- package/dist/types/src/components/pure/ProjectPageView.test/types.d.ts +29 -11
- package/dist/types/src/components/pure/ProjectsPageView.d.ts +29 -0
- package/dist/types/src/components/pure/SettingsButton.d.ts +2 -0
- package/dist/types/src/components/pure/SingleProcessView.d.ts +0 -0
- package/dist/types/src/components/pure/TestPageView.d.ts +15 -0
- package/dist/types/src/components/pure/TestPageView.test/implementation.d.ts +12 -0
- package/dist/types/src/components/pure/TestPageView.test/index.d.ts +3 -0
- package/dist/types/src/components/pure/TestPageView.test/specification.d.ts +11 -0
- package/dist/types/src/components/pure/TestPageView.test/types.d.ts +65 -0
- package/dist/types/src/components/pure/ThemeCard.d.ts +9 -0
- package/dist/types/src/components/stateful/FeaturesReporter.d.ts +2 -0
- package/dist/types/src/components/stateful/FileTree.d.ts +8 -0
- package/dist/types/src/components/stateful/ProcessManagerPage.d.ts +2 -0
- package/dist/types/src/components/stateful/ProjectPage.d.ts +1 -0
- package/dist/types/src/components/stateful/ProjectsPage.d.ts +1 -0
- package/dist/types/src/components/stateful/SettingsPage.d.ts +2 -0
- package/dist/types/src/components/stateful/SingleProcessPage.d.ts +2 -0
- package/dist/types/src/components/stateful/TestPage.d.ts +1 -0
- package/dist/types/src/components/stateful/TextEditorPage.d.ts +1 -0
- package/dist/types/src/lib/BaseSuite.test/mock.d.ts +3 -3
- package/dist/types/src/lib/abstractBase.d.ts +1 -1
- package/dist/types/src/lib/abstractBase.test/MockGiven.d.ts +1 -1
- package/dist/types/src/lib/baseBuilder.test/baseBuilder.test.pure.d.ts +1 -1
- package/dist/types/src/lib/basebuilder.d.ts +1 -1
- package/dist/types/src/lib/index.d.ts +8 -8
- package/dist/types/src/lib/pmProxy.test/mockPMBase.d.ts +1 -1
- package/dist/types/src/types/features.d.ts +7 -0
- package/dist/types/src/utils/api.d.ts +1 -5
- package/dist/types/src/utils/featureUtils.d.ts +6 -0
- package/dist/types/src/utils/logFiles.d.ts +71 -0
- package/dist/types/src/utils/makePrompt.d.ts +2 -0
- package/dist/types/src/web.html.d.ts +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/docs/index.md +17 -0
- package/docs/test-page-components.md +91 -0
- package/docs/testing.prompt.txt +1 -3
- package/index.d.ts +38 -13
- package/marketing.md +166 -0
- package/package.json +38 -11
- package/src/App.tsx +22 -25
- package/src/Node.ts +6 -9
- package/src/PM/PM_WithEslintAndTsc.ts +16 -97
- package/src/PM/__tests__/nodeSidecar.testeranto.ts +2 -0
- package/src/PM/base.ts +1 -3
- package/src/PM/index.ts +1 -1
- package/src/PM/main.ts +673 -128
- package/src/PM/node.ts +5 -2
- package/src/PM/nodeSidecar.ts +1 -0
- package/src/PM/pure.ts +28 -72
- package/src/PM/pureSidecar.ts +1 -1
- package/src/PM/types.ts +0 -0
- package/src/PM/web.ts +9 -4
- package/src/Pure.test.ts +66 -101
- package/src/Pure.ts +1 -1
- package/src/README.md +85 -0
- package/src/ReportServer.ts +10 -3
- package/src/Types.ts +1 -0
- package/src/app.scss +169 -0
- package/src/build.ts +33 -55
- package/src/components/DesignEditorPage.tsx +169 -0
- package/src/components/{pure/ProjectPageView.test/index.ts → SunriseAnimation.test/index.tsx} +7 -4
- package/src/components/SunriseAnimation.test/interface.ts +49 -0
- package/src/components/SunriseAnimation.test/types.ts +53 -0
- package/src/components/TestStatusBadge.tsx +2 -23
- package/src/components/pure/AppFrame.test/implementation.tsx +72 -0
- package/src/components/pure/AppFrame.test/index.tsx +22 -0
- package/src/components/pure/AppFrame.test/specification.ts +35 -0
- package/src/components/pure/AppFrame.test/types.ts +65 -0
- package/src/components/pure/AppFrame.tsx +134 -0
- package/src/components/pure/FeaturesReporterView.test/implementation.tsx +106 -0
- package/src/components/pure/FeaturesReporterView.test/index.tsx +18 -0
- package/src/components/pure/FeaturesReporterView.test/specification.ts +39 -0
- package/src/components/pure/FeaturesReporterView.test/types.ts +77 -0
- package/src/components/pure/FeaturesReporterView.tsx +37 -0
- package/src/components/pure/ModalContent.test/implementation.tsx +45 -0
- package/src/components/pure/ModalContent.test/index.tsx +67 -0
- package/src/components/pure/ModalContent.test/specification.ts +27 -0
- package/src/components/pure/ModalContent.test/types.ts +72 -0
- package/src/components/pure/ModalContent.tsx +182 -0
- package/src/{NavBar.tsx → components/pure/NavBar.tsx} +31 -15
- package/src/components/pure/ProcessManager.tsx +117 -0
- package/src/components/pure/ProcessManagerView.tsx +414 -0
- package/src/components/pure/ProjectPageView.test/implementation.tsx +186 -57
- package/src/components/pure/ProjectPageView.test/index.tsx +18 -0
- package/src/components/pure/ProjectPageView.test/specification.ts +15 -2
- package/src/components/pure/ProjectPageView.test/types.ts +57 -13
- package/src/components/pure/ProjectPageView.tsx +155 -121
- package/src/components/pure/ProjectsPageView.tsx +73 -32
- package/src/components/pure/SettingsButton.md +1 -0
- package/src/components/pure/SettingsButton.tsx +11 -0
- package/src/components/pure/SingleProcessView.tsx +235 -0
- package/src/components/pure/TestPageView.test/implementation.ts +162 -0
- package/src/components/pure/TestPageView.test/index.tsx +20 -0
- package/src/components/pure/TestPageView.test/specification.ts +58 -0
- package/src/components/pure/TestPageView.test/types.ts +92 -0
- package/src/components/pure/TestPageView.tsx +1009 -299
- package/src/components/pure/ThemeCard.tsx +34 -0
- package/src/components/stateful/FeaturesReporter.tsx +24 -0
- package/src/components/stateful/FileTree.tsx +66 -0
- package/src/components/stateful/ProcessManagerPage.tsx +108 -0
- package/src/components/stateful/ProjectPage.tsx +10 -8
- package/src/components/stateful/ProjectsPage.tsx +36 -7
- package/src/components/stateful/SettingsPage.tsx +82 -0
- package/src/components/stateful/SingleProcessPage.tsx +155 -0
- package/src/components/stateful/TestPage.tsx +147 -30
- package/src/components/stateful/TextEditorPage.tsx +170 -0
- package/src/defaultConfig.ts +1 -0
- package/src/esbuildConfigs/inputFilesPlugin.ts +3 -4
- package/src/esbuildConfigs/web.ts +2 -1
- package/src/lib/BaseSuite.test/mock.ts +21 -68
- package/src/lib/BaseSuite.test/test.ts +39 -65
- package/src/lib/BaseSuite.ts +9 -3
- package/src/lib/Sidecar.ts +2 -0
- package/src/lib/abstractBase.test/MockGiven.ts +1 -1
- package/src/lib/abstractBase.ts +47 -20
- package/src/lib/baseBuilder.test/baseBuilder.test.adapter.ts +14 -13
- package/src/lib/baseBuilder.test/baseBuilder.test.implementation.ts +17 -14
- package/src/lib/baseBuilder.test/baseBuilder.test.mock.ts +27 -17
- package/src/lib/baseBuilder.test/baseBuilder.test.pure.ts +1 -1
- package/src/lib/basebuilder.ts +48 -54
- package/src/lib/classBuilder.ts +11 -10
- package/src/lib/core.test/MockCore.ts +0 -23
- package/src/lib/core.test/core.test.adapter.ts +6 -12
- package/src/lib/core.test/core.test.implementation.ts +7 -10
- package/src/lib/core.ts +5 -20
- package/src/lib/index.ts +28 -27
- package/src/lib/pmProxy.test/adapter.ts +18 -4
- package/src/lib/pmProxy.test/implementation.ts +130 -46
- package/src/lib/pmProxy.test/mockPMBase.ts +12 -1
- package/src/lib/pmProxy.test/specification.ts +11 -0
- package/src/lib/pmProxy.ts +42 -17
- package/src/lib/types.ts +2 -0
- package/src/mothership/index.ts +6 -0
- package/src/mothership/test.ts +53 -26
- package/src/style.md +2 -0
- package/src/style.scss +3 -486
- package/src/templates/frontpage.html +331 -0
- package/src/templates/frontpage.md +79 -0
- package/src/themes.scss +48 -16
- package/src/types/features.ts +38 -0
- package/src/utils/api.ts +66 -33
- package/src/utils/featureUtils.tsx +42 -0
- package/src/utils/logFiles.ts +60 -0
- package/src/utils/makePrompt.ts +149 -0
- package/src/web.html.ts +6 -6
- package/stargazers.txt +15 -0
- package/stargzers.js +68 -0
- package/testeranto/App.css +53 -80
- package/testeranto/App.js +15520 -4397
- package/testeranto/bundles/node/core/chunk-4CSH4UJE.mjs +872 -0
- package/testeranto/bundles/node/core/chunk-4JTDLQVA.mjs +253 -0
- package/testeranto/bundles/node/core/chunk-C3APFDUV.mjs +70 -0
- package/testeranto/bundles/node/core/src/lib/BaseSuite.test/node.test.mjs +295 -0
- package/testeranto/bundles/node/core/src/lib/baseBuilder.test/baseBuilder.test.node.mjs +243 -0
- package/testeranto/bundles/node/core/src/lib/classBuilder.test/classBuilder.test.mjs +411 -0
- package/testeranto/bundles/node/core/src/lib/core.test/core.test.mjs +494 -0
- package/testeranto/bundles/node/core/src/lib/pmProxy.test/index.mjs +4755 -0
- package/testeranto/bundles/pure/core/chunk-62UVCSQC.mjs +1022 -0
- package/testeranto/bundles/pure/core/src/Pure.test.mjs +410 -0
- package/testeranto/bundles/pure/core/src/lib/BaseSuite.test/pure.test.mjs +352 -0
- package/testeranto/bundles/pure/core/src/lib/baseBuilder.test/baseBuilder.test.pure.mjs +241 -0
- package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.html +15 -0
- package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.html +1 -5
- package/testeranto/bundles/web/core/src/components/pure/TestPageView.test/index.html +15 -0
- package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.html +15 -0
- package/testeranto/bundles/web/core/src/lib/baseBuilder.test/baseBuilder.test.web.html +15 -0
- package/testeranto/metafiles/node/core.json +2906 -0
- package/testeranto/metafiles/pure/core.json +860 -0
- package/testeranto/metafiles/web/core.json +546 -0
- package/testeranto/reports/core/config.json +103 -2
- package/testeranto/reports/core/src/Pure.test/pure/exit.log +0 -0
- package/testeranto/reports/core/src/Pure.test/pure/lint_errors.txt +0 -0
- package/testeranto/reports/core/src/Pure.test/pure/message.txt +17 -0
- package/testeranto/reports/core/src/Pure.test/pure/prompt.txt +14 -0
- package/testeranto/reports/core/src/Pure.test/pure/type_errors.txt +71 -0
- package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/debug.log +0 -0
- package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/error.log +3 -0
- package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/exit.log +1 -0
- package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/info.log +0 -0
- package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/warn.log +0 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/debug.log +0 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/error.log +3 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/exit.log +1 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/info.log +0 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/warn.log +0 -0
- package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/debug.log +0 -0
- package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/error.log +3 -0
- package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/exit.log +1 -0
- package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/info.log +0 -0
- package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/warn.log +0 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/exit.log +1 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/lint_errors.txt +0 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/message.txt +17 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/prompt.txt +14 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stderr.log +0 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stdout.log +0 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/tests.json +31 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/type_errors.txt +61 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/exit.log +0 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/lint_errors.txt +0 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/message.txt +17 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +15 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +61 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/debug.log +0 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/error.log +3 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/exit.log +1 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/info.log +0 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/warn.log +0 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/exit.log +1 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/lint_errors.txt +10 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/message.txt +17 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/prompt.txt +17 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/stderr.log +0 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/stdout.log +6 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/suite-0/given-testInitialization/then-0/butThen/hello.txt +1 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/suite-0/given-testInitialization/then-1/butThen/artifact_test.txt +1 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/tests.json +71 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/type_errors.txt +42 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/exit.log +0 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/lint_errors.txt +10 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/message.txt +17 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/prompt.txt +17 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/type_errors.txt +42 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/debug.log +0 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/error.log +3 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/exit.log +1 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/info.log +0 -0
- package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/warn.log +0 -0
- package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/exit.log +1 -0
- package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/lint_errors.txt +0 -0
- package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/message.txt +17 -0
- package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/prompt.txt +17 -0
- package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/stderr.log +0 -0
- package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/stdout.log +619 -0
- package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/tests.json +165 -0
- package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/type_errors.txt +88 -0
- package/testeranto/reports/core/src/lib/core.test/core.test/node/exit.log +1 -0
- package/testeranto/reports/core/src/lib/core.test/core.test/node/lint_errors.txt +21 -0
- package/testeranto/reports/core/src/lib/core.test/core.test/node/message.txt +17 -0
- package/testeranto/reports/core/src/lib/core.test/core.test/node/prompt.txt +19 -0
- package/testeranto/reports/core/src/lib/core.test/core.test/node/stderr.log +0 -0
- package/testeranto/reports/core/src/lib/core.test/core.test/node/stdout.log +0 -0
- package/testeranto/reports/core/src/lib/core.test/core.test/node/type_errors.txt +45 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/exit.log +1 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/lint_errors.txt +15 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/message.txt +17 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/prompt.txt +17 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stderr.log +88 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stdout.log +10 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/tests.json +152 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/type_errors.txt +52 -0
- package/testeranto/reports/core/summary.json +74 -5
- package/testeranto/reportsweb_build_errors +546 -0
- package/testeranto.config.ts +58 -25
- package/tsc.log +378 -211
- package/tsconfig.common.json +4 -2
- package/tsconfig.json +9 -6
- package/tsconfig.module.json +3 -2
- package/tsconfig.types.json +3 -1
- package/dist/common/src/components/pure/ProjectPageView.test/adapter.js +0 -20
- package/dist/common/src/lib/dailyAnimation.js +0 -130
- package/dist/module/src/Footer.js +0 -5
- package/dist/module/src/ProjectPage.js +0 -319
- package/dist/module/src/ProjectsPage.js +0 -1
- package/dist/module/src/SettingsButton.js +0 -157
- package/dist/module/src/TestPage.js +0 -271
- package/dist/module/src/TestReport.js +0 -368
- package/dist/module/src/components/pure/ProjectPageView.test/adapter.js +0 -17
- package/dist/module/src/lib/dailyAnimation.js +0 -130
- package/dist/types/src/components/pure/ProjectPageView.test/adapter.d.ts +0 -3
- package/dist/types/testeranto.config.d.ts +0 -3
- package/docs/testing.ai.txt +0 -106
- package/docs.html +0 -572
- package/example.css +0 -351
- package/index.html +0 -284
- package/scripts/compile-docs.js +0 -140
- package/src/App.scss +0 -132
- package/src/Footer.tsx +0 -8
- package/src/Project.scss +0 -1
- package/src/ProjectPage.tsx +0 -459
- package/src/ProjectsPage.tsx +0 -1
- package/src/ReportApp.scss +0 -1
- package/src/SettingsButton.tsx +0 -268
- package/src/TestPage.tsx +0 -476
- package/src/TestReport.scss +0 -24
- package/src/TestReport.tsx +0 -411
- package/src/components/pure/ProjectPageView.test/adapter.ts +0 -21
- package/src/fonts.scss +0 -55
- package/src/lib/dailyAnimation.ts +0 -147
- package/style.css +0 -12156
- package/testeranto/bundles/node/core/metafile.json +0 -8
- package/testeranto/bundles/pure/core/metafile.json +0 -8
- package/testeranto/bundles/web/core/metafile.json +0 -15086
- package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.mjs +0 -39991
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/lint_errors.txt +0 -18
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/logs.txt +0 -59
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/message.txt +0 -2
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/prompt.txt +0 -27
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/suite-0/given-basicRender/then-0/butThen/happyPath.png +0 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/type_errors.txt +0 -50
- /package/dist/types/src/{lib/dailyAnimation.d.ts → PM/types.d.ts} +0 -0
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
3
|
+
/* eslint-disable no-async-promise-executor */
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
6
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
7
|
if (k2 === undefined) k2 = k;
|
|
4
8
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -37,10 +41,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
41
|
};
|
|
38
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
43
|
exports.PM_Main = void 0;
|
|
40
|
-
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
41
|
-
/* eslint-disable no-async-promise-executor */
|
|
42
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
43
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
44
44
|
const node_child_process_1 = require("node:child_process");
|
|
45
45
|
const ansi_colors_1 = __importDefault(require("ansi-colors"));
|
|
46
46
|
const net_1 = __importDefault(require("net"));
|
|
@@ -49,6 +49,10 @@ const path_1 = __importDefault(require("path"));
|
|
|
49
49
|
const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
|
|
50
50
|
const ansi_colors_2 = __importDefault(require("ansi-colors"));
|
|
51
51
|
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
52
|
+
const ws_1 = require("ws");
|
|
53
|
+
const http_1 = __importDefault(require("http"));
|
|
54
|
+
const url_1 = __importDefault(require("url"));
|
|
55
|
+
const mime_types_1 = __importDefault(require("mime-types"));
|
|
52
56
|
const utils_1 = require("../utils");
|
|
53
57
|
const queue_js_1 = require("../utils/queue.js");
|
|
54
58
|
const PM_WithEslintAndTsc_js_1 = require("./PM_WithEslintAndTsc.js");
|
|
@@ -56,6 +60,87 @@ const changes = {};
|
|
|
56
60
|
const fileHashes = {};
|
|
57
61
|
const files = {};
|
|
58
62
|
const screenshots = {};
|
|
63
|
+
function runtimeLogs(runtime, reportDest) {
|
|
64
|
+
const safeDest = reportDest || `testeranto/reports/default_${Date.now()}`;
|
|
65
|
+
try {
|
|
66
|
+
if (!fs_1.default.existsSync(safeDest)) {
|
|
67
|
+
fs_1.default.mkdirSync(safeDest, { recursive: true });
|
|
68
|
+
}
|
|
69
|
+
if (runtime === "node") {
|
|
70
|
+
return {
|
|
71
|
+
stdout: fs_1.default.createWriteStream(`${safeDest}/stdout.log`),
|
|
72
|
+
stderr: fs_1.default.createWriteStream(`${safeDest}/stderr.log`),
|
|
73
|
+
exit: fs_1.default.createWriteStream(`${safeDest}/exit.log`),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
else if (runtime === "web") {
|
|
77
|
+
return {
|
|
78
|
+
info: fs_1.default.createWriteStream(`${safeDest}/info.log`),
|
|
79
|
+
warn: fs_1.default.createWriteStream(`${safeDest}/warn.log`),
|
|
80
|
+
error: fs_1.default.createWriteStream(`${safeDest}/error.log`),
|
|
81
|
+
debug: fs_1.default.createWriteStream(`${safeDest}/debug.log`),
|
|
82
|
+
exit: fs_1.default.createWriteStream(`${safeDest}/exit.log`),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
else if (runtime === "pure") {
|
|
86
|
+
return {
|
|
87
|
+
exit: fs_1.default.createWriteStream(`${safeDest}/exit.log`),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
throw `unknown runtime: ${runtime}`;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
console.error(`Failed to create log streams in ${safeDest}:`, e);
|
|
96
|
+
throw e;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function createLogStreams(reportDest, runtime) {
|
|
100
|
+
// Create directory if it doesn't exist
|
|
101
|
+
if (!fs_1.default.existsSync(reportDest)) {
|
|
102
|
+
fs_1.default.mkdirSync(reportDest, { recursive: true });
|
|
103
|
+
}
|
|
104
|
+
const streams = runtimeLogs(runtime, reportDest);
|
|
105
|
+
// const streams = {
|
|
106
|
+
// exit: fs.createWriteStream(`${reportDest}/exit.log`),
|
|
107
|
+
const safeDest = reportDest || `testeranto/reports/default_${Date.now()}`;
|
|
108
|
+
try {
|
|
109
|
+
if (!fs_1.default.existsSync(safeDest)) {
|
|
110
|
+
fs_1.default.mkdirSync(safeDest, { recursive: true });
|
|
111
|
+
}
|
|
112
|
+
const streams = runtimeLogs(runtime, safeDest);
|
|
113
|
+
// const streams = {
|
|
114
|
+
// exit: fs.createWriteStream(`${safeDest}/exit.log`),
|
|
115
|
+
// ...(runtime === "node" || runtime === "pure"
|
|
116
|
+
// ? {
|
|
117
|
+
// stdout: fs.createWriteStream(`${safeDest}/stdout.log`),
|
|
118
|
+
// stderr: fs.createWriteStream(`${safeDest}/stderr.log`),
|
|
119
|
+
// }
|
|
120
|
+
// : {
|
|
121
|
+
// info: fs.createWriteStream(`${safeDest}/info.log`),
|
|
122
|
+
// warn: fs.createWriteStream(`${safeDest}/warn.log`),
|
|
123
|
+
// error: fs.createWriteStream(`${safeDest}/error.log`),
|
|
124
|
+
// debug: fs.createWriteStream(`${safeDest}/debug.log`),
|
|
125
|
+
// }),
|
|
126
|
+
// };
|
|
127
|
+
return Object.assign(Object.assign({}, streams), { closeAll: () => {
|
|
128
|
+
Object.values(streams).forEach((stream) => !stream.closed && stream.close());
|
|
129
|
+
}, writeExitCode: (code, error) => {
|
|
130
|
+
if (error) {
|
|
131
|
+
streams.exit.write(`Error: ${error.message}\n`);
|
|
132
|
+
if (error.stack) {
|
|
133
|
+
streams.exit.write(`Stack Trace:\n${error.stack}\n`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
streams.exit.write(`${code}\n`);
|
|
137
|
+
}, exit: streams.exit });
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
console.error(`Failed to create log streams in ${safeDest}:`, e);
|
|
141
|
+
throw e;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
59
144
|
async function fileHash(filePath, algorithm = "md5") {
|
|
60
145
|
return new Promise((resolve, reject) => {
|
|
61
146
|
const hash = node_crypto_1.default.createHash(algorithm);
|
|
@@ -74,10 +159,13 @@ async function fileHash(filePath, algorithm = "md5") {
|
|
|
74
159
|
}
|
|
75
160
|
const statusMessagePretty = (failures, test, runtime) => {
|
|
76
161
|
if (failures === 0) {
|
|
77
|
-
console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`${runtime} > ${test}
|
|
162
|
+
console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`${runtime} > ${test}`)));
|
|
163
|
+
}
|
|
164
|
+
else if (failures > 0) {
|
|
165
|
+
console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${runtime} > ${test} failed ${failures} times (exit code: ${failures})`)));
|
|
78
166
|
}
|
|
79
167
|
else {
|
|
80
|
-
console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${runtime} > ${test}
|
|
168
|
+
console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${runtime} > ${test} crashed (exit code: -1)`)));
|
|
81
169
|
}
|
|
82
170
|
};
|
|
83
171
|
async function writeFileAndCreateDir(filePath, data) {
|
|
@@ -119,6 +207,12 @@ async function pollForFile(path, timeout = 2000) {
|
|
|
119
207
|
class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
120
208
|
constructor(configs, name, mode) {
|
|
121
209
|
super(configs, name, mode);
|
|
210
|
+
this.logStreams = {};
|
|
211
|
+
this.sidecars = {};
|
|
212
|
+
this.clients = new Set();
|
|
213
|
+
this.runningProcesses = new Map();
|
|
214
|
+
this.allProcesses = new Map();
|
|
215
|
+
this.processLogs = new Map();
|
|
122
216
|
this.getRunnables = (tests, testName, payload = {
|
|
123
217
|
nodeEntryPoints: {},
|
|
124
218
|
nodeEntryPointSidecars: {},
|
|
@@ -176,7 +270,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
176
270
|
}
|
|
177
271
|
else {
|
|
178
272
|
this.queue.push(src);
|
|
179
|
-
return;
|
|
273
|
+
return [Math.random(), argz];
|
|
180
274
|
}
|
|
181
275
|
}
|
|
182
276
|
else {
|
|
@@ -209,8 +303,20 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
209
303
|
// }
|
|
210
304
|
// })
|
|
211
305
|
// );
|
|
306
|
+
const logs = createLogStreams(reportDest, "pure");
|
|
212
307
|
try {
|
|
213
308
|
await Promise.resolve(`${`${builtfile}?cacheBust=${Date.now()}`}`).then(s => __importStar(require(s))).then((module) => {
|
|
309
|
+
// Override console methods to redirect logs
|
|
310
|
+
// Only override stdout/stderr methods for pure runtime
|
|
311
|
+
const originalConsole = Object.assign({}, console);
|
|
312
|
+
// console.log = (...args) => {
|
|
313
|
+
// logs.stdout.write(args.join(" ") + "\n");
|
|
314
|
+
// originalConsole.log(...args);
|
|
315
|
+
// };
|
|
316
|
+
// console.error = (...args) => {
|
|
317
|
+
// logs.stderr.write(args.join(" ") + "\n");
|
|
318
|
+
// originalConsole.error(...args);
|
|
319
|
+
// };
|
|
214
320
|
return module.default
|
|
215
321
|
.then((defaultModule) => {
|
|
216
322
|
defaultModule
|
|
@@ -222,7 +328,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
222
328
|
this.bddTestIsNowDone(src, results.fails);
|
|
223
329
|
})
|
|
224
330
|
.catch((e1) => {
|
|
225
|
-
console.log(ansi_colors_2.default.red(`launchPure - ${src} errored with: ${e1}`));
|
|
331
|
+
console.log(ansi_colors_2.default.red(`launchPure - ${src} errored with: ${e1.stack}`));
|
|
226
332
|
this.bddTestIsNowDone(src, -1);
|
|
227
333
|
statusMessagePretty(-1, src, "pure");
|
|
228
334
|
});
|
|
@@ -231,8 +337,9 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
231
337
|
// });
|
|
232
338
|
})
|
|
233
339
|
.catch((e2) => {
|
|
234
|
-
console.log(ansi_colors_1.default.red(`pure ! ${src} failed to execute. No "tests.json" file was generated. Check
|
|
235
|
-
|
|
340
|
+
console.log(ansi_colors_1.default.red(`pure ! ${src} failed to execute. No "tests.json" file was generated. Check the logs for more info`));
|
|
341
|
+
logs.exit.write(e2.stack);
|
|
342
|
+
logs.exit.write(-1);
|
|
236
343
|
this.bddTestIsNowDone(src, -1);
|
|
237
344
|
statusMessagePretty(-1, src, "pure");
|
|
238
345
|
// console.error(e);
|
|
@@ -247,11 +354,12 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
247
354
|
});
|
|
248
355
|
}
|
|
249
356
|
catch (e3) {
|
|
250
|
-
|
|
251
|
-
|
|
357
|
+
logs.writeExitCode(-1, e3);
|
|
358
|
+
console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${src} 1 errored with: ${e3}. Check logs for more info`)));
|
|
359
|
+
logs.exit.write(e3.stack);
|
|
360
|
+
logs.exit.write(-1);
|
|
252
361
|
this.bddTestIsNowDone(src, -1);
|
|
253
362
|
statusMessagePretty(-1, src, "pure");
|
|
254
|
-
console.log("III) PURE IS EXITING BADLY WITH error", e3);
|
|
255
363
|
}
|
|
256
364
|
for (let i = 0; i <= portsToUse.length; i++) {
|
|
257
365
|
if (portsToUse[i]) {
|
|
@@ -294,7 +402,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
294
402
|
const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
|
|
295
403
|
if (openPorts.length >= testConfigResource.ports) {
|
|
296
404
|
for (let i = 0; i < testConfigResource.ports; i++) {
|
|
297
|
-
portsToUse.push(openPorts[i][0]);
|
|
405
|
+
portsToUse.push(openPorts[i][0]); // Convert string port to number
|
|
298
406
|
this.ports[openPorts[i][0]] = src; // port is now claimed
|
|
299
407
|
}
|
|
300
408
|
testResources = JSON.stringify({
|
|
@@ -308,7 +416,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
308
416
|
else {
|
|
309
417
|
console.log(ansi_colors_2.default.red(`node: cannot run ${src} because there are no open ports ATM. This job will be enqueued and run again run a port is available`));
|
|
310
418
|
this.queue.push(src);
|
|
311
|
-
return;
|
|
419
|
+
return [Math.random(), argz]; // Add this return
|
|
312
420
|
}
|
|
313
421
|
}
|
|
314
422
|
else {
|
|
@@ -366,45 +474,45 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
366
474
|
}
|
|
367
475
|
});
|
|
368
476
|
});
|
|
369
|
-
const
|
|
370
|
-
const errFile = `${reportDest}/logs.txt`;
|
|
371
|
-
if (fs_1.default.existsSync(errFile)) {
|
|
372
|
-
fs_1.default.rmSync(errFile);
|
|
373
|
-
}
|
|
477
|
+
const logs = createLogStreams(reportDest, "node");
|
|
374
478
|
server.listen(ipcfile, () => {
|
|
375
479
|
var _a, _b;
|
|
376
|
-
|
|
377
|
-
|
|
480
|
+
// Only handle stdout/stderr for node runtime
|
|
481
|
+
(_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
|
|
482
|
+
var _a;
|
|
483
|
+
(_a = logs.stdout) === null || _a === void 0 ? void 0 : _a.write(data); // Add null check
|
|
378
484
|
});
|
|
379
|
-
(_b = child.
|
|
380
|
-
|
|
485
|
+
(_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
|
|
486
|
+
var _a;
|
|
487
|
+
(_a = logs.stderr) === null || _a === void 0 ? void 0 : _a.write(data); // Add null check
|
|
381
488
|
});
|
|
382
489
|
child.on("error", (err) => { });
|
|
383
490
|
child.on("close", (code) => {
|
|
384
|
-
|
|
491
|
+
const exitCode = code === null ? -1 : code;
|
|
492
|
+
if (exitCode < 0) {
|
|
493
|
+
logs.writeExitCode(exitCode, new Error("Process crashed or was terminated"));
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
logs.writeExitCode(exitCode);
|
|
497
|
+
}
|
|
498
|
+
logs.closeAll();
|
|
385
499
|
server.close();
|
|
386
500
|
if (!files[src]) {
|
|
387
501
|
files[src] = new Set();
|
|
388
502
|
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
// reportDest + "/manifest.json",
|
|
392
|
-
// JSON.stringify(Array.from(files[src]))
|
|
393
|
-
// );
|
|
394
|
-
if (code === 255) {
|
|
395
|
-
console.log(ansi_colors_1.default.red(`node ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`));
|
|
503
|
+
if (exitCode === 255) {
|
|
504
|
+
console.log(ansi_colors_1.default.red(`node ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/stderr.log for more info`));
|
|
396
505
|
this.bddTestIsNowDone(src, -1);
|
|
397
506
|
statusMessagePretty(-1, src, "node");
|
|
398
|
-
oStream.close();
|
|
399
507
|
return;
|
|
400
508
|
}
|
|
401
|
-
else if (
|
|
509
|
+
else if (exitCode === 0) {
|
|
402
510
|
this.bddTestIsNowDone(src, 0);
|
|
403
511
|
statusMessagePretty(0, src, "node");
|
|
404
512
|
}
|
|
405
513
|
else {
|
|
406
|
-
this.bddTestIsNowDone(src,
|
|
407
|
-
statusMessagePretty(
|
|
514
|
+
this.bddTestIsNowDone(src, exitCode);
|
|
515
|
+
statusMessagePretty(exitCode, src, "node");
|
|
408
516
|
}
|
|
409
517
|
haltReturns = true;
|
|
410
518
|
});
|
|
@@ -419,8 +527,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
419
527
|
child.on("error", (e) => {
|
|
420
528
|
console.log("error");
|
|
421
529
|
haltReturns = true;
|
|
422
|
-
console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${src} errored with: ${e.name}. Check
|
|
423
|
-
this.writeFileSync(`${reportDest}/logs.txt`, e.toString(), src);
|
|
530
|
+
console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${src} errored with: ${e.name}. Check error logs for more info`)));
|
|
424
531
|
this.bddTestIsNowDone(src, -1);
|
|
425
532
|
statusMessagePretty(-1, src, "node");
|
|
426
533
|
});
|
|
@@ -432,9 +539,9 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
432
539
|
// const d = dest + ".mjs";
|
|
433
540
|
const destFolder = dest.replace(".mjs", "");
|
|
434
541
|
console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`launchWebSideCar ${src}`)));
|
|
435
|
-
const fileStreams2 = [];
|
|
436
|
-
const doneFileStream2 = [];
|
|
437
|
-
const
|
|
542
|
+
// const fileStreams2: fs.WriteStream[] = [];
|
|
543
|
+
// const doneFileStream2: Promise<any>[] = [];
|
|
544
|
+
const logs = createLogStreams(dest, "web");
|
|
438
545
|
return new Promise((res, rej) => {
|
|
439
546
|
this.browser
|
|
440
547
|
.newPage()
|
|
@@ -455,34 +562,40 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
455
562
|
Promise.all(screenshots[src] || []).then(() => {
|
|
456
563
|
delete screenshots[src];
|
|
457
564
|
page.close();
|
|
458
|
-
oStream.close();
|
|
459
565
|
});
|
|
460
566
|
};
|
|
461
567
|
page.on("pageerror", (err) => {
|
|
462
568
|
console.debug(`Error from ${src}: [${err.name}] `);
|
|
463
|
-
|
|
464
|
-
oStream.write("\n");
|
|
569
|
+
console.debug(`Error from ${src}: [${err.name}] `);
|
|
465
570
|
if (err.cause) {
|
|
466
571
|
console.debug(`Error from ${src} cause: [${err.cause}] `);
|
|
467
|
-
oStream.write(err.cause);
|
|
468
|
-
oStream.write("\n");
|
|
469
572
|
}
|
|
470
573
|
if (err.stack) {
|
|
471
574
|
console.debug(`Error from stack ${src}: [${err.stack}] `);
|
|
472
|
-
oStream.write(err.stack);
|
|
473
|
-
oStream.write("\n");
|
|
474
575
|
}
|
|
475
576
|
console.debug(`Error from message ${src}: [${err.message}] `);
|
|
476
|
-
oStream.write(err.message);
|
|
477
|
-
oStream.write("\n");
|
|
478
577
|
this.bddTestIsNowDone(src, -1);
|
|
479
578
|
close();
|
|
480
579
|
});
|
|
481
580
|
page.on("console", (log) => {
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
581
|
+
var _a, _b, _c, _d;
|
|
582
|
+
const msg = `${log.text()}\n${JSON.stringify(log.location())}\n${JSON.stringify(log.stackTrace())}\n`;
|
|
583
|
+
switch (log.type()) {
|
|
584
|
+
case "info":
|
|
585
|
+
(_a = logs.info) === null || _a === void 0 ? void 0 : _a.write(msg);
|
|
586
|
+
break;
|
|
587
|
+
case "warn":
|
|
588
|
+
(_b = logs.warn) === null || _b === void 0 ? void 0 : _b.write(msg);
|
|
589
|
+
break;
|
|
590
|
+
case "error":
|
|
591
|
+
(_c = logs.error) === null || _c === void 0 ? void 0 : _c.write(msg);
|
|
592
|
+
break;
|
|
593
|
+
case "debug":
|
|
594
|
+
(_d = logs.debug) === null || _d === void 0 ? void 0 : _d.write(msg);
|
|
595
|
+
break;
|
|
596
|
+
default:
|
|
597
|
+
break;
|
|
598
|
+
}
|
|
486
599
|
});
|
|
487
600
|
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
488
601
|
const webArgz = JSON.stringify({
|
|
@@ -521,7 +634,6 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
521
634
|
})
|
|
522
635
|
.then(async (page) => {
|
|
523
636
|
await page.goto(`file://${`${dest}.html`}`, {});
|
|
524
|
-
/* @ts-ignore:next-line */
|
|
525
637
|
res([Math.random(), page]);
|
|
526
638
|
});
|
|
527
639
|
});
|
|
@@ -543,6 +655,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
543
655
|
browserWSEndpoint: this.browser.wsEndpoint(),
|
|
544
656
|
};
|
|
545
657
|
const testReq = sidecar[2];
|
|
658
|
+
const logs = createLogStreams(dest, "node");
|
|
546
659
|
const portsToUse = [];
|
|
547
660
|
if (testReq.ports === 0) {
|
|
548
661
|
// argz = {
|
|
@@ -556,7 +669,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
556
669
|
const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
|
|
557
670
|
if (openPorts.length >= testReq.ports) {
|
|
558
671
|
for (let i = 0; i < testReq.ports; i++) {
|
|
559
|
-
portsToUse.push(openPorts[i][0]);
|
|
672
|
+
portsToUse.push(Number(openPorts[i][0])); // Convert string port to number
|
|
560
673
|
this.ports[openPorts[i][0]] = src; // port is now closed
|
|
561
674
|
}
|
|
562
675
|
argz.ports = portsToUse;
|
|
@@ -596,23 +709,13 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
596
709
|
});
|
|
597
710
|
});
|
|
598
711
|
});
|
|
599
|
-
const oStream = fs_1.default.createWriteStream(`${reportDest}/logs.txt`);
|
|
600
712
|
const child = (0, node_child_process_1.spawn)("node", [builtfile, JSON.stringify(argz)], {
|
|
601
713
|
stdio: ["pipe", "pipe", "pipe", "ipc"],
|
|
602
714
|
// silent: true
|
|
603
715
|
});
|
|
604
716
|
const p = "/tmp/tpipe" + Math.random();
|
|
605
|
-
const errFile = `${reportDest}/logs.txt`;
|
|
606
717
|
server.listen(p, () => {
|
|
607
|
-
var _a, _b;
|
|
608
|
-
(_a = child.stderr) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
|
|
609
|
-
oStream.write(`stderr > ${data}`);
|
|
610
|
-
});
|
|
611
|
-
(_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
|
|
612
|
-
oStream.write(`stdout > ${data}`);
|
|
613
|
-
});
|
|
614
718
|
child.on("close", (code) => {
|
|
615
|
-
oStream.close();
|
|
616
719
|
server.close();
|
|
617
720
|
haltReturns = true;
|
|
618
721
|
});
|
|
@@ -625,12 +728,13 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
625
728
|
}
|
|
626
729
|
});
|
|
627
730
|
child.on("error", (e) => {
|
|
731
|
+
var _a;
|
|
628
732
|
if (fs_1.default.existsSync(p)) {
|
|
629
733
|
fs_1.default.rmSync(p);
|
|
630
734
|
}
|
|
631
735
|
haltReturns = true;
|
|
632
|
-
console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`launchNodeSideCar - ${src} errored with: ${e.name}. Check
|
|
633
|
-
|
|
736
|
+
console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`launchNodeSideCar - ${src} errored with: ${e.name}. Check logs for more info`)));
|
|
737
|
+
(_a = logs.error) === null || _a === void 0 ? void 0 : _a.write(e.toString() + "\n");
|
|
634
738
|
// this.bddTestIsNowDone(src, -1);
|
|
635
739
|
// statusMessagePretty(-1, src);
|
|
636
740
|
});
|
|
@@ -680,7 +784,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
680
784
|
const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
|
|
681
785
|
if (openPorts.length >= testConfigResource.ports) {
|
|
682
786
|
for (let i = 0; i < testConfigResource.ports; i++) {
|
|
683
|
-
portsToUse.push(openPorts[i][0]);
|
|
787
|
+
portsToUse.push(Number(openPorts[i][0]));
|
|
684
788
|
this.ports[openPorts[i][0]] = src; // port is now claimed
|
|
685
789
|
}
|
|
686
790
|
argz = {
|
|
@@ -694,7 +798,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
694
798
|
}
|
|
695
799
|
else {
|
|
696
800
|
this.queue.push(src);
|
|
697
|
-
return;
|
|
801
|
+
// return;
|
|
698
802
|
}
|
|
699
803
|
}
|
|
700
804
|
else {
|
|
@@ -703,6 +807,8 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
703
807
|
}
|
|
704
808
|
// const builtfile = dest + ".mjs";
|
|
705
809
|
await Promise.resolve(`${`${builtfile}?cacheBust=${Date.now()}`}`).then(s => __importStar(require(s))).then((module) => {
|
|
810
|
+
if (!this.pureSidecars)
|
|
811
|
+
this.pureSidecars = {};
|
|
706
812
|
this.pureSidecars[r] = module.default;
|
|
707
813
|
this.pureSidecars[r].start(argz);
|
|
708
814
|
});
|
|
@@ -731,11 +837,35 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
731
837
|
browserWSEndpoint: this.browser.wsEndpoint(),
|
|
732
838
|
});
|
|
733
839
|
const d = `${dest}?cacheBust=${Date.now()}`;
|
|
734
|
-
const
|
|
735
|
-
const oStream = fs_1.default.createWriteStream(ofile);
|
|
840
|
+
const logs = createLogStreams(reportDest, "web");
|
|
736
841
|
this.browser
|
|
737
842
|
.newPage()
|
|
738
843
|
.then((page) => {
|
|
844
|
+
page.on("console", (log) => {
|
|
845
|
+
var _a, _b, _c, _d;
|
|
846
|
+
const msg = `${log.text()}\n`;
|
|
847
|
+
switch (log.type()) {
|
|
848
|
+
case "info":
|
|
849
|
+
(_a = logs.info) === null || _a === void 0 ? void 0 : _a.write(msg);
|
|
850
|
+
break;
|
|
851
|
+
case "warn":
|
|
852
|
+
(_b = logs.warn) === null || _b === void 0 ? void 0 : _b.write(msg);
|
|
853
|
+
break;
|
|
854
|
+
case "error":
|
|
855
|
+
(_c = logs.error) === null || _c === void 0 ? void 0 : _c.write(msg);
|
|
856
|
+
break;
|
|
857
|
+
case "debug":
|
|
858
|
+
(_d = logs.debug) === null || _d === void 0 ? void 0 : _d.write(msg);
|
|
859
|
+
break;
|
|
860
|
+
default:
|
|
861
|
+
break;
|
|
862
|
+
}
|
|
863
|
+
});
|
|
864
|
+
page.on("close", () => {
|
|
865
|
+
logs.writeExitCode(0); // Web tests exit with 0 unless there's an error
|
|
866
|
+
logs.closeAll();
|
|
867
|
+
logs.closeAll();
|
|
868
|
+
});
|
|
739
869
|
this.mapping().forEach(async ([command, func]) => {
|
|
740
870
|
if (command === "page") {
|
|
741
871
|
page.exposeFunction(command, (x) => {
|
|
@@ -767,44 +897,16 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
|
|
|
767
897
|
Promise.all(screenshots[src] || []).then(() => {
|
|
768
898
|
delete screenshots[src];
|
|
769
899
|
page.close();
|
|
770
|
-
oStream.close();
|
|
771
900
|
});
|
|
772
901
|
return;
|
|
773
902
|
};
|
|
774
903
|
page.on("pageerror", (err) => {
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
oStream.write("\n");
|
|
778
|
-
if (err.cause) {
|
|
779
|
-
oStream.write(err.cause);
|
|
780
|
-
oStream.write("\n");
|
|
781
|
-
}
|
|
782
|
-
if (err.stack) {
|
|
783
|
-
oStream.write(err.stack);
|
|
784
|
-
oStream.write("\n");
|
|
785
|
-
}
|
|
786
|
-
if (err.message) {
|
|
787
|
-
oStream.write(err.message);
|
|
788
|
-
oStream.write("\n");
|
|
789
|
-
}
|
|
904
|
+
logs.writeExitCode(-1, err);
|
|
905
|
+
console.log(ansi_colors_1.default.red(`web ! ${src} failed to execute No "tests.json" file was generated. Check ${reportDest}/error.log for more info`));
|
|
790
906
|
this.bddTestIsNowDone(src, -1);
|
|
791
907
|
close();
|
|
792
908
|
});
|
|
793
|
-
page.on("console", (log) => {
|
|
794
|
-
// console.log("console message: ", log.text());
|
|
795
|
-
if (oStream.closed) {
|
|
796
|
-
console.log("missed console message: ", log.text());
|
|
797
|
-
return;
|
|
798
|
-
}
|
|
799
|
-
else {
|
|
800
|
-
oStream.write(log.text());
|
|
801
|
-
oStream.write("\n");
|
|
802
|
-
oStream.write(JSON.stringify(log.location()));
|
|
803
|
-
oStream.write("\n");
|
|
804
|
-
oStream.write(JSON.stringify(log.stackTrace()));
|
|
805
|
-
oStream.write("\n");
|
|
806
|
-
}
|
|
807
|
-
});
|
|
909
|
+
// page.on("console", (log: ConsoleMessage) => {});
|
|
808
910
|
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
809
911
|
await page
|
|
810
912
|
.evaluate(`
|
|
@@ -823,7 +925,7 @@ import('${d}').then(async (x) => {
|
|
|
823
925
|
})
|
|
824
926
|
.catch((e) => {
|
|
825
927
|
console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(e.stack)));
|
|
826
|
-
console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`web ! ${src} failed to execute. No "tests.json" file was generated. Check
|
|
928
|
+
console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`web ! ${src} failed to execute. No "tests.json" file was generated. Check logs for more info`)));
|
|
827
929
|
this.bddTestIsNowDone(src, -1);
|
|
828
930
|
})
|
|
829
931
|
.finally(() => {
|
|
@@ -835,7 +937,24 @@ import('${d}').then(async (x) => {
|
|
|
835
937
|
};
|
|
836
938
|
this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
|
|
837
939
|
const featureDestination = path_1.default.resolve(process.cwd(), "reports", "features", "strings", srcTest.split(".").slice(0, -1).join(".") + ".features.txt");
|
|
838
|
-
|
|
940
|
+
// Read and parse the test report
|
|
941
|
+
const testReportPath = `${reportDest}/tests.json`;
|
|
942
|
+
if (!fs_1.default.existsSync(testReportPath)) {
|
|
943
|
+
console.error(`tests.json not found at: ${testReportPath}`);
|
|
944
|
+
return;
|
|
945
|
+
}
|
|
946
|
+
const testReport = JSON.parse(fs_1.default.readFileSync(testReportPath, "utf8"));
|
|
947
|
+
// Add full path information to each test
|
|
948
|
+
if (testReport.tests) {
|
|
949
|
+
testReport.tests.forEach((test) => {
|
|
950
|
+
// Add the full path to each test
|
|
951
|
+
test.fullPath = path_1.default.resolve(process.cwd(), srcTest);
|
|
952
|
+
});
|
|
953
|
+
}
|
|
954
|
+
// Add full path to the report itself
|
|
955
|
+
testReport.fullPath = path_1.default.resolve(process.cwd(), srcTest);
|
|
956
|
+
// Write the modified report back
|
|
957
|
+
fs_1.default.writeFileSync(testReportPath, JSON.stringify(testReport, null, 2));
|
|
839
958
|
testReport.features
|
|
840
959
|
.reduce(async (mm, featureStringKey) => {
|
|
841
960
|
const accum = await mm;
|
|
@@ -878,7 +997,7 @@ import('${d}').then(async (x) => {
|
|
|
878
997
|
return accum;
|
|
879
998
|
}, Promise.resolve({ files: [], strings: [] }))
|
|
880
999
|
.then(({ files, strings }) => {
|
|
881
|
-
// Markdown files must be referenced in the prompt but string style features are already present in the
|
|
1000
|
+
// Markdown files must be referenced in the prompt but string style features are already present in the tests.json file
|
|
882
1001
|
fs_1.default.writeFileSync(`testeranto/reports/${this.name}/${srcTest
|
|
883
1002
|
.split(".")
|
|
884
1003
|
.slice(0, -1)
|
|
@@ -932,10 +1051,14 @@ import('${d}').then(async (x) => {
|
|
|
932
1051
|
});
|
|
933
1052
|
this.writeBigBoard();
|
|
934
1053
|
if (!inflight) {
|
|
935
|
-
this.browser
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
1054
|
+
if (this.browser) {
|
|
1055
|
+
if (this.browser) {
|
|
1056
|
+
this.browser.disconnect().then(() => {
|
|
1057
|
+
console.log(ansi_colors_2.default.inverse(`${this.name} has been tested. Goodbye.`));
|
|
1058
|
+
process.exit();
|
|
1059
|
+
});
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
939
1062
|
}
|
|
940
1063
|
};
|
|
941
1064
|
this.launchers = {};
|
|
@@ -947,6 +1070,196 @@ import('${d}').then(async (x) => {
|
|
|
947
1070
|
this.configs.ports.forEach((element) => {
|
|
948
1071
|
this.ports[element] = ""; // set ports as open
|
|
949
1072
|
});
|
|
1073
|
+
// Create HTTP server
|
|
1074
|
+
this.httpServer = http_1.default.createServer(this.requestHandler.bind(this));
|
|
1075
|
+
// Start WebSocket server attached to the HTTP server
|
|
1076
|
+
this.wss = new ws_1.WebSocketServer({ server: this.httpServer });
|
|
1077
|
+
this.wss.on("connection", (ws) => {
|
|
1078
|
+
this.clients.add(ws);
|
|
1079
|
+
console.log("Client connected");
|
|
1080
|
+
ws.on("message", (data) => {
|
|
1081
|
+
var _a, _b;
|
|
1082
|
+
try {
|
|
1083
|
+
const message = JSON.parse(data.toString());
|
|
1084
|
+
if (message.type === "executeCommand") {
|
|
1085
|
+
// Validate the command starts with 'aider'
|
|
1086
|
+
if (message.command && message.command.trim().startsWith("aider")) {
|
|
1087
|
+
console.log(`Executing command: ${message.command}`);
|
|
1088
|
+
// Execute the command
|
|
1089
|
+
const processId = Date.now().toString();
|
|
1090
|
+
const child = (0, node_child_process_1.spawn)(message.command, {
|
|
1091
|
+
shell: true,
|
|
1092
|
+
cwd: process.cwd(),
|
|
1093
|
+
});
|
|
1094
|
+
// Track the process in both maps
|
|
1095
|
+
this.runningProcesses.set(processId, child);
|
|
1096
|
+
this.allProcesses.set(processId, {
|
|
1097
|
+
child,
|
|
1098
|
+
status: "running",
|
|
1099
|
+
command: message.command,
|
|
1100
|
+
pid: child.pid,
|
|
1101
|
+
timestamp: new Date().toISOString(),
|
|
1102
|
+
});
|
|
1103
|
+
// Initialize logs for this process
|
|
1104
|
+
this.processLogs.set(processId, []);
|
|
1105
|
+
// Broadcast process started
|
|
1106
|
+
this.broadcast({
|
|
1107
|
+
type: "processStarted",
|
|
1108
|
+
processId,
|
|
1109
|
+
command: message.command,
|
|
1110
|
+
timestamp: new Date().toISOString(),
|
|
1111
|
+
logs: [],
|
|
1112
|
+
});
|
|
1113
|
+
// Capture stdout and stderr
|
|
1114
|
+
(_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
|
|
1115
|
+
const logData = data.toString();
|
|
1116
|
+
// Add to stored logs
|
|
1117
|
+
const logs = this.processLogs.get(processId) || [];
|
|
1118
|
+
logs.push(logData);
|
|
1119
|
+
this.processLogs.set(processId, logs);
|
|
1120
|
+
this.broadcast({
|
|
1121
|
+
type: "processStdout",
|
|
1122
|
+
processId,
|
|
1123
|
+
data: logData,
|
|
1124
|
+
timestamp: new Date().toISOString(),
|
|
1125
|
+
});
|
|
1126
|
+
});
|
|
1127
|
+
(_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
|
|
1128
|
+
const logData = data.toString();
|
|
1129
|
+
// Add to stored logs
|
|
1130
|
+
const logs = this.processLogs.get(processId) || [];
|
|
1131
|
+
logs.push(logData);
|
|
1132
|
+
this.processLogs.set(processId, logs);
|
|
1133
|
+
this.broadcast({
|
|
1134
|
+
type: "processStderr",
|
|
1135
|
+
processId,
|
|
1136
|
+
data: logData,
|
|
1137
|
+
timestamp: new Date().toISOString(),
|
|
1138
|
+
});
|
|
1139
|
+
});
|
|
1140
|
+
child.on("error", (error) => {
|
|
1141
|
+
console.error(`Failed to execute command: ${error}`);
|
|
1142
|
+
this.runningProcesses.delete(processId);
|
|
1143
|
+
// Update the process status to error
|
|
1144
|
+
const processInfo = this.allProcesses.get(processId);
|
|
1145
|
+
if (processInfo) {
|
|
1146
|
+
this.allProcesses.set(processId, Object.assign(Object.assign({}, processInfo), { status: "error", error: error.message }));
|
|
1147
|
+
}
|
|
1148
|
+
this.broadcast({
|
|
1149
|
+
type: "processError",
|
|
1150
|
+
processId,
|
|
1151
|
+
error: error.message,
|
|
1152
|
+
timestamp: new Date().toISOString(),
|
|
1153
|
+
});
|
|
1154
|
+
});
|
|
1155
|
+
child.on("exit", (code) => {
|
|
1156
|
+
console.log(`Command exited with code ${code}`);
|
|
1157
|
+
// Remove from running processes but keep in allProcesses
|
|
1158
|
+
this.runningProcesses.delete(processId);
|
|
1159
|
+
// Update the process status to exited
|
|
1160
|
+
const processInfo = this.allProcesses.get(processId);
|
|
1161
|
+
if (processInfo) {
|
|
1162
|
+
this.allProcesses.set(processId, Object.assign(Object.assign({}, processInfo), { status: "exited", exitCode: code }));
|
|
1163
|
+
}
|
|
1164
|
+
this.broadcast({
|
|
1165
|
+
type: "processExited",
|
|
1166
|
+
processId,
|
|
1167
|
+
exitCode: code,
|
|
1168
|
+
timestamp: new Date().toISOString(),
|
|
1169
|
+
});
|
|
1170
|
+
});
|
|
1171
|
+
}
|
|
1172
|
+
else {
|
|
1173
|
+
console.error('Invalid command: must start with "aider"');
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1176
|
+
else if (message.type === "getRunningProcesses") {
|
|
1177
|
+
// Send list of all processes (both running and completed) with their full logs
|
|
1178
|
+
const processes = Array.from(this.allProcesses.entries()).map(([id, procInfo]) => ({
|
|
1179
|
+
processId: id,
|
|
1180
|
+
command: procInfo.command,
|
|
1181
|
+
pid: procInfo.pid,
|
|
1182
|
+
status: procInfo.status,
|
|
1183
|
+
exitCode: procInfo.exitCode,
|
|
1184
|
+
error: procInfo.error,
|
|
1185
|
+
timestamp: procInfo.timestamp,
|
|
1186
|
+
logs: this.processLogs.get(id) || [],
|
|
1187
|
+
}));
|
|
1188
|
+
ws.send(JSON.stringify({
|
|
1189
|
+
type: "runningProcesses",
|
|
1190
|
+
processes,
|
|
1191
|
+
}));
|
|
1192
|
+
}
|
|
1193
|
+
else if (message.type === "getProcess") {
|
|
1194
|
+
// Send specific process with full logs
|
|
1195
|
+
const processId = message.processId;
|
|
1196
|
+
const procInfo = this.allProcesses.get(processId);
|
|
1197
|
+
if (procInfo) {
|
|
1198
|
+
ws.send(JSON.stringify({
|
|
1199
|
+
type: "processData",
|
|
1200
|
+
processId,
|
|
1201
|
+
command: procInfo.command,
|
|
1202
|
+
pid: procInfo.pid,
|
|
1203
|
+
status: procInfo.status,
|
|
1204
|
+
exitCode: procInfo.exitCode,
|
|
1205
|
+
error: procInfo.error,
|
|
1206
|
+
timestamp: procInfo.timestamp,
|
|
1207
|
+
logs: this.processLogs.get(processId) || [],
|
|
1208
|
+
}));
|
|
1209
|
+
}
|
|
1210
|
+
}
|
|
1211
|
+
else if (message.type === "stdin") {
|
|
1212
|
+
// Handle stdin input for a process
|
|
1213
|
+
const processId = message.processId;
|
|
1214
|
+
const data = message.data;
|
|
1215
|
+
console.log("Received stdin for process", processId, ":", data);
|
|
1216
|
+
const childProcess = this.runningProcesses.get(processId);
|
|
1217
|
+
if (childProcess && childProcess.stdin) {
|
|
1218
|
+
console.log("Writing to process stdin");
|
|
1219
|
+
childProcess.stdin.write(data);
|
|
1220
|
+
}
|
|
1221
|
+
else {
|
|
1222
|
+
console.log("Cannot write to stdin - process not found or no stdin:", {
|
|
1223
|
+
processExists: !!childProcess,
|
|
1224
|
+
stdinExists: (childProcess === null || childProcess === void 0 ? void 0 : childProcess.stdin) ? true : false,
|
|
1225
|
+
});
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
else if (message.type === "killProcess") {
|
|
1229
|
+
// Handle killing a process
|
|
1230
|
+
const processId = message.processId;
|
|
1231
|
+
console.log("Received killProcess for process", processId);
|
|
1232
|
+
const childProcess = this.runningProcesses.get(processId);
|
|
1233
|
+
if (childProcess) {
|
|
1234
|
+
console.log("Killing process");
|
|
1235
|
+
childProcess.kill("SIGTERM");
|
|
1236
|
+
// The process exit handler will update the status and broadcast the change
|
|
1237
|
+
}
|
|
1238
|
+
else {
|
|
1239
|
+
console.log("Cannot kill process - process not found:", {
|
|
1240
|
+
processExists: !!childProcess,
|
|
1241
|
+
});
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
catch (error) {
|
|
1246
|
+
console.error("Error handling WebSocket message:", error);
|
|
1247
|
+
}
|
|
1248
|
+
});
|
|
1249
|
+
ws.on("close", () => {
|
|
1250
|
+
this.clients.delete(ws);
|
|
1251
|
+
console.log("Client disconnected");
|
|
1252
|
+
});
|
|
1253
|
+
ws.on("error", (error) => {
|
|
1254
|
+
console.error("WebSocket error:", error);
|
|
1255
|
+
this.clients.delete(ws);
|
|
1256
|
+
});
|
|
1257
|
+
});
|
|
1258
|
+
// Start HTTP server
|
|
1259
|
+
const httpPort = Number(process.env.HTTP_PORT) || 3000;
|
|
1260
|
+
this.httpServer.listen(httpPort, () => {
|
|
1261
|
+
console.log(`HTTP server running on http://localhost:${httpPort}`);
|
|
1262
|
+
});
|
|
950
1263
|
}
|
|
951
1264
|
async stopSideCar(uid) {
|
|
952
1265
|
console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`stopSideCar ${uid}`)));
|
|
@@ -1038,16 +1351,17 @@ import('${d}').then(async (x) => {
|
|
|
1038
1351
|
waitForInitialPage: false,
|
|
1039
1352
|
executablePath,
|
|
1040
1353
|
headless: true,
|
|
1354
|
+
defaultViewport: null, // Disable default 800x600 viewport
|
|
1041
1355
|
dumpio: false,
|
|
1042
1356
|
devtools: false,
|
|
1043
1357
|
args: [
|
|
1044
|
-
"--disable-features=site-per-process",
|
|
1045
1358
|
"--allow-file-access-from-files",
|
|
1046
1359
|
"--allow-insecure-localhost",
|
|
1047
1360
|
"--allow-running-insecure-content",
|
|
1048
1361
|
"--auto-open-devtools-for-tabs",
|
|
1049
1362
|
"--disable-dev-shm-usage",
|
|
1050
1363
|
"--disable-extensions",
|
|
1364
|
+
"--disable-features=site-per-process",
|
|
1051
1365
|
"--disable-gpu",
|
|
1052
1366
|
"--disable-setuid-sandbox",
|
|
1053
1367
|
"--disable-site-isolation-trials",
|
|
@@ -1057,6 +1371,7 @@ import('${d}').then(async (x) => {
|
|
|
1057
1371
|
"--no-startup-window",
|
|
1058
1372
|
"--reduce-security-for-testing",
|
|
1059
1373
|
"--remote-allow-origins=*",
|
|
1374
|
+
"--start-maximized",
|
|
1060
1375
|
"--unsafely-treat-insecure-origin-as-secure=*",
|
|
1061
1376
|
`--remote-debugging-port=3234`,
|
|
1062
1377
|
// "--disable-features=IsolateOrigins,site-per-process",
|
|
@@ -1103,7 +1418,7 @@ import('${d}').then(async (x) => {
|
|
|
1103
1418
|
},
|
|
1104
1419
|
],
|
|
1105
1420
|
].forEach(async ([eps, launcher, runtime, watcher]) => {
|
|
1106
|
-
const metafile = `./testeranto/
|
|
1421
|
+
const metafile = `./testeranto/metafiles/${runtime}/${this.name}.json`;
|
|
1107
1422
|
await pollForFile(metafile);
|
|
1108
1423
|
Object.entries(eps).forEach(async ([inputFile, outputFile]) => {
|
|
1109
1424
|
// await pollForFile(outputFile);\
|
|
@@ -1170,11 +1485,26 @@ import('${d}').then(async (x) => {
|
|
|
1170
1485
|
this.nodeMetafileWatcher.close();
|
|
1171
1486
|
this.webMetafileWatcher.close();
|
|
1172
1487
|
this.importMetafileWatcher.close();
|
|
1488
|
+
// Close any remaining log streams
|
|
1489
|
+
Object.values(this.logStreams || {}).forEach((logs) => logs.closeAll());
|
|
1490
|
+
// Close WebSocket server
|
|
1491
|
+
this.wss.close(() => {
|
|
1492
|
+
console.log("WebSocket server closed");
|
|
1493
|
+
});
|
|
1494
|
+
// Close all client connections
|
|
1495
|
+
this.clients.forEach((client) => {
|
|
1496
|
+
client.terminate();
|
|
1497
|
+
});
|
|
1498
|
+
this.clients.clear();
|
|
1499
|
+
// Close HTTP server
|
|
1500
|
+
this.httpServer.close(() => {
|
|
1501
|
+
console.log("HTTP server closed");
|
|
1502
|
+
});
|
|
1173
1503
|
this.checkForShutdown();
|
|
1174
1504
|
}
|
|
1175
1505
|
async metafileOutputs(platform) {
|
|
1176
1506
|
const metafile = JSON.parse(fs_1.default
|
|
1177
|
-
.readFileSync(`./testeranto/
|
|
1507
|
+
.readFileSync(`./testeranto/metafiles/${platform}/${this.name}.json`)
|
|
1178
1508
|
.toString()).metafile;
|
|
1179
1509
|
if (!metafile)
|
|
1180
1510
|
return;
|
|
@@ -1216,6 +1546,144 @@ import('${d}').then(async (x) => {
|
|
|
1216
1546
|
}
|
|
1217
1547
|
});
|
|
1218
1548
|
}
|
|
1549
|
+
requestHandler(req, res) {
|
|
1550
|
+
// Parse the URL
|
|
1551
|
+
const parsedUrl = url_1.default.parse(req.url || "/");
|
|
1552
|
+
let pathname = parsedUrl.pathname || "/";
|
|
1553
|
+
// Handle root path
|
|
1554
|
+
if (pathname === "/") {
|
|
1555
|
+
pathname = "/index.html";
|
|
1556
|
+
}
|
|
1557
|
+
// Remove leading slash
|
|
1558
|
+
let filePath = pathname.substring(1);
|
|
1559
|
+
// Determine which directory to serve from
|
|
1560
|
+
if (filePath.startsWith("reports/")) {
|
|
1561
|
+
// Serve from reports directory
|
|
1562
|
+
filePath = `testeranto/${filePath}`;
|
|
1563
|
+
}
|
|
1564
|
+
else if (filePath.startsWith("metafiles/")) {
|
|
1565
|
+
// Serve from metafiles directory
|
|
1566
|
+
filePath = `testeranto/${filePath}`;
|
|
1567
|
+
}
|
|
1568
|
+
else if (filePath === "projects.json") {
|
|
1569
|
+
// Serve projects.json
|
|
1570
|
+
filePath = `testeranto/${filePath}`;
|
|
1571
|
+
}
|
|
1572
|
+
else {
|
|
1573
|
+
// For frontend assets, try multiple possible locations
|
|
1574
|
+
// First, try the dist directory
|
|
1575
|
+
const possiblePaths = [
|
|
1576
|
+
`dist/${filePath}`,
|
|
1577
|
+
`testeranto/dist/${filePath}`,
|
|
1578
|
+
`../dist/${filePath}`,
|
|
1579
|
+
`./${filePath}`,
|
|
1580
|
+
];
|
|
1581
|
+
// Find the first existing file
|
|
1582
|
+
let foundPath = null;
|
|
1583
|
+
for (const possiblePath of possiblePaths) {
|
|
1584
|
+
if (fs_1.default.existsSync(possiblePath)) {
|
|
1585
|
+
foundPath = possiblePath;
|
|
1586
|
+
break;
|
|
1587
|
+
}
|
|
1588
|
+
}
|
|
1589
|
+
if (foundPath) {
|
|
1590
|
+
filePath = foundPath;
|
|
1591
|
+
}
|
|
1592
|
+
else {
|
|
1593
|
+
// If no file found, serve index.html for SPA routing
|
|
1594
|
+
const indexPath = this.findIndexHtml();
|
|
1595
|
+
if (indexPath) {
|
|
1596
|
+
fs_1.default.readFile(indexPath, (err, data) => {
|
|
1597
|
+
if (err) {
|
|
1598
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
1599
|
+
res.end("404 Not Found");
|
|
1600
|
+
return;
|
|
1601
|
+
}
|
|
1602
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
1603
|
+
res.end(data);
|
|
1604
|
+
});
|
|
1605
|
+
return;
|
|
1606
|
+
}
|
|
1607
|
+
else {
|
|
1608
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
1609
|
+
res.end("404 Not Found");
|
|
1610
|
+
return;
|
|
1611
|
+
}
|
|
1612
|
+
}
|
|
1613
|
+
}
|
|
1614
|
+
// Check if file exists
|
|
1615
|
+
fs_1.default.exists(filePath, (exists) => {
|
|
1616
|
+
if (!exists) {
|
|
1617
|
+
// For SPA routing, serve index.html if the path looks like a route
|
|
1618
|
+
if (!pathname.includes(".") && pathname !== "/") {
|
|
1619
|
+
const indexPath = this.findIndexHtml();
|
|
1620
|
+
if (indexPath) {
|
|
1621
|
+
fs_1.default.readFile(indexPath, (err, data) => {
|
|
1622
|
+
if (err) {
|
|
1623
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
1624
|
+
res.end("404 Not Found");
|
|
1625
|
+
return;
|
|
1626
|
+
}
|
|
1627
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
1628
|
+
res.end(data);
|
|
1629
|
+
});
|
|
1630
|
+
return;
|
|
1631
|
+
}
|
|
1632
|
+
else {
|
|
1633
|
+
// Serve a simple message if index.html is not found
|
|
1634
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
1635
|
+
res.end(`
|
|
1636
|
+
<html>
|
|
1637
|
+
<body>
|
|
1638
|
+
<h1>Testeranto is running</h1>
|
|
1639
|
+
<p>Frontend files are not built yet. Run 'npm run build' to build the frontend.</p>
|
|
1640
|
+
</body>
|
|
1641
|
+
</html>
|
|
1642
|
+
`);
|
|
1643
|
+
return;
|
|
1644
|
+
}
|
|
1645
|
+
}
|
|
1646
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
1647
|
+
res.end("404 Not Found");
|
|
1648
|
+
return;
|
|
1649
|
+
}
|
|
1650
|
+
// Read and serve the file
|
|
1651
|
+
fs_1.default.readFile(filePath, (err, data) => {
|
|
1652
|
+
if (err) {
|
|
1653
|
+
res.writeHead(500, { "Content-Type": "text/plain" });
|
|
1654
|
+
res.end("500 Internal Server Error");
|
|
1655
|
+
return;
|
|
1656
|
+
}
|
|
1657
|
+
// Get MIME type
|
|
1658
|
+
const mimeType = mime_types_1.default.lookup(filePath) || "application/octet-stream";
|
|
1659
|
+
res.writeHead(200, { "Content-Type": mimeType });
|
|
1660
|
+
res.end(data);
|
|
1661
|
+
});
|
|
1662
|
+
});
|
|
1663
|
+
}
|
|
1664
|
+
findIndexHtml() {
|
|
1665
|
+
const possiblePaths = [
|
|
1666
|
+
"dist/index.html",
|
|
1667
|
+
"testeranto/dist/index.html",
|
|
1668
|
+
"../dist/index.html",
|
|
1669
|
+
"./index.html",
|
|
1670
|
+
];
|
|
1671
|
+
for (const path of possiblePaths) {
|
|
1672
|
+
if (fs_1.default.existsSync(path)) {
|
|
1673
|
+
return path;
|
|
1674
|
+
}
|
|
1675
|
+
}
|
|
1676
|
+
return null;
|
|
1677
|
+
}
|
|
1678
|
+
broadcast(message) {
|
|
1679
|
+
const data = typeof message === "string" ? message : JSON.stringify(message);
|
|
1680
|
+
this.clients.forEach((client) => {
|
|
1681
|
+
if (client.readyState === 1) {
|
|
1682
|
+
// WebSocket.OPEN
|
|
1683
|
+
client.send(data);
|
|
1684
|
+
}
|
|
1685
|
+
});
|
|
1686
|
+
}
|
|
1219
1687
|
checkQueue() {
|
|
1220
1688
|
const x = this.queue.pop();
|
|
1221
1689
|
if (!x) {
|