Fuse/scripts/configs.js
2020-05-11 17:46:42 -07:00

196 lines
4.5 KiB
JavaScript

const path = require('path')
const replace = require('@rollup/plugin-replace')
const node = require('@rollup/plugin-node-resolve')
const babel = require('rollup-plugin-babel')
const copy = require('rollup-plugin-copy')
const pckg = require('../package.json')
const typescript = require('typescript')
const FILENAME = 'fuse'
const VERSION = process.env.VERSION || pckg.version
const AUTHOR = pckg.author
const HOMEPAGE = pckg.homepage
const DESCRIPTION = pckg.description
const banner = `/**
* Fuse.js v${VERSION} - ${DESCRIPTION} (${HOMEPAGE})
*
* Copyright (c) ${new Date().getFullYear()} ${AUTHOR.name} (${AUTHOR.url})
* All Rights Reserved. Apache Software License 2.0
*
* http://www.apache.org/licenses/LICENSE-2.0
*/\n`
const resolve = (_path) => path.resolve(__dirname, '../', _path)
const FeatureFlags = {
LOGICAL_SEARCH_ENABLED: false,
EXTENDED_SEARCH_ENABLED: false
}
const fullBuildFeatures = {
LOGICAL_SEARCH_ENABLED: true,
EXTENDED_SEARCH_ENABLED: true
}
const builds = {
// UMD full build
'umd-dev-full': {
entry: resolve('src/entry.js'),
dest: resolve(`dist/${FILENAME}.js`),
format: 'umd',
env: 'development',
features: {
...fullBuildFeatures
},
plugins: [
copy({
targets: [
{
src: resolve('src/index.d.ts'),
dest: resolve('dist'),
rename: `${FILENAME}.d.ts`,
transform: (content) => {
return `// Type definitions for Fuse.js v${VERSION}\n// TypeScript v${typescript.version}\n\n${content}`
}
}
]
})
]
},
// UMD production build
'umd-prod-full': {
entry: resolve('src/entry.js'),
dest: resolve(`dist/${FILENAME}.min.js`),
format: 'umd',
env: 'production',
features: {
...fullBuildFeatures
}
},
// UMD basic build
'umd-dev-basic': {
entry: resolve('src/entry.js'),
dest: resolve(`dist/${FILENAME}.basic.js`),
format: 'umd',
env: 'development'
},
'umd-prod-basic': {
entry: resolve('src/entry.js'),
dest: resolve(`dist/${FILENAME}.basic.min.js`),
format: 'umd',
env: 'production'
},
// CommonJS full build
'commonjs-full': {
entry: resolve('src/entry.js'),
dest: resolve(`dist/${FILENAME}.common.js`),
env: 'development',
features: {
...fullBuildFeatures
},
format: 'cjs'
},
// CommonJS basic build
'commonjs-basic': {
entry: resolve('src/entry.js'),
dest: resolve(`dist/${FILENAME}.basic.common.js`),
env: 'development',
format: 'cjs'
},
// ES modules build (for bundlers)
'esm-dev-full': {
entry: resolve('src/entry.js'),
dest: resolve(`dist/${FILENAME}.esm.js`),
format: 'es',
env: 'development',
features: {
...fullBuildFeatures
},
transpile: false
},
'esm-prod-full': {
entry: resolve('src/entry.js'),
dest: resolve(`dist/${FILENAME}.esm.min.js`),
format: 'es',
env: 'production',
features: {
...fullBuildFeatures
},
transpile: false
},
'esm-basic': {
entry: resolve('src/entry.js'),
dest: resolve(`dist/${FILENAME}.basic.esm.js`),
format: 'es',
env: 'development',
transpile: false
},
'esm-prod-basic': {
entry: resolve('src/entry.js'),
dest: resolve(`dist/${FILENAME}.basic.esm.min.js`),
format: 'es',
env: 'production',
transpile: false
}
}
const defaultVars = {
__VERSION__: VERSION
}
const defaultFeatures = Object.keys(FeatureFlags).reduce((map, key) => {
map[`process.env.${key}`] = FeatureFlags[key]
return map
}, {})
function genConfig(options) {
// built-in vars
const vars = { ...defaultVars, ...defaultFeatures }
const config = {
input: options.entry,
plugins: [node(), ...(options.plugins || [])],
output: {
banner,
file: options.dest,
format: options.format,
name: 'Fuse'
}
}
// build-specific env
if (options.env) {
vars['process.env.NODE_ENV'] = JSON.stringify(options.env)
}
// feature flags
if (options.features) {
Object.keys(options.features).forEach((key) => {
vars[`process.env.${key}`] = JSON.stringify(options.features[key])
})
}
config.plugins.push(replace(vars))
if (options.transpile !== false) {
config.plugins.push(babel())
}
return config
}
function mapValues(obj, fn) {
const res = {}
Object.keys(obj).forEach((key) => {
res[key] = fn(obj[key], key)
})
return res
}
if (process.env.TARGET) {
module.exports = genConfig(builds[process.env.TARGET])
} else {
module.exports = mapValues(builds, genConfig)
}