creevey 0.8.0-beta.0 → 0.9.0-beta.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 +5 -9
- package/lib/cjs/client/web/main.js +6 -6
- package/lib/types/cli.d.ts +1 -1
- package/lib/types/client/addon/Manager.d.ts +37 -37
- package/lib/types/client/addon/components/Addon.d.ts +8 -8
- package/lib/types/client/addon/components/Icons.d.ts +7 -7
- package/lib/types/client/addon/components/Panel.d.ts +9 -9
- package/lib/types/client/addon/components/TestSelect.d.ts +9 -9
- package/lib/types/client/addon/components/Tools.d.ts +6 -6
- package/lib/types/client/addon/decorator.d.ts +1 -1
- package/lib/types/client/addon/preset.d.ts +24 -22
- package/lib/types/client/addon/readyForCapture.d.ts +6 -0
- package/lib/types/client/addon/register.d.ts +3 -3
- package/lib/types/client/addon/utils.d.ts +2 -2
- package/lib/types/client/addon/withCreevey.d.ts +24 -13
- package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +25 -25
- package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/index.d.ts +5 -5
- package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +9 -9
- package/lib/types/client/shared/components/PageFooter/Paging.d.ts +8 -8
- package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +12 -12
- package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +17 -17
- package/lib/types/client/shared/components/ResultsPage.d.ts +18 -18
- package/lib/types/client/shared/creeveyClientApi.d.ts +9 -9
- package/lib/types/client/shared/helpers.d.ts +46 -46
- package/lib/types/client/shared/viewMode.d.ts +4 -4
- package/lib/types/client/web/CreeveyApp.d.ts +12 -12
- package/lib/types/client/web/CreeveyContext.d.ts +11 -11
- package/lib/types/client/web/CreeveyLoader.d.ts +3 -3
- package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +19 -19
- package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +6 -6
- package/lib/types/client/web/CreeveyView/SideBar/SideBar.d.ts +14 -14
- package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +13 -13
- package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +33 -33
- package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +8 -8
- package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +10 -10
- package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +9 -9
- package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +6 -6
- package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +1 -1
- package/lib/types/client/web/KeyboardEventsContext.d.ts +13 -13
- package/lib/types/client/web/index.d.ts +4 -4
- package/lib/types/creevey.d.ts +1 -1
- package/lib/types/index.d.ts +4 -2
- package/lib/types/server/config.d.ts +4 -4
- package/lib/types/server/docker.d.ts +7 -7
- package/lib/types/server/extract.d.ts +2 -2
- package/lib/types/server/index.d.ts +2 -2
- package/lib/types/server/loaders/babel/creevey-plugin.d.ts +1 -1
- package/lib/types/server/loaders/babel/helpers.d.ts +19 -19
- package/lib/types/server/loaders/babel/register.d.ts +5 -5
- package/lib/types/server/loaders/hooks/mdx.d.ts +1 -1
- package/lib/types/server/loaders/hooks/svelte.d.ts +1 -1
- package/lib/types/server/loaders/webpack/compile.d.ts +2 -2
- package/lib/types/server/loaders/webpack/creevey-loader.d.ts +2 -2
- package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +10 -10
- package/lib/types/server/loaders/webpack/mdx-loader.d.ts +6 -6
- package/lib/types/server/loaders/webpack/start.d.ts +1 -1
- package/lib/types/server/logger.d.ts +6 -6
- package/lib/types/server/master/api.d.ts +7 -7
- package/lib/types/server/master/index.d.ts +3 -3
- package/lib/types/server/master/master.d.ts +7 -6
- package/lib/types/server/master/pool.d.ts +31 -30
- package/lib/types/server/master/runner.d.ts +26 -26
- package/lib/types/server/master/server.d.ts +2 -2
- package/lib/types/server/messages.d.ts +27 -18
- package/lib/types/server/selenium/browser.d.ts +17 -14
- package/lib/types/server/selenium/index.d.ts +2 -2
- package/lib/types/server/selenium/selenoid.d.ts +3 -3
- package/lib/types/server/stories.d.ts +8 -8
- package/lib/types/server/storybook/entry.d.ts +18 -18
- package/lib/types/server/storybook/helpers.d.ts +24 -24
- package/lib/types/server/storybook/providers/browser.d.ts +4 -0
- package/lib/types/server/storybook/providers/hybrid.d.ts +4 -0
- package/lib/types/server/storybook/providers/nodejs.d.ts +9 -0
- package/lib/types/server/testsFiles/parser.d.ts +12 -0
- package/lib/types/server/testsFiles/register.d.ts +2 -0
- package/lib/types/server/update.d.ts +2 -2
- package/lib/types/server/utils.d.ts +20 -19
- package/lib/types/server/worker/chai-image.d.ts +6 -6
- package/lib/types/server/worker/helpers.d.ts +8 -7
- package/lib/types/server/worker/index.d.ts +1 -1
- package/lib/types/server/worker/reporter.d.ts +8 -8
- package/lib/types/server/worker/worker.d.ts +4 -4
- package/lib/types/shared.d.ts +16 -4
- package/lib/types/types.d.ts +489 -459
- package/package.json +16 -7
- package/storybook-static/stories.json +21 -0
- package/types/mocha.d.ts +1 -0
- package/lib/cjs/cli.js +0 -5
- package/lib/cjs/client/addon/Manager.js +0 -413
- package/lib/cjs/client/addon/components/Addon.js +0 -76
- package/lib/cjs/client/addon/components/Icons.js +0 -42
- package/lib/cjs/client/addon/components/Panel.js +0 -68
- package/lib/cjs/client/addon/components/TestSelect.js +0 -63
- package/lib/cjs/client/addon/components/Tools.js +0 -114
- package/lib/cjs/client/addon/decorator.js +0 -11
- package/lib/cjs/client/addon/preset.js +0 -80
- package/lib/cjs/client/addon/register.js +0 -96
- package/lib/cjs/client/addon/utils.js +0 -38
- package/lib/cjs/client/addon/withCreevey.js +0 -284
- package/lib/cjs/client/shared/components/ImagesView/BlendView.js +0 -85
- package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +0 -88
- package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +0 -176
- package/lib/cjs/client/shared/components/ImagesView/SlideView.js +0 -178
- package/lib/cjs/client/shared/components/ImagesView/SwapView.js +0 -110
- package/lib/cjs/client/shared/components/ImagesView/index.js +0 -45
- package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +0 -46
- package/lib/cjs/client/shared/components/PageFooter/Paging.js +0 -98
- package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +0 -78
- package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +0 -144
- package/lib/cjs/client/shared/components/ResultsPage.js +0 -173
- package/lib/cjs/client/shared/creeveyClientApi.js +0 -103
- package/lib/cjs/client/shared/helpers.js +0 -482
- package/lib/cjs/client/shared/viewMode.js +0 -17
- package/lib/cjs/client/web/index.html +0 -19
- package/lib/cjs/creevey.js +0 -71
- package/lib/cjs/index.js +0 -44
- package/lib/cjs/server/config.js +0 -92
- package/lib/cjs/server/docker.js +0 -150
- package/lib/cjs/server/extract.js +0 -43
- package/lib/cjs/server/index.js +0 -85
- package/lib/cjs/server/loaders/babel/creevey-plugin.js +0 -88
- package/lib/cjs/server/loaders/babel/helpers.js +0 -479
- package/lib/cjs/server/loaders/babel/register.js +0 -126
- package/lib/cjs/server/loaders/hooks/mdx.js +0 -30
- package/lib/cjs/server/loaders/hooks/svelte.js +0 -65
- package/lib/cjs/server/loaders/webpack/compile.js +0 -286
- package/lib/cjs/server/loaders/webpack/creevey-loader.js +0 -174
- package/lib/cjs/server/loaders/webpack/dummy-hmr.js +0 -44
- package/lib/cjs/server/loaders/webpack/mdx-loader.js +0 -72
- package/lib/cjs/server/loaders/webpack/start.js +0 -41
- package/lib/cjs/server/logger.js +0 -47
- package/lib/cjs/server/master/api.js +0 -71
- package/lib/cjs/server/master/index.js +0 -152
- package/lib/cjs/server/master/master.js +0 -56
- package/lib/cjs/server/master/pool.js +0 -206
- package/lib/cjs/server/master/runner.js +0 -294
- package/lib/cjs/server/master/server.js +0 -57
- package/lib/cjs/server/messages.js +0 -154
- package/lib/cjs/server/selenium/browser.js +0 -582
- package/lib/cjs/server/selenium/index.js +0 -31
- package/lib/cjs/server/selenium/selenoid.js +0 -174
- package/lib/cjs/server/stories.js +0 -167
- package/lib/cjs/server/storybook/entry.js +0 -68
- package/lib/cjs/server/storybook/helpers.js +0 -165
- package/lib/cjs/server/storybook/nodejs-provider.js +0 -220
- package/lib/cjs/server/update.js +0 -83
- package/lib/cjs/server/utils.js +0 -178
- package/lib/cjs/server/worker/chai-image.js +0 -142
- package/lib/cjs/server/worker/helpers.js +0 -73
- package/lib/cjs/server/worker/index.js +0 -15
- package/lib/cjs/server/worker/reporter.js +0 -120
- package/lib/cjs/server/worker/worker.js +0 -266
- package/lib/cjs/shared.js +0 -35
- package/lib/cjs/types.js +0 -69
- package/lib/esm/cli.js +0 -4
- package/lib/esm/client/addon/Manager.js +0 -397
- package/lib/esm/client/addon/components/Addon.js +0 -58
- package/lib/esm/client/addon/components/Icons.js +0 -27
- package/lib/esm/client/addon/components/Panel.js +0 -49
- package/lib/esm/client/addon/components/TestSelect.js +0 -49
- package/lib/esm/client/addon/components/Tools.js +0 -91
- package/lib/esm/client/addon/decorator.js +0 -2
- package/lib/esm/client/addon/preset.js +0 -55
- package/lib/esm/client/addon/register.js +0 -75
- package/lib/esm/client/addon/utils.js +0 -31
- package/lib/esm/client/addon/withCreevey.js +0 -270
- package/lib/esm/client/shared/components/ImagesView/BlendView.js +0 -64
- package/lib/esm/client/shared/components/ImagesView/ImagesView.js +0 -65
- package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +0 -152
- package/lib/esm/client/shared/components/ImagesView/SlideView.js +0 -154
- package/lib/esm/client/shared/components/ImagesView/SwapView.js +0 -89
- package/lib/esm/client/shared/components/ImagesView/index.js +0 -5
- package/lib/esm/client/shared/components/PageFooter/PageFooter.js +0 -32
- package/lib/esm/client/shared/components/PageFooter/Paging.js +0 -84
- package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +0 -64
- package/lib/esm/client/shared/components/PageHeader/PageHeader.js +0 -120
- package/lib/esm/client/shared/components/ResultsPage.js +0 -143
- package/lib/esm/client/shared/creeveyClientApi.js +0 -94
- package/lib/esm/client/shared/helpers.js +0 -424
- package/lib/esm/client/shared/viewMode.js +0 -6
- package/lib/esm/creevey.js +0 -56
- package/lib/esm/index.js +0 -4
- package/lib/esm/server/config.js +0 -71
- package/lib/esm/server/docker.js +0 -123
- package/lib/esm/server/extract.js +0 -30
- package/lib/esm/server/index.js +0 -65
- package/lib/esm/server/loaders/babel/creevey-plugin.js +0 -74
- package/lib/esm/server/loaders/babel/helpers.js +0 -462
- package/lib/esm/server/loaders/babel/register.js +0 -105
- package/lib/esm/server/loaders/hooks/mdx.js +0 -15
- package/lib/esm/server/loaders/hooks/svelte.js +0 -49
- package/lib/esm/server/loaders/webpack/compile.js +0 -263
- package/lib/esm/server/loaders/webpack/creevey-loader.js +0 -153
- package/lib/esm/server/loaders/webpack/dummy-hmr.js +0 -36
- package/lib/esm/server/loaders/webpack/mdx-loader.js +0 -58
- package/lib/esm/server/loaders/webpack/start.js +0 -27
- package/lib/esm/server/logger.js +0 -20
- package/lib/esm/server/master/api.js +0 -60
- package/lib/esm/server/master/index.js +0 -131
- package/lib/esm/server/master/master.js +0 -37
- package/lib/esm/server/master/pool.js +0 -187
- package/lib/esm/server/master/runner.js +0 -272
- package/lib/esm/server/master/server.js +0 -37
- package/lib/esm/server/messages.js +0 -128
- package/lib/esm/server/selenium/browser.js +0 -554
- package/lib/esm/server/selenium/index.js +0 -2
- package/lib/esm/server/selenium/selenoid.js +0 -151
- package/lib/esm/server/stories.js +0 -147
- package/lib/esm/server/storybook/entry.js +0 -44
- package/lib/esm/server/storybook/helpers.js +0 -106
- package/lib/esm/server/storybook/nodejs-provider.js +0 -200
- package/lib/esm/server/update.js +0 -65
- package/lib/esm/server/utils.js +0 -141
- package/lib/esm/server/worker/chai-image.js +0 -130
- package/lib/esm/server/worker/helpers.js +0 -64
- package/lib/esm/server/worker/index.js +0 -1
- package/lib/esm/server/worker/reporter.js +0 -98
- package/lib/esm/server/worker/worker.js +0 -236
- package/lib/esm/shared.js +0 -22
- package/lib/esm/types.js +0 -40
- package/lib/types/server/storybook/nodejs-provider.d.ts +0 -5
@@ -1,151 +0,0 @@
|
|
1
|
-
import path from 'path';
|
2
|
-
import { promisify } from 'util';
|
3
|
-
import { mkdir, writeFile, copyFile, lstatSync, existsSync } from 'fs';
|
4
|
-
import { downloadBinary, getCreeveyCache } from '../utils';
|
5
|
-
import { pullImages, runImage } from '../docker';
|
6
|
-
import { Octokit } from '@octokit/core';
|
7
|
-
import { subscribeOn } from '../messages';
|
8
|
-
import { isWorker } from 'cluster';
|
9
|
-
import { chmod, exec } from 'shelljs';
|
10
|
-
const mkdirAsync = promisify(mkdir);
|
11
|
-
const writeFileAsync = promisify(writeFile);
|
12
|
-
const copyFileAsync = promisify(copyFile);
|
13
|
-
|
14
|
-
async function createSelenoidConfig(browsers, {
|
15
|
-
useDocker
|
16
|
-
}) {
|
17
|
-
const selenoidConfig = {};
|
18
|
-
const selenoidConfigDir = path.join(getCreeveyCache(), 'selenoid');
|
19
|
-
browsers.forEach(({
|
20
|
-
browserName,
|
21
|
-
version = 'latest',
|
22
|
-
dockerImage = `selenoid/${browserName}:${version}`,
|
23
|
-
webdriverCommand = []
|
24
|
-
}) => {
|
25
|
-
if (!selenoidConfig[browserName]) selenoidConfig[browserName] = {
|
26
|
-
default: version,
|
27
|
-
versions: {}
|
28
|
-
};
|
29
|
-
if (!useDocker && webdriverCommand.length == 0) throw new Error('Please specify "webdriverCommand" browser option with path to browser webdriver');
|
30
|
-
selenoidConfig[browserName].versions[version] = {
|
31
|
-
image: useDocker ? dockerImage : webdriverCommand,
|
32
|
-
port: '4444',
|
33
|
-
path: !useDocker || ['chrome', 'opera', 'webkit', 'MicrosoftEdge'].includes(browserName) ? '/' : '/wd/hub'
|
34
|
-
};
|
35
|
-
});
|
36
|
-
await mkdirAsync(selenoidConfigDir, {
|
37
|
-
recursive: true
|
38
|
-
});
|
39
|
-
await writeFileAsync(path.join(selenoidConfigDir, 'browsers.json'), JSON.stringify(selenoidConfig));
|
40
|
-
return selenoidConfigDir;
|
41
|
-
}
|
42
|
-
|
43
|
-
async function downloadSelenoidBinary(destination) {
|
44
|
-
var _assets$find;
|
45
|
-
|
46
|
-
const platformNameMapping = {
|
47
|
-
darwin: 'selenoid_darwin_amd64',
|
48
|
-
linux: 'selenoid_linux_amd64',
|
49
|
-
win32: 'selenoid_windows_amd64.exe'
|
50
|
-
};
|
51
|
-
const octokit = new Octokit();
|
52
|
-
const response = await octokit.request('GET /repos/{owner}/{repo}/releases/latest', {
|
53
|
-
owner: 'aerokube',
|
54
|
-
repo: 'selenoid'
|
55
|
-
});
|
56
|
-
const {
|
57
|
-
assets
|
58
|
-
} = response.data;
|
59
|
-
const {
|
60
|
-
browser_download_url: downloadUrl,
|
61
|
-
size: binarySize
|
62
|
-
} = (_assets$find = assets.find(({
|
63
|
-
name
|
64
|
-
}) => platformNameMapping[process.platform] == name)) !== null && _assets$find !== void 0 ? _assets$find : {};
|
65
|
-
if (existsSync(destination) && lstatSync(destination).size == binarySize) return;
|
66
|
-
|
67
|
-
if (!downloadUrl) {
|
68
|
-
throw new Error(`Couldn't get download url for selenoid binary. Please download it manually from "https://github.com/aerokube/selenoid/releases/latest" and define "selenoidPath" option in the Creevey config`);
|
69
|
-
}
|
70
|
-
|
71
|
-
return downloadBinary(downloadUrl, destination);
|
72
|
-
}
|
73
|
-
|
74
|
-
export async function startSelenoidStandalone(config, debug) {
|
75
|
-
config.gridUrl = 'http://localhost:4444/wd/hub';
|
76
|
-
if (isWorker) return;
|
77
|
-
const browsers = Object.values(config.browsers).filter(browser => !browser.gridUrl);
|
78
|
-
const selenoidConfigDir = await createSelenoidConfig(browsers, {
|
79
|
-
useDocker: false
|
80
|
-
});
|
81
|
-
const binaryPath = path.join(selenoidConfigDir, process.platform == 'win32' ? 'selenoid.exe' : 'selenoid');
|
82
|
-
|
83
|
-
if (config.selenoidPath) {
|
84
|
-
await copyFileAsync(path.resolve(config.selenoidPath), binaryPath);
|
85
|
-
} else {
|
86
|
-
await downloadSelenoidBinary(binaryPath);
|
87
|
-
} // TODO Download browser webdrivers
|
88
|
-
|
89
|
-
|
90
|
-
try {
|
91
|
-
if (process.platform != 'win32') chmod('+x', binaryPath);
|
92
|
-
} catch (_) {
|
93
|
-
/* noop */
|
94
|
-
}
|
95
|
-
|
96
|
-
const selenoidProcess = exec(`${binaryPath} -conf ./browsers.json -disable-docker`, {
|
97
|
-
async: true,
|
98
|
-
cwd: selenoidConfigDir
|
99
|
-
});
|
100
|
-
|
101
|
-
if (debug) {
|
102
|
-
var _selenoidProcess$stdo, _selenoidProcess$stde;
|
103
|
-
|
104
|
-
(_selenoidProcess$stdo = selenoidProcess.stdout) === null || _selenoidProcess$stdo === void 0 ? void 0 : _selenoidProcess$stdo.pipe(process.stdout);
|
105
|
-
(_selenoidProcess$stde = selenoidProcess.stderr) === null || _selenoidProcess$stde === void 0 ? void 0 : _selenoidProcess$stde.pipe(process.stderr);
|
106
|
-
}
|
107
|
-
|
108
|
-
subscribeOn('shutdown', () => selenoidProcess.kill());
|
109
|
-
}
|
110
|
-
export async function startSelenoidContainer(config, debug) {
|
111
|
-
const browsers = Object.values(config.browsers).filter(browser => !browser.gridUrl);
|
112
|
-
const images = [];
|
113
|
-
let limit = 0;
|
114
|
-
browsers.forEach(({
|
115
|
-
browserName,
|
116
|
-
version = 'latest',
|
117
|
-
limit: browserLimit = 1,
|
118
|
-
dockerImage = `selenoid/${browserName}:${version}`
|
119
|
-
}) => {
|
120
|
-
limit += browserLimit;
|
121
|
-
images.push(dockerImage);
|
122
|
-
});
|
123
|
-
const selenoidImage = config.dockerImage;
|
124
|
-
const pullOptions = {
|
125
|
-
auth: config.dockerAuth,
|
126
|
-
platform: config.dockerImagePlatform
|
127
|
-
};
|
128
|
-
|
129
|
-
if (config.pullImages) {
|
130
|
-
await pullImages([selenoidImage], pullOptions);
|
131
|
-
await pullImages(images, pullOptions);
|
132
|
-
} // TODO Allow pass custom options
|
133
|
-
|
134
|
-
|
135
|
-
const selenoidOptions = {
|
136
|
-
ExposedPorts: {
|
137
|
-
'4444/tcp': {}
|
138
|
-
},
|
139
|
-
HostConfig: {
|
140
|
-
PortBindings: {
|
141
|
-
'4444/tcp': [{
|
142
|
-
HostPort: '4444'
|
143
|
-
}]
|
144
|
-
},
|
145
|
-
Binds: ['/var/run/docker.sock:/var/run/docker.sock', `${await createSelenoidConfig(browsers, {
|
146
|
-
useDocker: true
|
147
|
-
})}:/etc/selenoid/:ro`]
|
148
|
-
}
|
149
|
-
};
|
150
|
-
return runImage(selenoidImage, ['-limit', String(limit)], selenoidOptions, debug);
|
151
|
-
}
|
@@ -1,147 +0,0 @@
|
|
1
|
-
import path from 'path';
|
2
|
-
import { mkdirSync, writeFileSync } from 'fs';
|
3
|
-
import { createHash } from 'crypto';
|
4
|
-
import { mapValues, pick } from 'lodash';
|
5
|
-
import { isDefined, isFunction, isObject } from '../types';
|
6
|
-
import { shouldSkip, removeProps } from './utils';
|
7
|
-
import { isStorybookVersionGreaterThan, isStorybookVersionLessThan } from './storybook/helpers';
|
8
|
-
import { denormalizeStoryParameters } from '../shared';
|
9
|
-
|
10
|
-
function storyTestFabric(delay, testFn) {
|
11
|
-
return async function storyTest() {
|
12
|
-
var _testFn$call;
|
13
|
-
|
14
|
-
delay ? await new Promise(resolve => setTimeout(resolve, delay)) : void 0;
|
15
|
-
await ((_testFn$call = testFn === null || testFn === void 0 ? void 0 : testFn.call(this)) !== null && _testFn$call !== void 0 ? _testFn$call : this.expect(await this.takeScreenshot()).to.matchImage());
|
16
|
-
};
|
17
|
-
}
|
18
|
-
|
19
|
-
function createCreeveyTest(browser, storyMeta, skipOptions, testName) {
|
20
|
-
const {
|
21
|
-
kind,
|
22
|
-
name: story,
|
23
|
-
id: storyId
|
24
|
-
} = storyMeta;
|
25
|
-
const path = [kind, story, testName, browser].filter(isDefined);
|
26
|
-
const skip = skipOptions ? shouldSkip(browser, {
|
27
|
-
kind,
|
28
|
-
story
|
29
|
-
}, skipOptions, testName) : false;
|
30
|
-
const id = createHash('sha1').update(path.join('/')).digest('hex');
|
31
|
-
return {
|
32
|
-
id,
|
33
|
-
skip,
|
34
|
-
browser,
|
35
|
-
testName,
|
36
|
-
storyPath: [...kind.split('/').map(x => x.trim()), story],
|
37
|
-
storyId
|
38
|
-
};
|
39
|
-
}
|
40
|
-
|
41
|
-
function convertStories(browsers, stories) {
|
42
|
-
const tests = {};
|
43
|
-
(Array.isArray(stories) ? stories : Object.values(stories)).forEach(storyMeta => {
|
44
|
-
// TODO Skip docsOnly stories for now
|
45
|
-
if (storyMeta.parameters.docsOnly) return;
|
46
|
-
browsers.forEach(browserName => {
|
47
|
-
var _storyMeta$parameters;
|
48
|
-
|
49
|
-
const {
|
50
|
-
delay: delayParam,
|
51
|
-
tests: storyTests,
|
52
|
-
skip
|
53
|
-
} = (_storyMeta$parameters = storyMeta.parameters.creevey) !== null && _storyMeta$parameters !== void 0 ? _storyMeta$parameters : {};
|
54
|
-
const delay = typeof delayParam == 'number' ? delayParam : delayParam !== null && delayParam !== void 0 && delayParam.for.includes(browserName) ? delayParam.ms : 0; // typeof tests === "undefined" => rootSuite -> kindSuite -> storyTest -> [browsers.png]
|
55
|
-
// typeof tests === "function" => rootSuite -> kindSuite -> storyTest -> browser -> [images.png]
|
56
|
-
// typeof tests === "object" => rootSuite -> kindSuite -> storySuite -> test -> [browsers.png]
|
57
|
-
// typeof tests === "object" => rootSuite -> kindSuite -> storySuite -> test -> browser -> [images.png]
|
58
|
-
|
59
|
-
if (!storyTests) {
|
60
|
-
const test = createCreeveyTest(browserName, storyMeta, skip);
|
61
|
-
tests[test.id] = { ...test,
|
62
|
-
storyId: storyMeta.id,
|
63
|
-
story: storyMeta,
|
64
|
-
fn: storyTestFabric(delay)
|
65
|
-
};
|
66
|
-
return;
|
67
|
-
}
|
68
|
-
|
69
|
-
Object.entries(storyTests).forEach(([testName, testFn]) => {
|
70
|
-
const test = createCreeveyTest(browserName, storyMeta, skip, testName);
|
71
|
-
tests[test.id] = { ...test,
|
72
|
-
storyId: storyMeta.id,
|
73
|
-
story: storyMeta,
|
74
|
-
fn: storyTestFabric(delay, testFn)
|
75
|
-
};
|
76
|
-
});
|
77
|
-
});
|
78
|
-
});
|
79
|
-
return tests;
|
80
|
-
}
|
81
|
-
|
82
|
-
export async function loadTestsFromStories(browsers, provider, update) {
|
83
|
-
const testIdsByFiles = new Map();
|
84
|
-
const data = await provider(storiesByFiles => {
|
85
|
-
const testsDiff = {};
|
86
|
-
Array.from(storiesByFiles.entries()).forEach(([filename, stories]) => {
|
87
|
-
var _testIdsByFiles$get$f, _testIdsByFiles$get;
|
88
|
-
|
89
|
-
const tests = convertStories(browsers, stories);
|
90
|
-
const changed = Object.keys(tests);
|
91
|
-
const removed = (_testIdsByFiles$get$f = (_testIdsByFiles$get = testIdsByFiles.get(filename)) === null || _testIdsByFiles$get === void 0 ? void 0 : _testIdsByFiles$get.filter(testId => !tests[testId])) !== null && _testIdsByFiles$get$f !== void 0 ? _testIdsByFiles$get$f : [];
|
92
|
-
if (changed.length == 0) testIdsByFiles.delete(filename);else testIdsByFiles.set(filename, changed);
|
93
|
-
Object.assign(testsDiff, tests);
|
94
|
-
removed.forEach(testId => testsDiff[testId] = undefined);
|
95
|
-
});
|
96
|
-
update === null || update === void 0 ? void 0 : update(testsDiff);
|
97
|
-
});
|
98
|
-
const stories = isStorybookVersionLessThan(6) || isStorybookVersionGreaterThan(6, 3) ? data.stories : denormalizeStoryParameters(data);
|
99
|
-
const tests = convertStories(browsers, stories);
|
100
|
-
Object.values(tests).filter(isDefined).forEach(({
|
101
|
-
id,
|
102
|
-
story: {
|
103
|
-
parameters: {
|
104
|
-
fileName
|
105
|
-
}
|
106
|
-
}
|
107
|
-
}) => {
|
108
|
-
var _testIdsByFiles$get2;
|
109
|
-
|
110
|
-
return (// TODO Don't use filename as a key, due possible collisions if two require.context with same structure of modules are defined
|
111
|
-
testIdsByFiles.set(fileName, [...((_testIdsByFiles$get2 = testIdsByFiles.get(fileName)) !== null && _testIdsByFiles$get2 !== void 0 ? _testIdsByFiles$get2 : []), id])
|
112
|
-
);
|
113
|
-
});
|
114
|
-
return tests;
|
115
|
-
}
|
116
|
-
export function saveStoriesJson(storiesData, extract) {
|
117
|
-
var _storiesData$stories;
|
118
|
-
|
119
|
-
const outputDir = typeof extract == 'boolean' ? 'storybook-static' : extract;
|
120
|
-
|
121
|
-
if (!isStorybookVersionLessThan(6)) {
|
122
|
-
// NOTE Copy-pasted from Storybook's `getStoriesJsonData` method
|
123
|
-
const allowed = ['fileName', 'docsOnly', 'framework', '__id', '__isArgsStory'];
|
124
|
-
storiesData.globalParameters = pick(storiesData.globalParameters, allowed); // @ts-expect-error ignore error
|
125
|
-
|
126
|
-
storiesData.kindParameters = mapValues(storiesData.kindParameters, v => pick(v, allowed)); // @ts-expect-error ignore error
|
127
|
-
|
128
|
-
storiesData.stories = mapValues(storiesData.stories, v => ({ ...pick(v, ['id', 'name', 'kind', 'story']),
|
129
|
-
parameters: pick(v.parameters, allowed)
|
130
|
-
}));
|
131
|
-
} // TODO Fix args stories
|
132
|
-
|
133
|
-
|
134
|
-
removeProps(storiesData !== null && storiesData !== void 0 ? storiesData : {}, ['stories', () => true, 'parameters', '__isArgsStory']);
|
135
|
-
Object.values((_storiesData$stories = storiesData === null || storiesData === void 0 ? void 0 : storiesData.stories) !== null && _storiesData$stories !== void 0 ? _storiesData$stories : {}).forEach(story => isObject(story) && 'parameters' in story && isObject(story.parameters) && delete story.parameters.__isArgsStory);
|
136
|
-
mkdirSync(outputDir, {
|
137
|
-
recursive: true
|
138
|
-
});
|
139
|
-
writeFileSync(path.join(outputDir, 'stories.json'), JSON.stringify(storiesData, null, 2));
|
140
|
-
}
|
141
|
-
export function saveTestsJson(tests, dstPath = process.cwd()) {
|
142
|
-
mkdirSync(dstPath, {
|
143
|
-
recursive: true
|
144
|
-
});
|
145
|
-
writeFileSync(path.join(dstPath, 'tests.json'), // eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
146
|
-
JSON.stringify(tests, (_, value) => isFunction(value) ? value.toString() : value, 2));
|
147
|
-
}
|
@@ -1,44 +0,0 @@
|
|
1
|
-
var _api$channel, _api$context;
|
2
|
-
|
3
|
-
import { addons } from '@storybook/addons';
|
4
|
-
import { getStorybookFramework, isStorybookVersionLessThan, resolveFromStorybook } from './helpers';
|
5
|
-
const framework = getStorybookFramework(); // eslint-disable-next-line @typescript-eslint/no-var-requires
|
6
|
-
|
7
|
-
const core = require(resolveFromStorybook('@storybook/core')); //@ts-expect-error: 6.2 use named exports
|
8
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
9
|
-
|
10
|
-
|
11
|
-
const start = isStorybookVersionLessThan(6, 2) ? core.default.start : core.start;
|
12
|
-
const api = start(() => void 0);
|
13
|
-
export const channel = isStorybookVersionLessThan(6, 4) ? (_api$channel = api.channel) !== null && _api$channel !== void 0 ? _api$channel : (_api$context = api.context) === null || _api$context === void 0 ? void 0 : _api$context.channel : addons.getChannel();
|
14
|
-
export const clientApi = api.clientApi;
|
15
|
-
export const forceReRender = api.forceReRender;
|
16
|
-
export const storiesOf = (kind, m) => {
|
17
|
-
return clientApi.storiesOf(kind, m).addParameters({
|
18
|
-
framework
|
19
|
-
});
|
20
|
-
};
|
21
|
-
export const configure = (...args) => {
|
22
|
-
if (isStorybookVersionLessThan(5, 2)) {
|
23
|
-
//NOTE: Storybook <= 5.1 pass args as is
|
24
|
-
//@ts-expect-error: ignore it
|
25
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
26
|
-
return api.configApi.configure(...args);
|
27
|
-
}
|
28
|
-
|
29
|
-
if (isStorybookVersionLessThan(6)) {
|
30
|
-
//NOTE: Storybook <= 5.3 pass `framework` as last argument
|
31
|
-
//@ts-expect-error: ignore it
|
32
|
-
return api.configure(...args, framework);
|
33
|
-
} //NOTE Storybook 6.x pass `framework` as first argument
|
34
|
-
//@ts-expect-error: ignore it
|
35
|
-
|
36
|
-
|
37
|
-
return api.configure(framework, ...args);
|
38
|
-
};
|
39
|
-
export const addDecorator = clientApi.addDecorator;
|
40
|
-
export const addParameters = clientApi.addParameters;
|
41
|
-
export const clearDecorators = clientApi.clearDecorators;
|
42
|
-
export const setAddon = clientApi.setAddon;
|
43
|
-
export const getStorybook = clientApi.getStorybook;
|
44
|
-
export const raw = clientApi.raw;
|
@@ -1,106 +0,0 @@
|
|
1
|
-
import path from 'path';
|
2
|
-
import resolveFrom from 'resolve-from';
|
3
|
-
const supportedFrameworks = ['react', 'vue', 'vue3', 'angular', 'marionette', 'mithril', 'marko', 'html', 'svelte', 'riot', 'ember', 'preact', 'rax', 'aurelia', 'server', 'web-components'];
|
4
|
-
export const storybookDirRef = {
|
5
|
-
current: path.resolve('.storybook')
|
6
|
-
};
|
7
|
-
export const resolveFromStorybook = modulePath => resolveFrom(storybookDirRef.current, modulePath);
|
8
|
-
export const resolveFromStorybookAddonDocs = modulePath => resolveFrom(resolveFromStorybook('@storybook/addon-docs'), modulePath);
|
9
|
-
export const resolveFromStorybookBuilderWebpack4 = modulePath => resolveFrom(resolveFromStorybook('@storybook/builder-webpack4'), modulePath);
|
10
|
-
export const resolveFromStorybookCore = modulePath => resolveFrom(resolveFromStorybook('@storybook/core'), modulePath);
|
11
|
-
export const resolveFromStorybookCoreServer = modulePath => resolveFrom(resolveFromStorybook('@storybook/core-server'), modulePath);
|
12
|
-
|
13
|
-
const importFromStorybook = modulePath => import(resolveFromStorybook(modulePath));
|
14
|
-
|
15
|
-
export const importStorybookClientLogger = () => importFromStorybook('@storybook/client-logger');
|
16
|
-
export const importStorybookCoreCommon = () => importFromStorybook('@storybook/core-common');
|
17
|
-
export const importStorybookCoreEvents = () => importFromStorybook('@storybook/core-events');
|
18
|
-
export function hasDocsAddon() {
|
19
|
-
try {
|
20
|
-
resolveFromStorybook('@storybook/addon-docs');
|
21
|
-
return true;
|
22
|
-
} catch (_) {
|
23
|
-
return false;
|
24
|
-
}
|
25
|
-
}
|
26
|
-
export function hasSvelteCSFAddon() {
|
27
|
-
try {
|
28
|
-
resolveFromStorybook('@storybook/addon-svelte-csf');
|
29
|
-
return true;
|
30
|
-
} catch (_) {
|
31
|
-
return false;
|
32
|
-
}
|
33
|
-
}
|
34
|
-
export function getStorybookVersion() {
|
35
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
36
|
-
const {
|
37
|
-
version
|
38
|
-
} = require(resolveFromStorybook('@storybook/core/package.json'));
|
39
|
-
|
40
|
-
return version;
|
41
|
-
}
|
42
|
-
export function isStorybookVersionLessThan(major, minor) {
|
43
|
-
var _process$env$__CREEVE;
|
44
|
-
|
45
|
-
const [sbMajor, sbMinor] = ((_process$env$__CREEVE = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE !== void 0 ? _process$env$__CREEVE : getStorybookVersion()).split('.');
|
46
|
-
return Number(sbMajor) < major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) < minor;
|
47
|
-
}
|
48
|
-
export function isStorybookVersionGreaterThan(major, minor) {
|
49
|
-
var _process$env$__CREEVE2;
|
50
|
-
|
51
|
-
const [sbMajor, sbMinor] = ((_process$env$__CREEVE2 = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE2 !== void 0 ? _process$env$__CREEVE2 : getStorybookVersion()).split('.');
|
52
|
-
return Number(sbMajor) > major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) > minor;
|
53
|
-
}
|
54
|
-
export function isStorybookVersion(major, minor) {
|
55
|
-
var _process$env$__CREEVE3;
|
56
|
-
|
57
|
-
const [sbMajor, sbMinor] = ((_process$env$__CREEVE3 = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE3 !== void 0 ? _process$env$__CREEVE3 : getStorybookVersion()).split('.');
|
58
|
-
return Number(sbMajor) == major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) == minor;
|
59
|
-
}
|
60
|
-
export function getStorybookFramework() {
|
61
|
-
var _process$env$__CREEVE4;
|
62
|
-
|
63
|
-
const framework = (_process$env$__CREEVE4 = process.env.__CREEVEY_STORYBOOK_FRAMEWORK__) !== null && _process$env$__CREEVE4 !== void 0 ? _process$env$__CREEVE4 : supportedFrameworks.find(framework => {
|
64
|
-
try {
|
65
|
-
return require.resolve(resolveFromStorybook(`@storybook/${framework}`));
|
66
|
-
} catch (_) {
|
67
|
-
return false;
|
68
|
-
}
|
69
|
-
});
|
70
|
-
if (!framework) throw new Error("Couldn't detect used Storybook framework. Please ensure that you install `@storybook/<framework>` package");
|
71
|
-
return framework;
|
72
|
-
}
|
73
|
-
export const storybookConfigRef = {
|
74
|
-
current: {
|
75
|
-
stories: []
|
76
|
-
}
|
77
|
-
};
|
78
|
-
export async function importStorybookConfig() {
|
79
|
-
const configPath = `${storybookDirRef.current}/main`;
|
80
|
-
|
81
|
-
try {
|
82
|
-
return storybookConfigRef.current = (await import(require.resolve(configPath))).default;
|
83
|
-
} catch (_) {
|
84
|
-
const storybookUtilsPath = isStorybookVersionLessThan(6, 2) ? '@storybook/core/dist/server/utils' : '@storybook/core-common/dist/cjs/utils';
|
85
|
-
const serverRequireModule = isStorybookVersionLessThan(6, 2) ? 'server-require' : 'interpret-require'; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
86
|
-
|
87
|
-
const {
|
88
|
-
getInterpretedFile
|
89
|
-
} = await import(resolveFromStorybook(`${storybookUtilsPath}/interpret-files`)); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
90
|
-
|
91
|
-
const {
|
92
|
-
default: serverRequireFallback,
|
93
|
-
serverRequire = serverRequireFallback
|
94
|
-
} = await import(resolveFromStorybook(`${storybookUtilsPath}/${serverRequireModule}`)); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
95
|
-
|
96
|
-
const mainConfigFile = isStorybookVersionLessThan(6, 1) ? configPath : // eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
97
|
-
getInterpretedFile(configPath); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
98
|
-
|
99
|
-
return storybookConfigRef.current = serverRequire(mainConfigFile);
|
100
|
-
}
|
101
|
-
}
|
102
|
-
export async function isCSFv3Enabled() {
|
103
|
-
var _await$importStoryboo, _await$importStoryboo2, _await$importStoryboo3;
|
104
|
-
|
105
|
-
return (_await$importStoryboo = (_await$importStoryboo2 = await importStorybookConfig()) === null || _await$importStoryboo2 === void 0 ? void 0 : (_await$importStoryboo3 = _await$importStoryboo2.features) === null || _await$importStoryboo3 === void 0 ? void 0 : _await$importStoryboo3.previewCsfV3) !== null && _await$importStoryboo !== void 0 ? _await$importStoryboo : false;
|
106
|
-
}
|
@@ -1,200 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/ban-ts-comment */
|
2
|
-
import path from 'path';
|
3
|
-
import { isWorker, isMaster } from 'cluster';
|
4
|
-
import chokidar from 'chokidar';
|
5
|
-
import { noop } from '../../types';
|
6
|
-
import { getCreeveyCache } from '../utils';
|
7
|
-
import { subscribeOn } from '../messages';
|
8
|
-
import { importStorybookClientLogger, importStorybookConfig, importStorybookCoreCommon, importStorybookCoreEvents, isStorybookVersionGreaterThan, isStorybookVersionLessThan } from './helpers';
|
9
|
-
import { logger } from '../logger';
|
10
|
-
import { denormalizeStoryParameters } from '../../shared';
|
11
|
-
|
12
|
-
async function initStorybookEnvironment() {
|
13
|
-
// @ts-ignore
|
14
|
-
(await import('global-jsdom')).default(undefined, {
|
15
|
-
url: 'http://localhost'
|
16
|
-
}); // NOTE Cutoff `jsdom` part from userAgent, because storybook check enviroment and create events channel if runs in browser
|
17
|
-
// https://github.com/storybookjs/storybook/blob/v5.2.8/lib/core/src/client/preview/start.js#L98
|
18
|
-
// Example: "Mozilla/5.0 (linux) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/15.2.1"
|
19
|
-
|
20
|
-
Object.defineProperty(window.navigator, 'userAgent', {
|
21
|
-
value: window.navigator.userAgent.split(' ').filter(token => !token.startsWith('jsdom')).join(' ')
|
22
|
-
}); // TODO Look at creevey debug flag
|
23
|
-
|
24
|
-
const {
|
25
|
-
logger
|
26
|
-
} = await importStorybookClientLogger(); // NOTE: Disable duplication warnings for >=6.2 storybook
|
27
|
-
|
28
|
-
if (isWorker) logger.warn = noop; // NOTE: disable logger for 5.x storybook
|
29
|
-
|
30
|
-
logger.debug = noop;
|
31
|
-
return import('./entry');
|
32
|
-
}
|
33
|
-
|
34
|
-
function watchStories(channel, watcher, initialFiles) {
|
35
|
-
const watchingFiles = initialFiles;
|
36
|
-
let storiesByFiles = new Map();
|
37
|
-
subscribeOn('shutdown', () => void watcher.close());
|
38
|
-
watcher.add(Array.from(watchingFiles));
|
39
|
-
watcher.on('change', filePath => storiesByFiles.set(path.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
40
|
-
watcher.on('unlink', filePath => storiesByFiles.set(path.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
41
|
-
return data => {
|
42
|
-
const stories = isStorybookVersionLessThan(6) || isStorybookVersionGreaterThan(6, 3) ? data.stories : denormalizeStoryParameters(data);
|
43
|
-
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
44
|
-
const addedFiles = Array.from(files).filter(filePath => !watchingFiles.has(filePath));
|
45
|
-
const removedFiles = Array.from(watchingFiles).filter(filePath => !files.has(filePath));
|
46
|
-
watcher.add(addedFiles);
|
47
|
-
addedFiles.forEach(filePath => {
|
48
|
-
watchingFiles.add(filePath);
|
49
|
-
storiesByFiles.set(filePath, []);
|
50
|
-
});
|
51
|
-
removedFiles.forEach(filePath => watchingFiles.delete(filePath));
|
52
|
-
Object.values(stories).forEach(story => {
|
53
|
-
var _storiesByFiles$get;
|
54
|
-
|
55
|
-
return (_storiesByFiles$get = storiesByFiles.get(story.parameters.fileName)) === null || _storiesByFiles$get === void 0 ? void 0 : _storiesByFiles$get.push(story);
|
56
|
-
});
|
57
|
-
channel.emit('storiesUpdated', storiesByFiles);
|
58
|
-
storiesByFiles = new Map();
|
59
|
-
};
|
60
|
-
}
|
61
|
-
|
62
|
-
function loadStoriesFromBundle(watch) {
|
63
|
-
const bundlePath = path.join(getCreeveyCache(), 'storybook/main.js');
|
64
|
-
|
65
|
-
if (watch) {
|
66
|
-
subscribeOn('webpack', message => {
|
67
|
-
if (message.type != 'rebuild succeeded') return;
|
68
|
-
Object.values(global.__CREEVEY_HMR_DATA__).filter(({
|
69
|
-
callback
|
70
|
-
}) => callback).forEach(({
|
71
|
-
data,
|
72
|
-
callback
|
73
|
-
}) => callback(data));
|
74
|
-
delete require.cache[bundlePath];
|
75
|
-
import(bundlePath);
|
76
|
-
});
|
77
|
-
}
|
78
|
-
|
79
|
-
import(bundlePath);
|
80
|
-
}
|
81
|
-
|
82
|
-
async function loadStoriesDirectly(config, {
|
83
|
-
watcher,
|
84
|
-
debug
|
85
|
-
}) {
|
86
|
-
const {
|
87
|
-
toRequireContext,
|
88
|
-
normalizeStoriesEntry
|
89
|
-
} = await importStorybookCoreCommon();
|
90
|
-
const {
|
91
|
-
addParameters,
|
92
|
-
configure
|
93
|
-
} = await import('./entry');
|
94
|
-
const requireContext = await (await import('../loaders/babel/register')).default(config, debug);
|
95
|
-
|
96
|
-
const preview = (() => {
|
97
|
-
try {
|
98
|
-
return require.resolve(`${config.storybookDir}/preview`);
|
99
|
-
} catch (_) {
|
100
|
-
/* noop */
|
101
|
-
}
|
102
|
-
})();
|
103
|
-
|
104
|
-
const {
|
105
|
-
stories
|
106
|
-
} = await importStorybookConfig();
|
107
|
-
const contexts = stories.map(entry => {
|
108
|
-
const normalizedEntry = isStorybookVersionLessThan(6, 4) ? entry : normalizeStoriesEntry(entry, {
|
109
|
-
configDir: config.storybookDir,
|
110
|
-
workingDir: process.cwd()
|
111
|
-
});
|
112
|
-
const {
|
113
|
-
path: storiesPath,
|
114
|
-
recursive,
|
115
|
-
match
|
116
|
-
} = toRequireContext(normalizedEntry);
|
117
|
-
watcher === null || watcher === void 0 ? void 0 : watcher.add(path.resolve(config.storybookDir, storiesPath));
|
118
|
-
return () => requireContext(storiesPath, recursive, new RegExp(match));
|
119
|
-
});
|
120
|
-
|
121
|
-
let disposeCallback = data => void data;
|
122
|
-
|
123
|
-
Object.assign(module, {
|
124
|
-
hot: {
|
125
|
-
data: {},
|
126
|
-
|
127
|
-
accept() {
|
128
|
-
/* noop */
|
129
|
-
},
|
130
|
-
|
131
|
-
dispose(callback) {
|
132
|
-
disposeCallback = callback;
|
133
|
-
}
|
134
|
-
|
135
|
-
}
|
136
|
-
});
|
137
|
-
|
138
|
-
async function startStorybook() {
|
139
|
-
if (preview) {
|
140
|
-
const {
|
141
|
-
parameters,
|
142
|
-
globals,
|
143
|
-
globalTypes
|
144
|
-
} = await import(preview);
|
145
|
-
if (parameters) addParameters(parameters);
|
146
|
-
if (globals) addParameters({
|
147
|
-
globals
|
148
|
-
});
|
149
|
-
if (globalTypes) addParameters({
|
150
|
-
globalTypes
|
151
|
-
});
|
152
|
-
}
|
153
|
-
|
154
|
-
try {
|
155
|
-
configure(contexts.map(ctx => ctx()), module, false);
|
156
|
-
} catch (error) {
|
157
|
-
if (isMaster) logger.error(error);
|
158
|
-
}
|
159
|
-
}
|
160
|
-
|
161
|
-
watcher === null || watcher === void 0 ? void 0 : watcher.add(config.storybookDir);
|
162
|
-
watcher === null || watcher === void 0 ? void 0 : watcher.on('all', (_event, filename) => {
|
163
|
-
var _module$hot;
|
164
|
-
|
165
|
-
disposeCallback((_module$hot = module.hot) === null || _module$hot === void 0 ? void 0 : _module$hot.data);
|
166
|
-
delete require.cache[filename];
|
167
|
-
void startStorybook();
|
168
|
-
});
|
169
|
-
void startStorybook();
|
170
|
-
}
|
171
|
-
|
172
|
-
export async function loadStories(config, {
|
173
|
-
watch,
|
174
|
-
debug
|
175
|
-
}, storiesListener) {
|
176
|
-
const storybookApi = await initStorybookEnvironment();
|
177
|
-
const Events = await importStorybookCoreEvents();
|
178
|
-
const {
|
179
|
-
channel
|
180
|
-
} = storybookApi;
|
181
|
-
channel.removeAllListeners(Events.CURRENT_STORY_WAS_SET);
|
182
|
-
channel.on('storiesUpdated', storiesListener);
|
183
|
-
let watcher = null;
|
184
|
-
if (watch) watcher = chokidar.watch([], {
|
185
|
-
ignoreInitial: true
|
186
|
-
});
|
187
|
-
const loadPromise = new Promise(resolve => {
|
188
|
-
channel.once(Events.SET_STORIES, data => {
|
189
|
-
const stories = isStorybookVersionLessThan(6) || isStorybookVersionGreaterThan(6, 3) ? data.stories : denormalizeStoryParameters(data);
|
190
|
-
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
191
|
-
if (watcher) channel.on(Events.SET_STORIES, watchStories(channel, watcher, files));
|
192
|
-
resolve(data);
|
193
|
-
});
|
194
|
-
});
|
195
|
-
if (config.useWebpackToExtractTests) loadStoriesFromBundle(watch);else void loadStoriesDirectly(config, {
|
196
|
-
watcher,
|
197
|
-
debug
|
198
|
-
});
|
199
|
-
return loadPromise;
|
200
|
-
}
|