next.js/packages/next/src/build/webpack/config/helpers.ts
helpers.ts69 lines1.7 KB
import curry from 'next/dist/compiled/lodash.curry'
import type { webpack } from 'next/dist/compiled/webpack/webpack'

export const loader: (
  rule: webpack.RuleSetRule
) => (config: webpack.Configuration) => webpack.Configuration = curry(
  function loader(rule: webpack.RuleSetRule, config: webpack.Configuration) {
    if (!config.module) {
      config.module = { rules: [] }
    }

    if (rule.oneOf) {
      const existing = config.module.rules?.find(
        (arrayRule) =>
          arrayRule && typeof arrayRule === 'object' && arrayRule.oneOf
      )
      if (existing && typeof existing === 'object') {
        existing.oneOf!.push(...rule.oneOf)
        return config
      }
    }

    config.module.rules?.push(rule)
    return config
  }
)

export const unshiftLoader: (
  rule: webpack.RuleSetRule
) => (config: webpack.Configuration) => webpack.Configuration = curry(
  function unshiftLoader(
    rule: webpack.RuleSetRule,
    config: webpack.Configuration
  ) {
    if (!config.module) {
      config.module = { rules: [] }
    }

    if (rule.oneOf) {
      const existing = config.module.rules?.find(
        (arrayRule) =>
          arrayRule && typeof arrayRule === 'object' && arrayRule.oneOf
      )
      if (existing && typeof existing === 'object') {
        existing.oneOf?.unshift(...rule.oneOf)
        return config
      }
    }

    config.module.rules?.unshift(rule)
    return config
  }
)

export const plugin: (
  p: webpack.WebpackPluginInstance
) => (config: webpack.Configuration) => webpack.Configuration = curry(
  function plugin(
    p: webpack.WebpackPluginInstance,
    config: webpack.Configuration
  ) {
    if (!config.plugins) {
      config.plugins = []
    }
    config.plugins.push(p)
    return config
  }
)
Quest for Codev2.0.0
/
SIGN IN