creevey 0.10.0-beta.30 → 0.10.0-beta.32
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/dist/client/shared/components/ResultsPage.d.ts +1 -1
- package/dist/client/web/CreeveyApp.js +1 -0
- package/dist/client/web/CreeveyApp.js.map +1 -1
- package/dist/client/web/assets/{index-C5QCFtF-.js → index-Cs8IUTQs.js} +84 -84
- package/dist/client/web/index.html +1 -1
- package/dist/server/docker.d.ts +1 -1
- package/dist/server/docker.js +21 -4
- package/dist/server/docker.js.map +1 -1
- package/dist/server/index.js +9 -10
- package/dist/server/index.js.map +1 -1
- package/dist/server/master/start.js +1 -1
- package/dist/server/master/start.js.map +1 -1
- package/dist/server/playwright/docker-file.d.ts +1 -2
- package/dist/server/playwright/docker-file.js +10 -4
- package/dist/server/playwright/docker-file.js.map +1 -1
- package/dist/server/playwright/docker.d.ts +2 -1
- package/dist/server/playwright/docker.js +10 -2
- package/dist/server/playwright/docker.js.map +1 -1
- package/dist/server/playwright/internal.d.ts +3 -4
- package/dist/server/playwright/internal.js +48 -37
- package/dist/server/playwright/internal.js.map +1 -1
- package/dist/server/playwright/webdriver.js +1 -7
- package/dist/server/playwright/webdriver.js.map +1 -1
- package/dist/server/selenium/internal.js +5 -12
- package/dist/server/selenium/internal.js.map +1 -1
- package/dist/server/selenium/webdriver.js +0 -7
- package/dist/server/selenium/webdriver.js.map +1 -1
- package/dist/server/telemetry.js +2 -2
- package/dist/server/utils.d.ts +1 -2
- package/dist/server/utils.js +11 -8
- package/dist/server/utils.js.map +1 -1
- package/dist/server/webdriver.d.ts +2 -0
- package/dist/server/webdriver.js +13 -1
- package/dist/server/webdriver.js.map +1 -1
- package/dist/types.d.ts +0 -2
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
- package/src/client/web/CreeveyApp.tsx +1 -0
- package/src/server/docker.ts +24 -4
- package/src/server/index.ts +11 -14
- package/src/server/master/start.ts +1 -1
- package/src/server/playwright/docker-file.ts +12 -5
- package/src/server/playwright/docker.ts +16 -3
- package/src/server/playwright/index-source.mjs +16 -0
- package/src/server/playwright/internal.ts +78 -52
- package/src/server/playwright/webdriver.ts +1 -7
- package/src/server/selenium/internal.ts +5 -12
- package/src/server/selenium/webdriver.ts +0 -7
- package/src/server/telemetry.ts +2 -2
- package/src/server/utils.ts +33 -25
- package/src/server/webdriver.ts +13 -0
- package/src/types.ts +0 -2
@@ -42,7 +42,6 @@ export class SeleniumWebdriver extends CreeveyWebdriverBase {
|
|
42
42
|
|
43
43
|
getSessionId(): Promise<string> {
|
44
44
|
if (!this.#browser) {
|
45
|
-
// TODO Describe the error
|
46
45
|
throw new Error('Browser is not initialized');
|
47
46
|
}
|
48
47
|
|
@@ -89,7 +88,6 @@ export class SeleniumWebdriver extends CreeveyWebdriverBase {
|
|
89
88
|
|
90
89
|
async loadStoriesFromBrowser(): Promise<StoriesRaw> {
|
91
90
|
if (!this.#browser) {
|
92
|
-
// TODO Describe the error
|
93
91
|
throw new Error('Browser is not initialized');
|
94
92
|
}
|
95
93
|
|
@@ -98,7 +96,6 @@ export class SeleniumWebdriver extends CreeveyWebdriverBase {
|
|
98
96
|
|
99
97
|
afterTest(test: ServerTest): Promise<void> {
|
100
98
|
if (!this.#browser) {
|
101
|
-
// TODO Describe the error
|
102
99
|
throw new Error('Browser is not initialized');
|
103
100
|
}
|
104
101
|
|
@@ -110,7 +107,6 @@ export class SeleniumWebdriver extends CreeveyWebdriverBase {
|
|
110
107
|
ignoreElements?: string | string[] | null,
|
111
108
|
): Promise<Buffer> {
|
112
109
|
if (!this.#browser) {
|
113
|
-
// TODO Describe the error
|
114
110
|
throw new Error('Browser is not initialized');
|
115
111
|
}
|
116
112
|
|
@@ -119,7 +115,6 @@ export class SeleniumWebdriver extends CreeveyWebdriverBase {
|
|
119
115
|
|
120
116
|
protected waitForComplete(callback: (isCompleted: boolean) => void): void {
|
121
117
|
if (!this.#browser) {
|
122
|
-
// TODO Describe the error
|
123
118
|
throw new Error('Browser is not initialized');
|
124
119
|
}
|
125
120
|
|
@@ -128,7 +123,6 @@ export class SeleniumWebdriver extends CreeveyWebdriverBase {
|
|
128
123
|
|
129
124
|
protected async selectStory(id: string, waitForReady?: boolean): Promise<boolean> {
|
130
125
|
if (!this.#browser) {
|
131
|
-
// TODO Describe the error
|
132
126
|
throw new Error('Browser is not initialized');
|
133
127
|
}
|
134
128
|
|
@@ -137,7 +131,6 @@ export class SeleniumWebdriver extends CreeveyWebdriverBase {
|
|
137
131
|
|
138
132
|
protected async updateStoryArgs(story: StoryInput, updatedArgs: Args): Promise<void> {
|
139
133
|
if (!this.#browser) {
|
140
|
-
// TODO Describe the error
|
141
134
|
throw new Error('Browser is not initialized');
|
142
135
|
}
|
143
136
|
|
package/src/server/telemetry.ts
CHANGED
@@ -181,8 +181,8 @@ export async function sendScreenshotsCount(
|
|
181
181
|
const testsMeta = { runId: uuid, tests };
|
182
182
|
|
183
183
|
const fullPathname = buildPathname('tests', testsMeta);
|
184
|
-
// NOTE: Keep request path shorter than
|
185
|
-
const chunksCount = Math.ceil(fullPathname.length /
|
184
|
+
// NOTE: Keep request path shorter than 24k symbols
|
185
|
+
const chunksCount = Math.ceil(fullPathname.length / 24_000);
|
186
186
|
let chunks: string[] = [];
|
187
187
|
if (chunksCount > 1) {
|
188
188
|
const testsString = JSON.stringify(tests);
|
package/src/server/utils.ts
CHANGED
@@ -8,6 +8,7 @@ import { register as esmRegister } from 'tsx/esm/api';
|
|
8
8
|
import { register as cjsRegister } from 'tsx/cjs/api';
|
9
9
|
import { SkipOptions, SkipOption, isDefined, TestData, noop, ServerTest, Worker } from '../types.js';
|
10
10
|
import { emitShutdownMessage, sendShutdownMessage } from './messages.js';
|
11
|
+
import { LOCALHOST_REGEXP } from './webdriver.js';
|
11
12
|
import assert from 'assert';
|
12
13
|
import pidtree from 'pidtree';
|
13
14
|
|
@@ -99,7 +100,7 @@ export async function shutdownWorkers(): Promise<void> {
|
|
99
100
|
new Promise<void>((resolve) => {
|
100
101
|
const timeout = setTimeout(() => {
|
101
102
|
if (worker.process.pid) void killTree(worker.process.pid);
|
102
|
-
},
|
103
|
+
}, 10_000);
|
103
104
|
worker.on('exit', () => {
|
104
105
|
clearTimeout(timeout);
|
105
106
|
resolve();
|
@@ -134,10 +135,6 @@ export async function killTree(rootPid: number): Promise<void> {
|
|
134
135
|
});
|
135
136
|
}
|
136
137
|
|
137
|
-
export function shutdown(): void {
|
138
|
-
process.exit();
|
139
|
-
}
|
140
|
-
|
141
138
|
export function shutdownWithError(): void {
|
142
139
|
process.exit(1);
|
143
140
|
}
|
@@ -261,25 +258,36 @@ export async function loadThroughTSX<T>(
|
|
261
258
|
return result;
|
262
259
|
}
|
263
260
|
|
264
|
-
export function waitOnUrl(
|
261
|
+
export function waitOnUrl(waitUrl: string, timeout: number, delay: number) {
|
262
|
+
const urls = [waitUrl];
|
263
|
+
if (!LOCALHOST_REGEXP.test(waitUrl)) {
|
264
|
+
const parsedUrl = new URL(waitUrl);
|
265
|
+
parsedUrl.host = 'localhost';
|
266
|
+
urls.push(parsedUrl.toString());
|
267
|
+
}
|
265
268
|
const startTime = Date.now();
|
266
|
-
return
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
269
|
+
return Promise.race(
|
270
|
+
urls.map(
|
271
|
+
(url) =>
|
272
|
+
new Promise<void>((resolve, reject) => {
|
273
|
+
const interval = setInterval(() => {
|
274
|
+
http
|
275
|
+
.get(url, (response) => {
|
276
|
+
if (response.statusCode === 200) {
|
277
|
+
clearInterval(interval);
|
278
|
+
resolve();
|
279
|
+
}
|
280
|
+
})
|
281
|
+
.on('error', () => {
|
282
|
+
// Ignore HTTP errors
|
283
|
+
});
|
284
|
+
|
285
|
+
if (Date.now() - startTime > timeout) {
|
286
|
+
clearInterval(interval);
|
287
|
+
reject(new Error(`${url} didn't respond within ${timeout / 1000} seconds`));
|
288
|
+
}
|
289
|
+
}, delay);
|
290
|
+
}),
|
291
|
+
),
|
292
|
+
);
|
285
293
|
}
|
package/src/server/webdriver.ts
CHANGED
@@ -18,6 +18,19 @@ export const storybookRootID = 'storybook-root';
|
|
18
18
|
export const LOCALHOST_REGEXP = /(localhost|127\.0\.0\.1)/i;
|
19
19
|
const DOCKER_INTERNAL = 'host.docker.internal';
|
20
20
|
|
21
|
+
let browserClosePromise: Promise<void> | null = null;
|
22
|
+
|
23
|
+
export const openBrowser = () => {
|
24
|
+
let resolve: () => void;
|
25
|
+
browserClosePromise = new Promise((r) => (resolve = r));
|
26
|
+
return () => {
|
27
|
+
resolve();
|
28
|
+
browserClosePromise = null;
|
29
|
+
};
|
30
|
+
};
|
31
|
+
|
32
|
+
export const waitForBrowserClose = () => browserClosePromise;
|
33
|
+
|
21
34
|
export async function resolveStorybookUrl(
|
22
35
|
storybookUrl: string,
|
23
36
|
checkUrl: (url: string) => Promise<boolean>,
|
package/src/types.ts
CHANGED
@@ -150,7 +150,6 @@ export interface BrowserConfigObject {
|
|
150
150
|
screenshots?: boolean;
|
151
151
|
snapshots?: boolean;
|
152
152
|
sources?: boolean;
|
153
|
-
path: string;
|
154
153
|
};
|
155
154
|
};
|
156
155
|
}
|
@@ -369,7 +368,6 @@ export interface Options {
|
|
369
368
|
storybookUrl?: string;
|
370
369
|
storybookPort?: string;
|
371
370
|
storybookAutorunCmd?: string;
|
372
|
-
saveReport: boolean;
|
373
371
|
failFast?: boolean;
|
374
372
|
odiff?: boolean;
|
375
373
|
noDocker?: boolean;
|