creevey 0.9.0-beta.1 → 0.9.0-non-webpack.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AUTHORS +15 -15
- package/CHANGELOG.md +1275 -1275
- package/LICENSE +21 -21
- package/README.md +7 -0
- package/addon/README.md +3 -0
- package/addon/package.json +4 -0
- package/docs/config.md +212 -212
- package/docs/grid.md +10 -10
- package/docs/tests.md +63 -63
- package/jest.config.js +6 -0
- package/lib/cjs/cli.js +5 -0
- package/lib/cjs/client/addon/Manager.js +418 -0
- package/lib/cjs/client/addon/components/Addon.js +76 -0
- package/lib/cjs/client/addon/components/Icons.js +42 -0
- package/lib/cjs/client/addon/components/Panel.js +68 -0
- package/lib/cjs/client/addon/components/TestSelect.js +63 -0
- package/lib/cjs/client/addon/components/Tools.js +114 -0
- package/lib/cjs/client/addon/decorator.js +11 -0
- package/lib/cjs/client/addon/index.js +31 -0
- package/lib/cjs/client/addon/preset.js +81 -0
- package/lib/cjs/client/addon/readyForCapture.js +12 -0
- package/lib/cjs/client/addon/register.js +100 -0
- package/lib/cjs/client/addon/utils.js +38 -0
- package/lib/cjs/client/addon/withCreevey.js +558 -0
- package/lib/cjs/client/shared/components/ImagesView/BlendView.js +85 -0
- package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +88 -0
- package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +176 -0
- package/lib/cjs/client/shared/components/ImagesView/SlideView.js +179 -0
- package/lib/cjs/client/shared/components/ImagesView/SwapView.js +110 -0
- package/lib/cjs/client/shared/components/ImagesView/index.js +45 -0
- package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +46 -0
- package/lib/cjs/client/shared/components/PageFooter/Paging.js +98 -0
- package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +78 -0
- package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +144 -0
- package/lib/cjs/client/shared/components/ResultsPage.js +173 -0
- package/lib/cjs/client/shared/creeveyClientApi.js +107 -0
- package/lib/cjs/client/shared/helpers.js +482 -0
- package/lib/cjs/client/shared/viewMode.js +17 -0
- 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/index.html +19 -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 +69 -0
- package/lib/cjs/index.js +62 -0
- package/lib/cjs/server/config.js +96 -0
- package/lib/cjs/server/docker.js +146 -0
- package/lib/cjs/server/extract.js +50 -0
- package/lib/cjs/server/index.js +83 -0
- package/lib/cjs/server/loaders/babel/creevey-plugin.js +86 -0
- package/lib/cjs/server/loaders/babel/helpers.js +469 -0
- package/lib/cjs/server/loaders/babel/register.js +124 -0
- package/lib/cjs/server/loaders/hooks/mdx.js +30 -0
- package/lib/cjs/server/loaders/hooks/svelte.js +65 -0
- package/lib/cjs/server/loaders/webpack/compile.js +293 -0
- package/lib/cjs/server/loaders/webpack/creevey-loader.js +179 -0
- package/lib/cjs/server/loaders/webpack/dummy-hmr.js +39 -0
- package/lib/cjs/server/loaders/webpack/mdx-loader.js +72 -0
- package/lib/cjs/server/loaders/webpack/start.js +41 -0
- package/lib/cjs/server/logger.js +48 -0
- package/lib/cjs/server/master/api.js +71 -0
- package/lib/cjs/server/master/index.js +146 -0
- package/lib/cjs/server/master/master.js +57 -0
- package/lib/cjs/server/master/pool.js +197 -0
- package/lib/cjs/server/master/runner.js +281 -0
- package/lib/cjs/server/master/server.js +129 -0
- package/lib/cjs/server/messages.js +264 -0
- package/lib/cjs/server/selenium/browser.js +672 -0
- package/lib/cjs/server/selenium/index.js +31 -0
- package/lib/cjs/server/selenium/selenoid.js +172 -0
- package/lib/cjs/server/stories.js +159 -0
- package/lib/cjs/server/storybook/entry.js +70 -0
- package/lib/cjs/server/storybook/helpers.js +159 -0
- package/lib/cjs/server/storybook/providers/browser.js +74 -0
- package/lib/cjs/server/storybook/providers/hybrid.js +84 -0
- package/lib/cjs/server/storybook/providers/nodejs.js +239 -0
- package/lib/cjs/server/testsFiles/parser.js +72 -0
- package/lib/cjs/server/testsFiles/register.js +48 -0
- package/lib/cjs/server/update.js +79 -0
- package/lib/cjs/server/utils.js +183 -0
- package/lib/cjs/server/worker/chai-image.js +142 -0
- package/lib/cjs/server/worker/helpers.js +69 -0
- package/lib/cjs/server/worker/index.js +15 -0
- package/lib/cjs/server/worker/reporter.js +108 -0
- package/lib/cjs/server/worker/worker.js +268 -0
- package/lib/cjs/shared/index.js +89 -0
- package/lib/cjs/shared/serializeRegExp.js +41 -0
- package/lib/cjs/types.js +74 -0
- package/lib/esm/cli.js +4 -0
- package/lib/esm/client/addon/Manager.js +402 -0
- package/lib/esm/client/addon/components/Addon.js +58 -0
- package/lib/esm/client/addon/components/Icons.js +27 -0
- package/lib/esm/client/addon/components/Panel.js +49 -0
- package/lib/esm/client/addon/components/TestSelect.js +49 -0
- package/lib/esm/client/addon/components/Tools.js +91 -0
- package/lib/esm/client/addon/decorator.js +2 -0
- package/lib/esm/client/addon/index.js +2 -0
- package/lib/esm/client/addon/preset.js +56 -0
- package/lib/esm/client/addon/readyForCapture.js +5 -0
- package/lib/esm/client/addon/register.js +79 -0
- package/lib/esm/client/addon/utils.js +31 -0
- package/lib/esm/client/addon/withCreevey.js +534 -0
- package/lib/esm/client/shared/components/ImagesView/BlendView.js +63 -0
- package/lib/esm/client/shared/components/ImagesView/ImagesView.js +65 -0
- package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +151 -0
- package/lib/esm/client/shared/components/ImagesView/SlideView.js +154 -0
- package/lib/esm/client/shared/components/ImagesView/SwapView.js +88 -0
- package/lib/esm/client/shared/components/ImagesView/index.js +5 -0
- package/lib/esm/client/shared/components/PageFooter/PageFooter.js +32 -0
- package/lib/esm/client/shared/components/PageFooter/Paging.js +84 -0
- package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +64 -0
- package/lib/esm/client/shared/components/PageHeader/PageHeader.js +120 -0
- package/lib/esm/client/shared/components/ResultsPage.js +143 -0
- package/lib/esm/client/shared/creeveyClientApi.js +98 -0
- package/lib/esm/client/shared/helpers.js +424 -0
- package/lib/esm/client/shared/viewMode.js +6 -0
- package/lib/esm/creevey.js +54 -0
- package/lib/esm/index.js +5 -0
- package/lib/esm/server/config.js +73 -0
- package/lib/esm/server/docker.js +123 -0
- package/lib/esm/server/extract.js +34 -0
- package/lib/esm/server/index.js +64 -0
- package/lib/esm/server/loaders/babel/creevey-plugin.js +72 -0
- package/lib/esm/server/loaders/babel/helpers.js +452 -0
- package/lib/esm/server/loaders/babel/register.js +103 -0
- package/lib/esm/server/loaders/hooks/mdx.js +15 -0
- package/lib/esm/server/loaders/hooks/svelte.js +49 -0
- package/lib/esm/server/loaders/webpack/compile.js +270 -0
- package/lib/esm/server/loaders/webpack/creevey-loader.js +158 -0
- package/lib/esm/server/loaders/webpack/dummy-hmr.js +32 -0
- package/lib/esm/server/loaders/webpack/mdx-loader.js +58 -0
- package/lib/esm/server/loaders/webpack/start.js +27 -0
- package/lib/esm/server/logger.js +20 -0
- package/lib/esm/server/master/api.js +60 -0
- package/lib/esm/server/master/index.js +125 -0
- package/lib/esm/server/master/master.js +38 -0
- package/lib/esm/server/master/pool.js +176 -0
- package/lib/esm/server/master/runner.js +259 -0
- package/lib/esm/server/master/server.js +105 -0
- package/lib/esm/server/messages.js +232 -0
- package/lib/esm/server/selenium/browser.js +639 -0
- package/lib/esm/server/selenium/index.js +2 -0
- package/lib/esm/server/selenium/selenoid.js +149 -0
- package/lib/esm/server/stories.js +140 -0
- package/lib/esm/server/storybook/entry.js +46 -0
- package/lib/esm/server/storybook/helpers.js +98 -0
- package/lib/esm/server/storybook/providers/browser.js +60 -0
- package/lib/esm/server/storybook/providers/hybrid.js +64 -0
- package/lib/esm/server/storybook/providers/nodejs.js +217 -0
- package/lib/esm/server/testsFiles/parser.js +50 -0
- package/lib/esm/server/testsFiles/register.js +35 -0
- package/lib/esm/server/update.js +61 -0
- package/lib/esm/server/utils.js +142 -0
- package/lib/esm/server/worker/chai-image.js +130 -0
- package/lib/esm/server/worker/helpers.js +60 -0
- package/lib/esm/server/worker/index.js +1 -0
- package/lib/esm/server/worker/reporter.js +86 -0
- package/lib/esm/server/worker/worker.js +238 -0
- package/lib/esm/shared/index.js +66 -0
- package/lib/esm/shared/serializeRegExp.js +23 -0
- package/lib/esm/types.js +43 -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/readyForCapture.d.ts +6 -6
- 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 -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 +1 -4
- 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 +18 -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 +20 -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 +490 -489
- package/package.json +115 -102
- package/preset.js +9 -9
- package/types/babel__register.d.ts +1 -1
- package/types/chai.d.ts +12 -12
- package/types/event-source-polyfill.d.ts +6 -6
- package/types/mdx.d.ts +3 -2
- package/types/mocha.d.ts +20 -20
- package/types/png.d.ts +4 -4
- package/lib/cjs/client/web/1.js +0 -13
- package/lib/cjs/client/web/2.js +0 -1
- package/storybook-static/stories.json +0 -21
@@ -0,0 +1,65 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.addSvelteHook = void 0;
|
7
|
+
|
8
|
+
var _pirates = require("pirates");
|
9
|
+
|
10
|
+
var _logger = require("../../logger");
|
11
|
+
|
12
|
+
var _helpers = require("../../storybook/helpers");
|
13
|
+
|
14
|
+
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); }
|
15
|
+
|
16
|
+
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; }
|
17
|
+
|
18
|
+
const addSvelteHook = async getStory => {
|
19
|
+
const {
|
20
|
+
compile,
|
21
|
+
preprocess
|
22
|
+
} = await Promise.resolve(`${(0, _helpers.resolveFromStorybook)('svelte/compiler')}`).then(s => _interopRequireWildcard(require(s)));
|
23
|
+
const {
|
24
|
+
default: svelteCSFLoader
|
25
|
+
} = await Promise.resolve(`${(0, _helpers.resolveFromStorybook)('@storybook/addon-svelte-csf/dist/cjs/parser/svelte-stories-loader')}`).then(s => _interopRequireWildcard(require(s)));
|
26
|
+
(0, _pirates.addHook)((code, filename) => {
|
27
|
+
var _options$compilerOpti;
|
28
|
+
|
29
|
+
const story = getStory();
|
30
|
+
const config = _helpers.storybookConfigRef.current;
|
31
|
+
const {
|
32
|
+
svelteOptions: options = {}
|
33
|
+
} = config; // NOTE: Copy-paste compiling code from https://github.com/sveltejs/svelte-loader/blob/3c4d66d/index.js
|
34
|
+
|
35
|
+
const compileOptions = {
|
36
|
+
filename,
|
37
|
+
css: false,
|
38
|
+
...options.compilerOptions,
|
39
|
+
format: ((_options$compilerOpti = options.compilerOptions) === null || _options$compilerOpti === void 0 ? void 0 : _options$compilerOpti.format) || 'esm'
|
40
|
+
}; // TODO Can't use preprocess here because it async and hook must be sync
|
41
|
+
// The only way to fix it, load stories by using `import()` instead of require
|
42
|
+
// And write native nodejs `.svelte` resolver https://nodejs.org/api/esm.html#esm_resolve_specifier_context_defaultresolve
|
43
|
+
// const processed = await preprocess(code, options.preprocess, { filename });
|
44
|
+
|
45
|
+
void preprocess;
|
46
|
+
const {
|
47
|
+
js: {
|
48
|
+
code: compiledCode
|
49
|
+
},
|
50
|
+
warnings
|
51
|
+
} = compile(code, compileOptions);
|
52
|
+
warnings.forEach(warning => _logger.logger.warn(warning));
|
53
|
+
if (!story || !filename.startsWith(story)) return compiledCode;
|
54
|
+
return svelteCSFLoader.call({
|
55
|
+
_module: {
|
56
|
+
resource: filename
|
57
|
+
}
|
58
|
+
}, compiledCode); // TODO Extract parameters from `create_fragment` that created by compiler
|
59
|
+
// TODO Write babel transformation for it
|
60
|
+
}, {
|
61
|
+
exts: ['.svelte']
|
62
|
+
});
|
63
|
+
};
|
64
|
+
|
65
|
+
exports.addSvelteHook = addSvelteHook;
|
@@ -0,0 +1,293 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = compile;
|
7
|
+
|
8
|
+
var _fs = require("fs");
|
9
|
+
|
10
|
+
var _path = _interopRequireDefault(require("path"));
|
11
|
+
|
12
|
+
var _webpack = _interopRequireDefault(require("webpack"));
|
13
|
+
|
14
|
+
var _webpackNodeExternals = _interopRequireDefault(require("webpack-node-externals"));
|
15
|
+
|
16
|
+
var _utils = require("../../utils");
|
17
|
+
|
18
|
+
var _helpers = require("../../storybook/helpers");
|
19
|
+
|
20
|
+
var _types = require("../../../types");
|
21
|
+
|
22
|
+
var _messages = require("../../messages");
|
23
|
+
|
24
|
+
var _logger = require("../../logger");
|
25
|
+
|
26
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
27
|
+
|
28
|
+
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); }
|
29
|
+
|
30
|
+
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; }
|
31
|
+
|
32
|
+
let isInitiated = false;
|
33
|
+
let dumpStats = _types.noop;
|
34
|
+
|
35
|
+
function handleWebpackBuild(error, stats) {
|
36
|
+
var _stats$toJson$warning;
|
37
|
+
|
38
|
+
dumpStats(stats);
|
39
|
+
|
40
|
+
if (error || !stats || stats.hasErrors()) {
|
41
|
+
(0, _messages.emitWebpackMessage)({
|
42
|
+
type: isInitiated ? 'rebuild failed' : 'fail'
|
43
|
+
});
|
44
|
+
console.error('=> Failed to build the Storybook preview bundle');
|
45
|
+
if (error) return console.error(error.message);
|
46
|
+
|
47
|
+
if (stats && (stats.hasErrors() || stats.hasWarnings())) {
|
48
|
+
var _statsJson$errors, _statsJson$warnings;
|
49
|
+
|
50
|
+
const statsJson = stats.toJson();
|
51
|
+
(_statsJson$errors = statsJson.errors) === null || _statsJson$errors === void 0 ? void 0 : _statsJson$errors.forEach(e => console.error(e));
|
52
|
+
(_statsJson$warnings = statsJson.warnings) === null || _statsJson$warnings === void 0 ? void 0 : _statsJson$warnings.forEach(e => console.error(e));
|
53
|
+
return;
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
stats === null || stats === void 0 ? void 0 : (_stats$toJson$warning = stats.toJson().warnings) === null || _stats$toJson$warning === void 0 ? void 0 : _stats$toJson$warning.forEach(e => console.warn(e));
|
58
|
+
|
59
|
+
if (!isInitiated) {
|
60
|
+
isInitiated = true;
|
61
|
+
(0, _messages.emitWebpackMessage)({
|
62
|
+
type: 'success'
|
63
|
+
});
|
64
|
+
} else {
|
65
|
+
(0, _messages.emitWebpackMessage)({
|
66
|
+
type: 'rebuild succeeded'
|
67
|
+
});
|
68
|
+
}
|
69
|
+
|
70
|
+
return;
|
71
|
+
}
|
72
|
+
|
73
|
+
async function applyMdxLoader(config, areAddonsRemoved, loader) {
|
74
|
+
const {
|
75
|
+
mdxLoaders
|
76
|
+
} = await Promise.resolve().then(() => _interopRequireWildcard(require('./mdx-loader')));
|
77
|
+
mdxLoaders.splice(1, 0, loader);
|
78
|
+
const mdxRegexps = (0, _helpers.isStorybookVersionLessThan)(6, 2) ? [/\.(stories|story).mdx$/, /\.(stories|story)\.mdx$/] : [/(stories|story)\.mdx$/]; // NOTE replace md/mdx to null loader
|
79
|
+
|
80
|
+
const mdRegexps = [/\.md$/, /\.mdx$/];
|
81
|
+
|
82
|
+
if (areAddonsRemoved) {
|
83
|
+
var _config$module2, _config$module2$rules;
|
84
|
+
|
85
|
+
mdRegexps.forEach(test => {
|
86
|
+
var _config$module, _config$module$rules;
|
87
|
+
|
88
|
+
return (_config$module = config.module) === null || _config$module === void 0 ? void 0 : (_config$module$rules = _config$module.rules) === null || _config$module$rules === void 0 ? void 0 : _config$module$rules.unshift({
|
89
|
+
test,
|
90
|
+
exclude: /(stories|story)\.mdx$/,
|
91
|
+
use: require.resolve('null-loader')
|
92
|
+
});
|
93
|
+
});
|
94
|
+
(_config$module2 = config.module) === null || _config$module2 === void 0 ? void 0 : (_config$module2$rules = _config$module2.rules) === null || _config$module2$rules === void 0 ? void 0 : _config$module2$rules.unshift({
|
95
|
+
test: /(stories|story)\.mdx$/,
|
96
|
+
use: mdxLoaders
|
97
|
+
});
|
98
|
+
} else {
|
99
|
+
var _config$module3, _config$module3$rules, _config$module4, _config$module4$rules, _config$module5, _config$module5$rules;
|
100
|
+
|
101
|
+
// NOTE Exclude addons' entry points
|
102
|
+
config.entry = Array.isArray(config.entry) ? config.entry.filter(entry => !/@storybook(\/|\\)addon/.test(entry)) : config.entry;
|
103
|
+
(_config$module3 = config.module) === null || _config$module3 === void 0 ? void 0 : (_config$module3$rules = _config$module3.rules) === null || _config$module3$rules === void 0 ? void 0 : _config$module3$rules.flatMap(rule => typeof rule == 'object' && 'test' in rule ? rule : []).filter(rule => mdRegexps.some(test => {
|
104
|
+
var _rule$test;
|
105
|
+
|
106
|
+
return ((_rule$test = rule.test) === null || _rule$test === void 0 ? void 0 : _rule$test.toString()) == test.toString();
|
107
|
+
})).forEach(rule => rule.use = require.resolve('null-loader'));
|
108
|
+
(_config$module4 = config.module) === null || _config$module4 === void 0 ? void 0 : (_config$module4$rules = _config$module4.rules) === null || _config$module4$rules === void 0 ? void 0 : _config$module4$rules.flatMap(rule => typeof rule == 'object' && 'test' in rule ? rule : []).filter(rule => mdxRegexps.some(test => {
|
109
|
+
var _rule$test2;
|
110
|
+
|
111
|
+
return ((_rule$test2 = rule.test) === null || _rule$test2 === void 0 ? void 0 : _rule$test2.toString()) == test.toString();
|
112
|
+
})).forEach(rule => rule.use = mdxLoaders); // NOTE Exclude source-loader
|
113
|
+
|
114
|
+
config.module = { ...config.module,
|
115
|
+
rules: ((_config$module5 = config.module) === null || _config$module5 === void 0 ? void 0 : (_config$module5$rules = _config$module5.rules) === null || _config$module5$rules === void 0 ? void 0 : _config$module5$rules.flatMap(rule => typeof rule == 'object' && 'test' in rule ? rule : []).filter(rule => !(typeof rule.loader == 'string' && /@storybook(\/|\\)source-loader/.test(rule.loader)))) ?? []
|
116
|
+
};
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
120
|
+
async function getWebpackConfigForStorybook_pre6_2(framework, configDir, outputDir) {
|
121
|
+
const {
|
122
|
+
default: storybookFrameworkOptions
|
123
|
+
} = await Promise.resolve(`${(0, _helpers.resolveFromStorybook)(`@storybook/${framework}/dist/server/options`)}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line node/no-missing-import, @typescript-eslint/no-unsafe-assignment, import/no-unresolved
|
124
|
+
|
125
|
+
const {
|
126
|
+
default: getConfig
|
127
|
+
} = await Promise.resolve(`${(0, _helpers.resolveFromStorybook)('@storybook/core/dist/server/config')}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call
|
128
|
+
|
129
|
+
return getConfig({
|
130
|
+
// NOTE: 6.1 storybook don't support quite any more. But we still have older versions
|
131
|
+
quiet: true,
|
132
|
+
configType: 'PRODUCTION',
|
133
|
+
outputDir,
|
134
|
+
cache: {},
|
135
|
+
// eslint-disable-next-line node/no-missing-require
|
136
|
+
corePresets: [(0, _helpers.resolveFromStorybook)('@storybook/core/dist/server/preview/preview-preset')],
|
137
|
+
overridePresets: [...((0, _helpers.hasDocsAddon)() ? [require.resolve('./mdx-loader')] : []), // eslint-disable-next-line node/no-missing-require
|
138
|
+
(0, _helpers.resolveFromStorybook)('@storybook/core/dist/server/preview/custom-webpack-preset')],
|
139
|
+
...storybookFrameworkOptions,
|
140
|
+
configDir
|
141
|
+
});
|
142
|
+
}
|
143
|
+
|
144
|
+
async function getWebpackConfigForStorybook_6_2(framework, configDir, outputDir) {
|
145
|
+
const {
|
146
|
+
default: storybookFrameworkOptions
|
147
|
+
} = await Promise.resolve(`${(0, _helpers.resolveFromStorybook)(`@storybook/${framework}/dist/cjs/server/options`)}`).then(s => _interopRequireWildcard(require(s)));
|
148
|
+
const options = {
|
149
|
+
quiet: true,
|
150
|
+
configType: 'PRODUCTION',
|
151
|
+
outputDir,
|
152
|
+
configDir,
|
153
|
+
...storybookFrameworkOptions
|
154
|
+
}; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
155
|
+
|
156
|
+
const {
|
157
|
+
getPreviewBuilder
|
158
|
+
} = await Promise.resolve(`${(0, _helpers.resolveFromStorybook)('@storybook/core-server/dist/cjs/utils/get-preview-builder')}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
159
|
+
|
160
|
+
const {
|
161
|
+
loadAllPresets
|
162
|
+
} = await Promise.resolve(`${(0, _helpers.resolveFromStorybook)('@storybook/core-common')}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
163
|
+
|
164
|
+
const builder = await getPreviewBuilder(configDir); // NOTE: Copy-paste from storybook/lib/core-server/src/build-dev.ts
|
165
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
166
|
+
|
167
|
+
const presets = loadAllPresets({
|
168
|
+
corePresets: [// eslint-disable-next-line node/no-missing-require
|
169
|
+
(0, _helpers.resolveFromStorybook)('@storybook/core-server/dist/cjs/presets/common-preset'), // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
170
|
+
...builder.corePresets, // eslint-disable-next-line node/no-missing-require
|
171
|
+
(0, _helpers.resolveFromStorybook)('@storybook/core-server/dist/cjs/presets/babel-cache-preset')],
|
172
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
173
|
+
overridePresets: [...((0, _helpers.hasDocsAddon)() ? [require.resolve('./mdx-loader')] : []), // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
174
|
+
...builder.overridePresets],
|
175
|
+
...options
|
176
|
+
}); // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment
|
177
|
+
|
178
|
+
return builder.getConfig({ ...options,
|
179
|
+
presets
|
180
|
+
});
|
181
|
+
}
|
182
|
+
|
183
|
+
async function removeAddons() {
|
184
|
+
try {
|
185
|
+
var _config$core;
|
186
|
+
|
187
|
+
const config = await (0, _helpers.importStorybookConfig)();
|
188
|
+
|
189
|
+
if (((_config$core = config.core) === null || _config$core === void 0 ? void 0 : _config$core.builder) == 'webpack5') {
|
190
|
+
_logger.logger.warn("Be aware Creevey doesn't fully support webpack@5, some feature might not work well");
|
191
|
+
}
|
192
|
+
|
193
|
+
if (config.addons && config.stories) {
|
194
|
+
config.addons = [];
|
195
|
+
return true;
|
196
|
+
}
|
197
|
+
} catch (_) {
|
198
|
+
/* noop */
|
199
|
+
}
|
200
|
+
|
201
|
+
return false;
|
202
|
+
}
|
203
|
+
|
204
|
+
async function compile(config, {
|
205
|
+
debug,
|
206
|
+
ui
|
207
|
+
}) {
|
208
|
+
var _storybookWebpackConf, _storybookWebpackConf2, _storybookWebpackConf3, _extensions$map, _storybookWebpackConf4, _storybookWebpackConf5;
|
209
|
+
|
210
|
+
const storybookFramework = (0, _helpers.getStorybookFramework)();
|
211
|
+
|
212
|
+
const outputDir = _path.default.join((0, _utils.getCreeveyCache)(), 'storybook');
|
213
|
+
|
214
|
+
try {
|
215
|
+
(0, _fs.rmdirSync)(outputDir, {
|
216
|
+
recursive: true
|
217
|
+
});
|
218
|
+
} catch (_) {
|
219
|
+
/* noop */
|
220
|
+
}
|
221
|
+
|
222
|
+
const creeveyLoader = {
|
223
|
+
loader: require.resolve('./creevey-loader'),
|
224
|
+
options: {
|
225
|
+
debug,
|
226
|
+
storybookDir: config.storybookDir
|
227
|
+
}
|
228
|
+
};
|
229
|
+
process.env.NODE_ENV = 'production'; // NOTE Remove addons by monkey patching, only for new config file (main.js)
|
230
|
+
|
231
|
+
const areAddonsRemoved = await removeAddons();
|
232
|
+
const getWebpackConfig = (0, _helpers.isStorybookVersionLessThan)(6, 2) ? getWebpackConfigForStorybook_pre6_2 : getWebpackConfigForStorybook_6_2;
|
233
|
+
const storybookWebpackConfig = await getWebpackConfig(storybookFramework, config.storybookDir, outputDir);
|
234
|
+
const extensions = ((_storybookWebpackConf = storybookWebpackConfig.resolve) === null || _storybookWebpackConf === void 0 ? void 0 : _storybookWebpackConf.extensions) ?? _utils.extensions;
|
235
|
+
delete storybookWebpackConfig.optimization;
|
236
|
+
storybookWebpackConfig.devtool = false;
|
237
|
+
storybookWebpackConfig.performance = false;
|
238
|
+
storybookWebpackConfig.profile = debug;
|
239
|
+
storybookWebpackConfig.mode = 'development';
|
240
|
+
storybookWebpackConfig.target = 'node';
|
241
|
+
storybookWebpackConfig.output = { ...storybookWebpackConfig.output,
|
242
|
+
filename: 'main.js'
|
243
|
+
}; // NOTE Add hack to allow stories HMR work in nodejs
|
244
|
+
|
245
|
+
Array.isArray(storybookWebpackConfig.entry) && storybookWebpackConfig.entry.unshift(require.resolve('./dummy-hmr')); // NOTE apply creevey loader to output from mdx loader
|
246
|
+
|
247
|
+
if ((0, _helpers.hasDocsAddon)()) await applyMdxLoader(storybookWebpackConfig, areAddonsRemoved, creeveyLoader); // NOTE Add creevey-loader to cut off all unnecessary code except stories meta and tests
|
248
|
+
|
249
|
+
(_storybookWebpackConf2 = storybookWebpackConfig.module) === null || _storybookWebpackConf2 === void 0 ? void 0 : (_storybookWebpackConf3 = _storybookWebpackConf2.rules) === null || _storybookWebpackConf3 === void 0 ? void 0 : _storybookWebpackConf3.unshift({
|
250
|
+
enforce: 'pre',
|
251
|
+
test: new RegExp(`\\.(${(_extensions$map = extensions.map(x => x.slice(1))) === null || _extensions$map === void 0 ? void 0 : _extensions$map.join('|')})$`),
|
252
|
+
exclude: /node_modules/,
|
253
|
+
use: creeveyLoader
|
254
|
+
});
|
255
|
+
const aliases = ((_storybookWebpackConf4 = storybookWebpackConfig.resolve) === null || _storybookWebpackConf4 === void 0 ? void 0 : _storybookWebpackConf4.alias) ?? {};
|
256
|
+
const excluded = ['@storybook/addons', '@storybook/api', '@storybook/channel-postmessage', '@storybook/channels', '@storybook/client-api', '@storybook/client-logger', '@storybook/components', '@storybook/core-events', '@storybook/router', '@storybook/semver', '@storybook/theming']; // NOTE Exclude from bundle all modules from node_modules
|
257
|
+
|
258
|
+
storybookWebpackConfig.externals = [...(Array.isArray(aliases) ? aliases.map(({
|
259
|
+
name,
|
260
|
+
alias
|
261
|
+
}) => [name, alias]) : Object.entries(aliases)).filter(([alias]) => excluded.includes(alias)).flatMap(([, aliasPath]) => aliasPath == false ? [] : (Array.isArray(aliasPath) ? aliasPath : [aliasPath]).map(x => ({
|
262
|
+
[x]: `commonjs ${x}`
|
263
|
+
}))), // NOTE Replace `@storybook/${framework}` to ../../storybook.ts
|
264
|
+
{
|
265
|
+
[`@storybook/${storybookFramework}`]: `commonjs ${require.resolve('../../storybook/entry')}`
|
266
|
+
}, (0, _webpackNodeExternals.default)({
|
267
|
+
includeAbsolutePaths: true,
|
268
|
+
allowlist: /(webpack|dummy-hmr|generated-stories-entry|generated-config-entry|generated-other-entry)/
|
269
|
+
}), // TODO Don't work well with monorepos
|
270
|
+
(0, _webpackNodeExternals.default)({
|
271
|
+
modulesDir: (0, _helpers.resolveFromStorybook)('@storybook/core').split('@storybook')[0],
|
272
|
+
includeAbsolutePaths: true,
|
273
|
+
allowlist: /(webpack|dummy-hmr|generated-stories-entry|generated-config-entry|generated-other-entry)/
|
274
|
+
})]; // NOTE Exclude some plugins
|
275
|
+
|
276
|
+
const excludedPlugins = ['DocgenPlugin', 'ForkTsCheckerWebpackPlugin'];
|
277
|
+
storybookWebpackConfig.plugins = (_storybookWebpackConf5 = storybookWebpackConfig.plugins) === null || _storybookWebpackConf5 === void 0 ? void 0 : _storybookWebpackConf5.filter(plugin => !excludedPlugins.includes(plugin.constructor.name));
|
278
|
+
const storybookWebpackCompiler = (0, _webpack.default)(storybookWebpackConfig);
|
279
|
+
|
280
|
+
if (debug) {
|
281
|
+
dumpStats = stats => {
|
282
|
+
if (!stats) return;
|
283
|
+
(0, _fs.writeFile)(_path.default.join(config.reportDir, 'stats.json'), JSON.stringify(stats.toJson(), null, 2), _types.noop);
|
284
|
+
};
|
285
|
+
}
|
286
|
+
|
287
|
+
if (ui) {
|
288
|
+
const watcher = storybookWebpackCompiler.watch({}, handleWebpackBuild);
|
289
|
+
(0, _messages.subscribeOn)('shutdown', () => watcher.close(_types.noop));
|
290
|
+
} else {
|
291
|
+
storybookWebpackCompiler.run(handleWebpackBuild);
|
292
|
+
}
|
293
|
+
}
|
@@ -0,0 +1,179 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = loader;
|
7
|
+
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
9
|
+
|
10
|
+
var _codeFrame = require("@babel/code-frame");
|
11
|
+
|
12
|
+
var _loaderUtils = require("loader-utils");
|
13
|
+
|
14
|
+
var _schemaUtils = require("schema-utils");
|
15
|
+
|
16
|
+
var _parser = require("@babel/parser");
|
17
|
+
|
18
|
+
var _traverse = _interopRequireDefault(require("@babel/traverse"));
|
19
|
+
|
20
|
+
var _generator = _interopRequireDefault(require("@babel/generator"));
|
21
|
+
|
22
|
+
var _helpers = require("../../storybook/helpers");
|
23
|
+
|
24
|
+
var _helpers2 = require("../babel/helpers");
|
25
|
+
|
26
|
+
var _logger = require("../../logger");
|
27
|
+
|
28
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
29
|
+
|
30
|
+
function transform(ast) {
|
31
|
+
(0, _traverse.default)(ast, { ..._helpers2.commonVisitor,
|
32
|
+
...(fileType == _helpers2.FileType.Preview ? _helpers2.previewVisitor : undefined),
|
33
|
+
...(fileType == _helpers2.FileType.Story ? _helpers2.storyVisitor : undefined),
|
34
|
+
...(isMDX ? _helpers2.mdxVisitor : undefined)
|
35
|
+
}, undefined, {
|
36
|
+
resourcePath,
|
37
|
+
fileType,
|
38
|
+
isMDX,
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
40
|
+
visitedTopPaths: new Set(),
|
41
|
+
visitedBindings: new Set(),
|
42
|
+
reexportedStories
|
43
|
+
});
|
44
|
+
return (0, _generator.default)(ast, {
|
45
|
+
retainLines: true
|
46
|
+
}).code;
|
47
|
+
}
|
48
|
+
|
49
|
+
function toPosix(filePath) {
|
50
|
+
return filePath.split(_path.default.win32.sep).join(_path.default.posix.sep).replace(/^[a-z]:/i, '');
|
51
|
+
}
|
52
|
+
|
53
|
+
function getIssuerResource(context) {
|
54
|
+
var _context$_module, _context$_module$issu;
|
55
|
+
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return
|
57
|
+
return (_context$_module = context._module) === null || _context$_module === void 0 ? void 0 : (_context$_module$issu = _context$_module.issuer) === null || _context$_module$issu === void 0 ? void 0 : _context$_module$issu.resource;
|
58
|
+
}
|
59
|
+
|
60
|
+
function getIssuerConstructorName(context) {
|
61
|
+
var _context$_module2, _context$_module2$iss, _context$_module2$iss2;
|
62
|
+
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return
|
64
|
+
return (_context$_module2 = context._module) === null || _context$_module2 === void 0 ? void 0 : (_context$_module2$iss = _context$_module2.issuer) === null || _context$_module2$iss === void 0 ? void 0 : (_context$_module2$iss2 = _context$_module2$iss.constructor) === null || _context$_module2$iss2 === void 0 ? void 0 : _context$_module2$iss2.name;
|
65
|
+
}
|
66
|
+
|
67
|
+
function isEntry(context) {
|
68
|
+
return getIssuerConstructorName(context) == 'MultiModule';
|
69
|
+
}
|
70
|
+
|
71
|
+
function isPreview(context, options) {
|
72
|
+
const {
|
73
|
+
dir: resourceDir,
|
74
|
+
name: resourceName
|
75
|
+
} = _path.default.posix.parse(toPosix(context.resourcePath));
|
76
|
+
|
77
|
+
const storybookDir = typeof options.storybookDir == 'string' ? toPosix(options.storybookDir) : '';
|
78
|
+
const isConfigFile = resourceDir == storybookDir && (resourceName == 'preview' || resourceName == 'config');
|
79
|
+
|
80
|
+
if ((0, _helpers.isStorybookVersionLessThan)(6)) {
|
81
|
+
return isEntry(context) && isConfigFile;
|
82
|
+
}
|
83
|
+
|
84
|
+
const issuerResource = getIssuerResource(context);
|
85
|
+
return Boolean(issuerResource && entries.has(issuerResource) && isConfigFile);
|
86
|
+
}
|
87
|
+
|
88
|
+
function isStoryFile(context) {
|
89
|
+
var _reexportedStories$ge, _context$_module3;
|
90
|
+
|
91
|
+
const issuerResource = getIssuerResource(context);
|
92
|
+
return getIssuerConstructorName(context) == 'ContextModule' || // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
93
|
+
Boolean(issuerResource && ((_reexportedStories$ge = reexportedStories.get(issuerResource)) === null || _reexportedStories$ge === void 0 ? void 0 : _reexportedStories$ge.has((_context$_module3 = context._module) === null || _context$_module3 === void 0 ? void 0 : _context$_module3.rawRequest))) || issuerResource == previewPath && _path.default.posix.parse(toPosix(previewPath)).name == 'config';
|
94
|
+
} // NOTE: non-story files before preview => issuer.resource is entry
|
95
|
+
|
96
|
+
|
97
|
+
const schema = {
|
98
|
+
type: 'object',
|
99
|
+
properties: {
|
100
|
+
debug: {
|
101
|
+
type: 'boolean'
|
102
|
+
},
|
103
|
+
storybookDir: {
|
104
|
+
type: 'string'
|
105
|
+
}
|
106
|
+
}
|
107
|
+
};
|
108
|
+
let fileType = _helpers2.FileType.Invalid;
|
109
|
+
let isMDX = false;
|
110
|
+
let previewPath = '';
|
111
|
+
let resourcePath = '';
|
112
|
+
const entries = new Set();
|
113
|
+
const stories = new Set();
|
114
|
+
const reexportedStories = new Map();
|
115
|
+
|
116
|
+
const isTest = () => process.env.__CREEVEY_ENV__ == 'test';
|
117
|
+
|
118
|
+
const defaultOptions = {
|
119
|
+
get debug() {
|
120
|
+
return isTest();
|
121
|
+
},
|
122
|
+
|
123
|
+
storybookDir: process.cwd()
|
124
|
+
};
|
125
|
+
|
126
|
+
function loader(source) {
|
127
|
+
const options = this ? (0, _loaderUtils.getOptions)(this) || defaultOptions : defaultOptions;
|
128
|
+
(0, _schemaUtils.validate)(schema, options, {
|
129
|
+
name: 'Creevey Stories Loader'
|
130
|
+
});
|
131
|
+
fileType = _helpers2.FileType.Invalid;
|
132
|
+
|
133
|
+
if (this) {
|
134
|
+
const issuerResource = getIssuerResource(this);
|
135
|
+
resourcePath = this.resourcePath;
|
136
|
+
|
137
|
+
if (isStoryFile(this)) {
|
138
|
+
fileType = _helpers2.FileType.Story;
|
139
|
+
isMDX = _path.default.parse(resourcePath).ext == '.mdx';
|
140
|
+
stories.add(this.resourcePath);
|
141
|
+
} else if (isPreview(this, options)) {
|
142
|
+
fileType = _helpers2.FileType.Preview;
|
143
|
+
previewPath = this.resourcePath;
|
144
|
+
} else if (isEntry(this)) {
|
145
|
+
fileType = _helpers2.FileType.Entry;
|
146
|
+
entries.add(this.resourcePath);
|
147
|
+
return source;
|
148
|
+
} else if (issuerResource && stories.has(issuerResource) && options.debug) {
|
149
|
+
_logger.logger.warn('Trying to transform possible non-story file', this.resourcePath, 'Please check the', issuerResource); // TODO Add link to docs, how creevey works and what user should do in this situation
|
150
|
+
|
151
|
+
}
|
152
|
+
}
|
153
|
+
|
154
|
+
if (isTest() && !Number.isNaN(Number(process.env.CREEVEY_LOADER_FILE_TYPE))) {
|
155
|
+
fileType = Number(process.env.CREEVEY_LOADER_FILE_TYPE);
|
156
|
+
}
|
157
|
+
|
158
|
+
try {
|
159
|
+
const ast = (0, _parser.parse)(source, {
|
160
|
+
sourceType: 'module',
|
161
|
+
plugins: ['classProperties', 'decorators-legacy', 'jsx', 'typescript']
|
162
|
+
});
|
163
|
+
return transform(ast);
|
164
|
+
} catch (error) {
|
165
|
+
this && _logger.logger.warn('Failed to transform file', this.resourcePath);
|
166
|
+
|
167
|
+
if (typeof error == 'object' && error && 'loc' in error) {
|
168
|
+
_logger.logger.warn((0, _codeFrame.codeFrameColumns)(source, {
|
169
|
+
start: error.loc
|
170
|
+
}, {
|
171
|
+
highlightCode: true
|
172
|
+
}));
|
173
|
+
} else {
|
174
|
+
_logger.logger.warn(error);
|
175
|
+
}
|
176
|
+
|
177
|
+
return source;
|
178
|
+
}
|
179
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = void 0;
|
7
|
+
global.__CREEVEY_HMR_DATA__ = global.__CREEVEY_HMR_DATA__ ?? {};
|
8
|
+
Object.entries(__webpack_require__.m).forEach(([key, moduleFn]) => {
|
9
|
+
__webpack_require__.m[key] = new Proxy(moduleFn, {
|
10
|
+
apply(target, thisArg, args) {
|
11
|
+
const [module] = args;
|
12
|
+
const {
|
13
|
+
data
|
14
|
+
} = global.__CREEVEY_HMR_DATA__[module.i] = global.__CREEVEY_HMR_DATA__[module.i] ?? {
|
15
|
+
data: {}
|
16
|
+
};
|
17
|
+
Object.assign(module, {
|
18
|
+
hot: {
|
19
|
+
accept() {
|
20
|
+
/* noop */
|
21
|
+
},
|
22
|
+
|
23
|
+
get data() {
|
24
|
+
return data;
|
25
|
+
},
|
26
|
+
|
27
|
+
dispose(callback) {
|
28
|
+
global.__CREEVEY_HMR_DATA__[module.i].callback = callback;
|
29
|
+
}
|
30
|
+
|
31
|
+
}
|
32
|
+
});
|
33
|
+
return target.apply(thisArg, args);
|
34
|
+
}
|
35
|
+
|
36
|
+
});
|
37
|
+
});
|
38
|
+
var _default = {};
|
39
|
+
exports.default = _default;
|
@@ -0,0 +1,72 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.mdxOptions = exports.mdxLoaders = void 0;
|
7
|
+
exports.webpack = webpack;
|
8
|
+
|
9
|
+
var _helpers = require("../../storybook/helpers");
|
10
|
+
|
11
|
+
/* eslint-disable */
|
12
|
+
|
13
|
+
/* Copy-paste from storybook/addons/docs/src/frameworks/common/preset.ts */
|
14
|
+
let mdxLoaders = []; // for frameworks that are not working with react, we need to configure
|
15
|
+
// the jsx to transpile mdx, for now there will be a flag for that
|
16
|
+
// for more complex solutions we can find alone that we need to add '@babel/plugin-transform-react-jsx'
|
17
|
+
|
18
|
+
exports.mdxLoaders = mdxLoaders;
|
19
|
+
|
20
|
+
function createBabelOptions({
|
21
|
+
babelOptions,
|
22
|
+
mdxBabelOptions,
|
23
|
+
configureJSX
|
24
|
+
}) {
|
25
|
+
const babelPlugins = (mdxBabelOptions === null || mdxBabelOptions === void 0 ? void 0 : mdxBabelOptions.plugins) || (babelOptions === null || babelOptions === void 0 ? void 0 : babelOptions.plugins) || [];
|
26
|
+
const jsxPlugin = [(0, _helpers.resolveFromStorybookAddonDocs)('@babel/plugin-transform-react-jsx'), {
|
27
|
+
pragma: 'React.createElement',
|
28
|
+
pragmaFrag: 'React.Fragment'
|
29
|
+
}];
|
30
|
+
const plugins = configureJSX ? [...babelPlugins, jsxPlugin] : babelPlugins;
|
31
|
+
return {
|
32
|
+
// don't use the root babelrc by default (users can override this in mdxBabelOptions)
|
33
|
+
babelrc: false,
|
34
|
+
configFile: false,
|
35
|
+
...babelOptions,
|
36
|
+
...mdxBabelOptions,
|
37
|
+
plugins
|
38
|
+
};
|
39
|
+
}
|
40
|
+
|
41
|
+
const remarkPlugins = ['remark-slug', 'remark-external-links'].map(plugin => require((0, _helpers.resolveFromStorybookAddonDocs)(plugin)));
|
42
|
+
|
43
|
+
const createCompiler = require((0, _helpers.resolveFromStorybook)('@storybook/addon-docs/mdx-compiler-plugin'));
|
44
|
+
|
45
|
+
const mdxOptions = (options = {}) => ({
|
46
|
+
compilers: [createCompiler(options)],
|
47
|
+
remarkPlugins
|
48
|
+
});
|
49
|
+
|
50
|
+
exports.mdxOptions = mdxOptions;
|
51
|
+
|
52
|
+
function webpack(webpackConfig = {}, options = {}) {
|
53
|
+
// it will reuse babel options that are already in use in storybook
|
54
|
+
// also, these babel options are chained with other presets.
|
55
|
+
const {
|
56
|
+
babelOptions,
|
57
|
+
mdxBabelOptions,
|
58
|
+
configureJSX = true
|
59
|
+
} = options;
|
60
|
+
exports.mdxLoaders = mdxLoaders = [{
|
61
|
+
loader: (0, _helpers.isStorybookVersionLessThan)(6, 2) ? (0, _helpers.resolveFromStorybookCore)('babel-loader') : (0, _helpers.resolveFromStorybookBuilderWebpack4)('babel-loader'),
|
62
|
+
options: createBabelOptions({
|
63
|
+
babelOptions,
|
64
|
+
mdxBabelOptions,
|
65
|
+
configureJSX
|
66
|
+
})
|
67
|
+
}, {
|
68
|
+
loader: (0, _helpers.resolveFromStorybookAddonDocs)('@mdx-js/loader'),
|
69
|
+
options: mdxOptions(options)
|
70
|
+
}];
|
71
|
+
return webpackConfig;
|
72
|
+
}
|