creevey 0.8.1-beta.0 → 0.8.1
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/CHANGELOG.md +8 -0
- package/lib/cjs/server/selenium/browser.js +13 -13
- package/lib/cjs/server/storybook/providers/browser.js +6 -6
- package/lib/cjs/server/storybook/providers/nodejs.js +6 -4
- package/lib/cjs/server/worker/worker.js +3 -3
- package/lib/esm/server/selenium/browser.js +13 -13
- package/lib/esm/server/storybook/providers/browser.js +3 -5
- package/lib/esm/server/storybook/providers/nodejs.js +3 -3
- package/lib/esm/server/worker/worker.js +3 -3
- package/lib/types/server/selenium/browser.d.ts +5 -3
- package/lib/types/server/storybook/providers/browser.d.ts +2 -4
- package/lib/types/server/storybook/providers/nodejs.d.ts +2 -5
- package/lib/types/types.d.ts +5 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## [0.8.1](https://github.com/wKich/creevey/compare/v0.8.1-beta.1...v0.8.1) (2023-05-29)
|
2
|
+
|
3
|
+
## [0.8.1-beta.1](https://github.com/wKich/creevey/compare/v0.8.1-beta.0...v0.8.1-beta.1) (2023-05-05)
|
4
|
+
|
5
|
+
### Bug Fixes
|
6
|
+
|
7
|
+
- **providers:** set creevey port for all providers ([79e8aae](https://github.com/wKich/creevey/commit/79e8aae629d79260f93a93057486bab659801a46))
|
8
|
+
|
1
9
|
## [0.8.1-beta.0](https://github.com/wKich/creevey/compare/v0.8.0...v0.8.1-beta.0) (2023-04-11)
|
2
10
|
|
3
11
|
### Bug Fixes
|
@@ -429,21 +429,18 @@ async function resolveCreeveyHost(browser, port) {
|
|
429
429
|
return creeveyServerHost;
|
430
430
|
}
|
431
431
|
|
432
|
-
async function loadStoriesFromBrowser(
|
432
|
+
async function loadStoriesFromBrowser() {
|
433
433
|
if (!browser) throw new Error("Can't get stories from browser if webdriver isn't connected");
|
434
|
-
const
|
435
|
-
const stories = await browser.executeAsyncScript(function (creeveyHost, creeveyPort, callback) {
|
436
|
-
window.__CREEVEY_SERVER_HOST__ = creeveyHost;
|
437
|
-
window.__CREEVEY_SERVER_PORT__ = creeveyPort;
|
434
|
+
const stories = await browser.executeAsyncScript(function (callback) {
|
438
435
|
void window.__CREEVEY_GET_STORIES__().then(callback);
|
439
|
-
}
|
436
|
+
});
|
440
437
|
if (!stories) throw new Error("Can't get stories, it seems creevey or storybook API isn't available");
|
441
438
|
return stories;
|
442
439
|
}
|
443
440
|
|
444
|
-
async function getBrowser(config,
|
441
|
+
async function getBrowser(config, options) {
|
445
442
|
if (browser) return browser;
|
446
|
-
browserName =
|
443
|
+
browserName = options.browser;
|
447
444
|
const browserConfig = config.browsers[browserName];
|
448
445
|
const {
|
449
446
|
gridUrl = config.gridUrl,
|
@@ -473,7 +470,7 @@ async function getBrowser(config, name) {
|
|
473
470
|
const url = new URL(gridUrl);
|
474
471
|
url.username = url.username ? '********' : '';
|
475
472
|
url.password = url.password ? '********' : '';
|
476
|
-
browserLogger.debug(`(${
|
473
|
+
browserLogger.debug(`(${browserName}) Connecting to Selenium ${_chalk.default.magenta(url.toString())}`);
|
477
474
|
browser = await new _seleniumWebdriver.Builder().usingServer(gridUrl).withCapabilities(capabilities).build();
|
478
475
|
const sessionId = (_await$browser$getSes = await browser.getSession()) === null || _await$browser$getSes === void 0 ? void 0 : _await$browser$getSes.getId();
|
479
476
|
let browserHost = '';
|
@@ -487,14 +484,14 @@ async function getBrowser(config, name) {
|
|
487
484
|
/* noop */
|
488
485
|
}
|
489
486
|
|
490
|
-
browserLogger.debug(`(${
|
487
|
+
browserLogger.debug(`(${browserName}) Connected successful with ${[_chalk.default.green(browserHost), _chalk.default.magenta(sessionId)].filter(Boolean).join(':')}`);
|
491
488
|
browserLogger = (0, _loglevel.getLogger)(sessionId);
|
492
489
|
|
493
490
|
_loglevelPluginPrefix.default.apply(browserLogger, {
|
494
491
|
format(level) {
|
495
492
|
const levelColor = _logger.colors[level.toUpperCase()];
|
496
493
|
|
497
|
-
return `[${
|
494
|
+
return `[${browserName}:${_chalk.default.gray(sessionId)}] ${levelColor(level)} =>`;
|
498
495
|
}
|
499
496
|
|
500
497
|
});
|
@@ -528,9 +525,12 @@ async function getBrowser(config, name) {
|
|
528
525
|
await updateStorybookGlobals(browser, _storybookGlobals);
|
529
526
|
}
|
530
527
|
|
531
|
-
await browser.
|
528
|
+
const creeveyHost = await resolveCreeveyHost(browser, options.port);
|
529
|
+
await browser.executeScript(function (workerId, creeveyHost, creeveyPort) {
|
532
530
|
window.__CREEVEY_WORKER_ID__ = workerId;
|
533
|
-
|
531
|
+
window.__CREEVEY_SERVER_HOST__ = creeveyHost;
|
532
|
+
window.__CREEVEY_SERVER_PORT__ = creeveyPort;
|
533
|
+
}, process.pid, creeveyHost, options.port);
|
534
534
|
return browser;
|
535
535
|
}
|
536
536
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.loadStories =
|
6
|
+
exports.loadStories = void 0;
|
7
7
|
|
8
8
|
var _cluster = _interopRequireDefault(require("cluster"));
|
9
9
|
|
@@ -17,9 +17,7 @@ var _logger = require("../../logger");
|
|
17
17
|
|
18
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
19
19
|
|
20
|
-
async
|
21
|
-
port
|
22
|
-
}, storiesListener) {
|
20
|
+
const loadStories = async (_config, _options, storiesListener) => {
|
23
21
|
if (_cluster.default.isPrimary) {
|
24
22
|
return new Promise(resolve => {
|
25
23
|
const worker = Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).find(worker => worker.isConnected());
|
@@ -57,7 +55,7 @@ async function loadStories(_config, {
|
|
57
55
|
});
|
58
56
|
if (message.type == 'update') storiesListener(new Map(message.payload));
|
59
57
|
});
|
60
|
-
const stories = await (0, _selenium.loadStoriesFromBrowser)(
|
58
|
+
const stories = await (0, _selenium.loadStoriesFromBrowser)();
|
61
59
|
const storiesWithOldTests = [];
|
62
60
|
Object.values(stories).forEach(story => {
|
63
61
|
var _parameters, _parameters$creevey;
|
@@ -71,4 +69,6 @@ async function loadStories(_config, {
|
|
71
69
|
});
|
72
70
|
return stories;
|
73
71
|
}
|
74
|
-
}
|
72
|
+
};
|
73
|
+
|
74
|
+
exports.loadStories = loadStories;
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.extractStoriesData = extractStoriesData;
|
7
|
-
exports.loadStories =
|
7
|
+
exports.loadStories = void 0;
|
8
8
|
|
9
9
|
var _path = _interopRequireDefault(require("path"));
|
10
10
|
|
@@ -189,10 +189,10 @@ async function loadStoriesDirectly(config, {
|
|
189
189
|
} // TODO Do we need to support multiple storybooks here?
|
190
190
|
|
191
191
|
|
192
|
-
async
|
192
|
+
const loadStories = async (config, {
|
193
193
|
watch,
|
194
194
|
debug
|
195
|
-
}, storiesListener) {
|
195
|
+
}, storiesListener) => {
|
196
196
|
const storybookApi = await initStorybookEnvironment();
|
197
197
|
const Events = await (0, _helpers.importStorybookCoreEvents)();
|
198
198
|
const {
|
@@ -217,7 +217,9 @@ async function loadStories(config, {
|
|
217
217
|
debug
|
218
218
|
});
|
219
219
|
return loadPromise;
|
220
|
-
}
|
220
|
+
};
|
221
|
+
|
222
|
+
exports.loadStories = loadStories;
|
221
223
|
|
222
224
|
async function extractStoriesData(config, {
|
223
225
|
watch,
|
@@ -194,7 +194,7 @@ async function worker(config, options) {
|
|
194
194
|
|
195
195
|
_chai.default.use((0, _chaiImage.default)(getExpected, config.diffOptions));
|
196
196
|
|
197
|
-
if ((await (0, _selenium.getBrowser)(config, options
|
197
|
+
if ((await (0, _selenium.getBrowser)(config, options)) == null) return;
|
198
198
|
await (0, _helpers.addTestsFromStories)(mocha.suite, config, {
|
199
199
|
browser: options.browser,
|
200
200
|
watch: options.ui,
|
@@ -205,12 +205,12 @@ async function worker(config, options) {
|
|
205
205
|
try {
|
206
206
|
var _await$getBrowser;
|
207
207
|
|
208
|
-
await ((_await$getBrowser = await (0, _selenium.getBrowser)(config, options
|
208
|
+
await ((_await$getBrowser = await (0, _selenium.getBrowser)(config, options)) === null || _await$getBrowser === void 0 ? void 0 : _await$getBrowser.getCurrentUrl());
|
209
209
|
} catch (_) {
|
210
210
|
await (0, _selenium.closeBrowser)();
|
211
211
|
}
|
212
212
|
|
213
|
-
const browser = await (0, _selenium.getBrowser)(config, options
|
213
|
+
const browser = await (0, _selenium.getBrowser)(config, options);
|
214
214
|
const sessionId = (_await$browser$getSes = await (browser === null || browser === void 0 ? void 0 : browser.getSession())) === null || _await$browser$getSes === void 0 ? void 0 : _await$browser$getSes.getId();
|
215
215
|
if (browser == null) return;
|
216
216
|
const interval = setInterval(() => void browser.getCurrentUrl().then(url => {
|
@@ -401,20 +401,17 @@ async function resolveCreeveyHost(browser, port) {
|
|
401
401
|
return creeveyServerHost;
|
402
402
|
}
|
403
403
|
|
404
|
-
export async function loadStoriesFromBrowser(
|
404
|
+
export async function loadStoriesFromBrowser() {
|
405
405
|
if (!browser) throw new Error("Can't get stories from browser if webdriver isn't connected");
|
406
|
-
const
|
407
|
-
const stories = await browser.executeAsyncScript(function (creeveyHost, creeveyPort, callback) {
|
408
|
-
window.__CREEVEY_SERVER_HOST__ = creeveyHost;
|
409
|
-
window.__CREEVEY_SERVER_PORT__ = creeveyPort;
|
406
|
+
const stories = await browser.executeAsyncScript(function (callback) {
|
410
407
|
void window.__CREEVEY_GET_STORIES__().then(callback);
|
411
|
-
}
|
408
|
+
});
|
412
409
|
if (!stories) throw new Error("Can't get stories, it seems creevey or storybook API isn't available");
|
413
410
|
return stories;
|
414
411
|
}
|
415
|
-
export async function getBrowser(config,
|
412
|
+
export async function getBrowser(config, options) {
|
416
413
|
if (browser) return browser;
|
417
|
-
browserName =
|
414
|
+
browserName = options.browser;
|
418
415
|
const browserConfig = config.browsers[browserName];
|
419
416
|
const {
|
420
417
|
gridUrl = config.gridUrl,
|
@@ -444,7 +441,7 @@ export async function getBrowser(config, name) {
|
|
444
441
|
const url = new URL(gridUrl);
|
445
442
|
url.username = url.username ? '********' : '';
|
446
443
|
url.password = url.password ? '********' : '';
|
447
|
-
browserLogger.debug(`(${
|
444
|
+
browserLogger.debug(`(${browserName}) Connecting to Selenium ${chalk.magenta(url.toString())}`);
|
448
445
|
browser = await new Builder().usingServer(gridUrl).withCapabilities(capabilities).build();
|
449
446
|
const sessionId = (_await$browser$getSes = await browser.getSession()) === null || _await$browser$getSes === void 0 ? void 0 : _await$browser$getSes.getId();
|
450
447
|
let browserHost = '';
|
@@ -458,12 +455,12 @@ export async function getBrowser(config, name) {
|
|
458
455
|
/* noop */
|
459
456
|
}
|
460
457
|
|
461
|
-
browserLogger.debug(`(${
|
458
|
+
browserLogger.debug(`(${browserName}) Connected successful with ${[chalk.green(browserHost), chalk.magenta(sessionId)].filter(Boolean).join(':')}`);
|
462
459
|
browserLogger = getLogger(sessionId);
|
463
460
|
prefix.apply(browserLogger, {
|
464
461
|
format(level) {
|
465
462
|
const levelColor = colors[level.toUpperCase()];
|
466
|
-
return `[${
|
463
|
+
return `[${browserName}:${chalk.gray(sessionId)}] ${levelColor(level)} =>`;
|
467
464
|
}
|
468
465
|
|
469
466
|
});
|
@@ -496,9 +493,12 @@ export async function getBrowser(config, name) {
|
|
496
493
|
await updateStorybookGlobals(browser, _storybookGlobals);
|
497
494
|
}
|
498
495
|
|
499
|
-
await browser.
|
496
|
+
const creeveyHost = await resolveCreeveyHost(browser, options.port);
|
497
|
+
await browser.executeScript(function (workerId, creeveyHost, creeveyPort) {
|
500
498
|
window.__CREEVEY_WORKER_ID__ = workerId;
|
501
|
-
|
499
|
+
window.__CREEVEY_SERVER_HOST__ = creeveyHost;
|
500
|
+
window.__CREEVEY_SERVER_PORT__ = creeveyPort;
|
501
|
+
}, process.pid, creeveyHost, options.port);
|
502
502
|
return browser;
|
503
503
|
}
|
504
504
|
|
@@ -3,9 +3,7 @@ import { loadStoriesFromBrowser } from '../../selenium';
|
|
3
3
|
import { emitStoriesMessage, sendStoriesMessage, subscribeOn, subscribeOnWorker } from '../../messages';
|
4
4
|
import { isDefined } from '../../../types';
|
5
5
|
import { logger } from '../../logger';
|
6
|
-
export async
|
7
|
-
port
|
8
|
-
}, storiesListener) {
|
6
|
+
export const loadStories = async (_config, _options, storiesListener) => {
|
9
7
|
if (cluster.isPrimary) {
|
10
8
|
return new Promise(resolve => {
|
11
9
|
const worker = Object.values(cluster.workers ?? {}).filter(isDefined).find(worker => worker.isConnected());
|
@@ -43,7 +41,7 @@ export async function loadStories(_config, {
|
|
43
41
|
});
|
44
42
|
if (message.type == 'update') storiesListener(new Map(message.payload));
|
45
43
|
});
|
46
|
-
const stories = await loadStoriesFromBrowser(
|
44
|
+
const stories = await loadStoriesFromBrowser();
|
47
45
|
const storiesWithOldTests = [];
|
48
46
|
Object.values(stories).forEach(story => {
|
49
47
|
var _parameters, _parameters$creevey;
|
@@ -57,4 +55,4 @@ export async function loadStories(_config, {
|
|
57
55
|
});
|
58
56
|
return stories;
|
59
57
|
}
|
60
|
-
}
|
58
|
+
};
|
@@ -169,10 +169,10 @@ async function loadStoriesDirectly(config, {
|
|
169
169
|
} // TODO Do we need to support multiple storybooks here?
|
170
170
|
|
171
171
|
|
172
|
-
export async
|
172
|
+
export const loadStories = async (config, {
|
173
173
|
watch,
|
174
174
|
debug
|
175
|
-
}, storiesListener) {
|
175
|
+
}, storiesListener) => {
|
176
176
|
const storybookApi = await initStorybookEnvironment();
|
177
177
|
const Events = await importStorybookCoreEvents();
|
178
178
|
const {
|
@@ -197,7 +197,7 @@ export async function loadStories(config, {
|
|
197
197
|
debug
|
198
198
|
});
|
199
199
|
return loadPromise;
|
200
|
-
}
|
200
|
+
};
|
201
201
|
export async function extractStoriesData(config, {
|
202
202
|
watch,
|
203
203
|
debug
|
@@ -166,7 +166,7 @@ export default async function worker(config, options) {
|
|
166
166
|
const mocha = new Mocha(mochaOptions);
|
167
167
|
mocha.cleanReferencesAfterRun(false);
|
168
168
|
chai.use(chaiImage(getExpected, config.diffOptions));
|
169
|
-
if ((await getBrowser(config, options
|
169
|
+
if ((await getBrowser(config, options)) == null) return;
|
170
170
|
await addTestsFromStories(mocha.suite, config, {
|
171
171
|
browser: options.browser,
|
172
172
|
watch: options.ui,
|
@@ -177,12 +177,12 @@ export default async function worker(config, options) {
|
|
177
177
|
try {
|
178
178
|
var _await$getBrowser;
|
179
179
|
|
180
|
-
await ((_await$getBrowser = await getBrowser(config, options
|
180
|
+
await ((_await$getBrowser = await getBrowser(config, options)) === null || _await$getBrowser === void 0 ? void 0 : _await$getBrowser.getCurrentUrl());
|
181
181
|
} catch (_) {
|
182
182
|
await closeBrowser();
|
183
183
|
}
|
184
184
|
|
185
|
-
const browser = await getBrowser(config, options
|
185
|
+
const browser = await getBrowser(config, options);
|
186
186
|
const sessionId = (_await$browser$getSes = await (browser === null || browser === void 0 ? void 0 : browser.getSession())) === null || _await$browser$getSes === void 0 ? void 0 : _await$browser$getSes.getId();
|
187
187
|
if (browser == null) return;
|
188
188
|
const interval = setInterval(() => void browser.getCurrentUrl().then(url => {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { Context } from 'mocha';
|
2
2
|
import { WebDriver } from 'selenium-webdriver';
|
3
|
-
import { Config, StorybookGlobals, StoriesRaw } from '../../types';
|
3
|
+
import { Config, StorybookGlobals, StoriesRaw, Options } from '../../types';
|
4
4
|
declare global {
|
5
5
|
interface Window {
|
6
6
|
__CREEVEY_RESTORE_SCROLL__?: () => void;
|
@@ -11,7 +11,9 @@ declare global {
|
|
11
11
|
}
|
12
12
|
export declare function takeScreenshot(browser: WebDriver, captureElement?: string | null, ignoreElements?: string | string[] | null): Promise<string>;
|
13
13
|
export declare function updateStorybookGlobals(browser: WebDriver, globals: StorybookGlobals): Promise<void>;
|
14
|
-
export declare function loadStoriesFromBrowser(
|
15
|
-
export declare function getBrowser(config: Config,
|
14
|
+
export declare function loadStoriesFromBrowser(): Promise<StoriesRaw>;
|
15
|
+
export declare function getBrowser(config: Config, options: Options & {
|
16
|
+
browser: string;
|
17
|
+
}): Promise<WebDriver | null>;
|
16
18
|
export declare function closeBrowser(): Promise<void>;
|
17
19
|
export declare function switchStory(this: Context): Promise<void>;
|
@@ -1,4 +1,2 @@
|
|
1
|
-
import type {
|
2
|
-
export declare
|
3
|
-
port: number;
|
4
|
-
}, storiesListener: (stories: Map<string, StoryInput[]>) => void): Promise<StoriesRaw>;
|
1
|
+
import type { StoriesProvider } from '../../../types';
|
2
|
+
export declare const loadStories: StoriesProvider;
|
@@ -1,8 +1,5 @@
|
|
1
|
-
import type {
|
2
|
-
export declare
|
3
|
-
watch: boolean;
|
4
|
-
debug: boolean;
|
5
|
-
}, storiesListener: (stories: Map<string, StoryInput[]>) => void): Promise<StoriesRaw>;
|
1
|
+
import type { SetStoriesData, Config, StoriesProvider } from '../../../types';
|
2
|
+
export declare const loadStories: StoriesProvider;
|
6
3
|
export declare function extractStoriesData(config: Config, { watch, debug }: {
|
7
4
|
watch: boolean;
|
8
5
|
debug: boolean;
|
package/lib/types/types.d.ts
CHANGED
@@ -209,11 +209,7 @@ export interface Config {
|
|
209
209
|
* }
|
210
210
|
* ```
|
211
211
|
*/
|
212
|
-
storiesProvider:
|
213
|
-
watch: boolean;
|
214
|
-
debug: boolean;
|
215
|
-
port: number;
|
216
|
-
}, storiesListener: (stories: Map<string, StoryInput[]>) => void) => Promise<StoriesRaw>;
|
212
|
+
storiesProvider: StoriesProvider;
|
217
213
|
/**
|
218
214
|
* Define custom babel options for load stories transformation
|
219
215
|
*/
|
@@ -248,6 +244,10 @@ export interface Config {
|
|
248
244
|
*/
|
249
245
|
dockerImagePlatform: string;
|
250
246
|
}
|
247
|
+
export declare type StoriesProvider = (config: Config, options: {
|
248
|
+
watch: boolean;
|
249
|
+
debug: boolean;
|
250
|
+
}, storiesListener: (stories: Map<string, StoryInput[]>) => void) => Promise<StoriesRaw>;
|
251
251
|
export declare type CreeveyConfig = Partial<Config>;
|
252
252
|
export interface Options {
|
253
253
|
config?: string;
|