Sha256: 6351c72d8472ef374f3b575b03a5f7ab9881d7df1ae836001379f2f1cfb1dd1c

Contents?: true

Size: 1.2 KB

Versions: 3

Compression:

Stored size: 1.2 KB

Contents

/* eslint global-require: 0 */
/* eslint import/no-dynamic-require: 0 */

const { resolve } = require('path')
const { existsSync } = require('fs')
const { merge } = require('webpack-merge')

const isJsxFile = (filename) => !!filename.match(/\.(jsx|tsx)?(\.erb)?$/)

const isTypescriptFile = (filename) => !!filename.match(/\.(ts|tsx)?(\.erb)?$/)

const getCustomConfig = () => {
  const path = resolve('config', 'swc.config.js')
  if (existsSync(path)) {
    return require(path)
  }
  return {}
}

const getSwcLoaderConfig = (filenameToProcess) => {
  const customConfig = getCustomConfig()
  const defaultConfig = {
    loader: require.resolve('swc-loader'),
    options: {
      jsc: {
        parser: {
          dynamicImport: true,
          syntax: isTypescriptFile(filenameToProcess)
            ? 'typescript'
            : 'ecmascript',
          [isTypescriptFile(filenameToProcess) ? 'tsx' : 'jsx']:
            isJsxFile(filenameToProcess)
        }
      },
      sourceMaps: true,
      env: {
        coreJs: '3.8',
        loose: true,
        exclude: ['transform-typeof-symbol'],
        mode: 'entry'
      }
    }
  }

  return merge(defaultConfig, customConfig)
}

module.exports = {
  getSwcLoaderConfig
}

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
shakapacker-6.1.1 package/swc/index.js
shakapacker-6.1.0 package/swc/index.js
shakapacker-6.1.0.beta.0 package/swc/index.js