| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- // This file has been automatically migrated to valid ESM format by Storybook.
- import { fileURLToPath } from 'node:url'
- import { createRequire } from 'node:module'
- import { defineMain } from '@storybook/react-webpack5/node'
- import path, { dirname } from 'node:path'
- import MiniCssExtractPlugin from 'mini-css-extract-plugin'
- const __filename = fileURLToPath(import.meta.url)
- const __dirname = dirname(__filename)
- const require = createRequire(import.meta.url)
- const rootDir = path.resolve(__dirname, '..')
- // NOTE: must be set before webpack config is imported
- process.env.OVERLEAF_CONFIG = path.join(rootDir, 'config/settings.webpack.js')
- function getAbsolutePath(value: string): any {
- return path.dirname(require.resolve(path.join(value, 'package.json')))
- }
- // Make sure that babel-macros are re-evaluated after changing the modules config
- // Import this after setting process.env.OVERLEAF_CONFIG
- const invalidateBabelCacheIfNeeded = require('../frontend/macros/invalidate-babel-cache-if-needed')
- invalidateBabelCacheIfNeeded()
- export default defineMain({
- core: {
- disableTelemetry: true,
- },
- staticDirs: [path.join(rootDir, 'public')],
- stories: [
- path.join(rootDir, 'frontend/stories/**/*.stories.{js,jsx,ts,tsx}'),
- path.join(rootDir, 'modules/**/stories/**/*.stories.{js,jsx,ts,tsx}'),
- path.join(rootDir, 'frontend/stories/**/*.mdx'),
- path.join(rootDir, 'modules/**/stories/**/*.mdx'),
- ],
- addons: [
- getAbsolutePath('@storybook/addon-links'),
- getAbsolutePath('@storybook/addon-a11y'),
- getAbsolutePath('@storybook/addon-designs'),
- getAbsolutePath('@storybook/addon-webpack5-compiler-babel'),
- {
- name: getAbsolutePath('@storybook/addon-styling-webpack'),
- options: {
- rules: [
- {
- test: /\.css$/,
- use: [
- { loader: MiniCssExtractPlugin.loader },
- { loader: 'css-loader' },
- ],
- },
- {
- // Pass Sass files through sass-loader/css-loader/mini-css-extract-
- // plugin (note: run in reverse order)
- test: /\.s[ac]ss$/,
- use: [
- // Allows the CSS to be extracted to a separate .css file
- { loader: MiniCssExtractPlugin.loader },
- // Resolves any CSS dependencies (e.g. url())
- { loader: 'css-loader' },
- // Resolve relative paths sensibly in SASS
- { loader: 'resolve-url-loader' },
- {
- // Runs autoprefixer on CSS via postcss
- loader: 'postcss-loader',
- options: {
- postcssOptions: {
- plugins: ['autoprefixer'],
- },
- },
- },
- // Compiles Sass to CSS
- {
- loader: 'sass-loader',
- options: { sourceMap: true }, // sourceMap: true is required for resolve-url-loader
- },
- ],
- },
- ],
- plugins: [new MiniCssExtractPlugin()],
- },
- },
- getAbsolutePath('@storybook/addon-docs'),
- ],
- framework: {
- name: getAbsolutePath('@storybook/react-webpack5'),
- options: {},
- },
- babel: (options: Record<string, any>) => {
- return {
- ...options,
- plugins: [
- ['@babel/plugin-proposal-decorators', { legacy: true }],
- // ensure that TSX files are transformed before other plugins run
- ['@babel/plugin-transform-typescript', { isTSX: true }],
- ...(options.plugins ?? []),
- ],
- }
- },
- webpackFinal: storybookConfig => {
- return {
- ...storybookConfig,
- resolve: {
- ...storybookConfig.resolve,
- fallback: {
- ...storybookConfig.resolve?.fallback,
- fs: false,
- os: false,
- module: false,
- tty: require.resolve('tty-browserify'),
- },
- extensions: ['.js', '.jsx', '.mjs', '.ts', '.tsx', '.json'],
- alias: {
- ...storybookConfig.resolve?.alias,
- // custom prefixes for import paths
- '@': path.join(rootDir, 'frontend/js/'),
- '@ol-types': path.join(rootDir, 'types/'),
- '@ol-storybook': path.join(rootDir, '.storybook/'),
- '@wf': path.join(
- rootDir,
- 'modules/writefull/frontend/js/integration/src/'
- ),
- },
- },
- module: {
- ...storybookConfig.module,
- rules: (storybookConfig.module?.rules ?? []).concat(
- {
- test: /\.wasm$/,
- type: 'asset/resource',
- generator: {
- filename: 'js/[name]-[contenthash][ext]',
- },
- },
- {
- // Disable webpack's `new URL()` processing for pdfjs-dist worker
- // files, so that webpack does not try to resolve qcms_bg.wasm and
- // openjpeg.wasm (which live in pdfjs-dist/wasm/, not build/).
- // The main webpack build relies on a `/* webpackIgnore: true */`
- // comment (via yarn patch) to achieve the same effect, but
- // storybook's babel pipeline may strip comments from the 1.9 MB
- // worker file (babel `compact: "auto"` removes comments for files
- // > 500 KB), so we disable URL parsing for these files instead.
- test: /pdfjs-dist.*pdf\.worker.*\.m?js$/,
- parser: { javascript: { url: false } },
- }
- ),
- },
- }
- },
- })
|