text: import babelLoader from 'babel-loader'
  
  module.exports = babelLoader.custom(babel => {
    const presetItem = babel.createConfigItem(require('../babel/preset'), {type: 'preset'})
    const hotLoaderItem = babel.createConfigItem(require('react-hot-loader/babel'), {type: 'plugin'})
    const reactJsxSourceItem = babel.createConfigItem(require('@babel/plugin-transform-react-jsx-source'), {type: 'plugin'})
  
    const configs = new Set()
  
    return {
      customOptions (opts) {
        const custom = {
          isServer: opts.isServer,
          dev: opts.dev
        }
        const loader = Object.assign({
          cacheDirectory: true
        }, opts)
        delete loader.isServer
        delete loader.dev
  
        return { loader, custom }
      },
      config (cfg, {customOptions: {isServer, dev}}) {
        const options = Object.assign({}, cfg.options)
        if (cfg.hasFilesystemConfig()) {
          for (const file of [cfg.babelrc, cfg.config]) {
            if (file && !configs.has(file)) {
              configs.add(file)
              console.log(`> Using external babel configuration`)
              console.log(`> Location: "${file}"`)
            }
          }
        } else {
          // Add our default preset if the no "babelrc" found.
          options.presets = [...options.presets, presetItem]
        }
  
        options.plugins = [
          ...options.plugins,
          dev && !isServer && hotLoaderItem,
          dev && reactJsxSourceItem
        ].filter(Boolean)
  
        return options
      }
    }
  })
  