storybook-addon-modernjs
Version:
Storybook addon for loading configuration of Modern.js
92 lines (88 loc) • 3.75 kB
JavaScript
import CJS_COMPAT_NODE_URL_c6040df813f9abe6 from 'node:url';
import CJS_COMPAT_NODE_PATH_c6040df813f9abe6 from 'node:path';
import CJS_COMPAT_NODE_MODULE_c6040df813f9abe6 from "node:module";
var __filename = CJS_COMPAT_NODE_URL_c6040df813f9abe6.fileURLToPath(import.meta.url);
var __dirname = CJS_COMPAT_NODE_PATH_c6040df813f9abe6.dirname(__filename);
var require = CJS_COMPAT_NODE_MODULE_c6040df813f9abe6.createRequire(import.meta.url);
// ------------------------------------------------------------
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
// ------------------------------------------------------------
var __require = /* @__PURE__ */ ((x) => typeof require < "u" ? require : typeof Proxy < "u" ? new Proxy(x, {
get: (a, b) => (typeof require < "u" ? require : a)[b]
}) : x)(function(x) {
if (typeof require < "u") return require.apply(this, arguments);
throw Error('Dynamic require of "' + x + '" is not supported');
});
// src/preset.ts
import {
builderPluginAdapterBasic,
builderPluginAdapterHooks,
parseRspackConfig as parseToRsbuildConfig
} from "@modern-js/app-tools/builder";
import { mergeRsbuildConfig } from "@rsbuild/core";
import findUp from "find-up";
import { logger } from "rslog";
var MODERN_META_NAME = "modern-js", MODERN_CONFIG_FILE = "modern.config.ts", loadCreateStorybookOptions = async () => {
try {
return (await import("@modern-js/plugin/cli")).createStorybookOptions;
} catch {
try {
return (await import("@modern-js/plugin-v2/cli")).createStorybookOptions;
} catch {
throw new Error(
"Cannot resolve Modern.js Storybook plugin entry. Install @modern-js/app-tools@^3 with @modern-js/plugin, or @modern-js/app-tools@^2 with @modern-js/plugin-v2, then retry."
);
}
}
}, PKG_NAME = "@rsbuild/core", getVersion = async (cwd) => {
let pkgPath = await findUp("package.json", { cwd }), pkg = __require(pkgPath);
return pkg.name === PKG_NAME ? pkg.version : pkg.dependencies[PKG_NAME] || pkg.devDependencies[PKG_NAME];
}, checkDependency = async () => {
let projectVersion = await getVersion(process.cwd()), recommandVersion = await getVersion(
__require.resolve("@modern-js/app-tools")
), installedVersion = await getVersion(__require.resolve("@rsbuild/core"));
if (!projectVersion) {
logger.error(
`Missing required dependency @rsbuild/core, please install @rsbuild/core@${recommandVersion}`
);
return;
}
recommandVersion !== installedVersion && logger.warn(
`@rsbuild/core version mismatch: expected ${recommandVersion}, got ${installedVersion}. Please install @rsbuild/core@${recommandVersion}`
);
}, rsbuildFinal = async (config, options) => {
await checkDependency();
let cwd = process.cwd(), createStorybookOptions = await loadCreateStorybookOptions(), { config: resolveConfig, getAppContext } = await createStorybookOptions({
cwd,
configFile: options.configPath || MODERN_CONFIG_FILE,
metaName: MODERN_META_NAME
}), nonStandardConfig = {
...resolveConfig,
plugins: [resolveConfig.builderPlugins]
}, { rsbuildConfig, rsbuildPlugins } = await parseToRsbuildConfig(
nonStandardConfig,
{
cwd
}
), adapterParams = {
appContext: getAppContext(),
normalizedConfig: resolveConfig
};
if (rsbuildConfig.plugins = [
...rsbuildPlugins,
...rsbuildConfig.plugins || [],
builderPluginAdapterBasic(adapterParams),
builderPluginAdapterHooks(adapterParams)
], rsbuildConfig.output)
for (let key of [
"distPath",
"assetPrefix",
"cleanDistPath",
"filename"
])
delete rsbuildConfig.output[key];
return mergeRsbuildConfig(config, rsbuildConfig);
};
export {
rsbuildFinal
};