testeranto 0.100.0 → 0.111.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/README.md +1 -0
  2. package/bundle.js +80 -30
  3. package/package.json +40 -32
  4. package/src/Footer.tsx +4 -0
  5. package/src/Init.ts +48 -0
  6. package/src/Node.ts +23 -17
  7. package/src/PM/index.ts +1 -1
  8. package/src/PM/main.ts +524 -156
  9. package/src/PM/node.ts +2 -2
  10. package/src/PM/web.ts +1 -1
  11. package/src/ReportClient.tsx +163 -0
  12. package/src/ReportServer.ts +21 -0
  13. package/src/SubPackages/react/component/node.ts +68 -24
  14. package/src/SubPackages/react/component/web.ts +68 -25
  15. package/src/SubPackages/react/jsx/index.ts +39 -18
  16. package/src/SubPackages/react/jsx/node.ts +12 -10
  17. package/src/SubPackages/react/jsx/web.ts +27 -14
  18. package/src/SubPackages/react-dom/component/node.ts +42 -50
  19. package/src/SubPackages/react-dom/component/web.ts +28 -10
  20. package/src/SubPackages/react-dom/jsx/node.ts +54 -56
  21. package/src/SubPackages/react-dom/jsx/web.ts +55 -42
  22. package/src/SubPackages/react-test-renderer/MemoExoticComponent/node.ts +23 -7
  23. package/src/SubPackages/react-test-renderer/component/index.ts +38 -5
  24. package/src/SubPackages/react-test-renderer/component/node.ts +24 -5
  25. package/src/SubPackages/react-test-renderer/component/web.ts +22 -5
  26. package/src/SubPackages/react-test-renderer/fc/node.ts +41 -7
  27. package/src/SubPackages/react-test-renderer/fc/web.ts +43 -11
  28. package/src/SubPackages/react-test-renderer/jsx/index.ts +39 -16
  29. package/src/SubPackages/react-test-renderer/jsx/node.ts +8 -6
  30. package/src/SubPackages/react-test-renderer/jsx/web.ts +22 -5
  31. package/src/SubPackages/react-test-renderer/jsx-promised/index.ts +39 -6
  32. package/src/SubPackages/react-test-renderer/jsx-promised/node.ts +27 -10
  33. package/src/SubPackages/react-test-renderer/jsx-promised/web.ts +26 -12
  34. package/src/TestReport.tsx +176 -0
  35. package/src/Types.ts +63 -309
  36. package/src/Web.ts +24 -18
  37. package/src/build.ts +240 -0
  38. package/src/defaultConfig.ts +2 -1
  39. package/src/esbuildConfigs/eslint-formatter-testeranto.ts +5 -0
  40. package/src/esbuildConfigs/featuresPlugin.ts +0 -1
  41. package/src/esbuildConfigs/index.ts +1 -1
  42. package/src/esbuildConfigs/inputFilesPlugin.ts +2 -135
  43. package/src/esbuildConfigs/node.ts +4 -13
  44. package/src/esbuildConfigs/web.ts +3 -19
  45. package/src/init-docs.ts +2 -1
  46. package/src/lib/abstractBase.ts +82 -80
  47. package/src/lib/basebuilder.ts +57 -45
  48. package/src/lib/classBuilder.ts +15 -15
  49. package/src/lib/core.ts +44 -35
  50. package/src/lib/index.ts +47 -98
  51. package/src/lib/readme.md +12 -0
  52. package/src/lib/types.ts +53 -70
  53. package/src/run.ts +31 -0
  54. package/src/style.css +8 -0
  55. package/src/utils.ts +74 -2
  56. package/tsc.log +108 -0
  57. package/Bundle.Dockerfile +0 -52
  58. package/bin/init-docs.js +0 -24
  59. package/dist/common/dist/module/src/Init.js +0 -40
  60. package/dist/common/package.json +0 -3
  61. package/dist/common/src/Init.js +0 -40
  62. package/dist/common/src/Node.js +0 -27
  63. package/dist/common/src/PM/index.js +0 -7
  64. package/dist/common/src/PM/main.js +0 -941
  65. package/dist/common/src/PM/node.js +0 -128
  66. package/dist/common/src/PM/web.js +0 -121
  67. package/dist/common/src/SubPackages/puppeteer.js +0 -21
  68. package/dist/common/src/SubPackages/react/component/node.js +0 -19
  69. package/dist/common/src/SubPackages/react/component/web.js +0 -19
  70. package/dist/common/src/SubPackages/react/jsx/index.js +0 -33
  71. package/dist/common/src/SubPackages/react/jsx/node.js +0 -10
  72. package/dist/common/src/SubPackages/react/jsx/web.js +0 -10
  73. package/dist/common/src/SubPackages/react-dom/component/node.js +0 -101
  74. package/dist/common/src/SubPackages/react-dom/component/web.js +0 -67
  75. package/dist/common/src/SubPackages/react-dom/jsx/index.js +0 -2
  76. package/dist/common/src/SubPackages/react-dom/jsx/node.js +0 -39
  77. package/dist/common/src/SubPackages/react-dom/jsx/web.js +0 -117
  78. package/dist/common/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -44
  79. package/dist/common/src/SubPackages/react-test-renderer/component/index.js +0 -2
  80. package/dist/common/src/SubPackages/react-test-renderer/component/interface.js +0 -60
  81. package/dist/common/src/SubPackages/react-test-renderer/component/node.js +0 -8
  82. package/dist/common/src/SubPackages/react-test-renderer/component/web.js +0 -8
  83. package/dist/common/src/SubPackages/react-test-renderer/fc/node.js +0 -50
  84. package/dist/common/src/SubPackages/react-test-renderer/fc/web.js +0 -50
  85. package/dist/common/src/SubPackages/react-test-renderer/jsx/index.js +0 -63
  86. package/dist/common/src/SubPackages/react-test-renderer/jsx/node.js +0 -10
  87. package/dist/common/src/SubPackages/react-test-renderer/jsx/web.js +0 -10
  88. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -42
  89. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -10
  90. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -10
  91. package/dist/common/src/Types.js +0 -2
  92. package/dist/common/src/Web.js +0 -49
  93. package/dist/common/src/cli.js +0 -439
  94. package/dist/common/src/cli2.js +0 -144
  95. package/dist/common/src/defaultConfig.js +0 -19
  96. package/dist/common/src/esbuildConfigs/featuresPlugin.js +0 -39
  97. package/dist/common/src/esbuildConfigs/index.js +0 -21
  98. package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +0 -99
  99. package/dist/common/src/esbuildConfigs/node.js +0 -45
  100. package/dist/common/src/esbuildConfigs/web.js +0 -61
  101. package/dist/common/src/init-docs.js +0 -43
  102. package/dist/common/src/lib/abstractBase.js +0 -324
  103. package/dist/common/src/lib/basebuilder.js +0 -85
  104. package/dist/common/src/lib/classBuilder.js +0 -42
  105. package/dist/common/src/lib/core.js +0 -101
  106. package/dist/common/src/lib/index.js +0 -22
  107. package/dist/common/src/lib/types.js +0 -3
  108. package/dist/common/src/puppeteerConfiger.js +0 -24
  109. package/dist/common/src/utils.js +0 -16
  110. package/dist/common/src/web.html.js +0 -22
  111. package/dist/common/testeranto.js +0 -15
  112. package/dist/common/tsconfig.common.tsbuildinfo +0 -1
  113. package/dist/module/package.json +0 -3
  114. package/dist/module/src/Init.js +0 -35
  115. package/dist/module/src/Node.js +0 -20
  116. package/dist/module/src/PM/index.js +0 -3
  117. package/dist/module/src/PM/main.js +0 -911
  118. package/dist/module/src/PM/node.js +0 -121
  119. package/dist/module/src/PM/web.js +0 -117
  120. package/dist/module/src/SubPackages/puppeteer.js +0 -16
  121. package/dist/module/src/SubPackages/react/component/node.js +0 -14
  122. package/dist/module/src/SubPackages/react/component/web.js +0 -14
  123. package/dist/module/src/SubPackages/react/jsx/index.js +0 -27
  124. package/dist/module/src/SubPackages/react/jsx/node.js +0 -5
  125. package/dist/module/src/SubPackages/react/jsx/web.js +0 -5
  126. package/dist/module/src/SubPackages/react-dom/component/node.js +0 -93
  127. package/dist/module/src/SubPackages/react-dom/component/web.js +0 -62
  128. package/dist/module/src/SubPackages/react-dom/jsx/index.js +0 -1
  129. package/dist/module/src/SubPackages/react-dom/jsx/node.js +0 -31
  130. package/dist/module/src/SubPackages/react-dom/jsx/web.js +0 -89
  131. package/dist/module/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -16
  132. package/dist/module/src/SubPackages/react-test-renderer/component/index.js +0 -1
  133. package/dist/module/src/SubPackages/react-test-renderer/component/interface.js +0 -31
  134. package/dist/module/src/SubPackages/react-test-renderer/component/node.js +0 -3
  135. package/dist/module/src/SubPackages/react-test-renderer/component/web.js +0 -3
  136. package/dist/module/src/SubPackages/react-test-renderer/fc/node.js +0 -22
  137. package/dist/module/src/SubPackages/react-test-renderer/fc/web.js +0 -22
  138. package/dist/module/src/SubPackages/react-test-renderer/jsx/index.js +0 -34
  139. package/dist/module/src/SubPackages/react-test-renderer/jsx/node.js +0 -5
  140. package/dist/module/src/SubPackages/react-test-renderer/jsx/web.js +0 -5
  141. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -16
  142. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -5
  143. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -5
  144. package/dist/module/src/Types.js +0 -1
  145. package/dist/module/src/Web.js +0 -42
  146. package/dist/module/src/cli.js +0 -411
  147. package/dist/module/src/cli2.js +0 -116
  148. package/dist/module/src/defaultConfig.js +0 -17
  149. package/dist/module/src/esbuildConfigs/featuresPlugin.js +0 -34
  150. package/dist/module/src/esbuildConfigs/index.js +0 -19
  151. package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +0 -94
  152. package/dist/module/src/esbuildConfigs/node.js +0 -40
  153. package/dist/module/src/esbuildConfigs/web.js +0 -56
  154. package/dist/module/src/init-docs.js +0 -15
  155. package/dist/module/src/lib/abstractBase.js +0 -316
  156. package/dist/module/src/lib/basebuilder.js +0 -81
  157. package/dist/module/src/lib/classBuilder.js +0 -38
  158. package/dist/module/src/lib/core.js +0 -98
  159. package/dist/module/src/lib/index.js +0 -18
  160. package/dist/module/src/lib/types.js +0 -2
  161. package/dist/module/src/puppeteerConfiger.js +0 -19
  162. package/dist/module/src/utils.js +0 -9
  163. package/dist/module/src/web.html.js +0 -20
  164. package/dist/module/testeranto.js +0 -13
  165. package/dist/module/tsconfig.module.tsbuildinfo +0 -1
  166. package/dist/prebuild/cli.mjs +0 -1491
  167. package/dist/prebuild/cli2.mjs +0 -918
  168. package/dist/prebuild/init-docs.mjs +0 -48
  169. package/dist/types/dist/module/src/Init.d.ts +0 -2
  170. package/dist/types/src/Init.d.ts +0 -2
  171. package/dist/types/src/Node.d.ts +0 -13
  172. package/dist/types/src/PM/index.d.ts +0 -34
  173. package/dist/types/src/PM/main.d.ts +0 -56
  174. package/dist/types/src/PM/node.d.ts +0 -42
  175. package/dist/types/src/PM/web.d.ts +0 -40
  176. package/dist/types/src/SubPackages/puppeteer.d.ts +0 -6
  177. package/dist/types/src/SubPackages/react/component/node.d.ts +0 -7
  178. package/dist/types/src/SubPackages/react/component/web.d.ts +0 -7
  179. package/dist/types/src/SubPackages/react/jsx/index.d.ts +0 -12
  180. package/dist/types/src/SubPackages/react/jsx/node.d.ts +0 -4
  181. package/dist/types/src/SubPackages/react/jsx/web.d.ts +0 -4
  182. package/dist/types/src/SubPackages/react-dom/component/node.d.ts +0 -12
  183. package/dist/types/src/SubPackages/react-dom/component/web.d.ts +0 -11
  184. package/dist/types/src/SubPackages/react-dom/jsx/index.d.ts +0 -7
  185. package/dist/types/src/SubPackages/react-dom/jsx/node.d.ts +0 -6
  186. package/dist/types/src/SubPackages/react-dom/jsx/web.d.ts +0 -5
  187. package/dist/types/src/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +0 -5
  188. package/dist/types/src/SubPackages/react-test-renderer/component/index.d.ts +0 -13
  189. package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +0 -9
  190. package/dist/types/src/SubPackages/react-test-renderer/component/node.d.ts +0 -8
  191. package/dist/types/src/SubPackages/react-test-renderer/component/web.d.ts +0 -3
  192. package/dist/types/src/SubPackages/react-test-renderer/fc/node.d.ts +0 -8
  193. package/dist/types/src/SubPackages/react-test-renderer/fc/web.d.ts +0 -8
  194. package/dist/types/src/SubPackages/react-test-renderer/jsx/index.d.ts +0 -17
  195. package/dist/types/src/SubPackages/react-test-renderer/jsx/node.d.ts +0 -9
  196. package/dist/types/src/SubPackages/react-test-renderer/jsx/web.d.ts +0 -8
  197. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/index.d.ts +0 -16
  198. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/node.d.ts +0 -4
  199. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/web.d.ts +0 -4
  200. package/dist/types/src/Types.d.ts +0 -90
  201. package/dist/types/src/Web.d.ts +0 -10
  202. package/dist/types/src/cli.d.ts +0 -1
  203. package/dist/types/src/cli2.d.ts +0 -1
  204. package/dist/types/src/defaultConfig.d.ts +0 -3
  205. package/dist/types/src/esbuildConfigs/featuresPlugin.d.ts +0 -5
  206. package/dist/types/src/esbuildConfigs/index.d.ts +0 -4
  207. package/dist/types/src/esbuildConfigs/inputFilesPlugin.d.ts +0 -7
  208. package/dist/types/src/esbuildConfigs/node.d.ts +0 -4
  209. package/dist/types/src/esbuildConfigs/web.d.ts +0 -4
  210. package/dist/types/src/init-docs.d.ts +0 -1
  211. package/dist/types/src/lib/abstractBase.d.ts +0 -110
  212. package/dist/types/src/lib/basebuilder.d.ts +0 -27
  213. package/dist/types/src/lib/classBuilder.d.ts +0 -7
  214. package/dist/types/src/lib/core.d.ts +0 -8
  215. package/dist/types/src/lib/index.d.ts +0 -60
  216. package/dist/types/src/lib/types.d.ts +0 -40
  217. package/dist/types/src/puppeteerConfiger.d.ts +0 -4
  218. package/dist/types/src/utils.d.ts +0 -2
  219. package/dist/types/src/web.html.d.ts +0 -2
  220. package/dist/types/testeranto.d.ts +0 -16
  221. package/dist/types/tsconfig.types.tsbuildinfo +0 -1
  222. package/docker-compose.yml +0 -37
  223. package/src/SubPackages/puppeteer.ts +0 -51
  224. package/src/cli.ts +0 -535
  225. package/src/cli2.ts +0 -157
  226. package/testeranto.ts +0 -13
