@storybook/angular
Version:
Storybook for Angular: Develop, document, and test UI components in isolation
164 lines (157 loc) • 6.35 kB
JavaScript
import CJS_COMPAT_NODE_URL_xog8ymvv72 from 'node:url';
import CJS_COMPAT_NODE_PATH_xog8ymvv72 from 'node:path';
import CJS_COMPAT_NODE_MODULE_xog8ymvv72 from "node:module";
var __filename = CJS_COMPAT_NODE_URL_xog8ymvv72.fileURLToPath(import.meta.url);
var __dirname = CJS_COMPAT_NODE_PATH_xog8ymvv72.dirname(__filename);
var require = CJS_COMPAT_NODE_MODULE_xog8ymvv72.createRequire(import.meta.url);
// ------------------------------------------------------------
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
// ------------------------------------------------------------
// src/server/angular-cli-webpack.js
import { createRequire } from "node:module";
// src/server/plugins/storybook-normalize-angular-entry-plugin.js
var PLUGIN_NAME = "storybook-normalize-angular-entry-plugin", StorybookNormalizeAngularEntryPlugin = class {
constructor(options) {
this.options = options;
}
apply(compiler) {
compiler.hooks.environment.tap(PLUGIN_NAME, () => {
let originalEntry = compiler.options.entry;
compiler.options.entry = async () => {
let entryResult;
if (typeof originalEntry == "function")
try {
entryResult = await originalEntry();
} catch (error) {
throw console.error("Failed to execute the entry function:", error), error;
}
else
entryResult = originalEntry;
return entryResult && entryResult.main && entryResult.styles ? {
main: {
import: Array.from(
/* @__PURE__ */ new Set([...entryResult.main.import, ...entryResult.styles.import])
)
}
} : entryResult;
};
}), compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
this.compilation = compilation;
});
}
};
// src/server/utils/filter-out-styling-rules.ts
var isStylingRule = (rule) => {
let { test } = rule;
return !test || !(test instanceof RegExp) ? !1 : test.test(".css") || test.test(".scss") || test.test(".sass");
}, filterOutStylingRules = (config) => config.module.rules.filter((rule) => !isStylingRule(rule));
// src/server/angular-cli-webpack.js
var require2 = createRequire(import.meta.url), {
generateI18nBrowserWebpackConfigFromContext
} = require2("@angular-devkit/build-angular/src/utils/webpack-browser-config"), TsconfigPathsPlugin = require2("tsconfig-paths-webpack-plugin"), {
getCommonConfig,
getStylesConfig,
getDevServerConfig,
getTypeScriptConfig
} = require2("@angular-devkit/build-angular/src/tools/webpack/configs"), getWebpackConfig = async (baseConfig, { builderOptions, builderContext }) => {
async function getCustomStylesConfig(wco) {
let { root } = wco;
if ((() => {
try {
let output = import.meta.resolve("@tailwindcss/postcss", root);
return isAbsolute(output);
} catch {
return !1;
}
})()) {
let fs = require2("node:fs/promises"), originalReaddir = fs.readdir;
fs.readdir = async function(path, options) {
let results = await originalReaddir.call(this, path, options), tailwindFiles = [
"tailwind.config.js",
"tailwind.config.cjs",
"tailwind.config.mjs",
"tailwind.config.ts"
];
return results.filter((file) => !tailwindFiles.includes(file));
};
let styleConfig = await getStylesConfig(wco);
fs.readdir = originalReaddir;
let tailwindPackage = await import(import.meta.resolve("@tailwindcss/postcss", root)), extraPostcssPlugins = [
typeof tailwindPackage == "function" ? tailwindPackage() : tailwindPackage.default()
];
return styleConfig.module.rules.map((rule) => rule.rules).forEach((rule) => {
rule.forEach((r) => {
r.oneOf?.forEach?.((oneOfRule) => oneOfRule.use.forEach((use) => {
if (use.loader.includes("postcss-loader") && use.options.postcssOptions) {
let originalOptionsFn = use.options.postcssOptions;
use.options.postcssOptions = (loaderOptions) => {
let originalOptions = originalOptionsFn(loaderOptions);
return {
...originalOptions,
plugins: [...originalOptions.plugins, ...extraPostcssPlugins]
};
};
}
}));
});
}), styleConfig;
} else
return getStylesConfig(wco);
}
let { config: cliConfig } = await generateI18nBrowserWebpackConfigFromContext(
{
// Default options
index: "noop-index",
main: "noop-main",
// Options provided by user
...builderOptions,
styles: builderOptions.styles?.map((style) => typeof style == "string" ? style : style.input).filter((style) => typeof style == "string" || style.inject !== !1),
outputPath: typeof builderOptions.outputPath == "string" ? builderOptions.outputPath : builderOptions.outputPath?.base ?? "noop-out",
// Fixed options
optimization: !1,
namedChunks: !1,
progress: !1,
buildOptimizer: !1,
aot: !1
},
builderContext,
(wco) => [
getCommonConfig(wco),
getCustomStylesConfig(wco),
getTypeScriptConfig ? getTypeScriptConfig(wco) : getDevServerConfig(wco)
]
);
!builderOptions.experimentalZoneless && !cliConfig.entry.polyfills?.includes("zone.js") && (cliConfig.entry.polyfills ??= [], cliConfig.entry.polyfills.push("zone.js"));
let entry = [
...cliConfig.entry.polyfills ?? [],
...baseConfig.entry,
...cliConfig.entry.styles ?? []
], rulesExcludingStyles = filterOutStylingRules(baseConfig), module = {
...baseConfig.module,
rules: [...cliConfig.module.rules, ...rulesExcludingStyles]
}, plugins = [
...cliConfig.plugins ?? [],
...baseConfig.plugins,
new StorybookNormalizeAngularEntryPlugin()
], resolve = {
...baseConfig.resolve,
modules: Array.from(/* @__PURE__ */ new Set([...baseConfig.resolve.modules, ...cliConfig.resolve.modules])),
plugins: [
new TsconfigPathsPlugin({
configFile: builderOptions.tsConfig,
mainFields: ["browser", "module", "main"]
})
]
};
return {
...baseConfig,
entry,
module,
plugins,
resolve,
resolveLoader: cliConfig.resolveLoader
};
};
export {
getWebpackConfig
};