UNPKG

babel-transform-config

Version:

Transform JS config files (Next, Nuxt, Gatsby)

121 lines (113 loc) 2.54 kB
const consola = require('consola') const babelTransform = require('@babel/standalone').transform const babelTransformConfigPlugin = require('./plugin') const nuxt = { css(value) { // arr of strings return ['css', { action: 'create:merge', value }] }, script(value) { // arr of objects or strings return ['head:script', { action: 'create:merge', value }] }, module(value) { return ['modules', { action: 'create:merge', value: [value] }] }, modules(value) { return ['modules', { action: 'create:merge', value }] }, transpile(value) { return ['build:transpile', { action: 'create:merge', value }] }, libraries(value) { return ['build:transpile', { action: 'create:merge', value }] } } const table = { nuxt } function createTransformArgs(framework, args, strict) { const frameworkTable = table[framework] const keysNotFound = [] if (!frameworkTable) { return consola.error(`[transform-configs] ${framework} Framework not supported\nUse babel plugin directly instead`) } try { const transforms = Object.entries(args).reduce((acc, [k, v]) => { if (frameworkTable[k]) { const [key, value] = frameworkTable[k](v) return { ...acc, [key]: value } } keysNotFound.push(k) if (!strict) { return { ...acc, [k]: { action: "create:merge", value: v } } } return acc }, {}) return { transforms, keysNotFound } } catch(e) { return { reason: e } } } function transform(code, transforms) { return babelTransform(code, { plugins: [ [ babelTransformConfigPlugin, transforms ] ] }) // { code } or Throws error } function handleKeysNotFound(keys) { keys.forEach((key) => { consola.warn(`[transform-args] Key "${key}" not recognized.\nDefaulting to default transform`) }) } function transformConfig(code, framework, args, strict = true) { const { transforms, keysNotFound, reason, } = createTransformArgs(framework, args, strict) if (!transforms) { return consola.error(reason) } if (!strict && keysNotFound.length) { handleKeysNotFound(keysNotFound); } return transform(code, transforms) } transformConfig.transform = transform transformConfig.plugin = babelTransformConfigPlugin module.exports = transformConfig