creevey 0.9.0-beta.2 → 0.9.0-beta.3
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 +33 -0
- package/README.md +9 -1
- package/addon/README.md +3 -0
- package/addon/package.json +4 -0
- package/docs/config.md +29 -26
- package/jest.config.js +6 -0
- package/lib/cjs/client/addon/Manager.js +122 -270
- package/lib/cjs/client/addon/components/Addon.js +17 -38
- package/lib/cjs/client/addon/components/Icons.js +11 -7
- package/lib/cjs/client/addon/components/Panel.js +17 -13
- package/lib/cjs/client/addon/components/TestSelect.js +11 -9
- package/lib/cjs/client/addon/components/Tools.js +21 -40
- package/lib/cjs/client/addon/decorator.js +1 -1
- package/lib/cjs/client/addon/index.js +31 -0
- package/lib/cjs/client/addon/preset.ie11.js +74 -0
- package/lib/cjs/client/addon/preset.js +12 -31
- package/lib/cjs/client/addon/register.js +46 -70
- package/lib/cjs/client/addon/utils.js +6 -2
- package/lib/cjs/client/addon/withCreevey.js +161 -342
- package/lib/cjs/client/shared/components/ImagesView/BlendView.js +23 -21
- package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +22 -18
- package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +42 -64
- package/lib/cjs/client/shared/components/ImagesView/SlideView.js +35 -48
- package/lib/cjs/client/shared/components/ImagesView/SwapView.js +24 -43
- package/lib/cjs/client/shared/components/ImagesView/index.js +9 -9
- package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +12 -8
- package/lib/cjs/client/shared/components/PageFooter/Paging.js +14 -18
- package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +22 -18
- package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +42 -67
- package/lib/cjs/client/shared/components/ResultsPage.js +39 -69
- package/lib/cjs/client/shared/creeveyClientApi.js +55 -82
- package/lib/cjs/client/shared/helpers.js +139 -210
- package/lib/cjs/client/shared/viewMode.js +5 -5
- package/lib/cjs/client/web/142.js +2 -0
- package/lib/cjs/client/web/142.js.LICENSE.txt +12 -0
- package/lib/cjs/client/web/32.js +1 -0
- package/lib/cjs/client/web/551.js +1 -0
- package/lib/cjs/client/web/566.js +2 -0
- package/lib/cjs/client/web/566.js.LICENSE.txt +31 -0
- package/lib/cjs/client/web/691.js +2 -0
- package/lib/cjs/client/web/691.js.LICENSE.txt +8 -0
- package/lib/cjs/client/web/725.js +1 -0
- package/lib/cjs/client/web/main.js +2 -38
- package/lib/cjs/client/web/main.js.LICENSE.txt +49 -0
- package/lib/cjs/creevey.js +3 -5
- package/lib/cjs/index.js +4 -4
- package/lib/cjs/server/config.js +2 -4
- package/lib/cjs/server/docker.js +3 -7
- package/lib/cjs/server/extract.js +1 -5
- package/lib/cjs/server/index.js +1 -1
- package/lib/cjs/server/loaders/babel/creevey-plugin.js +1 -3
- package/lib/cjs/server/loaders/babel/helpers.js +13 -23
- package/lib/cjs/server/loaders/babel/register.js +2 -4
- package/lib/cjs/server/loaders/webpack/compile.js +34 -51
- package/lib/cjs/server/loaders/webpack/creevey-loader.js +20 -22
- package/lib/cjs/server/loaders/webpack/dummy-hmr.js +2 -7
- package/lib/cjs/server/loaders/webpack/mdx-loader.js +2 -2
- package/lib/cjs/server/loaders/webpack/start.js +1 -1
- package/lib/cjs/server/logger.js +2 -1
- package/lib/cjs/server/master/index.js +2 -2
- package/lib/cjs/server/master/pool.js +9 -18
- package/lib/cjs/server/master/runner.js +53 -66
- package/lib/cjs/server/master/server.js +5 -3
- package/lib/cjs/server/messages.js +8 -10
- package/lib/cjs/server/selenium/browser.js +22 -46
- package/lib/cjs/server/selenium/selenoid.js +5 -7
- package/lib/cjs/server/stories.js +16 -33
- package/lib/cjs/server/storybook/entry.js +7 -22
- package/lib/cjs/server/storybook/helpers.js +20 -27
- package/lib/cjs/server/storybook/providers/browser.js +5 -9
- package/lib/cjs/server/storybook/providers/nodejs.js +7 -9
- package/lib/cjs/server/update.js +1 -5
- package/lib/cjs/server/utils.js +27 -36
- package/lib/cjs/server/worker/reporter.js +8 -20
- package/lib/cjs/server/worker/worker.js +6 -16
- package/lib/cjs/shared/index.js +101 -0
- package/lib/cjs/shared/serializeRegExp.js +42 -0
- package/lib/cjs/types.js +6 -6
- package/lib/esm/client/addon/Manager.js +122 -270
- package/lib/esm/client/addon/components/Addon.js +15 -34
- package/lib/esm/client/addon/components/Icons.js +10 -6
- package/lib/esm/client/addon/components/Panel.js +17 -13
- package/lib/esm/client/addon/components/TestSelect.js +11 -9
- package/lib/esm/client/addon/components/Tools.js +19 -36
- package/lib/esm/client/addon/decorator.js +1 -1
- package/lib/esm/client/addon/index.js +2 -0
- package/lib/esm/client/addon/preset.ie11.js +59 -0
- package/lib/esm/client/addon/preset.js +11 -26
- package/lib/esm/client/addon/register.js +42 -66
- package/lib/esm/client/addon/utils.js +3 -2
- package/lib/esm/client/addon/withCreevey.js +155 -341
- package/lib/esm/client/shared/components/ImagesView/BlendView.js +21 -17
- package/lib/esm/client/shared/components/ImagesView/ImagesView.js +21 -17
- package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +40 -60
- package/lib/esm/client/shared/components/ImagesView/SlideView.js +33 -44
- package/lib/esm/client/shared/components/ImagesView/SwapView.js +22 -39
- package/lib/esm/client/shared/components/PageFooter/PageFooter.js +12 -8
- package/lib/esm/client/shared/components/PageFooter/Paging.js +14 -18
- package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +22 -18
- package/lib/esm/client/shared/components/PageHeader/PageHeader.js +37 -60
- package/lib/esm/client/shared/components/ResultsPage.js +36 -64
- package/lib/esm/client/shared/creeveyClientApi.js +57 -84
- package/lib/esm/client/shared/helpers.js +123 -194
- package/lib/esm/client/shared/viewMode.js +4 -4
- package/lib/esm/creevey.js +3 -5
- package/lib/esm/index.js +1 -3
- package/lib/esm/server/config.js +2 -4
- package/lib/esm/server/docker.js +2 -2
- package/lib/esm/server/extract.js +1 -3
- package/lib/esm/server/index.js +1 -1
- package/lib/esm/server/loaders/babel/creevey-plugin.js +1 -3
- package/lib/esm/server/loaders/babel/helpers.js +12 -22
- package/lib/esm/server/loaders/babel/register.js +3 -5
- package/lib/esm/server/loaders/webpack/compile.js +35 -52
- package/lib/esm/server/loaders/webpack/creevey-loader.js +9 -10
- package/lib/esm/server/loaders/webpack/dummy-hmr.js +2 -6
- package/lib/esm/server/loaders/webpack/mdx-loader.js +2 -2
- package/lib/esm/server/loaders/webpack/start.js +1 -1
- package/lib/esm/server/master/index.js +2 -2
- package/lib/esm/server/master/pool.js +7 -18
- package/lib/esm/server/master/runner.js +53 -66
- package/lib/esm/server/master/server.js +5 -3
- package/lib/esm/server/messages.js +3 -5
- package/lib/esm/server/selenium/browser.js +19 -43
- package/lib/esm/server/selenium/selenoid.js +4 -6
- package/lib/esm/server/stories.js +16 -32
- package/lib/esm/server/storybook/entry.js +5 -22
- package/lib/esm/server/storybook/helpers.js +11 -20
- package/lib/esm/server/storybook/providers/browser.js +4 -5
- package/lib/esm/server/storybook/providers/nodejs.js +7 -8
- package/lib/esm/server/update.js +1 -5
- package/lib/esm/server/utils.js +18 -31
- package/lib/esm/server/worker/reporter.js +8 -20
- package/lib/esm/server/worker/worker.js +6 -16
- package/lib/esm/shared/index.js +78 -0
- package/lib/esm/shared/serializeRegExp.js +24 -0
- 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 +8 -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/index.d.ts +2 -0
- package/lib/types/client/addon/preset.d.ts +23 -24
- package/lib/types/client/addon/preset.ie11.d.ts +10 -0
- package/lib/types/client/addon/readyForCapture.d.ts +6 -6
- package/lib/types/client/addon/register.d.ts +3 -3
- package/lib/types/client/addon/utils.d.ts +3 -2
- package/lib/types/client/addon/withCreevey.d.ts +24 -24
- package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +24 -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 +8 -9
- package/lib/types/client/shared/components/PageFooter/Paging.d.ts +7 -8
- package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +12 -12
- package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +16 -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 +11 -12
- package/lib/types/client/web/CreeveyContext.d.ts +11 -11
- package/lib/types/client/web/CreeveyLoader.d.ts +2 -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 +12 -13
- package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +33 -33
- package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +7 -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 +0 -1
- 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 +4 -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 +10 -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 -7
- package/lib/types/server/master/pool.d.ts +31 -31
- 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 -27
- package/lib/types/server/selenium/browser.d.ts +17 -17
- 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 +17 -18
- package/lib/types/server/storybook/helpers.d.ts +24 -24
- package/lib/types/server/storybook/providers/browser.d.ts +4 -4
- package/lib/types/server/storybook/providers/hybrid.d.ts +4 -4
- package/lib/types/server/storybook/providers/nodejs.d.ts +9 -9
- package/lib/types/server/testsFiles/parser.d.ts +12 -12
- package/lib/types/server/testsFiles/register.d.ts +2 -2
- package/lib/types/server/update.d.ts +2 -2
- package/lib/types/server/utils.d.ts +24 -20
- package/lib/types/server/worker/chai-image.d.ts +6 -6
- package/lib/types/server/worker/helpers.d.ts +8 -8
- 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 → shared/index.d.ts} +7 -16
- package/lib/types/shared/serializeRegExp.d.ts +9 -0
- package/lib/types/types.d.ts +489 -489
- package/package.json +114 -102
- package/preset/ie11.js +5 -0
- package/{preset.js → preset/index.js} +2 -2
- package/types/mdx.d.ts +3 -2
- package/lib/cjs/client/web/1.js +0 -13
- package/lib/cjs/client/web/2.js +0 -1
- package/lib/cjs/shared.js +0 -124
- package/lib/esm/shared.js +0 -93
- package/storybook-static/stories.json +0 -21
@@ -19,20 +19,16 @@ var _types = require("../types");
|
|
19
19
|
|
20
20
|
var _utils = require("./utils");
|
21
21
|
|
22
|
-
var _helpers = require("./storybook/helpers");
|
23
|
-
|
24
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
25
23
|
|
26
24
|
function storyTestFabric(delay, testFn) {
|
27
25
|
return async function storyTest() {
|
28
|
-
var _testFn$call;
|
29
|
-
|
30
26
|
delay ? await new Promise(resolve => setTimeout(resolve, delay)) : void 0;
|
31
|
-
await (
|
27
|
+
await (testFn ? testFn.call(this) : this.screenshots.length > 0 ? this.expect(this.screenshots.reduce((screenshots, {
|
32
28
|
imageName,
|
33
29
|
screenshot
|
34
30
|
}, index) => ({ ...screenshots,
|
35
|
-
[imageName
|
31
|
+
[imageName ?? `screenshot_${index}`]: screenshot
|
36
32
|
}), {})).to.matchImages() : this.expect(await this.takeScreenshot()).to.matchImage());
|
37
33
|
};
|
38
34
|
}
|
@@ -62,15 +58,13 @@ function createCreeveyTest(browser, storyMeta, skipOptions, testName) {
|
|
62
58
|
function convertStories(browserName, stories) {
|
63
59
|
const tests = {};
|
64
60
|
(Array.isArray(stories) ? stories : Object.values(stories)).forEach(storyMeta => {
|
65
|
-
var _storyMeta$parameters;
|
66
|
-
|
67
61
|
// TODO Skip docsOnly stories for now
|
68
62
|
if (storyMeta.parameters.docsOnly) return;
|
69
63
|
const {
|
70
64
|
delay: delayParam,
|
71
65
|
tests: storyTests,
|
72
66
|
skip
|
73
|
-
} =
|
67
|
+
} = storyMeta.parameters.creevey ?? {};
|
74
68
|
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]
|
75
69
|
// typeof tests === "function" => rootSuite -> kindSuite -> storyTest -> browser -> [images.png]
|
76
70
|
// typeof tests === "object" => rootSuite -> kindSuite -> storySuite -> test -> [browsers.png]
|
@@ -105,11 +99,11 @@ async function loadTestsFromStories(browsers, provider, update) {
|
|
105
99
|
const tests = {};
|
106
100
|
browsers.forEach(browser => {
|
107
101
|
Array.from(storiesByFiles.entries()).forEach(([filename, stories]) => {
|
108
|
-
var _testIdsByFiles$get
|
102
|
+
var _testIdsByFiles$get;
|
109
103
|
|
110
104
|
Object.assign(tests, convertStories(browser, stories));
|
111
105
|
const changed = Object.keys(tests);
|
112
|
-
const removed = (
|
106
|
+
const removed = ((_testIdsByFiles$get = testIdsByFiles.get(filename)) === null || _testIdsByFiles$get === void 0 ? void 0 : _testIdsByFiles$get.filter(testId => !tests[testId])) ?? [];
|
113
107
|
if (changed.length == 0) testIdsByFiles.delete(filename);else testIdsByFiles.set(filename, changed);
|
114
108
|
Object.assign(testsDiff, tests);
|
115
109
|
removed.forEach(testId => testsDiff[testId] = undefined);
|
@@ -125,36 +119,25 @@ async function loadTestsFromStories(browsers, provider, update) {
|
|
125
119
|
fileName
|
126
120
|
}
|
127
121
|
}
|
128
|
-
}) =>
|
129
|
-
|
130
|
-
|
131
|
-
return (// TODO Don't use filename as a key, due possible collisions if two require.context with same structure of modules are defined
|
132
|
-
testIdsByFiles.set(fileName, [...((_testIdsByFiles$get2 = testIdsByFiles.get(fileName)) !== null && _testIdsByFiles$get2 !== void 0 ? _testIdsByFiles$get2 : []), id])
|
133
|
-
);
|
134
|
-
});
|
122
|
+
}) => // TODO Don't use filename as a key, due possible collisions if two require.context with same structure of modules are defined
|
123
|
+
testIdsByFiles.set(fileName, [...(testIdsByFiles.get(fileName) ?? []), id]));
|
135
124
|
return tests;
|
136
125
|
}
|
137
126
|
|
138
127
|
function saveStoriesJson(storiesData, extract) {
|
139
|
-
|
140
|
-
|
141
|
-
const outputDir = typeof extract == 'boolean' ? 'storybook-static' : extract;
|
142
|
-
|
143
|
-
if (!(0, _helpers.isStorybookVersionLessThan)(6)) {
|
144
|
-
// NOTE Copy-pasted from Storybook's `getStoriesJsonData` method
|
145
|
-
const allowed = ['fileName', 'docsOnly', 'framework', '__id', '__isArgsStory'];
|
146
|
-
storiesData.globalParameters = (0, _lodash.pick)(storiesData.globalParameters, allowed); // @ts-expect-error ignore error
|
128
|
+
const outputDir = typeof extract == 'boolean' ? 'storybook-static' : extract; // NOTE Copy-pasted from Storybook's `getStoriesJsonData` method
|
147
129
|
|
148
|
-
|
130
|
+
const allowed = ['fileName', 'docsOnly', 'framework', '__id', '__isArgsStory'];
|
131
|
+
storiesData.globalParameters = (0, _lodash.pick)(storiesData.globalParameters, allowed); // @ts-expect-error ignore error
|
149
132
|
|
150
|
-
|
151
|
-
parameters: (0, _lodash.pick)(v.parameters, allowed)
|
152
|
-
}));
|
153
|
-
} // TODO Fix args stories
|
133
|
+
storiesData.kindParameters = (0, _lodash.mapValues)(storiesData.kindParameters, v => (0, _lodash.pick)(v, allowed)); // @ts-expect-error ignore error
|
154
134
|
|
135
|
+
storiesData.stories = (0, _lodash.mapValues)(storiesData.stories, v => ({ ...(0, _lodash.pick)(v, ['id', 'name', 'kind', 'story']),
|
136
|
+
parameters: (0, _lodash.pick)(v.parameters, allowed)
|
137
|
+
})); // TODO Fix args stories
|
155
138
|
|
156
|
-
(0, _utils.removeProps)(storiesData
|
157
|
-
Object.values((
|
139
|
+
(0, _utils.removeProps)(storiesData ?? {}, ['stories', () => true, 'parameters', '__isArgsStory']);
|
140
|
+
Object.values((storiesData === null || storiesData === void 0 ? void 0 : storiesData.stories) ?? {}).forEach(story => (0, _types.isObject)(story) && 'parameters' in story && (0, _types.isObject)(story.parameters) && delete story.parameters.__isArgsStory);
|
158
141
|
(0, _fs.mkdirSync)(outputDir, {
|
159
142
|
recursive: true
|
160
143
|
});
|
@@ -3,23 +3,21 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
6
|
+
exports.storiesOf = exports.setAddon = exports.raw = exports.getStorybook = exports.forceReRender = exports.configure = exports.clientApi = exports.clearDecorators = exports.channel = exports.addParameters = exports.addDecorator = void 0;
|
7
7
|
|
8
8
|
var _addons = require("@storybook/addons");
|
9
9
|
|
10
10
|
var _helpers = require("./helpers");
|
11
11
|
|
12
|
-
var _api$channel, _api$context;
|
13
|
-
|
14
12
|
const framework = (0, _helpers.getStorybookFramework)(); // eslint-disable-next-line @typescript-eslint/no-var-requires
|
15
13
|
|
16
|
-
const core = require((0, _helpers.resolveFromStorybook)('@storybook/core'));
|
17
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
18
|
-
|
14
|
+
const core = require((0, _helpers.resolveFromStorybook)('@storybook/core-client'));
|
19
15
|
|
20
|
-
const start =
|
16
|
+
const start = core.start;
|
21
17
|
const api = start(() => void 0);
|
22
|
-
|
18
|
+
|
19
|
+
const channel = _addons.addons.getChannel();
|
20
|
+
|
23
21
|
exports.channel = channel;
|
24
22
|
const clientApi = api.clientApi;
|
25
23
|
exports.clientApi = clientApi;
|
@@ -35,21 +33,8 @@ const storiesOf = (kind, m) => {
|
|
35
33
|
exports.storiesOf = storiesOf;
|
36
34
|
|
37
35
|
const configure = (...args) => {
|
38
|
-
|
39
|
-
//NOTE: Storybook <= 5.1 pass args as is
|
40
|
-
//@ts-expect-error: ignore it
|
41
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
42
|
-
return api.configApi.configure(...args);
|
43
|
-
}
|
44
|
-
|
45
|
-
if ((0, _helpers.isStorybookVersionLessThan)(6)) {
|
46
|
-
//NOTE: Storybook <= 5.3 pass `framework` as last argument
|
47
|
-
//@ts-expect-error: ignore it
|
48
|
-
return api.configure(...args, framework);
|
49
|
-
} //NOTE Storybook 6.x pass `framework` as first argument
|
36
|
+
//NOTE Storybook 6.x pass `framework` as first argument
|
50
37
|
//@ts-expect-error: ignore it
|
51
|
-
|
52
|
-
|
53
38
|
return api.configure(framework, ...args);
|
54
39
|
};
|
55
40
|
|
@@ -3,16 +3,18 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
+
exports.getStorybookFramework = getStorybookFramework;
|
7
|
+
exports.getStorybookVersion = getStorybookVersion;
|
6
8
|
exports.hasDocsAddon = hasDocsAddon;
|
7
9
|
exports.hasSvelteCSFAddon = hasSvelteCSFAddon;
|
8
|
-
exports.
|
9
|
-
exports.isStorybookVersionLessThan = isStorybookVersionLessThan;
|
10
|
-
exports.isStorybookVersionGreaterThan = isStorybookVersionGreaterThan;
|
11
|
-
exports.isStorybookVersion = isStorybookVersion;
|
12
|
-
exports.getStorybookFramework = getStorybookFramework;
|
10
|
+
exports.importStorybookClientLogger = void 0;
|
13
11
|
exports.importStorybookConfig = importStorybookConfig;
|
12
|
+
exports.importStorybookCoreEvents = exports.importStorybookCoreCommon = void 0;
|
14
13
|
exports.isCSFv3Enabled = isCSFv3Enabled;
|
15
|
-
exports.
|
14
|
+
exports.isStorybookVersion = isStorybookVersion;
|
15
|
+
exports.isStorybookVersionGreaterThan = isStorybookVersionGreaterThan;
|
16
|
+
exports.isStorybookVersionLessThan = isStorybookVersionLessThan;
|
17
|
+
exports.storybookDirRef = exports.storybookConfigRef = exports.resolveFromStorybookCoreServer = exports.resolveFromStorybookCoreClient = exports.resolveFromStorybookBuilderWebpack4 = exports.resolveFromStorybookAddonDocs = exports.resolveFromStorybook = void 0;
|
16
18
|
|
17
19
|
var _path = _interopRequireDefault(require("path"));
|
18
20
|
|
@@ -42,9 +44,9 @@ const resolveFromStorybookBuilderWebpack4 = modulePath => (0, _resolveFrom.defau
|
|
42
44
|
|
43
45
|
exports.resolveFromStorybookBuilderWebpack4 = resolveFromStorybookBuilderWebpack4;
|
44
46
|
|
45
|
-
const
|
47
|
+
const resolveFromStorybookCoreClient = modulePath => (0, _resolveFrom.default)(resolveFromStorybook('@storybook/core-client'), modulePath);
|
46
48
|
|
47
|
-
exports.
|
49
|
+
exports.resolveFromStorybookCoreClient = resolveFromStorybookCoreClient;
|
48
50
|
|
49
51
|
const resolveFromStorybookCoreServer = modulePath => (0, _resolveFrom.default)(resolveFromStorybook('@storybook/core-server'), modulePath);
|
50
52
|
|
@@ -92,30 +94,22 @@ function getStorybookVersion() {
|
|
92
94
|
}
|
93
95
|
|
94
96
|
function isStorybookVersionLessThan(major, minor) {
|
95
|
-
|
96
|
-
|
97
|
-
const [sbMajor, sbMinor] = ((_process$env$__CREEVE = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE !== void 0 ? _process$env$__CREEVE : getStorybookVersion()).split('.');
|
97
|
+
const [sbMajor, sbMinor] = (process.env.__CREEVEY_STORYBOOK_VERSION__ ?? getStorybookVersion()).split('.');
|
98
98
|
return Number(sbMajor) < major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) < minor;
|
99
99
|
}
|
100
100
|
|
101
101
|
function isStorybookVersionGreaterThan(major, minor) {
|
102
|
-
|
103
|
-
|
104
|
-
const [sbMajor, sbMinor] = ((_process$env$__CREEVE2 = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE2 !== void 0 ? _process$env$__CREEVE2 : getStorybookVersion()).split('.');
|
102
|
+
const [sbMajor, sbMinor] = (process.env.__CREEVEY_STORYBOOK_VERSION__ ?? getStorybookVersion()).split('.');
|
105
103
|
return Number(sbMajor) > major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) > minor;
|
106
104
|
}
|
107
105
|
|
108
106
|
function isStorybookVersion(major, minor) {
|
109
|
-
|
110
|
-
|
111
|
-
const [sbMajor, sbMinor] = ((_process$env$__CREEVE3 = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE3 !== void 0 ? _process$env$__CREEVE3 : getStorybookVersion()).split('.');
|
107
|
+
const [sbMajor, sbMinor] = (process.env.__CREEVEY_STORYBOOK_VERSION__ ?? getStorybookVersion()).split('.');
|
112
108
|
return Number(sbMajor) == major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) == minor;
|
113
109
|
}
|
114
110
|
|
115
111
|
function getStorybookFramework() {
|
116
|
-
|
117
|
-
|
118
|
-
const framework = (_process$env$__CREEVE4 = process.env.__CREEVEY_STORYBOOK_FRAMEWORK__) !== null && _process$env$__CREEVE4 !== void 0 ? _process$env$__CREEVE4 : supportedFrameworks.find(framework => {
|
112
|
+
const framework = process.env.__CREEVEY_STORYBOOK_FRAMEWORK__ ?? supportedFrameworks.find(framework => {
|
119
113
|
try {
|
120
114
|
return require.resolve(resolveFromStorybook(`@storybook/${framework}`));
|
121
115
|
} catch (_) {
|
@@ -139,8 +133,8 @@ async function importStorybookConfig() {
|
|
139
133
|
try {
|
140
134
|
return storybookConfigRef.current = (await Promise.resolve(`${require.resolve(configPath)}`).then(s => _interopRequireWildcard(require(s)))).default;
|
141
135
|
} catch (_) {
|
142
|
-
const storybookUtilsPath =
|
143
|
-
const serverRequireModule =
|
136
|
+
const storybookUtilsPath = '@storybook/core-common/dist/cjs/utils';
|
137
|
+
const serverRequireModule = 'interpret-require'; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
144
138
|
|
145
139
|
const {
|
146
140
|
getInterpretedFile
|
@@ -149,17 +143,16 @@ async function importStorybookConfig() {
|
|
149
143
|
const {
|
150
144
|
default: serverRequireFallback,
|
151
145
|
serverRequire = serverRequireFallback
|
152
|
-
} = await Promise.resolve(`${resolveFromStorybook(`${storybookUtilsPath}/${serverRequireModule}`)}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
146
|
+
} = await Promise.resolve(`${resolveFromStorybook(`${storybookUtilsPath}/${serverRequireModule}`)}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
153
147
|
|
154
|
-
const mainConfigFile =
|
155
|
-
getInterpretedFile(configPath); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
148
|
+
const mainConfigFile = getInterpretedFile(configPath); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
156
149
|
|
157
150
|
return storybookConfigRef.current = serverRequire(mainConfigFile);
|
158
151
|
}
|
159
152
|
}
|
160
153
|
|
161
154
|
async function isCSFv3Enabled() {
|
162
|
-
var _await$importStoryboo, _await$importStoryboo2
|
155
|
+
var _await$importStoryboo, _await$importStoryboo2;
|
163
156
|
|
164
|
-
return (_await$importStoryboo =
|
157
|
+
return ((_await$importStoryboo = await importStorybookConfig()) === null || _await$importStoryboo === void 0 ? void 0 : (_await$importStoryboo2 = _await$importStoryboo.features) === null || _await$importStoryboo2 === void 0 ? void 0 : _await$importStoryboo2.previewCsfV3) ?? false;
|
165
158
|
}
|
@@ -5,28 +5,24 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.loadStories = loadStories;
|
7
7
|
|
8
|
-
var _cluster =
|
8
|
+
var _cluster = _interopRequireDefault(require("cluster"));
|
9
9
|
|
10
10
|
var _selenium = require("../../selenium");
|
11
11
|
|
12
12
|
var _messages = require("../../messages");
|
13
13
|
|
14
|
-
var _shared = require("../../../shared");
|
15
|
-
|
16
14
|
var _types = require("../../../types");
|
17
15
|
|
18
16
|
var _logger = require("../../logger");
|
19
17
|
|
20
|
-
function
|
21
|
-
|
22
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
23
19
|
|
24
20
|
async function loadStories(_config, {
|
25
21
|
port
|
26
22
|
}, storiesListener) {
|
27
|
-
if (_cluster.
|
23
|
+
if (_cluster.default.isPrimary) {
|
28
24
|
return new Promise(resolve => {
|
29
|
-
const worker = Object.values(_cluster.default.workers).filter(_types.isDefined).find(worker => worker.isConnected());
|
25
|
+
const worker = Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).find(worker => worker.isConnected());
|
30
26
|
|
31
27
|
if (worker) {
|
32
28
|
const unsubscribe = (0, _messages.subscribeOnWorker)(worker, 'stories', message => {
|
@@ -61,7 +57,7 @@ async function loadStories(_config, {
|
|
61
57
|
});
|
62
58
|
if (message.type == 'update') storiesListener(new Map(message.payload));
|
63
59
|
});
|
64
|
-
const stories =
|
60
|
+
const stories = await (0, _selenium.loadStoriesFromBrowser)(port);
|
65
61
|
const storiesWithOldTests = [];
|
66
62
|
Object.values(stories).forEach(story => {
|
67
63
|
var _parameters, _parameters$creevey;
|
@@ -3,12 +3,12 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.loadStories = loadStories;
|
7
6
|
exports.extractStoriesData = extractStoriesData;
|
7
|
+
exports.loadStories = loadStories;
|
8
8
|
|
9
9
|
var _path = _interopRequireDefault(require("path"));
|
10
10
|
|
11
|
-
var _cluster = require("cluster");
|
11
|
+
var _cluster = _interopRequireDefault(require("cluster"));
|
12
12
|
|
13
13
|
var _chokidar = _interopRequireDefault(require("chokidar"));
|
14
14
|
|
@@ -22,8 +22,6 @@ var _helpers = require("../helpers");
|
|
22
22
|
|
23
23
|
var _logger = require("../../logger");
|
24
24
|
|
25
|
-
var _shared = require("../../../shared");
|
26
|
-
|
27
25
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
28
26
|
|
29
27
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
@@ -46,7 +44,7 @@ async function initStorybookEnvironment() {
|
|
46
44
|
logger
|
47
45
|
} = await (0, _helpers.importStorybookClientLogger)(); // NOTE: Disable duplication warnings for >=6.2 storybook
|
48
46
|
|
49
|
-
if (_cluster.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
|
47
|
+
if (_cluster.default.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
|
50
48
|
|
51
49
|
logger.debug = _types.noop;
|
52
50
|
return Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
|
@@ -60,7 +58,7 @@ function watchStories(channel, watcher, initialFiles) {
|
|
60
58
|
watcher.on('change', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
61
59
|
watcher.on('unlink', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
62
60
|
return data => {
|
63
|
-
const stories =
|
61
|
+
const stories = data.stories;
|
64
62
|
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
65
63
|
const addedFiles = Array.from(files).filter(filePath => !watchingFiles.has(filePath));
|
66
64
|
const removedFiles = Array.from(watchingFiles).filter(filePath => !files.has(filePath));
|
@@ -126,7 +124,7 @@ async function loadStoriesDirectly(config, {
|
|
126
124
|
stories
|
127
125
|
} = await (0, _helpers.importStorybookConfig)();
|
128
126
|
const contexts = stories.map(entry => {
|
129
|
-
const normalizedEntry =
|
127
|
+
const normalizedEntry = normalizeStoriesEntry(entry, {
|
130
128
|
configDir: config.storybookDir,
|
131
129
|
workingDir: process.cwd()
|
132
130
|
});
|
@@ -175,7 +173,7 @@ async function loadStoriesDirectly(config, {
|
|
175
173
|
try {
|
176
174
|
configure(contexts.map(ctx => ctx()), module, false);
|
177
175
|
} catch (error) {
|
178
|
-
if (_cluster.
|
176
|
+
if (_cluster.default.isPrimary) _logger.logger.error(error);
|
179
177
|
}
|
180
178
|
}
|
181
179
|
|
@@ -208,7 +206,7 @@ async function loadStories(config, {
|
|
208
206
|
});
|
209
207
|
const loadPromise = new Promise(resolve => {
|
210
208
|
channel.once(Events.SET_STORIES, data => {
|
211
|
-
const stories =
|
209
|
+
const stories = data.stories;
|
212
210
|
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
213
211
|
if (watcher) channel.on(Events.SET_STORIES, watchStories(channel, watcher, files));
|
214
212
|
resolve(stories);
|
package/lib/cjs/server/update.js
CHANGED
@@ -31,11 +31,7 @@ function tryToLoadTestsData(filename) {
|
|
31
31
|
const actualRegex = /^(.*)-actual-(\d+)\.png$/i;
|
32
32
|
|
33
33
|
function approve(dirents, srcPath, dstPath, testPaths, isMatch) {
|
34
|
-
dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(_types.isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(_path.default.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => {
|
35
|
-
var _images$get;
|
36
|
-
|
37
|
-
return Number(retry) > ((_images$get = images.get(imageName)) !== null && _images$get !== void 0 ? _images$get : -1) ? images.set(imageName, Number(retry)) : images;
|
38
|
-
}, new Map()).forEach((retry, imageName) => {
|
34
|
+
dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(_types.isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(_path.default.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => Number(retry) > (images.get(imageName) ?? -1) ? images.set(imageName, Number(retry)) : images, new Map()).forEach((retry, imageName) => {
|
39
35
|
(0, _fs.mkdirSync)(dstPath, {
|
40
36
|
recursive: true
|
41
37
|
});
|
package/lib/cjs/server/utils.js
CHANGED
@@ -3,15 +3,18 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
7
|
-
exports.shutdownWorkers = shutdownWorkers;
|
8
|
-
exports.shutdown = shutdown;
|
6
|
+
exports.extensions = exports.downloadBinary = exports.LOCALHOST_REGEXP = void 0;
|
9
7
|
exports.getCreeveyCache = getCreeveyCache;
|
8
|
+
exports.isShuttingDown = exports.isInsideDocker = void 0;
|
9
|
+
exports.readDirRecursive = readDirRecursive;
|
10
|
+
exports.removeProps = removeProps;
|
10
11
|
exports.runSequence = runSequence;
|
12
|
+
exports.shouldSkip = shouldSkip;
|
13
|
+
exports.shouldSkipByOption = shouldSkipByOption;
|
14
|
+
exports.shutdown = shutdown;
|
15
|
+
exports.shutdownWorkers = shutdownWorkers;
|
16
|
+
exports.skipOptionKeys = void 0;
|
11
17
|
exports.testsToImages = testsToImages;
|
12
|
-
exports.removeProps = removeProps;
|
13
|
-
exports.readDirRecursive = readDirRecursive;
|
14
|
-
exports.downloadBinary = exports.isInsideDocker = exports.skipOptionKeys = exports.extensions = exports.LOCALHOST_REGEXP = exports.isShuttingDown = void 0;
|
15
18
|
|
16
19
|
var _fs = require("fs");
|
17
20
|
|
@@ -47,38 +50,30 @@ function shouldSkip(browser, meta, skipOptions, test) {
|
|
47
50
|
return skipOptions;
|
48
51
|
}
|
49
52
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
if (reason) return reason;
|
54
|
-
}
|
55
|
-
|
56
|
-
return false;
|
53
|
+
for (const skipKey in skipOptions) {
|
54
|
+
const reason = shouldSkipByOption(browser, meta, skipOptions[skipKey], skipKey, test);
|
55
|
+
if (reason) return reason;
|
57
56
|
}
|
58
57
|
|
59
|
-
|
58
|
+
return false;
|
59
|
+
}
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
61
|
+
function shouldSkipByOption(browser, meta, skipOption, reason, test) {
|
62
|
+
if (Array.isArray(skipOption)) {
|
63
|
+
for (const skip of skipOption) {
|
64
|
+
const result = shouldSkipByOption(browser, meta, skip, reason, test);
|
65
|
+
if (result) return result;
|
65
66
|
}
|
66
67
|
|
67
|
-
|
68
|
-
reason: skipKey,
|
69
|
-
...skipOptions[skipKey]
|
70
|
-
}, test);
|
71
|
-
if (reason) return reason;
|
68
|
+
return false;
|
72
69
|
}
|
73
70
|
|
74
|
-
if (!hasSkipOptionKeys) return false;
|
75
71
|
const {
|
76
72
|
in: browsers,
|
77
73
|
kinds,
|
78
74
|
stories,
|
79
|
-
tests
|
80
|
-
|
81
|
-
} = skipOptions;
|
75
|
+
tests
|
76
|
+
} = skipOption;
|
82
77
|
const {
|
83
78
|
kind,
|
84
79
|
story
|
@@ -92,7 +87,7 @@ function shouldSkip(browser, meta, skipOptions, test) {
|
|
92
87
|
|
93
88
|
async function shutdownWorkers() {
|
94
89
|
isShuttingDown.current = true;
|
95
|
-
await Promise.all(Object.values(_cluster.default.workers).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
|
90
|
+
await Promise.all(Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
|
96
91
|
const timeout = setTimeout(() => worker.kill(), 10000);
|
97
92
|
worker.on('exit', () => {
|
98
93
|
clearTimeout(timeout);
|
@@ -128,9 +123,9 @@ function testsToImages(tests) {
|
|
128
123
|
storyPath,
|
129
124
|
results
|
130
125
|
}) => {
|
131
|
-
var _results$slice
|
126
|
+
var _results$slice$;
|
132
127
|
|
133
|
-
return Object.keys((
|
128
|
+
return Object.keys((results === null || results === void 0 ? void 0 : (_results$slice$ = results.slice(-1)[0]) === null || _results$slice$ === void 0 ? void 0 : _results$slice$.images) ?? {}).map(image => `${[...storyPath, testName, browser, browser == image ? undefined : image].filter(_types.isDefined).join('/')}.png`);
|
134
129
|
})));
|
135
130
|
} // https://tuhrig.de/how-to-know-you-are-inside-a-docker-container/
|
136
131
|
|
@@ -139,19 +134,15 @@ const isInsideDocker = (0, _fs.existsSync)('/proc/1/cgroup') && /docker/.test((0
|
|
139
134
|
exports.isInsideDocker = isInsideDocker;
|
140
135
|
|
141
136
|
const downloadBinary = (downloadUrl, destination) => new Promise((resolve, reject) => (0, _https.get)(downloadUrl, response => {
|
142
|
-
var _response$statusCode2;
|
143
|
-
|
144
137
|
if (response.statusCode == 302) {
|
145
|
-
var _response$statusCode;
|
146
|
-
|
147
138
|
const {
|
148
139
|
location
|
149
140
|
} = response.headers;
|
150
|
-
if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${
|
141
|
+
if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
|
151
142
|
return resolve(downloadBinary(location, destination));
|
152
143
|
}
|
153
144
|
|
154
|
-
if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${
|
145
|
+
if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
|
155
146
|
const fileStream = (0, _fs.createWriteStream)(destination);
|
156
147
|
response.pipe(fileStream);
|
157
148
|
fileStream.on('finish', () => {
|
@@ -17,8 +17,6 @@ var _logger = require("../logger");
|
|
17
17
|
|
18
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
19
19
|
|
20
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
21
|
-
|
22
20
|
const testLevels = {
|
23
21
|
INFO: _chalk.default.green('PASS'),
|
24
22
|
WARN: _chalk.default.yellow('START'),
|
@@ -43,11 +41,7 @@ class CreeveyReporter extends _mocha.reporters.Base {
|
|
43
41
|
|
44
42
|
runner.on('test', test => testLogger.warn(_chalk.default.cyan(test.titlePath().join('/'))));
|
45
43
|
runner.on('pass', test => testLogger.info(_chalk.default.cyan(test.titlePath().join('/'))));
|
46
|
-
runner.on('fail', (test, error) => testLogger.error(_chalk.default.cyan(test.titlePath().join('/')), '\n ', getErrors(error, (error, imageName) => `${_chalk.default.bold(imageName
|
47
|
-
var _error$stack;
|
48
|
-
|
49
|
-
return `${(_error$stack = error.stack) !== null && _error$stack !== void 0 ? _error$stack : error.message}`;
|
50
|
-
}).join('\n ')));
|
44
|
+
runner.on('fail', (test, error) => testLogger.error(_chalk.default.cyan(test.titlePath().join('/')), '\n ', getErrors(error, (error, imageName) => `${_chalk.default.bold(imageName ?? topLevelSuite)}:${error}`, error => `${error.stack ?? error.message}`).join('\n ')));
|
51
45
|
}
|
52
46
|
|
53
47
|
}
|
@@ -57,20 +51,11 @@ exports.CreeveyReporter = CreeveyReporter;
|
|
57
51
|
class TeamcityReporter extends _mocha.reporters.Base {
|
58
52
|
constructor(runner, options) {
|
59
53
|
super(runner);
|
60
|
-
|
61
|
-
_defineProperty(this, "escape", str => {
|
62
|
-
if (!str) return '';
|
63
|
-
return str.toString() // eslint-disable-next-line no-control-regex
|
64
|
-
.replace(/\x1B.*?m/g, '').replace(/\|/g, '||').replace(/\n/g, '|n').replace(/\r/g, '|r').replace(/\[/g, '|[').replace(/\]/g, '|]').replace(/\u0085/g, '|x').replace(/\u2028/g, '|l').replace(/\u2029/g, '|p').replace(/'/g, "|'");
|
65
|
-
});
|
66
|
-
|
67
54
|
const topLevelSuite = this.escape(options.reporterOptions.topLevelSuite);
|
68
55
|
const reporterOptions = options.reporterOptions;
|
69
56
|
runner.on('suite', suite => suite.root ? console.log(`##teamcity[testSuiteStarted name='${topLevelSuite}' flowId='${process.pid}']`) : console.log(`##teamcity[testSuiteStarted name='${this.escape(suite.title)}' flowId='${process.pid}']`));
|
70
57
|
runner.on('test', test => console.log(`##teamcity[testStarted name='${this.escape(test.title)}' flowId='${process.pid}']`));
|
71
58
|
runner.on('fail', (test, error) => {
|
72
|
-
var _error$stack2;
|
73
|
-
|
74
59
|
Object.entries(reporterOptions.images).forEach(([name, image]) => {
|
75
60
|
if (!image) return;
|
76
61
|
const filePath = test.titlePath().concat(name == topLevelSuite ? [] : [topLevelSuite]).map(this.escape).join('/'); // eslint-disable-next-line @typescript-eslint/no-unused-vars
|
@@ -86,7 +71,7 @@ class TeamcityReporter extends _mocha.reporters.Base {
|
|
86
71
|
}); // Output failed test as passed due TC don't support retry mechanic
|
87
72
|
// https://teamcity-support.jetbrains.com/hc/en-us/community/posts/207216829-Count-test-as-successful-if-at-least-one-try-is-successful?page=1#community_comment_207394125
|
88
73
|
|
89
|
-
reporterOptions.willRetry ? console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`) : console.log(`##teamcity[testFailed name='${this.escape(test.title)}' message='${this.escape(error.message)}' details='${this.escape(
|
74
|
+
reporterOptions.willRetry ? console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`) : console.log(`##teamcity[testFailed name='${this.escape(test.title)}' message='${this.escape(error.message)}' details='${this.escape(error.stack ?? '')}' flowId='${process.pid}']`);
|
90
75
|
});
|
91
76
|
runner.on('pending', test => console.log(`##teamcity[testIgnored name='${this.escape(test.title)}' message='${this.escape(typeof test.skipReason == 'boolean' ? test.title : test.skipReason)}' flowId='${process.pid}']`));
|
92
77
|
runner.on('test end', test => console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`));
|
@@ -94,6 +79,11 @@ class TeamcityReporter extends _mocha.reporters.Base {
|
|
94
79
|
runner.on('end', () => console.log(`##teamcity[testSuiteFinished name='${topLevelSuite}' flowId='${process.pid}']`));
|
95
80
|
}
|
96
81
|
|
82
|
+
escape = str => {
|
83
|
+
if (!str) return '';
|
84
|
+
return str.toString() // eslint-disable-next-line no-control-regex
|
85
|
+
.replace(/\x1B.*?m/g, '').replace(/\|/g, '||').replace(/\n/g, '|n').replace(/\r/g, '|r').replace(/\[/g, '|[').replace(/\]/g, '|]').replace(/\u0085/g, '|x').replace(/\u2028/g, '|l').replace(/\u2029/g, '|p').replace(/'/g, "|'");
|
86
|
+
};
|
97
87
|
}
|
98
88
|
|
99
89
|
exports.TeamcityReporter = TeamcityReporter;
|
@@ -110,9 +100,7 @@ function getErrors(error, imageErrorToString, errorToString) {
|
|
110
100
|
} else {
|
111
101
|
const imageErrors = error.images;
|
112
102
|
Object.keys(imageErrors).forEach(imageName => {
|
113
|
-
|
114
|
-
|
115
|
-
errors.push(imageErrorToString((_imageErrors$imageNam = imageErrors[imageName]) !== null && _imageErrors$imageNam !== void 0 ? _imageErrors$imageNam : '', imageName));
|
103
|
+
errors.push(imageErrorToString(imageErrors[imageName] ?? '', imageName));
|
116
104
|
});
|
117
105
|
}
|
118
106
|
|