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
package/dist/prebuild/run.mjs
CHANGED
|
@@ -8,11 +8,15 @@ import readline from "readline";
|
|
|
8
8
|
import { spawn } from "node:child_process";
|
|
9
9
|
import ansiColors from "ansi-colors";
|
|
10
10
|
import net from "net";
|
|
11
|
-
import
|
|
11
|
+
import fs4, { watch } from "fs";
|
|
12
12
|
import path4 from "path";
|
|
13
13
|
import puppeteer from "puppeteer-core";
|
|
14
14
|
import ansiC2 from "ansi-colors";
|
|
15
15
|
import crypto from "node:crypto";
|
|
16
|
+
import { WebSocketServer } from "ws";
|
|
17
|
+
import http from "http";
|
|
18
|
+
import url from "url";
|
|
19
|
+
import mime from "mime-types";
|
|
16
20
|
|
|
17
21
|
// src/utils.ts
|
|
18
22
|
import path from "path";
|
|
@@ -123,8 +127,7 @@ var Queue = class {
|
|
|
123
127
|
|
|
124
128
|
// src/PM/PM_WithEslintAndTsc.ts
|
|
125
129
|
import ts from "typescript";
|
|
126
|
-
import
|
|
127
|
-
import path3 from "path";
|
|
130
|
+
import fs3 from "fs";
|
|
128
131
|
import ansiC from "ansi-colors";
|
|
129
132
|
import { ESLint } from "eslint";
|
|
130
133
|
import tsc from "tsc-prog";
|
|
@@ -164,10 +167,10 @@ var PM_Base = class {
|
|
|
164
167
|
async newPage() {
|
|
165
168
|
return (await this.browser.newPage()).mainFrame()._id;
|
|
166
169
|
}
|
|
167
|
-
goto(p,
|
|
170
|
+
goto(p, url2) {
|
|
168
171
|
return new Promise((res) => {
|
|
169
172
|
this.doInPage(p, async (page) => {
|
|
170
|
-
await page?.goto(
|
|
173
|
+
await page?.goto(url2);
|
|
171
174
|
res({});
|
|
172
175
|
});
|
|
173
176
|
});
|
|
@@ -250,7 +253,6 @@ var PM_Base = class {
|
|
|
250
253
|
const filepath = x[0];
|
|
251
254
|
const contents = x[1];
|
|
252
255
|
const testName = x[2];
|
|
253
|
-
console.log("writing file", filepath);
|
|
254
256
|
return new Promise(async (res) => {
|
|
255
257
|
fs.mkdirSync(path2.dirname(filepath), {
|
|
256
258
|
recursive: true
|
|
@@ -390,6 +392,142 @@ var PM_Base = class {
|
|
|
390
392
|
}
|
|
391
393
|
};
|
|
392
394
|
|
|
395
|
+
// src/utils/makePrompt.ts
|
|
396
|
+
import fs2 from "fs";
|
|
397
|
+
import path3 from "path";
|
|
398
|
+
|
|
399
|
+
// src/utils/logFiles.ts
|
|
400
|
+
var LOG_FILES = {
|
|
401
|
+
TESTS: "tests.json",
|
|
402
|
+
TYPE_ERRORS: "type_errors.txt",
|
|
403
|
+
LINT_ERRORS: "lint_errors.txt",
|
|
404
|
+
EXIT: "exit.log",
|
|
405
|
+
MESSAGE: "message.txt",
|
|
406
|
+
PROMPT: "prompt.txt",
|
|
407
|
+
STDOUT: "stdout.log",
|
|
408
|
+
STDERR: "stderr.log",
|
|
409
|
+
INFO: "info.log",
|
|
410
|
+
ERROR: "error.log",
|
|
411
|
+
WARN: "warn.log",
|
|
412
|
+
DEBUG: "debug.log"
|
|
413
|
+
};
|
|
414
|
+
var STANDARD_LOGS = {
|
|
415
|
+
TESTS: "tests.json",
|
|
416
|
+
TYPE_ERRORS: "type_errors.txt",
|
|
417
|
+
LINT_ERRORS: "lint_errors.txt",
|
|
418
|
+
EXIT: "exit.log",
|
|
419
|
+
MESSAGE: "message.txt",
|
|
420
|
+
PROMPT: "prompt.txt"
|
|
421
|
+
};
|
|
422
|
+
var RUNTIME_SPECIFIC_LOGS = {
|
|
423
|
+
node: {
|
|
424
|
+
STDOUT: "stdout.log",
|
|
425
|
+
STDERR: "stderr.log"
|
|
426
|
+
},
|
|
427
|
+
web: {
|
|
428
|
+
INFO: "info.log",
|
|
429
|
+
ERROR: "error.log",
|
|
430
|
+
WARN: "warn.log",
|
|
431
|
+
DEBUG: "debug.log"
|
|
432
|
+
},
|
|
433
|
+
pure: {}
|
|
434
|
+
// No runtime-specific logs for pure
|
|
435
|
+
};
|
|
436
|
+
var ALL_LOGS = {
|
|
437
|
+
...STANDARD_LOGS,
|
|
438
|
+
...Object.values(RUNTIME_SPECIFIC_LOGS).reduce((acc, logs) => ({ ...acc, ...logs }), {})
|
|
439
|
+
};
|
|
440
|
+
var getRuntimeLogs = (runtime) => {
|
|
441
|
+
return {
|
|
442
|
+
standard: Object.values(STANDARD_LOGS),
|
|
443
|
+
runtimeSpecific: Object.values(RUNTIME_SPECIFIC_LOGS[runtime])
|
|
444
|
+
};
|
|
445
|
+
};
|
|
446
|
+
function getLogFilesForRuntime(runtime) {
|
|
447
|
+
const { standard, runtimeSpecific } = getRuntimeLogs(runtime);
|
|
448
|
+
return [...standard, ...runtimeSpecific];
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// src/utils/makePrompt.ts
|
|
452
|
+
var makePrompt = async (summary, name, entryPoint, addableFiles, runtime) => {
|
|
453
|
+
summary[entryPoint].prompt = "?";
|
|
454
|
+
const promptPath = promptPather(entryPoint, runtime, name);
|
|
455
|
+
const testDir = path3.join(
|
|
456
|
+
"testeranto",
|
|
457
|
+
"reports",
|
|
458
|
+
name,
|
|
459
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
460
|
+
runtime
|
|
461
|
+
);
|
|
462
|
+
if (!fs2.existsSync(testDir)) {
|
|
463
|
+
fs2.mkdirSync(testDir, { recursive: true });
|
|
464
|
+
}
|
|
465
|
+
const testPaths = path3.join(testDir, LOG_FILES.TESTS);
|
|
466
|
+
const lintPath = path3.join(testDir, LOG_FILES.LINT_ERRORS);
|
|
467
|
+
const typePath = path3.join(testDir, LOG_FILES.TYPE_ERRORS);
|
|
468
|
+
const messagePath = path3.join(testDir, LOG_FILES.MESSAGE);
|
|
469
|
+
try {
|
|
470
|
+
await Promise.all([
|
|
471
|
+
fs2.promises.writeFile(
|
|
472
|
+
promptPath,
|
|
473
|
+
`
|
|
474
|
+
${addableFiles.map((x) => {
|
|
475
|
+
return `/add ${x}`;
|
|
476
|
+
}).join("\n")}
|
|
477
|
+
|
|
478
|
+
/read node_modules/testeranto/docs/index.md
|
|
479
|
+
/read node_modules/testeranto/docs/style.md
|
|
480
|
+
/read node_modules/testeranto/docs/testing.ai.txt
|
|
481
|
+
/read node_modules/testeranto/src/CoreTypes.ts
|
|
482
|
+
|
|
483
|
+
/read ${testPaths}
|
|
484
|
+
/read ${typePath}
|
|
485
|
+
/read ${lintPath}
|
|
486
|
+
|
|
487
|
+
/read ${getLogFilesForRuntime(runtime).map((p) => `${testDir}/${p}`).join(" ")}
|
|
488
|
+
`
|
|
489
|
+
),
|
|
490
|
+
fs2.promises.writeFile(
|
|
491
|
+
messagePath,
|
|
492
|
+
`
|
|
493
|
+
There are 3 types of test reports.
|
|
494
|
+
1) bdd (highest priority)
|
|
495
|
+
2) type checker
|
|
496
|
+
3) static analysis (lowest priority)
|
|
497
|
+
|
|
498
|
+
"tests.json" is the detailed result of the bdd tests.
|
|
499
|
+
if these files do not exist, then something has gone badly wrong and needs to be addressed.
|
|
500
|
+
|
|
501
|
+
"type_errors.txt" is the result of the type checker.
|
|
502
|
+
if this file does not exist, then type check passed without errors;
|
|
503
|
+
|
|
504
|
+
"lint_errors.txt" is the result of the static analysis.
|
|
505
|
+
if this file does not exist, then static analysis passed without errors;
|
|
506
|
+
|
|
507
|
+
BDD failures are the highest priority. Focus on passing BDD tests before addressing other concerns.
|
|
508
|
+
Do not add error throwing/catching to the tests themselves.
|
|
509
|
+
`
|
|
510
|
+
)
|
|
511
|
+
]);
|
|
512
|
+
} catch (e) {
|
|
513
|
+
console.error(`Failed to write prompt files at ${testDir}`);
|
|
514
|
+
console.error(e);
|
|
515
|
+
throw e;
|
|
516
|
+
}
|
|
517
|
+
summary[entryPoint].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${name}/reports/${runtime}/${entryPoint.split(".").slice(0, -1).join(".")}/prompt.txt`;
|
|
518
|
+
};
|
|
519
|
+
var makePromptInternal = (summary, name, entryPoint, addableFiles, runTime) => {
|
|
520
|
+
if (runTime === "node") {
|
|
521
|
+
return makePrompt(summary, name, entryPoint, addableFiles, "node");
|
|
522
|
+
}
|
|
523
|
+
if (runTime === "web") {
|
|
524
|
+
return makePrompt(summary, name, entryPoint, addableFiles, "web");
|
|
525
|
+
}
|
|
526
|
+
if (runTime === "pure") {
|
|
527
|
+
return makePrompt(summary, name, entryPoint, addableFiles, "pure");
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
|
|
393
531
|
// src/PM/PM_WithEslintAndTsc.ts
|
|
394
532
|
var eslint = new ESLint();
|
|
395
533
|
var formatter = await eslint.loadFormatter(
|
|
@@ -452,7 +590,7 @@ var PM_WithEslintAndTsc = class extends PM_Base {
|
|
|
452
590
|
);
|
|
453
591
|
}
|
|
454
592
|
});
|
|
455
|
-
|
|
593
|
+
fs3.writeFileSync(tscPath, results.join("\n"));
|
|
456
594
|
this.typeCheckIsNowDone(entrypoint, results.length);
|
|
457
595
|
};
|
|
458
596
|
this.eslintCheck = async (entrypoint, platform, addableFiles) => {
|
|
@@ -467,93 +605,25 @@ var PM_WithEslintAndTsc = class extends PM_Base {
|
|
|
467
605
|
process.exit(-1);
|
|
468
606
|
}
|
|
469
607
|
const filepath = lintPather(entrypoint, platform, this.name);
|
|
470
|
-
if (
|
|
471
|
-
|
|
608
|
+
if (fs3.existsSync(filepath))
|
|
609
|
+
fs3.rmSync(filepath);
|
|
472
610
|
const results = (await eslint.lintFiles(addableFiles)).filter((r) => r.messages.length).filter((r) => {
|
|
473
611
|
return r.messages[0].ruleId !== null;
|
|
474
612
|
}).map((r) => {
|
|
475
613
|
delete r.source;
|
|
476
614
|
return r;
|
|
477
615
|
});
|
|
478
|
-
|
|
616
|
+
fs3.writeFileSync(filepath, await formatter.format(results));
|
|
479
617
|
this.lintIsNowDone(entrypoint, results.length);
|
|
480
618
|
};
|
|
481
619
|
this.makePrompt = async (entryPoint, addableFiles, platform) => {
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
const testPaths = path3.join(
|
|
485
|
-
"testeranto",
|
|
486
|
-
"reports",
|
|
487
|
-
this.name,
|
|
488
|
-
entryPoint.split(".").slice(0, -1).join("."),
|
|
489
|
-
platform,
|
|
490
|
-
`tests.json`
|
|
491
|
-
);
|
|
492
|
-
const featuresPath = path3.join(
|
|
493
|
-
"testeranto",
|
|
494
|
-
"reports",
|
|
495
|
-
this.name,
|
|
496
|
-
platform,
|
|
497
|
-
entryPoint.split(".").slice(0, -1).join("."),
|
|
498
|
-
`featurePrompt.txt`
|
|
499
|
-
);
|
|
500
|
-
const logPath = path3.join(
|
|
501
|
-
"testeranto",
|
|
502
|
-
"reports",
|
|
620
|
+
await makePromptInternal(
|
|
621
|
+
this.summary,
|
|
503
622
|
this.name,
|
|
504
|
-
entryPoint
|
|
505
|
-
|
|
506
|
-
|
|
623
|
+
entryPoint,
|
|
624
|
+
addableFiles,
|
|
625
|
+
platform
|
|
507
626
|
);
|
|
508
|
-
const lintPath = path3.join(
|
|
509
|
-
"testeranto",
|
|
510
|
-
"reports",
|
|
511
|
-
this.name,
|
|
512
|
-
entryPoint.split(".").slice(0, -1).join("."),
|
|
513
|
-
platform,
|
|
514
|
-
`lint_errors.txt`
|
|
515
|
-
);
|
|
516
|
-
const typePath = path3.join(
|
|
517
|
-
"testeranto",
|
|
518
|
-
"reports",
|
|
519
|
-
this.name,
|
|
520
|
-
entryPoint.split(".").slice(0, -1).join("."),
|
|
521
|
-
platform,
|
|
522
|
-
`type_errors.txt`
|
|
523
|
-
);
|
|
524
|
-
const messagePath = path3.join(
|
|
525
|
-
"testeranto",
|
|
526
|
-
"reports",
|
|
527
|
-
this.name,
|
|
528
|
-
entryPoint.split(".").slice(0, -1).join("."),
|
|
529
|
-
platform,
|
|
530
|
-
`message.txt`
|
|
531
|
-
);
|
|
532
|
-
fs2.writeFileSync(
|
|
533
|
-
promptPath,
|
|
534
|
-
`
|
|
535
|
-
${addableFiles.map((x) => {
|
|
536
|
-
return `/add ${x}`;
|
|
537
|
-
}).join("\n")}
|
|
538
|
-
|
|
539
|
-
/read node_modules/testeranto/docs/index.md
|
|
540
|
-
/read node_modules/testeranto/docs/style.md
|
|
541
|
-
/read node_modules/testeranto/docs/testing.ai.txt
|
|
542
|
-
/read node_modules/testeranto/src/CoreTypes.ts
|
|
543
|
-
|
|
544
|
-
/read ${testPaths}
|
|
545
|
-
/read ${logPath}
|
|
546
|
-
/read ${typePath}
|
|
547
|
-
/read ${lintPath}
|
|
548
|
-
`
|
|
549
|
-
);
|
|
550
|
-
fs2.writeFileSync(
|
|
551
|
-
messagePath,
|
|
552
|
-
`
|
|
553
|
-
Fix the failing tests described in ${testPaths} and ${logPath}. Focus on the bdd tests before all other concerns. You may add any debugging you think is necessary.
|
|
554
|
-
`
|
|
555
|
-
);
|
|
556
|
-
this.summary[entryPoint].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${this.name}/reports/${platform}/${entryPoint.split(".").slice(0, -1).join(".")}/prompt.txt`;
|
|
557
627
|
this.checkForShutdown();
|
|
558
628
|
};
|
|
559
629
|
this.typeCheckIsRunning = (src) => {
|
|
@@ -615,10 +685,13 @@ Fix the failing tests described in ${testPaths} and ${logPath}. Focus on the bdd
|
|
|
615
685
|
this.checkForShutdown();
|
|
616
686
|
};
|
|
617
687
|
this.writeBigBoard = () => {
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
688
|
+
const summaryPath = `./testeranto/reports/${this.name}/summary.json`;
|
|
689
|
+
const summaryData = JSON.stringify(this.summary, null, 2);
|
|
690
|
+
fs3.writeFileSync(summaryPath, summaryData);
|
|
691
|
+
this.broadcast({
|
|
692
|
+
type: "summaryUpdate",
|
|
693
|
+
data: this.summary
|
|
694
|
+
});
|
|
622
695
|
};
|
|
623
696
|
this.name = name;
|
|
624
697
|
this.mode = mode2;
|
|
@@ -651,10 +724,80 @@ var changes = {};
|
|
|
651
724
|
var fileHashes = {};
|
|
652
725
|
var files2 = {};
|
|
653
726
|
var screenshots2 = {};
|
|
727
|
+
function runtimeLogs(runtime, reportDest) {
|
|
728
|
+
const safeDest = reportDest || `testeranto/reports/default_${Date.now()}`;
|
|
729
|
+
try {
|
|
730
|
+
if (!fs4.existsSync(safeDest)) {
|
|
731
|
+
fs4.mkdirSync(safeDest, { recursive: true });
|
|
732
|
+
}
|
|
733
|
+
if (runtime === "node") {
|
|
734
|
+
return {
|
|
735
|
+
stdout: fs4.createWriteStream(`${safeDest}/stdout.log`),
|
|
736
|
+
stderr: fs4.createWriteStream(`${safeDest}/stderr.log`),
|
|
737
|
+
exit: fs4.createWriteStream(`${safeDest}/exit.log`)
|
|
738
|
+
};
|
|
739
|
+
} else if (runtime === "web") {
|
|
740
|
+
return {
|
|
741
|
+
info: fs4.createWriteStream(`${safeDest}/info.log`),
|
|
742
|
+
warn: fs4.createWriteStream(`${safeDest}/warn.log`),
|
|
743
|
+
error: fs4.createWriteStream(`${safeDest}/error.log`),
|
|
744
|
+
debug: fs4.createWriteStream(`${safeDest}/debug.log`),
|
|
745
|
+
exit: fs4.createWriteStream(`${safeDest}/exit.log`)
|
|
746
|
+
};
|
|
747
|
+
} else if (runtime === "pure") {
|
|
748
|
+
return {
|
|
749
|
+
exit: fs4.createWriteStream(`${safeDest}/exit.log`)
|
|
750
|
+
};
|
|
751
|
+
} else {
|
|
752
|
+
throw `unknown runtime: ${runtime}`;
|
|
753
|
+
}
|
|
754
|
+
} catch (e) {
|
|
755
|
+
console.error(`Failed to create log streams in ${safeDest}:`, e);
|
|
756
|
+
throw e;
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
function createLogStreams(reportDest, runtime) {
|
|
760
|
+
if (!fs4.existsSync(reportDest)) {
|
|
761
|
+
fs4.mkdirSync(reportDest, { recursive: true });
|
|
762
|
+
}
|
|
763
|
+
const streams = runtimeLogs(runtime, reportDest);
|
|
764
|
+
const safeDest = reportDest || `testeranto/reports/default_${Date.now()}`;
|
|
765
|
+
try {
|
|
766
|
+
if (!fs4.existsSync(safeDest)) {
|
|
767
|
+
fs4.mkdirSync(safeDest, { recursive: true });
|
|
768
|
+
}
|
|
769
|
+
const streams2 = runtimeLogs(runtime, safeDest);
|
|
770
|
+
return {
|
|
771
|
+
...streams2,
|
|
772
|
+
closeAll: () => {
|
|
773
|
+
Object.values(streams2).forEach(
|
|
774
|
+
(stream) => !stream.closed && stream.close()
|
|
775
|
+
);
|
|
776
|
+
},
|
|
777
|
+
writeExitCode: (code, error) => {
|
|
778
|
+
if (error) {
|
|
779
|
+
streams2.exit.write(`Error: ${error.message}
|
|
780
|
+
`);
|
|
781
|
+
if (error.stack) {
|
|
782
|
+
streams2.exit.write(`Stack Trace:
|
|
783
|
+
${error.stack}
|
|
784
|
+
`);
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
streams2.exit.write(`${code}
|
|
788
|
+
`);
|
|
789
|
+
},
|
|
790
|
+
exit: streams2.exit
|
|
791
|
+
};
|
|
792
|
+
} catch (e) {
|
|
793
|
+
console.error(`Failed to create log streams in ${safeDest}:`, e);
|
|
794
|
+
throw e;
|
|
795
|
+
}
|
|
796
|
+
}
|
|
654
797
|
async function fileHash(filePath, algorithm = "md5") {
|
|
655
798
|
return new Promise((resolve, reject) => {
|
|
656
799
|
const hash = crypto.createHash(algorithm);
|
|
657
|
-
const fileStream =
|
|
800
|
+
const fileStream = fs4.createReadStream(filePath);
|
|
658
801
|
fileStream.on("data", (data) => {
|
|
659
802
|
hash.update(data);
|
|
660
803
|
});
|
|
@@ -669,20 +812,26 @@ async function fileHash(filePath, algorithm = "md5") {
|
|
|
669
812
|
}
|
|
670
813
|
var statusMessagePretty = (failures, test, runtime) => {
|
|
671
814
|
if (failures === 0) {
|
|
815
|
+
console.log(ansiC2.green(ansiC2.inverse(`${runtime} > ${test}`)));
|
|
816
|
+
} else if (failures > 0) {
|
|
672
817
|
console.log(
|
|
673
|
-
ansiC2.
|
|
818
|
+
ansiC2.red(
|
|
819
|
+
ansiC2.inverse(
|
|
820
|
+
`${runtime} > ${test} failed ${failures} times (exit code: ${failures})`
|
|
821
|
+
)
|
|
822
|
+
)
|
|
674
823
|
);
|
|
675
824
|
} else {
|
|
676
825
|
console.log(
|
|
677
|
-
ansiC2.red(ansiC2.inverse(`${runtime} > ${test}
|
|
826
|
+
ansiC2.red(ansiC2.inverse(`${runtime} > ${test} crashed (exit code: -1)`))
|
|
678
827
|
);
|
|
679
828
|
}
|
|
680
829
|
};
|
|
681
830
|
async function writeFileAndCreateDir(filePath, data) {
|
|
682
831
|
const dirPath = path4.dirname(filePath);
|
|
683
832
|
try {
|
|
684
|
-
await
|
|
685
|
-
await
|
|
833
|
+
await fs4.promises.mkdir(dirPath, { recursive: true });
|
|
834
|
+
await fs4.writeFileSync(filePath, data);
|
|
686
835
|
} catch (error) {
|
|
687
836
|
console.error(`Error writing file: ${error}`);
|
|
688
837
|
}
|
|
@@ -707,7 +856,7 @@ function isValidUrl(string) {
|
|
|
707
856
|
async function pollForFile(path5, timeout = 2e3) {
|
|
708
857
|
const intervalObj = setInterval(function() {
|
|
709
858
|
const file = path5;
|
|
710
|
-
const fileExists =
|
|
859
|
+
const fileExists = fs4.existsSync(file);
|
|
711
860
|
if (fileExists) {
|
|
712
861
|
clearInterval(intervalObj);
|
|
713
862
|
}
|
|
@@ -716,6 +865,12 @@ async function pollForFile(path5, timeout = 2e3) {
|
|
|
716
865
|
var PM_Main = class extends PM_WithEslintAndTsc {
|
|
717
866
|
constructor(configs, name, mode2) {
|
|
718
867
|
super(configs, name, mode2);
|
|
868
|
+
this.logStreams = {};
|
|
869
|
+
this.sidecars = {};
|
|
870
|
+
this.clients = /* @__PURE__ */ new Set();
|
|
871
|
+
this.runningProcesses = /* @__PURE__ */ new Map();
|
|
872
|
+
this.allProcesses = /* @__PURE__ */ new Map();
|
|
873
|
+
this.processLogs = /* @__PURE__ */ new Map();
|
|
719
874
|
this.getRunnables = (tests, testName, payload = {
|
|
720
875
|
nodeEntryPoints: {},
|
|
721
876
|
nodeEntryPointSidecars: {},
|
|
@@ -730,11 +885,11 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
730
885
|
console.log(ansiC2.green(ansiC2.inverse(`pure < ${src}`)));
|
|
731
886
|
this.bddTestIsRunning(src);
|
|
732
887
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/pure`;
|
|
733
|
-
if (!
|
|
734
|
-
|
|
888
|
+
if (!fs4.existsSync(reportDest)) {
|
|
889
|
+
fs4.mkdirSync(reportDest, { recursive: true });
|
|
735
890
|
}
|
|
736
891
|
const destFolder = dest.replace(".mjs", "");
|
|
737
|
-
let
|
|
892
|
+
let argz2 = "";
|
|
738
893
|
const testConfig = this.configs.tests.find((t) => {
|
|
739
894
|
return t[0] === src;
|
|
740
895
|
});
|
|
@@ -745,7 +900,7 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
745
900
|
const testConfigResource = testConfig[2];
|
|
746
901
|
const portsToUse = [];
|
|
747
902
|
if (testConfigResource.ports === 0) {
|
|
748
|
-
|
|
903
|
+
argz2 = JSON.stringify({
|
|
749
904
|
scheduled: true,
|
|
750
905
|
name: src,
|
|
751
906
|
ports: portsToUse,
|
|
@@ -761,7 +916,7 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
761
916
|
portsToUse.push(openPorts[i][0]);
|
|
762
917
|
this.ports[openPorts[i][0]] = src;
|
|
763
918
|
}
|
|
764
|
-
|
|
919
|
+
argz2 = JSON.stringify({
|
|
765
920
|
scheduled: true,
|
|
766
921
|
name: src,
|
|
767
922
|
ports: portsToUse,
|
|
@@ -770,22 +925,24 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
770
925
|
});
|
|
771
926
|
} else {
|
|
772
927
|
this.queue.push(src);
|
|
773
|
-
return;
|
|
928
|
+
return [Math.random(), argz2];
|
|
774
929
|
}
|
|
775
930
|
} else {
|
|
776
931
|
console.error("negative port makes no sense", src);
|
|
777
932
|
process.exit(-1);
|
|
778
933
|
}
|
|
779
934
|
const builtfile = dest;
|
|
935
|
+
const logs = createLogStreams(reportDest, "pure");
|
|
780
936
|
try {
|
|
781
937
|
await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
|
|
938
|
+
const originalConsole = { ...console };
|
|
782
939
|
return module.default.then((defaultModule) => {
|
|
783
|
-
defaultModule.receiveTestResourceConfig(
|
|
940
|
+
defaultModule.receiveTestResourceConfig(argz2).then(async (results) => {
|
|
784
941
|
statusMessagePretty(results.fails, src, "pure");
|
|
785
942
|
this.bddTestIsNowDone(src, results.fails);
|
|
786
943
|
}).catch((e1) => {
|
|
787
944
|
console.log(
|
|
788
|
-
ansiC2.red(`launchPure - ${src} errored with: ${e1}`)
|
|
945
|
+
ansiC2.red(`launchPure - ${src} errored with: ${e1.stack}`)
|
|
789
946
|
);
|
|
790
947
|
this.bddTestIsNowDone(src, -1);
|
|
791
948
|
statusMessagePretty(-1, src, "pure");
|
|
@@ -793,27 +950,29 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
793
950
|
}).catch((e2) => {
|
|
794
951
|
console.log(
|
|
795
952
|
ansiColors.red(
|
|
796
|
-
`pure ! ${src} failed to execute. No "tests.json" file was generated. Check
|
|
953
|
+
`pure ! ${src} failed to execute. No "tests.json" file was generated. Check the logs for more info`
|
|
797
954
|
)
|
|
798
955
|
);
|
|
799
|
-
|
|
956
|
+
logs.exit.write(e2.stack);
|
|
957
|
+
logs.exit.write(-1);
|
|
800
958
|
this.bddTestIsNowDone(src, -1);
|
|
801
959
|
statusMessagePretty(-1, src, "pure");
|
|
802
960
|
}).finally((x) => {
|
|
803
961
|
});
|
|
804
962
|
});
|
|
805
963
|
} catch (e3) {
|
|
964
|
+
logs.writeExitCode(-1, e3);
|
|
806
965
|
console.log(
|
|
807
966
|
ansiC2.red(
|
|
808
967
|
ansiC2.inverse(
|
|
809
|
-
`${src} 1 errored with: ${e3}. Check
|
|
968
|
+
`${src} 1 errored with: ${e3}. Check logs for more info`
|
|
810
969
|
)
|
|
811
970
|
)
|
|
812
971
|
);
|
|
813
|
-
|
|
972
|
+
logs.exit.write(e3.stack);
|
|
973
|
+
logs.exit.write(-1);
|
|
814
974
|
this.bddTestIsNowDone(src, -1);
|
|
815
975
|
statusMessagePretty(-1, src, "pure");
|
|
816
|
-
console.log("III) PURE IS EXITING BADLY WITH error", e3);
|
|
817
976
|
}
|
|
818
977
|
for (let i = 0; i <= portsToUse.length; i++) {
|
|
819
978
|
if (portsToUse[i]) {
|
|
@@ -825,8 +984,8 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
825
984
|
console.log(ansiC2.green(ansiC2.inverse(`node < ${src}`)));
|
|
826
985
|
this.bddTestIsRunning(src);
|
|
827
986
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
|
|
828
|
-
if (!
|
|
829
|
-
|
|
987
|
+
if (!fs4.existsSync(reportDest)) {
|
|
988
|
+
fs4.mkdirSync(reportDest, { recursive: true });
|
|
830
989
|
}
|
|
831
990
|
let testResources = "";
|
|
832
991
|
const testConfig = this.configs.tests.find((t) => {
|
|
@@ -872,7 +1031,7 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
872
1031
|
)
|
|
873
1032
|
);
|
|
874
1033
|
this.queue.push(src);
|
|
875
|
-
return;
|
|
1034
|
+
return [Math.random(), argz];
|
|
876
1035
|
}
|
|
877
1036
|
} else {
|
|
878
1037
|
console.error("negative port makes no sense", src);
|
|
@@ -931,41 +1090,46 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
931
1090
|
}
|
|
932
1091
|
});
|
|
933
1092
|
});
|
|
934
|
-
const
|
|
935
|
-
const errFile = `${reportDest}/logs.txt`;
|
|
936
|
-
if (fs3.existsSync(errFile)) {
|
|
937
|
-
fs3.rmSync(errFile);
|
|
938
|
-
}
|
|
1093
|
+
const logs = createLogStreams(reportDest, "node");
|
|
939
1094
|
server.listen(ipcfile, () => {
|
|
940
|
-
child.stderr?.on("data", (data) => {
|
|
941
|
-
oStream.write(`stderr > ${data}`);
|
|
942
|
-
});
|
|
943
1095
|
child.stdout?.on("data", (data) => {
|
|
944
|
-
|
|
1096
|
+
logs.stdout?.write(data);
|
|
1097
|
+
});
|
|
1098
|
+
child.stderr?.on("data", (data) => {
|
|
1099
|
+
logs.stderr?.write(data);
|
|
945
1100
|
});
|
|
946
1101
|
child.on("error", (err) => {
|
|
947
1102
|
});
|
|
948
1103
|
child.on("close", (code) => {
|
|
1104
|
+
const exitCode = code === null ? -1 : code;
|
|
1105
|
+
if (exitCode < 0) {
|
|
1106
|
+
logs.writeExitCode(
|
|
1107
|
+
exitCode,
|
|
1108
|
+
new Error("Process crashed or was terminated")
|
|
1109
|
+
);
|
|
1110
|
+
} else {
|
|
1111
|
+
logs.writeExitCode(exitCode);
|
|
1112
|
+
}
|
|
1113
|
+
logs.closeAll();
|
|
949
1114
|
server.close();
|
|
950
1115
|
if (!files2[src]) {
|
|
951
1116
|
files2[src] = /* @__PURE__ */ new Set();
|
|
952
1117
|
}
|
|
953
|
-
if (
|
|
1118
|
+
if (exitCode === 255) {
|
|
954
1119
|
console.log(
|
|
955
1120
|
ansiColors.red(
|
|
956
|
-
`node ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/
|
|
1121
|
+
`node ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/stderr.log for more info`
|
|
957
1122
|
)
|
|
958
1123
|
);
|
|
959
1124
|
this.bddTestIsNowDone(src, -1);
|
|
960
1125
|
statusMessagePretty(-1, src, "node");
|
|
961
|
-
oStream.close();
|
|
962
1126
|
return;
|
|
963
|
-
} else if (
|
|
1127
|
+
} else if (exitCode === 0) {
|
|
964
1128
|
this.bddTestIsNowDone(src, 0);
|
|
965
1129
|
statusMessagePretty(0, src, "node");
|
|
966
1130
|
} else {
|
|
967
|
-
this.bddTestIsNowDone(src,
|
|
968
|
-
statusMessagePretty(
|
|
1131
|
+
this.bddTestIsNowDone(src, exitCode);
|
|
1132
|
+
statusMessagePretty(exitCode, src, "node");
|
|
969
1133
|
}
|
|
970
1134
|
haltReturns = true;
|
|
971
1135
|
});
|
|
@@ -983,11 +1147,10 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
983
1147
|
console.log(
|
|
984
1148
|
ansiC2.red(
|
|
985
1149
|
ansiC2.inverse(
|
|
986
|
-
`${src} errored with: ${e.name}. Check
|
|
1150
|
+
`${src} errored with: ${e.name}. Check error logs for more info`
|
|
987
1151
|
)
|
|
988
1152
|
)
|
|
989
1153
|
);
|
|
990
|
-
this.writeFileSync(`${reportDest}/logs.txt`, e.toString(), src);
|
|
991
1154
|
this.bddTestIsNowDone(src, -1);
|
|
992
1155
|
statusMessagePretty(-1, src, "node");
|
|
993
1156
|
});
|
|
@@ -998,9 +1161,7 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
998
1161
|
const dest = src.split(".").slice(0, -1).join(".");
|
|
999
1162
|
const destFolder = dest.replace(".mjs", "");
|
|
1000
1163
|
console.log(ansiC2.green(ansiC2.inverse(`launchWebSideCar ${src}`)));
|
|
1001
|
-
const
|
|
1002
|
-
const doneFileStream2 = [];
|
|
1003
|
-
const oStream = fs3.createWriteStream(`${destFolder}/logs.txt`);
|
|
1164
|
+
const logs = createLogStreams(dest, "web");
|
|
1004
1165
|
return new Promise((res, rej) => {
|
|
1005
1166
|
this.browser.newPage().then(async (page) => {
|
|
1006
1167
|
this.mapping().forEach(async ([command, func]) => {
|
|
@@ -1014,34 +1175,44 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
1014
1175
|
Promise.all(screenshots2[src] || []).then(() => {
|
|
1015
1176
|
delete screenshots2[src];
|
|
1016
1177
|
page.close();
|
|
1017
|
-
oStream.close();
|
|
1018
1178
|
});
|
|
1019
1179
|
};
|
|
1020
1180
|
page.on("pageerror", (err) => {
|
|
1021
1181
|
console.debug(`Error from ${src}: [${err.name}] `);
|
|
1022
|
-
|
|
1023
|
-
oStream.write("\n");
|
|
1182
|
+
console.debug(`Error from ${src}: [${err.name}] `);
|
|
1024
1183
|
if (err.cause) {
|
|
1025
1184
|
console.debug(`Error from ${src} cause: [${err.cause}] `);
|
|
1026
|
-
oStream.write(err.cause);
|
|
1027
|
-
oStream.write("\n");
|
|
1028
1185
|
}
|
|
1029
1186
|
if (err.stack) {
|
|
1030
1187
|
console.debug(`Error from stack ${src}: [${err.stack}] `);
|
|
1031
|
-
oStream.write(err.stack);
|
|
1032
|
-
oStream.write("\n");
|
|
1033
1188
|
}
|
|
1034
1189
|
console.debug(`Error from message ${src}: [${err.message}] `);
|
|
1035
|
-
oStream.write(err.message);
|
|
1036
|
-
oStream.write("\n");
|
|
1037
1190
|
this.bddTestIsNowDone(src, -1);
|
|
1038
1191
|
close();
|
|
1039
1192
|
});
|
|
1040
1193
|
page.on("console", (log) => {
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1194
|
+
const msg = `${log.text()}
|
|
1195
|
+
${JSON.stringify(
|
|
1196
|
+
log.location()
|
|
1197
|
+
)}
|
|
1198
|
+
${JSON.stringify(log.stackTrace())}
|
|
1199
|
+
`;
|
|
1200
|
+
switch (log.type()) {
|
|
1201
|
+
case "info":
|
|
1202
|
+
logs.info?.write(msg);
|
|
1203
|
+
break;
|
|
1204
|
+
case "warn":
|
|
1205
|
+
logs.warn?.write(msg);
|
|
1206
|
+
break;
|
|
1207
|
+
case "error":
|
|
1208
|
+
logs.error?.write(msg);
|
|
1209
|
+
break;
|
|
1210
|
+
case "debug":
|
|
1211
|
+
logs.debug?.write(msg);
|
|
1212
|
+
break;
|
|
1213
|
+
default:
|
|
1214
|
+
break;
|
|
1215
|
+
}
|
|
1045
1216
|
});
|
|
1046
1217
|
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
1047
1218
|
const webArgz = JSON.stringify({
|
|
@@ -1087,13 +1258,14 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
1087
1258
|
console.log(ansiC2.green(ansiC2.inverse(`launchNodeSideCar ${sidecar[0]}`)));
|
|
1088
1259
|
const destFolder = dest.replace(".ts", "");
|
|
1089
1260
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
|
|
1090
|
-
const
|
|
1261
|
+
const argz2 = {
|
|
1091
1262
|
name: sidecar[0],
|
|
1092
1263
|
ports: [],
|
|
1093
1264
|
fs: destFolder,
|
|
1094
1265
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
1095
1266
|
};
|
|
1096
1267
|
const testReq = sidecar[2];
|
|
1268
|
+
const logs = createLogStreams(dest, "node");
|
|
1097
1269
|
const portsToUse = [];
|
|
1098
1270
|
if (testReq.ports === 0) {
|
|
1099
1271
|
} else if (testReq.ports > 0) {
|
|
@@ -1102,10 +1274,10 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
1102
1274
|
);
|
|
1103
1275
|
if (openPorts.length >= testReq.ports) {
|
|
1104
1276
|
for (let i = 0; i < testReq.ports; i++) {
|
|
1105
|
-
portsToUse.push(openPorts[i][0]);
|
|
1277
|
+
portsToUse.push(Number(openPorts[i][0]));
|
|
1106
1278
|
this.ports[openPorts[i][0]] = src;
|
|
1107
1279
|
}
|
|
1108
|
-
|
|
1280
|
+
argz2.ports = portsToUse;
|
|
1109
1281
|
const builtfile = destFolder + ".mjs";
|
|
1110
1282
|
let haltReturns = false;
|
|
1111
1283
|
let buffer = new Buffer("");
|
|
@@ -1142,22 +1314,13 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
1142
1314
|
});
|
|
1143
1315
|
});
|
|
1144
1316
|
});
|
|
1145
|
-
const
|
|
1146
|
-
const child = spawn("node", [builtfile, JSON.stringify(argz)], {
|
|
1317
|
+
const child = spawn("node", [builtfile, JSON.stringify(argz2)], {
|
|
1147
1318
|
stdio: ["pipe", "pipe", "pipe", "ipc"]
|
|
1148
1319
|
// silent: true
|
|
1149
1320
|
});
|
|
1150
1321
|
const p = "/tmp/tpipe" + Math.random();
|
|
1151
|
-
const errFile = `${reportDest}/logs.txt`;
|
|
1152
1322
|
server.listen(p, () => {
|
|
1153
|
-
child.stderr?.on("data", (data) => {
|
|
1154
|
-
oStream.write(`stderr > ${data}`);
|
|
1155
|
-
});
|
|
1156
|
-
child.stdout?.on("data", (data) => {
|
|
1157
|
-
oStream.write(`stdout > ${data}`);
|
|
1158
|
-
});
|
|
1159
1323
|
child.on("close", (code) => {
|
|
1160
|
-
oStream.close();
|
|
1161
1324
|
server.close();
|
|
1162
1325
|
haltReturns = true;
|
|
1163
1326
|
});
|
|
@@ -1170,24 +1333,24 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
1170
1333
|
}
|
|
1171
1334
|
});
|
|
1172
1335
|
child.on("error", (e) => {
|
|
1173
|
-
if (
|
|
1174
|
-
|
|
1336
|
+
if (fs4.existsSync(p)) {
|
|
1337
|
+
fs4.rmSync(p);
|
|
1175
1338
|
}
|
|
1176
1339
|
haltReturns = true;
|
|
1177
1340
|
console.log(
|
|
1178
1341
|
ansiC2.red(
|
|
1179
1342
|
ansiC2.inverse(
|
|
1180
|
-
`launchNodeSideCar - ${src} errored with: ${e.name}. Check
|
|
1343
|
+
`launchNodeSideCar - ${src} errored with: ${e.name}. Check logs for more info`
|
|
1181
1344
|
)
|
|
1182
1345
|
)
|
|
1183
1346
|
);
|
|
1184
|
-
|
|
1347
|
+
logs.error?.write(e.toString() + "\n");
|
|
1185
1348
|
});
|
|
1186
1349
|
});
|
|
1187
1350
|
child.send({ path: p });
|
|
1188
1351
|
const r = Math.random();
|
|
1189
1352
|
this.nodeSidecars[r] = child;
|
|
1190
|
-
return [r,
|
|
1353
|
+
return [r, argz2];
|
|
1191
1354
|
} else {
|
|
1192
1355
|
console.log(
|
|
1193
1356
|
ansiC2.red(
|
|
@@ -1195,7 +1358,7 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
1195
1358
|
)
|
|
1196
1359
|
);
|
|
1197
1360
|
this.queue.push(sidecar[0]);
|
|
1198
|
-
return [Math.random(),
|
|
1361
|
+
return [Math.random(), argz2];
|
|
1199
1362
|
}
|
|
1200
1363
|
} else {
|
|
1201
1364
|
console.error("negative port makes no sense", sidecar[0]);
|
|
@@ -1213,13 +1376,13 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
1213
1376
|
const dest = process.cwd() + `/testeranto/bundles/pure/${this.name}/${sidecar[0]}`;
|
|
1214
1377
|
const builtfile = dest.split(".").slice(0, -1).concat("mjs").join(".");
|
|
1215
1378
|
const destFolder = dest.replace(".mjs", "");
|
|
1216
|
-
let
|
|
1379
|
+
let argz2;
|
|
1217
1380
|
const z = sidecar[2];
|
|
1218
1381
|
const testConfigResource = sidecar[2];
|
|
1219
1382
|
const src = sidecar[0];
|
|
1220
1383
|
const portsToUse = [];
|
|
1221
1384
|
if (testConfigResource.ports === 0) {
|
|
1222
|
-
|
|
1385
|
+
argz2 = {
|
|
1223
1386
|
// scheduled: true,
|
|
1224
1387
|
name: src,
|
|
1225
1388
|
ports: portsToUse,
|
|
@@ -1232,10 +1395,10 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
1232
1395
|
);
|
|
1233
1396
|
if (openPorts.length >= testConfigResource.ports) {
|
|
1234
1397
|
for (let i = 0; i < testConfigResource.ports; i++) {
|
|
1235
|
-
portsToUse.push(openPorts[i][0]);
|
|
1398
|
+
portsToUse.push(Number(openPorts[i][0]));
|
|
1236
1399
|
this.ports[openPorts[i][0]] = src;
|
|
1237
1400
|
}
|
|
1238
|
-
|
|
1401
|
+
argz2 = {
|
|
1239
1402
|
// scheduled: true,
|
|
1240
1403
|
name: src,
|
|
1241
1404
|
// ports: [3333],
|
|
@@ -1245,24 +1408,25 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
1245
1408
|
};
|
|
1246
1409
|
} else {
|
|
1247
1410
|
this.queue.push(src);
|
|
1248
|
-
return;
|
|
1249
1411
|
}
|
|
1250
1412
|
} else {
|
|
1251
1413
|
console.error("negative port makes no sense", src);
|
|
1252
1414
|
process.exit(-1);
|
|
1253
1415
|
}
|
|
1254
1416
|
await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
|
|
1417
|
+
if (!this.pureSidecars)
|
|
1418
|
+
this.pureSidecars = {};
|
|
1255
1419
|
this.pureSidecars[r] = module.default;
|
|
1256
|
-
this.pureSidecars[r].start(
|
|
1420
|
+
this.pureSidecars[r].start(argz2);
|
|
1257
1421
|
});
|
|
1258
|
-
return [r,
|
|
1422
|
+
return [r, argz2];
|
|
1259
1423
|
};
|
|
1260
1424
|
this.launchWeb = async (src, dest) => {
|
|
1261
1425
|
console.log(ansiC2.green(ansiC2.inverse(`web < ${src}`)));
|
|
1262
1426
|
this.bddTestIsRunning(src);
|
|
1263
1427
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/web`;
|
|
1264
|
-
if (!
|
|
1265
|
-
|
|
1428
|
+
if (!fs4.existsSync(reportDest)) {
|
|
1429
|
+
fs4.mkdirSync(reportDest, { recursive: true });
|
|
1266
1430
|
}
|
|
1267
1431
|
const destFolder = dest.replace(".mjs", "");
|
|
1268
1432
|
const webArgz = JSON.stringify({
|
|
@@ -1272,9 +1436,33 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
1272
1436
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
1273
1437
|
});
|
|
1274
1438
|
const d = `${dest}?cacheBust=${Date.now()}`;
|
|
1275
|
-
const
|
|
1276
|
-
const oStream = fs3.createWriteStream(ofile);
|
|
1439
|
+
const logs = createLogStreams(reportDest, "web");
|
|
1277
1440
|
this.browser.newPage().then((page) => {
|
|
1441
|
+
page.on("console", (log) => {
|
|
1442
|
+
const msg = `${log.text()}
|
|
1443
|
+
`;
|
|
1444
|
+
switch (log.type()) {
|
|
1445
|
+
case "info":
|
|
1446
|
+
logs.info?.write(msg);
|
|
1447
|
+
break;
|
|
1448
|
+
case "warn":
|
|
1449
|
+
logs.warn?.write(msg);
|
|
1450
|
+
break;
|
|
1451
|
+
case "error":
|
|
1452
|
+
logs.error?.write(msg);
|
|
1453
|
+
break;
|
|
1454
|
+
case "debug":
|
|
1455
|
+
logs.debug?.write(msg);
|
|
1456
|
+
break;
|
|
1457
|
+
default:
|
|
1458
|
+
break;
|
|
1459
|
+
}
|
|
1460
|
+
});
|
|
1461
|
+
page.on("close", () => {
|
|
1462
|
+
logs.writeExitCode(0);
|
|
1463
|
+
logs.closeAll();
|
|
1464
|
+
logs.closeAll();
|
|
1465
|
+
});
|
|
1278
1466
|
this.mapping().forEach(async ([command, func]) => {
|
|
1279
1467
|
if (command === "page") {
|
|
1280
1468
|
page.exposeFunction(command, (x) => {
|
|
@@ -1298,46 +1486,19 @@ var PM_Main = class extends PM_WithEslintAndTsc {
|
|
|
1298
1486
|
Promise.all(screenshots2[src] || []).then(() => {
|
|
1299
1487
|
delete screenshots2[src];
|
|
1300
1488
|
page.close();
|
|
1301
|
-
oStream.close();
|
|
1302
1489
|
});
|
|
1303
1490
|
return;
|
|
1304
1491
|
};
|
|
1305
1492
|
page.on("pageerror", (err) => {
|
|
1493
|
+
logs.writeExitCode(-1, err);
|
|
1306
1494
|
console.log(
|
|
1307
1495
|
ansiColors.red(
|
|
1308
|
-
`web ! ${src} failed to execute No "tests.json" file was generated. Check ${reportDest}/
|
|
1496
|
+
`web ! ${src} failed to execute No "tests.json" file was generated. Check ${reportDest}/error.log for more info`
|
|
1309
1497
|
)
|
|
1310
1498
|
);
|
|
1311
|
-
oStream.write(err.name);
|
|
1312
|
-
oStream.write("\n");
|
|
1313
|
-
if (err.cause) {
|
|
1314
|
-
oStream.write(err.cause);
|
|
1315
|
-
oStream.write("\n");
|
|
1316
|
-
}
|
|
1317
|
-
if (err.stack) {
|
|
1318
|
-
oStream.write(err.stack);
|
|
1319
|
-
oStream.write("\n");
|
|
1320
|
-
}
|
|
1321
|
-
if (err.message) {
|
|
1322
|
-
oStream.write(err.message);
|
|
1323
|
-
oStream.write("\n");
|
|
1324
|
-
}
|
|
1325
1499
|
this.bddTestIsNowDone(src, -1);
|
|
1326
1500
|
close();
|
|
1327
1501
|
});
|
|
1328
|
-
page.on("console", (log) => {
|
|
1329
|
-
if (oStream.closed) {
|
|
1330
|
-
console.log("missed console message: ", log.text());
|
|
1331
|
-
return;
|
|
1332
|
-
} else {
|
|
1333
|
-
oStream.write(log.text());
|
|
1334
|
-
oStream.write("\n");
|
|
1335
|
-
oStream.write(JSON.stringify(log.location()));
|
|
1336
|
-
oStream.write("\n");
|
|
1337
|
-
oStream.write(JSON.stringify(log.stackTrace()));
|
|
1338
|
-
oStream.write("\n");
|
|
1339
|
-
}
|
|
1340
|
-
});
|
|
1341
1502
|
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
1342
1503
|
await page.evaluate(
|
|
1343
1504
|
`
|
|
@@ -1357,7 +1518,7 @@ import('${d}').then(async (x) => {
|
|
|
1357
1518
|
console.log(
|
|
1358
1519
|
ansiC2.red(
|
|
1359
1520
|
ansiC2.inverse(
|
|
1360
|
-
`web ! ${src} failed to execute. No "tests.json" file was generated. Check
|
|
1521
|
+
`web ! ${src} failed to execute. No "tests.json" file was generated. Check logs for more info`
|
|
1361
1522
|
)
|
|
1362
1523
|
)
|
|
1363
1524
|
);
|
|
@@ -1376,9 +1537,19 @@ import('${d}').then(async (x) => {
|
|
|
1376
1537
|
"strings",
|
|
1377
1538
|
srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
|
|
1378
1539
|
);
|
|
1379
|
-
const
|
|
1380
|
-
|
|
1381
|
-
|
|
1540
|
+
const testReportPath = `${reportDest}/tests.json`;
|
|
1541
|
+
if (!fs4.existsSync(testReportPath)) {
|
|
1542
|
+
console.error(`tests.json not found at: ${testReportPath}`);
|
|
1543
|
+
return;
|
|
1544
|
+
}
|
|
1545
|
+
const testReport = JSON.parse(fs4.readFileSync(testReportPath, "utf8"));
|
|
1546
|
+
if (testReport.tests) {
|
|
1547
|
+
testReport.tests.forEach((test) => {
|
|
1548
|
+
test.fullPath = path4.resolve(process.cwd(), srcTest);
|
|
1549
|
+
});
|
|
1550
|
+
}
|
|
1551
|
+
testReport.fullPath = path4.resolve(process.cwd(), srcTest);
|
|
1552
|
+
fs4.writeFileSync(testReportPath, JSON.stringify(testReport, null, 2));
|
|
1382
1553
|
testReport.features.reduce(async (mm, featureStringKey) => {
|
|
1383
1554
|
const accum = await mm;
|
|
1384
1555
|
const isUrl = isValidUrl(featureStringKey);
|
|
@@ -1397,14 +1568,14 @@ import('${d}').then(async (x) => {
|
|
|
1397
1568
|
accum.files.push(newPath);
|
|
1398
1569
|
}
|
|
1399
1570
|
} else {
|
|
1400
|
-
await
|
|
1571
|
+
await fs4.promises.mkdir(path4.dirname(featureDestination), {
|
|
1401
1572
|
recursive: true
|
|
1402
1573
|
});
|
|
1403
1574
|
accum.strings.push(featureStringKey);
|
|
1404
1575
|
}
|
|
1405
1576
|
return accum;
|
|
1406
1577
|
}, Promise.resolve({ files: [], strings: [] })).then(({ files: files3, strings }) => {
|
|
1407
|
-
|
|
1578
|
+
fs4.writeFileSync(
|
|
1408
1579
|
`testeranto/reports/${this.name}/${srcTest.split(".").slice(0, -1).join(".")}/${platform}/featurePrompt.txt`,
|
|
1409
1580
|
files3.map((f) => {
|
|
1410
1581
|
return `/read ${f}`;
|
|
@@ -1460,10 +1631,16 @@ import('${d}').then(async (x) => {
|
|
|
1460
1631
|
});
|
|
1461
1632
|
this.writeBigBoard();
|
|
1462
1633
|
if (!inflight) {
|
|
1463
|
-
this.browser
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1634
|
+
if (this.browser) {
|
|
1635
|
+
if (this.browser) {
|
|
1636
|
+
this.browser.disconnect().then(() => {
|
|
1637
|
+
console.log(
|
|
1638
|
+
ansiC2.inverse(`${this.name} has been tested. Goodbye.`)
|
|
1639
|
+
);
|
|
1640
|
+
process.exit();
|
|
1641
|
+
});
|
|
1642
|
+
}
|
|
1643
|
+
}
|
|
1467
1644
|
}
|
|
1468
1645
|
};
|
|
1469
1646
|
this.launchers = {};
|
|
@@ -1475,6 +1652,185 @@ import('${d}').then(async (x) => {
|
|
|
1475
1652
|
this.configs.ports.forEach((element) => {
|
|
1476
1653
|
this.ports[element] = "";
|
|
1477
1654
|
});
|
|
1655
|
+
this.httpServer = http.createServer(this.requestHandler.bind(this));
|
|
1656
|
+
this.wss = new WebSocketServer({ server: this.httpServer });
|
|
1657
|
+
this.wss.on("connection", (ws) => {
|
|
1658
|
+
this.clients.add(ws);
|
|
1659
|
+
console.log("Client connected");
|
|
1660
|
+
ws.on("message", (data) => {
|
|
1661
|
+
try {
|
|
1662
|
+
const message = JSON.parse(data.toString());
|
|
1663
|
+
if (message.type === "executeCommand") {
|
|
1664
|
+
if (message.command && message.command.trim().startsWith("aider")) {
|
|
1665
|
+
console.log(`Executing command: ${message.command}`);
|
|
1666
|
+
const processId = Date.now().toString();
|
|
1667
|
+
const child = spawn(message.command, {
|
|
1668
|
+
shell: true,
|
|
1669
|
+
cwd: process.cwd()
|
|
1670
|
+
});
|
|
1671
|
+
this.runningProcesses.set(processId, child);
|
|
1672
|
+
this.allProcesses.set(processId, {
|
|
1673
|
+
child,
|
|
1674
|
+
status: "running",
|
|
1675
|
+
command: message.command,
|
|
1676
|
+
pid: child.pid,
|
|
1677
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
1678
|
+
});
|
|
1679
|
+
this.processLogs.set(processId, []);
|
|
1680
|
+
this.broadcast({
|
|
1681
|
+
type: "processStarted",
|
|
1682
|
+
processId,
|
|
1683
|
+
command: message.command,
|
|
1684
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1685
|
+
logs: []
|
|
1686
|
+
});
|
|
1687
|
+
child.stdout?.on("data", (data2) => {
|
|
1688
|
+
const logData = data2.toString();
|
|
1689
|
+
const logs = this.processLogs.get(processId) || [];
|
|
1690
|
+
logs.push(logData);
|
|
1691
|
+
this.processLogs.set(processId, logs);
|
|
1692
|
+
this.broadcast({
|
|
1693
|
+
type: "processStdout",
|
|
1694
|
+
processId,
|
|
1695
|
+
data: logData,
|
|
1696
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
1697
|
+
});
|
|
1698
|
+
});
|
|
1699
|
+
child.stderr?.on("data", (data2) => {
|
|
1700
|
+
const logData = data2.toString();
|
|
1701
|
+
const logs = this.processLogs.get(processId) || [];
|
|
1702
|
+
logs.push(logData);
|
|
1703
|
+
this.processLogs.set(processId, logs);
|
|
1704
|
+
this.broadcast({
|
|
1705
|
+
type: "processStderr",
|
|
1706
|
+
processId,
|
|
1707
|
+
data: logData,
|
|
1708
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
1709
|
+
});
|
|
1710
|
+
});
|
|
1711
|
+
child.on("error", (error) => {
|
|
1712
|
+
console.error(`Failed to execute command: ${error}`);
|
|
1713
|
+
this.runningProcesses.delete(processId);
|
|
1714
|
+
const processInfo = this.allProcesses.get(processId);
|
|
1715
|
+
if (processInfo) {
|
|
1716
|
+
this.allProcesses.set(processId, {
|
|
1717
|
+
...processInfo,
|
|
1718
|
+
status: "error",
|
|
1719
|
+
error: error.message
|
|
1720
|
+
});
|
|
1721
|
+
}
|
|
1722
|
+
this.broadcast({
|
|
1723
|
+
type: "processError",
|
|
1724
|
+
processId,
|
|
1725
|
+
error: error.message,
|
|
1726
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
1727
|
+
});
|
|
1728
|
+
});
|
|
1729
|
+
child.on("exit", (code) => {
|
|
1730
|
+
console.log(`Command exited with code ${code}`);
|
|
1731
|
+
this.runningProcesses.delete(processId);
|
|
1732
|
+
const processInfo = this.allProcesses.get(processId);
|
|
1733
|
+
if (processInfo) {
|
|
1734
|
+
this.allProcesses.set(processId, {
|
|
1735
|
+
...processInfo,
|
|
1736
|
+
status: "exited",
|
|
1737
|
+
exitCode: code
|
|
1738
|
+
});
|
|
1739
|
+
}
|
|
1740
|
+
this.broadcast({
|
|
1741
|
+
type: "processExited",
|
|
1742
|
+
processId,
|
|
1743
|
+
exitCode: code,
|
|
1744
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
1745
|
+
});
|
|
1746
|
+
});
|
|
1747
|
+
} else {
|
|
1748
|
+
console.error('Invalid command: must start with "aider"');
|
|
1749
|
+
}
|
|
1750
|
+
} else if (message.type === "getRunningProcesses") {
|
|
1751
|
+
const processes = Array.from(this.allProcesses.entries()).map(
|
|
1752
|
+
([id, procInfo]) => ({
|
|
1753
|
+
processId: id,
|
|
1754
|
+
command: procInfo.command,
|
|
1755
|
+
pid: procInfo.pid,
|
|
1756
|
+
status: procInfo.status,
|
|
1757
|
+
exitCode: procInfo.exitCode,
|
|
1758
|
+
error: procInfo.error,
|
|
1759
|
+
timestamp: procInfo.timestamp,
|
|
1760
|
+
logs: this.processLogs.get(id) || []
|
|
1761
|
+
})
|
|
1762
|
+
);
|
|
1763
|
+
ws.send(
|
|
1764
|
+
JSON.stringify({
|
|
1765
|
+
type: "runningProcesses",
|
|
1766
|
+
processes
|
|
1767
|
+
})
|
|
1768
|
+
);
|
|
1769
|
+
} else if (message.type === "getProcess") {
|
|
1770
|
+
const processId = message.processId;
|
|
1771
|
+
const procInfo = this.allProcesses.get(processId);
|
|
1772
|
+
if (procInfo) {
|
|
1773
|
+
ws.send(
|
|
1774
|
+
JSON.stringify({
|
|
1775
|
+
type: "processData",
|
|
1776
|
+
processId,
|
|
1777
|
+
command: procInfo.command,
|
|
1778
|
+
pid: procInfo.pid,
|
|
1779
|
+
status: procInfo.status,
|
|
1780
|
+
exitCode: procInfo.exitCode,
|
|
1781
|
+
error: procInfo.error,
|
|
1782
|
+
timestamp: procInfo.timestamp,
|
|
1783
|
+
logs: this.processLogs.get(processId) || []
|
|
1784
|
+
})
|
|
1785
|
+
);
|
|
1786
|
+
}
|
|
1787
|
+
} else if (message.type === "stdin") {
|
|
1788
|
+
const processId = message.processId;
|
|
1789
|
+
const data2 = message.data;
|
|
1790
|
+
console.log("Received stdin for process", processId, ":", data2);
|
|
1791
|
+
const childProcess = this.runningProcesses.get(processId);
|
|
1792
|
+
if (childProcess && childProcess.stdin) {
|
|
1793
|
+
console.log("Writing to process stdin");
|
|
1794
|
+
childProcess.stdin.write(data2);
|
|
1795
|
+
} else {
|
|
1796
|
+
console.log(
|
|
1797
|
+
"Cannot write to stdin - process not found or no stdin:",
|
|
1798
|
+
{
|
|
1799
|
+
processExists: !!childProcess,
|
|
1800
|
+
stdinExists: childProcess?.stdin ? true : false
|
|
1801
|
+
}
|
|
1802
|
+
);
|
|
1803
|
+
}
|
|
1804
|
+
} else if (message.type === "killProcess") {
|
|
1805
|
+
const processId = message.processId;
|
|
1806
|
+
console.log("Received killProcess for process", processId);
|
|
1807
|
+
const childProcess = this.runningProcesses.get(processId);
|
|
1808
|
+
if (childProcess) {
|
|
1809
|
+
console.log("Killing process");
|
|
1810
|
+
childProcess.kill("SIGTERM");
|
|
1811
|
+
} else {
|
|
1812
|
+
console.log("Cannot kill process - process not found:", {
|
|
1813
|
+
processExists: !!childProcess
|
|
1814
|
+
});
|
|
1815
|
+
}
|
|
1816
|
+
}
|
|
1817
|
+
} catch (error) {
|
|
1818
|
+
console.error("Error handling WebSocket message:", error);
|
|
1819
|
+
}
|
|
1820
|
+
});
|
|
1821
|
+
ws.on("close", () => {
|
|
1822
|
+
this.clients.delete(ws);
|
|
1823
|
+
console.log("Client disconnected");
|
|
1824
|
+
});
|
|
1825
|
+
ws.on("error", (error) => {
|
|
1826
|
+
console.error("WebSocket error:", error);
|
|
1827
|
+
this.clients.delete(ws);
|
|
1828
|
+
});
|
|
1829
|
+
});
|
|
1830
|
+
const httpPort = Number(process.env.HTTP_PORT) || 3e3;
|
|
1831
|
+
this.httpServer.listen(httpPort, () => {
|
|
1832
|
+
console.log(`HTTP server running on http://localhost:${httpPort}`);
|
|
1833
|
+
});
|
|
1478
1834
|
}
|
|
1479
1835
|
async stopSideCar(uid) {
|
|
1480
1836
|
console.log(ansiC2.green(ansiC2.inverse(`stopSideCar ${uid}`)));
|
|
@@ -1552,8 +1908,8 @@ import('${d}').then(async (x) => {
|
|
|
1552
1908
|
this.mapping().forEach(async ([command, func]) => {
|
|
1553
1909
|
globalThis[command] = func;
|
|
1554
1910
|
});
|
|
1555
|
-
if (!
|
|
1556
|
-
|
|
1911
|
+
if (!fs4.existsSync(`testeranto/reports/${this.name}`)) {
|
|
1912
|
+
fs4.mkdirSync(`testeranto/reports/${this.name}`);
|
|
1557
1913
|
}
|
|
1558
1914
|
const executablePath = "/opt/homebrew/bin/chromium";
|
|
1559
1915
|
try {
|
|
@@ -1562,16 +1918,18 @@ import('${d}').then(async (x) => {
|
|
|
1562
1918
|
waitForInitialPage: false,
|
|
1563
1919
|
executablePath,
|
|
1564
1920
|
headless: true,
|
|
1921
|
+
defaultViewport: null,
|
|
1922
|
+
// Disable default 800x600 viewport
|
|
1565
1923
|
dumpio: false,
|
|
1566
1924
|
devtools: false,
|
|
1567
1925
|
args: [
|
|
1568
|
-
"--disable-features=site-per-process",
|
|
1569
1926
|
"--allow-file-access-from-files",
|
|
1570
1927
|
"--allow-insecure-localhost",
|
|
1571
1928
|
"--allow-running-insecure-content",
|
|
1572
1929
|
"--auto-open-devtools-for-tabs",
|
|
1573
1930
|
"--disable-dev-shm-usage",
|
|
1574
1931
|
"--disable-extensions",
|
|
1932
|
+
"--disable-features=site-per-process",
|
|
1575
1933
|
"--disable-gpu",
|
|
1576
1934
|
"--disable-setuid-sandbox",
|
|
1577
1935
|
"--disable-site-isolation-trials",
|
|
@@ -1581,6 +1939,7 @@ import('${d}').then(async (x) => {
|
|
|
1581
1939
|
"--no-startup-window",
|
|
1582
1940
|
"--reduce-security-for-testing",
|
|
1583
1941
|
"--remote-allow-origins=*",
|
|
1942
|
+
"--start-maximized",
|
|
1584
1943
|
"--unsafely-treat-insecure-origin-as-secure=*",
|
|
1585
1944
|
`--remote-debugging-port=3234`
|
|
1586
1945
|
// "--disable-features=IsolateOrigins,site-per-process",
|
|
@@ -1630,7 +1989,7 @@ import('${d}').then(async (x) => {
|
|
|
1630
1989
|
]
|
|
1631
1990
|
].forEach(
|
|
1632
1991
|
async ([eps, launcher, runtime, watcher]) => {
|
|
1633
|
-
const metafile = `./testeranto/
|
|
1992
|
+
const metafile = `./testeranto/metafiles/${runtime}/${this.name}.json`;
|
|
1634
1993
|
await pollForFile(metafile);
|
|
1635
1994
|
Object.entries(eps).forEach(
|
|
1636
1995
|
async ([inputFile, outputFile]) => {
|
|
@@ -1700,13 +2059,22 @@ import('${d}').then(async (x) => {
|
|
|
1700
2059
|
this.nodeMetafileWatcher.close();
|
|
1701
2060
|
this.webMetafileWatcher.close();
|
|
1702
2061
|
this.importMetafileWatcher.close();
|
|
2062
|
+
Object.values(this.logStreams || {}).forEach((logs) => logs.closeAll());
|
|
2063
|
+
this.wss.close(() => {
|
|
2064
|
+
console.log("WebSocket server closed");
|
|
2065
|
+
});
|
|
2066
|
+
this.clients.forEach((client) => {
|
|
2067
|
+
client.terminate();
|
|
2068
|
+
});
|
|
2069
|
+
this.clients.clear();
|
|
2070
|
+
this.httpServer.close(() => {
|
|
2071
|
+
console.log("HTTP server closed");
|
|
2072
|
+
});
|
|
1703
2073
|
this.checkForShutdown();
|
|
1704
2074
|
}
|
|
1705
2075
|
async metafileOutputs(platform) {
|
|
1706
2076
|
const metafile = JSON.parse(
|
|
1707
|
-
|
|
1708
|
-
`./testeranto/bundles/${platform}/${this.name}/metafile.json`
|
|
1709
|
-
).toString()
|
|
2077
|
+
fs4.readFileSync(`./testeranto/metafiles/${platform}/${this.name}.json`).toString()
|
|
1710
2078
|
).metafile;
|
|
1711
2079
|
if (!metafile)
|
|
1712
2080
|
return;
|
|
@@ -1717,7 +2085,7 @@ import('${d}').then(async (x) => {
|
|
|
1717
2085
|
return false;
|
|
1718
2086
|
}
|
|
1719
2087
|
const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
|
|
1720
|
-
if (!
|
|
2088
|
+
if (!fs4.existsSync(i))
|
|
1721
2089
|
return false;
|
|
1722
2090
|
if (i.startsWith("node_modules"))
|
|
1723
2091
|
return false;
|
|
@@ -1726,8 +2094,8 @@ import('${d}').then(async (x) => {
|
|
|
1726
2094
|
return true;
|
|
1727
2095
|
});
|
|
1728
2096
|
const f = `${k.split(".").slice(0, -1).join(".")}/`;
|
|
1729
|
-
if (!
|
|
1730
|
-
|
|
2097
|
+
if (!fs4.existsSync(f)) {
|
|
2098
|
+
fs4.mkdirSync(f);
|
|
1731
2099
|
}
|
|
1732
2100
|
const entrypoint = outputs[k].entryPoint;
|
|
1733
2101
|
if (entrypoint) {
|
|
@@ -1746,6 +2114,121 @@ import('${d}').then(async (x) => {
|
|
|
1746
2114
|
}
|
|
1747
2115
|
});
|
|
1748
2116
|
}
|
|
2117
|
+
requestHandler(req, res) {
|
|
2118
|
+
const parsedUrl = url.parse(req.url || "/");
|
|
2119
|
+
let pathname = parsedUrl.pathname || "/";
|
|
2120
|
+
if (pathname === "/") {
|
|
2121
|
+
pathname = "/index.html";
|
|
2122
|
+
}
|
|
2123
|
+
let filePath = pathname.substring(1);
|
|
2124
|
+
if (filePath.startsWith("reports/")) {
|
|
2125
|
+
filePath = `testeranto/${filePath}`;
|
|
2126
|
+
} else if (filePath.startsWith("metafiles/")) {
|
|
2127
|
+
filePath = `testeranto/${filePath}`;
|
|
2128
|
+
} else if (filePath === "projects.json") {
|
|
2129
|
+
filePath = `testeranto/${filePath}`;
|
|
2130
|
+
} else {
|
|
2131
|
+
const possiblePaths = [
|
|
2132
|
+
`dist/${filePath}`,
|
|
2133
|
+
`testeranto/dist/${filePath}`,
|
|
2134
|
+
`../dist/${filePath}`,
|
|
2135
|
+
`./${filePath}`
|
|
2136
|
+
];
|
|
2137
|
+
let foundPath = null;
|
|
2138
|
+
for (const possiblePath of possiblePaths) {
|
|
2139
|
+
if (fs4.existsSync(possiblePath)) {
|
|
2140
|
+
foundPath = possiblePath;
|
|
2141
|
+
break;
|
|
2142
|
+
}
|
|
2143
|
+
}
|
|
2144
|
+
if (foundPath) {
|
|
2145
|
+
filePath = foundPath;
|
|
2146
|
+
} else {
|
|
2147
|
+
const indexPath = this.findIndexHtml();
|
|
2148
|
+
if (indexPath) {
|
|
2149
|
+
fs4.readFile(indexPath, (err, data) => {
|
|
2150
|
+
if (err) {
|
|
2151
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
2152
|
+
res.end("404 Not Found");
|
|
2153
|
+
return;
|
|
2154
|
+
}
|
|
2155
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
2156
|
+
res.end(data);
|
|
2157
|
+
});
|
|
2158
|
+
return;
|
|
2159
|
+
} else {
|
|
2160
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
2161
|
+
res.end("404 Not Found");
|
|
2162
|
+
return;
|
|
2163
|
+
}
|
|
2164
|
+
}
|
|
2165
|
+
}
|
|
2166
|
+
fs4.exists(filePath, (exists) => {
|
|
2167
|
+
if (!exists) {
|
|
2168
|
+
if (!pathname.includes(".") && pathname !== "/") {
|
|
2169
|
+
const indexPath = this.findIndexHtml();
|
|
2170
|
+
if (indexPath) {
|
|
2171
|
+
fs4.readFile(indexPath, (err, data) => {
|
|
2172
|
+
if (err) {
|
|
2173
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
2174
|
+
res.end("404 Not Found");
|
|
2175
|
+
return;
|
|
2176
|
+
}
|
|
2177
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
2178
|
+
res.end(data);
|
|
2179
|
+
});
|
|
2180
|
+
return;
|
|
2181
|
+
} else {
|
|
2182
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
2183
|
+
res.end(`
|
|
2184
|
+
<html>
|
|
2185
|
+
<body>
|
|
2186
|
+
<h1>Testeranto is running</h1>
|
|
2187
|
+
<p>Frontend files are not built yet. Run 'npm run build' to build the frontend.</p>
|
|
2188
|
+
</body>
|
|
2189
|
+
</html>
|
|
2190
|
+
`);
|
|
2191
|
+
return;
|
|
2192
|
+
}
|
|
2193
|
+
}
|
|
2194
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
2195
|
+
res.end("404 Not Found");
|
|
2196
|
+
return;
|
|
2197
|
+
}
|
|
2198
|
+
fs4.readFile(filePath, (err, data) => {
|
|
2199
|
+
if (err) {
|
|
2200
|
+
res.writeHead(500, { "Content-Type": "text/plain" });
|
|
2201
|
+
res.end("500 Internal Server Error");
|
|
2202
|
+
return;
|
|
2203
|
+
}
|
|
2204
|
+
const mimeType = mime.lookup(filePath) || "application/octet-stream";
|
|
2205
|
+
res.writeHead(200, { "Content-Type": mimeType });
|
|
2206
|
+
res.end(data);
|
|
2207
|
+
});
|
|
2208
|
+
});
|
|
2209
|
+
}
|
|
2210
|
+
findIndexHtml() {
|
|
2211
|
+
const possiblePaths = [
|
|
2212
|
+
"dist/index.html",
|
|
2213
|
+
"testeranto/dist/index.html",
|
|
2214
|
+
"../dist/index.html",
|
|
2215
|
+
"./index.html"
|
|
2216
|
+
];
|
|
2217
|
+
for (const path5 of possiblePaths) {
|
|
2218
|
+
if (fs4.existsSync(path5)) {
|
|
2219
|
+
return path5;
|
|
2220
|
+
}
|
|
2221
|
+
}
|
|
2222
|
+
return null;
|
|
2223
|
+
}
|
|
2224
|
+
broadcast(message) {
|
|
2225
|
+
const data = typeof message === "string" ? message : JSON.stringify(message);
|
|
2226
|
+
this.clients.forEach((client) => {
|
|
2227
|
+
if (client.readyState === 1) {
|
|
2228
|
+
client.send(data);
|
|
2229
|
+
}
|
|
2230
|
+
});
|
|
2231
|
+
}
|
|
1749
2232
|
checkQueue() {
|
|
1750
2233
|
const x = this.queue.pop();
|
|
1751
2234
|
if (!x) {
|