@@ -1,941 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.PM_Main = void 0;
30
- const fs_1 = __importDefault(require("fs"));
31
- const path_1 = __importDefault(require("path"));
32
- const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
33
- const crypto_1 = __importDefault(require("crypto"));
34
- const index_js_1 = require("./index.js");
35
- const fileStreams3 = [];
36
- const fPaths = [];
37
- const files = {};
38
- const recorders = {};
39
- const screenshots = {};
40
- const red = "\x1b[31m";
41
- const green = "\x1b[32m";
42
- const reset = "\x1b[0m"; // Resets to default color
43
- const statusMessagePretty = (failures, test) => {
44
- if (failures === 0) {
45
- console.log(green + `${test} completed successfully` + reset);
46
- }
47
- else {
48
- console.log(red + `${test} failed ${failures} times` + reset);
49
- }
50
- };
51
- class PM_Main extends index_js_1.PM {
52
- constructor(configs) {
53
- super();
54
- this.shutdownMode = false;
55
- this.checkForShutdown = () => {
56
- const anyRunning = Object.values(this.registry).filter((x) => x === false).length > 0;
57
- if (anyRunning) {
58
- }
59
- else {
60
- this.browser.disconnect().then(() => {
61
- console.log("Goodbye");
62
- process.exit();
63
- });
64
- }
65
- };
66
- this.register = (src) => {
67
- this.registry[src] = false;
68
- };
69
- this.deregister = (src) => {
70
- this.registry[src] = true;
71
- if (this.shutdownMode) {
72
- this.checkForShutdown();
73
- }
74
- };
75
- this.launchNode = async (src, dest) => {
76
- console.log("! node", src);
77
- this.register(src);
78
- const destFolder = dest.replace(".mjs", "");
79
- let argz = "";
80
- const testConfig = this.configs.tests.find((t) => {
81
- return t[0] === src;
82
- });
83
- if (!testConfig) {
84
- console.error("missing test config");
85
- process.exit(-1);
86
- }
87
- const testConfigResource = testConfig[2];
88
- let portsToUse = [];
89
- if (testConfigResource.ports === 0) {
90
- argz = JSON.stringify({
91
- scheduled: true,
92
- name: src,
93
- ports: portsToUse,
94
- fs: destFolder,
95
- browserWSEndpoint: this.browser.wsEndpoint(),
96
- });
97
- }
98
- else if (testConfigResource.ports > 0) {
99
- const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
100
- if (openPorts.length >= testConfigResource.ports) {
101
- for (let i = 0; i < testConfigResource.ports; i++) {
102
- portsToUse.push(openPorts[i][0]);
103
- this.ports[openPorts[i][0]] = false; // port is now closed
104
- }
105
- argz = JSON.stringify({
106
- scheduled: true,
107
- name: src,
108
- // ports: [3333],
109
- ports: portsToUse,
110
- fs: destFolder,
111
- browserWSEndpoint: this.browser.wsEndpoint(),
112
- });
113
- }
114
- else {
115
- this.queue.push(src);
116
- return;
117
- }
118
- }
119
- else {
120
- console.error("negative port makes no sense", src);
121
- process.exit(-1);
122
- }
123
- const builtfile = dest;
124
- const webSideCares = [];
125
- // await Promise.all(
126
- // testConfig[3].map(async (sidecar) => {
127
- // if (sidecar[1] === "web") {
128
- // const s = await this.launchWebSideCar(
129
- // sidecar[0],
130
- // destinationOfRuntime(sidecar[0], "web", this.configs),
131
- // sidecar
132
- // );
133
- // webSideCares.push(s);
134
- // return s;
135
- // }
136
- // if (sidecar[1] === "node") {
137
- // return this.launchNodeSideCar(
138
- // sidecar[0],
139
- // destinationOfRuntime(sidecar[0], "node", this.configs),
140
- // sidecar
141
- // );
142
- // }
143
- // })
144
- // );
145
- this.server[builtfile] = await Promise.resolve().then(() => __importStar(require(`${builtfile}?cacheBust=${Date.now()}`))).then((module) => {
146
- return module.default.then((defaultModule) => {
147
- defaultModule
148
- .receiveTestResourceConfig(argz)
149
- .then(async ({ features, failed }) => {
150
- this.receiveFeatures(features, destFolder, src);
151
- // console.log(`${src} completed with ${failed} errors`);
152
- statusMessagePretty(failed, src);
153
- })
154
- .catch((e) => {
155
- console.log(`${src} errored with`, e);
156
- })
157
- .finally(() => {
158
- webSideCares.forEach((webSideCar) => webSideCar.close());
159
- this.deregister(src);
160
- });
161
- });
162
- });
163
- // console.log("portsToUse", portsToUse);
164
- for (let i = 0; i <= portsToUse.length; i++) {
165
- if (portsToUse[i]) {
166
- this.ports[portsToUse[i]] = "true"; //port is open again
167
- }
168
- }
169
- };
170
- this.launchWebSideCar = async (src, dest, testConfig) => {
171
- const d = dest + ".mjs";
172
- console.log("launchWebSideCar", src, dest, d);
173
- const destFolder = dest.replace(".mjs", "");
174
- // const webArgz = JSON.stringify({
175
- // name: dest,
176
- // ports: [].toString(),
177
- // fs: destFolder,
178
- // browserWSEndpoint: this.browser.wsEndpoint(),
179
- // });
180
- const fileStreams2 = [];
181
- const doneFileStream2 = [];
182
- return new Promise((res, rej) => {
183
- this.browser
184
- .newPage()
185
- .then((page) => {
186
- // page.on("console", (msg) => {
187
- // console.log("web > ", msg.args(), msg.text());
188
- // // for (let i = 0; i < msg._args.length; ++i)
189
- // // console.log(`${i}: ${msg._args[i]}`);
190
- // });
191
- page.exposeFunction("custom-screenshot", async (ssOpts, testName) => {
192
- // console.log("main.ts browser custom-screenshot", testName);
193
- const p = ssOpts.path;
194
- const dir = path_1.default.dirname(p);
195
- fs_1.default.mkdirSync(dir, {
196
- recursive: true,
197
- });
198
- files[testName].add(ssOpts.path);
199
- const sPromise = page.screenshot(Object.assign(Object.assign({}, ssOpts), { path: p }));
200
- if (!screenshots[testName]) {
201
- screenshots[testName] = [];
202
- }
203
- screenshots[testName].push(sPromise);
204
- // sPromise.then(())
205
- await sPromise;
206
- return sPromise;
207
- // page.evaluate(`window["screenshot done"]`);
208
- });
209
- page.exposeFunction("writeFileSync", (fp, contents, testName) => {
210
- const dir = path_1.default.dirname(fp);
211
- fs_1.default.mkdirSync(dir, {
212
- recursive: true,
213
- });
214
- const p = new Promise(async (res, rej) => {
215
- fs_1.default.writeFileSync(fp, contents);
216
- res(fp);
217
- });
218
- doneFileStream2.push(p);
219
- if (!files[testName]) {
220
- files[testName] = new Set();
221
- }
222
- files[testName].add(fp);
223
- return p;
224
- });
225
- page.exposeFunction("existsSync", (fp, contents) => {
226
- return fs_1.default.existsSync(fp);
227
- });
228
- page.exposeFunction("mkdirSync", (fp) => {
229
- if (!fs_1.default.existsSync(fp)) {
230
- return fs_1.default.mkdirSync(fp, {
231
- recursive: true,
232
- });
233
- }
234
- return false;
235
- });
236
- page.exposeFunction("createWriteStream", (fp, testName) => {
237
- const f = fs_1.default.createWriteStream(fp);
238
- // if (!files[testName]) {
239
- // files[testName] = new Set();
240
- // }
241
- files[testName].add(fp);
242
- const p = new Promise((res, rej) => {
243
- res(fp);
244
- });
245
- doneFileStream2.push(p);
246
- f.on("close", async () => {
247
- await p;
248
- });
249
- fileStreams2.push(f);
250
- return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams2.length - 1 });
251
- });
252
- page.exposeFunction("write", async (uid, contents) => {
253
- return fileStreams2[uid].write(contents);
254
- });
255
- page.exposeFunction("end", async (uid) => {
256
- return fileStreams2[uid].end();
257
- });
258
- // page.exposeFunction("customclose", (p: string, testName: string) => {
259
- // fs.writeFileSync(
260
- // p + "/manifest.json",
261
- // JSON.stringify(Array.from(files[testName]))
262
- // );
263
- // delete files[testName];
264
- // Promise.all(screenshots[testName] || []).then(() => {
265
- // delete screenshots[testName];
266
- // // page.close();
267
- // });
268
- // });
269
- return page;
270
- })
271
- .then(async (page) => {
272
- await page.goto(`file://${`${dest}.html`}`, {});
273
- res(page);
274
- });
275
- });
276
- };
277
- this.launchNodeSideCar = async (src, dest, testConfig) => {
278
- const d = dest + ".mjs";
279
- console.log("launchNodeSideCar", src, dest, d);
280
- const destFolder = dest.replace(".mjs", "");
281
- let argz = "";
282
- const testConfigResource = testConfig[2];
283
- let portsToUse = [];
284
- if (testConfigResource.ports === 0) {
285
- argz = JSON.stringify({
286
- scheduled: true,
287
- name: src,
288
- ports: portsToUse,
289
- fs: destFolder,
290
- browserWSEndpoint: this.browser.wsEndpoint(),
291
- });
292
- }
293
- else if (testConfigResource.ports > 0) {
294
- const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
295
- // console.log("openPorts", openPorts);
296
- if (openPorts.length >= testConfigResource.ports) {
297
- for (let i = 0; i < testConfigResource.ports; i++) {
298
- portsToUse.push(openPorts[i][0]);
299
- this.ports[openPorts[i][0]] = false; // port is now closed
300
- }
301
- argz = JSON.stringify({
302
- scheduled: true,
303
- name: src,
304
- // ports: [3333],
305
- ports: portsToUse,
306
- fs: ".",
307
- browserWSEndpoint: this.browser.wsEndpoint(),
308
- });
309
- }
310
- else {
311
- this.queue.push(src);
312
- return;
313
- }
314
- }
315
- else {
316
- console.error("negative port makes no sense", src);
317
- process.exit(-1);
318
- }
319
- const builtfile = dest + ".mjs";
320
- // console.log(
321
- // "node builtfile",
322
- // (await import(`${builtfile}?cacheBust=${Date.now()}`)).default
323
- // );
324
- this.server[builtfile] = await Promise.resolve().then(() => __importStar(require(`${builtfile}?cacheBust=${Date.now()}`))).then((module) => {
325
- return module.default.then((defaultModule) => {
326
- // console.log("defaultModule", defaultModule);
327
- const s = new defaultModule();
328
- s.receiveTestResourceConfig(argz);
329
- // Object.create(defaultModule);
330
- // defaultModule
331
- // .receiveTestResourceConfig(argz)
332
- // .then((x) => {
333
- // console.log("then", x);
334
- // return x;
335
- // })
336
- // .catch((e) => {
337
- // console.log("catch", e);
338
- // });
339
- });
340
- });
341
- // console.log("portsToUse", portsToUse);
342
- for (let i = 0; i <= portsToUse.length; i++) {
343
- if (portsToUse[i]) {
344
- this.ports[portsToUse[i]] = "true"; //port is open again
345
- }
346
- }
347
- };
348
- this.launchWeb = (t, dest) => {
349
- console.log("! web", t);
350
- this.register(t);
351
- // sidecars.map((sidecar) => {
352
- // if (sidecar[1] === "node") {
353
- // return this.launchNodeSideCar(
354
- // sidecar[0],
355
- // destinationOfRuntime(sidecar[0], "node", this.configs),
356
- // sidecar
357
- // );
358
- // }
359
- // });
360
- const destFolder = dest.replace(".mjs", "");
361
- const webArgz = JSON.stringify({
362
- name: dest,
363
- ports: [].toString(),
364
- fs: destFolder,
365
- browserWSEndpoint: this.browser.wsEndpoint(),
366
- });
367
- const d = `${dest}?cacheBust=${Date.now()}`;
368
- const evaluation = `
369
- console.log("importing ${d}");
370
- import('${d}').then(async (x) => {
371
- console.log("imported", (await x.default));
372
- try {
373
- return await (await x.default).receiveTestResourceConfig(${webArgz})
374
- } catch (e) {
375
- console.log("fail", e)
376
- }
377
- })`;
378
- const fileStreams2 = [];
379
- const doneFileStream2 = [];
380
- const stdoutStream = fs_1.default.createWriteStream(`${destFolder}/stdout.log`);
381
- const stderrStream = fs_1.default.createWriteStream(`${destFolder}/stderr.log`);
382
- this.browser
383
- .newPage()
384
- .then((page) => {
385
- // page.on("console", (msg) => {
386
- // // console.log("web > ", msg.args(), msg.text());
387
- // });
388
- page.exposeFunction("screencast", async (ssOpts, testName) => {
389
- const p = ssOpts.path;
390
- const dir = path_1.default.dirname(p);
391
- fs_1.default.mkdirSync(dir, {
392
- recursive: true,
393
- });
394
- if (!files[testName]) {
395
- files[testName] = new Set();
396
- }
397
- files[testName].add(ssOpts.path);
398
- const sPromise = page.screenshot(Object.assign(Object.assign({}, ssOpts), { path: p }));
399
- if (!screenshots[testName]) {
400
- screenshots[testName] = [];
401
- }
402
- screenshots[testName].push(sPromise);
403
- // sPromise.then(())
404
- await sPromise;
405
- return sPromise;
406
- // page.evaluate(`window["screenshot done"]`);
407
- });
408
- page.exposeFunction("customScreenShot", async (ssOpts, testName) => {
409
- const p = ssOpts.path;
410
- const dir = path_1.default.dirname(p);
411
- fs_1.default.mkdirSync(dir, {
412
- recursive: true,
413
- });
414
- if (!files[testName]) {
415
- files[testName] = new Set();
416
- }
417
- files[testName].add(ssOpts.path);
418
- const sPromise = page.screenshot(Object.assign(Object.assign({}, ssOpts), { path: p }));
419
- if (!screenshots[testName]) {
420
- screenshots[testName] = [];
421
- }
422
- screenshots[testName].push(sPromise);
423
- // sPromise.then(())
424
- await sPromise;
425
- return sPromise;
426
- // page.evaluate(`window["screenshot done"]`);
427
- });
428
- page.exposeFunction("writeFileSync", (fp, contents, testName) => {
429
- return globalThis["writeFileSync"](fp, contents, testName);
430
- // const dir = path.dirname(fp);
431
- // fs.mkdirSync(dir, {
432
- // recursive: true,
433
- // });
434
- // const p = new Promise<string>(async (res, rej) => {
435
- // fs.writeFileSync(fp, contents);
436
- // res(fp);
437
- // });
438
- // doneFileStream2.push(p);
439
- // if (!files[testName]) {
440
- // files[testName] = new Set();
441
- // }
442
- // files[testName].add(fp);
443
- // return p;
444
- });
445
- page.exposeFunction("existsSync", (fp, contents) => {
446
- return fs_1.default.existsSync(fp);
447
- });
448
- page.exposeFunction("mkdirSync", (fp) => {
449
- if (!fs_1.default.existsSync(fp)) {
450
- return fs_1.default.mkdirSync(fp, {
451
- recursive: true,
452
- });
453
- }
454
- return false;
455
- });
456
- page.exposeFunction("createWriteStream", (fp, testName) => {
457
- const f = fs_1.default.createWriteStream(fp);
458
- if (!files[testName]) {
459
- files[testName] = new Set();
460
- }
461
- files[testName].add(fp);
462
- const p = new Promise((res, rej) => {
463
- res(fp);
464
- });
465
- doneFileStream2.push(p);
466
- f.on("close", async () => {
467
- await p;
468
- });
469
- fileStreams2.push(f);
470
- return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams2.length - 1 });
471
- });
472
- page.exposeFunction("write", async (uid, contents) => {
473
- return fileStreams2[uid].write(contents);
474
- });
475
- page.exposeFunction("end", async (uid) => {
476
- return fileStreams2[uid].end();
477
- });
478
- // page.exposeFunction("customclose", (p: string, testName: string) => {
479
- // // console.log("closing", p);
480
- // console.log("\t GOODBYE customclose");
481
- // fs.writeFileSync(
482
- // p + "/manifest.json",
483
- // JSON.stringify(Array.from(files[testName]))
484
- // );
485
- // delete files[testName];
486
- // // console.log("screenshots[testName]", screenshots[testName]);
487
- // Promise.all(screenshots[testName] || []).then(() => {
488
- // delete screenshots[testName];
489
- // });
490
- // // globalThis["writeFileSync"](
491
- // // p + "/manifest.json",
492
- // // // files.entries()
493
- // // JSON.stringify(Array.from(files[testName]))
494
- // // );
495
- // // console.log("closing doneFileStream2", doneFileStream2);
496
- // // console.log("closing doneFileStream2", doneFileStream2);
497
- // // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
498
- // // page.close();
499
- // // });
500
- // // Promise.all(screenshots).then(() => {
501
- // // page.close();
502
- // // });
503
- // // setTimeout(() => {
504
- // // console.log("Delayed for 1 second.");
505
- // // page.close();
506
- // // }, 5000);
507
- // // return page.close();
508
- // });
509
- page.exposeFunction("page", () => {
510
- return page.mainFrame()._id;
511
- });
512
- page.exposeFunction("click", (sel) => {
513
- return page.click(sel);
514
- });
515
- page.exposeFunction("focusOn", (sel) => {
516
- return page.focus(sel);
517
- });
518
- page.exposeFunction("typeInto", async (value) => await page.keyboard.type(value));
519
- page.exposeFunction("getValue", (selector) => page.$eval(selector, (input) => input.getAttribute("value")));
520
- page.exposeFunction("getAttribute", async (selector, attribute) => {
521
- const attributeValue = await page.$eval(selector, (input) => {
522
- return input.getAttribute(attribute);
523
- });
524
- return attributeValue;
525
- });
526
- page.exposeFunction("isDisabled", async (selector) => {
527
- const attributeValue = await page.$eval(selector, (input) => {
528
- return input.disabled;
529
- });
530
- return attributeValue;
531
- });
532
- page.exposeFunction("$", async (selector) => {
533
- const x = page.$(selector);
534
- const y = await x;
535
- return y;
536
- });
537
- return page;
538
- })
539
- .then(async (page) => {
540
- const close = () => {
541
- if (!files[t]) {
542
- files[t] = new Set();
543
- }
544
- // files[t].add(filepath);
545
- fs_1.default.writeFileSync(destFolder + "/manifest.json", JSON.stringify(Array.from(files[t])));
546
- delete files[t];
547
- Promise.all(screenshots[t] || []).then(() => {
548
- delete screenshots[t];
549
- page.close();
550
- this.deregister(t);
551
- stderrStream.close();
552
- stdoutStream.close();
553
- });
554
- };
555
- page.on("pageerror", (err) => {
556
- console.debug(`Error from ${t}: [${err.name}] `);
557
- stderrStream.write(err.name);
558
- if (err.cause) {
559
- console.debug(`Error from ${t} cause: [${err.cause}] `);
560
- stderrStream.write(err.cause);
561
- }
562
- if (err.stack) {
563
- console.debug(`Error from stack ${t}: [${err.stack}] `);
564
- stderrStream.write(err.stack);
565
- }
566
- console.debug(`Error from message ${t}: [${err.message}] `);
567
- stderrStream.write(err.message);
568
- // close();
569
- });
570
- page.on("console", (log) => {
571
- // console.debug(`Log from ${t}: [${log.text()}] `);
572
- // console.debug(`Log from ${t}: [${JSON.stringify(log.location())}] `);
573
- // console.debug(
574
- // `Log from ${t}: [${JSON.stringify(log.stackTrace())}] `
575
- // );
576
- stdoutStream.write(log.text());
577
- stdoutStream.write(JSON.stringify(log.location()));
578
- stdoutStream.write(JSON.stringify(log.stackTrace()));
579
- });
580
- await page.goto(`file://${`${destFolder}.html`}`, {});
581
- await page
582
- .evaluate(evaluation)
583
- .then(async ({ failed, features }) => {
584
- this.receiveFeatures(features, destFolder, t);
585
- // console.log(`${t} completed with ${failed} errors`);
586
- statusMessagePretty(failed, t);
587
- })
588
- .catch((e) => {
589
- console.log(`${t} errored with`, e);
590
- })
591
- .finally(() => {
592
- close();
593
- });
594
- return page;
595
- });
596
- };
597
- this.receiveFeatures = (features, destFolder, srcTest) => {
598
- const featureDestination = path_1.default.resolve(process.cwd(), "docs", "features", "strings", srcTest.split(".").slice(0, -1).join(".") + ".features.txt");
599
- features
600
- .reduce(async (mm, featureStringKey) => {
601
- const accum = await mm;
602
- const isUrl = isValidUrl(featureStringKey);
603
- if (isUrl) {
604
- const u = new URL(featureStringKey);
605
- if (u.protocol === "file:") {
606
- const newPath = `${process.cwd()}/docs/features/internal/${path_1.default.relative(process.cwd(), u.pathname)}`;
607
- await fs_1.default.promises.mkdir(path_1.default.dirname(newPath), { recursive: true });
608
- try {
609
- await fs_1.default.unlinkSync(newPath);
610
- // console.log(`Removed existing link at ${newPath}`);
611
- }
612
- catch (error) {
613
- if (error.code !== "ENOENT") {
614
- // throw error;
615
- }
616
- }
617
- fs_1.default.symlink(u.pathname, newPath, (err) => {
618
- if (err) {
619
- // console.error("Error creating symlink:", err);
620
- }
621
- else {
622
- // console.log("Symlink created successfully");
623
- }
624
- });
625
- accum.files.push(newPath);
626
- }
627
- else if (u.protocol === "http:" || u.protocol === "https:") {
628
- const newPath = `${process.cwd()}/docs/features/external${u.hostname}${u.pathname}`;
629
- const body = await this.configs.featureIngestor(featureStringKey);
630
- writeFileAndCreateDir(newPath, body);
631
- accum.files.push(newPath);
632
- }
633
- }
634
- else {
635
- await fs_1.default.promises.mkdir(path_1.default.dirname(featureDestination), {
636
- recursive: true,
637
- });
638
- // const newPath = `${process.cwd()}/docs/features/plain/${await sha256(
639
- // featureStringKey
640
- // )}`;
641
- // writeFileAndCreateDir(
642
- // `${featureDestination}/${await sha256(featureStringKey)}`,
643
- // featureStringKey
644
- // );
645
- accum.strings.push(featureStringKey);
646
- }
647
- return accum;
648
- }, Promise.resolve({ files: [], strings: [] }))
649
- .then(({ files, strings }) => {
650
- // writeFileAndCreateDir(`${featureDestination}`, JSON.stringify(strings));
651
- fs_1.default.writeFileSync(`${destFolder}/featurePrompt.txt`, files
652
- .map((f) => {
653
- return `/read ${f}`;
654
- })
655
- .join("\n"));
656
- });
657
- };
658
- this.server = {};
659
- this.configs = configs;
660
- this.ports = {};
661
- this.registry = {};
662
- this.configs.ports.forEach((element) => {
663
- this.ports[element] = "true"; // set ports as open
664
- });
665
- globalThis["waitForSelector"] = async (pageKey, sel) => {
666
- console.log("waitForSelector", pageKey, sel);
667
- const page = (await this.browser.pages()).find((p) => p.mainFrame()._id === pageKey);
668
- await (page === null || page === void 0 ? void 0 : page.waitForSelector(sel));
669
- };
670
- globalThis["screencastStop"] = async (path) => {
671
- return recorders[path].stop();
672
- };
673
- globalThis["closePage"] = async (pageKey) => {
674
- const page = (await this.browser.pages()).find((p) => p.mainFrame()._id === pageKey);
675
- return page.close();
676
- };
677
- // globalThis["closePage"] = (p) => {
678
- // console.log("closePage", p);
679
- // return p.close();
680
- // };
681
- globalThis["goto"] = async (pageKey, url) => {
682
- const page = (await this.browser.pages()).find((p) => p.mainFrame()._id === pageKey);
683
- await (page === null || page === void 0 ? void 0 : page.goto(url));
684
- return;
685
- };
686
- globalThis["newPage"] = () => {
687
- return this.browser.newPage();
688
- };
689
- globalThis["pages"] = () => {
690
- return this.browser.pages();
691
- };
692
- globalThis["mkdirSync"] = (fp) => {
693
- if (!fs_1.default.existsSync(fp)) {
694
- return fs_1.default.mkdirSync(fp, {
695
- recursive: true,
696
- });
697
- }
698
- return false;
699
- };
700
- globalThis["writeFileSync"] = (filepath, contents, testName) => {
701
- // console.log(testName, "writeFileSync", filepath, testName);
702
- // Create directories if they don't exist
703
- const dir = path_1.default.dirname(filepath);
704
- // console.log(testName, "mkdirSync", dir);
705
- fs_1.default.mkdirSync(dir, {
706
- recursive: true,
707
- });
708
- // console.log(testName, "mkdirSync2");
709
- if (!files[testName]) {
710
- files[testName] = new Set();
711
- }
712
- files[testName].add(filepath);
713
- return fs_1.default.writeFileSync(filepath, contents);
714
- };
715
- globalThis["createWriteStream"] = (filepath, testName) => {
716
- const f = fs_1.default.createWriteStream(filepath);
717
- fileStreams3.push(f);
718
- // files.add(filepath);
719
- if (!files[testName]) {
720
- files[testName] = new Set();
721
- }
722
- files[testName].add(filepath);
723
- return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams3.length - 1 });
724
- };
725
- globalThis["write"] = (uid, contents) => {
726
- fileStreams3[uid].write(contents);
727
- };
728
- globalThis["end"] = (uid) => {
729
- fileStreams3[uid].end();
730
- };
731
- // async (ssOpts: ScreenshotOptions, testName: string) => {
732
- // const p = ssOpts.path as string;
733
- // const dir = path.dirname(p);
734
- // fs.mkdirSync(dir, {
735
- // recursive: true,
736
- // });
737
- // if (!files[testName]) {
738
- // files[testName] = new Set();
739
- // }
740
- // files[testName].add(ssOpts.path as string);
741
- // const sPromise = page.screenshot({
742
- // ...ssOpts,
743
- // path: p,
744
- // });
745
- // if (!screenshots[testName]) {
746
- // screenshots[testName] = [];
747
- // }
748
- // screenshots[testName].push(sPromise);
749
- // // sPromise.then(())
750
- // await sPromise;
751
- // return sPromise;
752
- // // page.evaluate(`window["screenshot done"]`);
753
- // };
754
- globalThis["customScreenShot"] = async (opts, pageKey, testName) => {
755
- const page = (await this.browser.pages()).find((p) => p.mainFrame()._id === pageKey);
756
- const p = opts.path;
757
- const dir = path_1.default.dirname(p);
758
- fs_1.default.mkdirSync(dir, {
759
- recursive: true,
760
- });
761
- if (!files[opts.path]) {
762
- files[opts.path] = new Set();
763
- }
764
- files[opts.path].add(opts.path);
765
- const sPromise = page.screenshot(Object.assign(Object.assign({}, opts), { path: p }));
766
- if (!screenshots[opts.path]) {
767
- screenshots[opts.path] = [];
768
- }
769
- screenshots[opts.path].push(sPromise);
770
- await sPromise;
771
- return sPromise;
772
- };
773
- globalThis["screencast"] = async (opts, pageKey) => {
774
- const page = (await this.browser.pages()).find((p) => p.mainFrame()._id === pageKey);
775
- const p = opts.path;
776
- const dir = path_1.default.dirname(p);
777
- fs_1.default.mkdirSync(dir, {
778
- recursive: true,
779
- });
780
- const recorder = await (page === null || page === void 0 ? void 0 : page.screencast(Object.assign(Object.assign({}, opts), { path: p })));
781
- recorders[opts.path] = recorder;
782
- return opts.path;
783
- };
784
- // globalThis["customclose"] = (p: string, testName: string) => {
785
- // if (!files[testName]) {
786
- // files[testName] = new Set();
787
- // }
788
- // fs.writeFileSync(
789
- // p + "/manifest.json",
790
- // JSON.stringify(Array.from(files[testName]))
791
- // );
792
- // delete files[testName];
793
- // };
794
- }
795
- customclose() {
796
- throw new Error("Method not implemented.");
797
- }
798
- waitForSelector(p, s) {
799
- throw new Error("Method not implemented.");
800
- }
801
- closePage(p) {
802
- throw new Error("Method not implemented.");
803
- }
804
- newPage() {
805
- throw new Error("Method not implemented.");
806
- }
807
- goto(p, url) {
808
- throw new Error("Method not implemented.");
809
- }
810
- $(selector) {
811
- throw new Error("Method not implemented.");
812
- }
813
- screencast(opts) {
814
- throw new Error("Method not implemented.");
815
- }
816
- customScreenShot(opts, cdpPage) {
817
- throw new Error("Method not implemented.");
818
- }
819
- end(accessObject) {
820
- throw new Error("Method not implemented.");
821
- }
822
- existsSync(destFolder) {
823
- return fs_1.default.existsSync(destFolder);
824
- }
825
- async mkdirSync(fp) {
826
- if (!fs_1.default.existsSync(fp)) {
827
- return fs_1.default.mkdirSync(fp, {
828
- recursive: true,
829
- });
830
- }
831
- return false;
832
- }
833
- writeFileSync(fp, contents) {
834
- fs_1.default.writeFileSync(fp, contents);
835
- }
836
- createWriteStream(filepath) {
837
- return fs_1.default.createWriteStream(filepath);
838
- }
839
- testArtiFactoryfileWriter(tLog, callback) {
840
- return (fPath, value) => {
841
- callback(new Promise((res, rej) => {
842
- tLog("testArtiFactory =>", fPath);
843
- const cleanPath = path_1.default.resolve(fPath);
844
- fPaths.push(cleanPath.replace(process.cwd(), ``));
845
- const targetDir = cleanPath.split("/").slice(0, -1).join("/");
846
- fs_1.default.mkdir(targetDir, { recursive: true }, async (error) => {
847
- if (error) {
848
- console.error(`❗️testArtiFactory failed`, targetDir, error);
849
- }
850
- fs_1.default.writeFileSync(path_1.default.resolve(targetDir.split("/").slice(0, -1).join("/"), "manifest"), fPaths.join(`\n`), {
851
- encoding: "utf-8",
852
- });
853
- if (Buffer.isBuffer(value)) {
854
- fs_1.default.writeFileSync(fPath, value, "binary");
855
- res();
856
- }
857
- else if (`string` === typeof value) {
858
- fs_1.default.writeFileSync(fPath, value.toString(), {
859
- encoding: "utf-8",
860
- });
861
- res();
862
- }
863
- else {
864
- /* @ts-ignore:next-line */
865
- const pipeStream = value;
866
- const myFile = fs_1.default.createWriteStream(fPath);
867
- pipeStream.pipe(myFile);
868
- pipeStream.on("close", () => {
869
- myFile.close();
870
- res();
871
- });
872
- }
873
- });
874
- }));
875
- };
876
- }
877
- write(accessObject, contents) {
878
- throw new Error("Method not implemented.");
879
- }
880
- page() {
881
- throw new Error("Method not implemented.");
882
- }
883
- click(selector) {
884
- throw new Error("Method not implemented.");
885
- }
886
- focusOn(selector) {
887
- throw new Error("Method not implemented.");
888
- }
889
- typeInto(value) {
890
- throw new Error("Method not implemented.");
891
- }
892
- getValue(value) {
893
- throw new Error("Method not implemented.");
894
- }
895
- getAttribute(selector, attribute) {
896
- throw new Error("Method not implemented.");
897
- }
898
- isDisabled(selector) {
899
- throw new Error("Method not implemented.");
900
- }
901
- screencastStop(s) {
902
- throw new Error("Method not implemented.");
903
- }
904
- ////////////////////////////////////////////////////////////////////////////////
905
- async startPuppeteer(options, destfolder) {
906
- this.browser = (await puppeteer_core_1.default.launch(options));
907
- }
908
- ////////////////////////////////////////////////////////////////////////////////
909
- shutDown() {
910
- console.log("shutting down...");
911
- this.shutdownMode = true;
912
- this.checkForShutdown();
913
- }
914
- }
915
- exports.PM_Main = PM_Main;
916
- async function writeFileAndCreateDir(filePath, data) {
917
- const dirPath = path_1.default.dirname(filePath);
918
- try {
919
- await fs_1.default.promises.mkdir(dirPath, { recursive: true });
920
- await fs_1.default.appendFileSync(filePath, data);
921
- }
922
- catch (error) {
923
- console.error(`Error writing file: ${error}`);
924
- }
925
- }
926
- async function sha256(rawData) {
927
- const data = typeof rawData === "object" ? JSON.stringify(rawData) : String(rawData);
928
- const msgBuffer = new TextEncoder().encode(data);
929
- const hashBuffer = await crypto_1.default.subtle.digest("SHA-256", msgBuffer);
930
- const hashArray = Array.from(new Uint8Array(hashBuffer));
931
- return hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
932
- }
933
- function isValidUrl(string) {
934
- try {
935
- new URL(string);
936
- return true;
937
- }
938
- catch (err) {
939
- return false;
940
- }
941
- }