Sha256: cdaa2535b5ee8242092077175a9b8460fe797e0ebecc1034770fb8221e2b999b

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)
        },
        loose: true
      },
      sourceMaps: true,
      env: {
        coreJs: 3,
        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-8.1.0 package/swc/index.js
shakapacker-8.0.2 package/swc/index.js
shakapacker-8.0.1 package/swc/index.js