import { DEFAULT_EXTENSIONS } from '@babel/core' import url from 'postcss-url' import babel from 'rollup-plugin-babel' import commonjs from 'rollup-plugin-commonjs' import resolve from 'rollup-plugin-node-resolve' import external from 'rollup-plugin-peer-deps-external' import postcss from 'rollup-plugin-postcss' import replace from 'rollup-plugin-replace' import { terser } from 'rollup-plugin-terser' import typescript from 'rollup-plugin-typescript2' import vue from 'rollup-plugin-vue' const plugins = [ vue({ preprocessStyles: true, compileTemplate: true }), postcss({ plugins: [ url({ url: 'inline' }) ] }), commonjs(), resolve({ mainFields: ['browser', 'jsnext:main', 'module', 'main'] }), replace({ 'process.env.NODE_ENV': JSON.stringify('development') }), typescript({ tsconfig: 'tsconfig.dist.json', tsconfigOverride: { compilerOptions: { declaration: true }, include: ['./components/**/*.ts'], exclude: ['./src', 'node_modules'] } }), babel({ extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'], babelrc: true, runtimeHelpers: true }), external({ includeDependencies: false }) ] const builds = { 'cjs-dev': { outFile: 'dist/vue3-json-editor.cjs.js', format: 'cjs', mode: 'development' }, 'cjs-prod': { outFile: 'dist/vue3-json-editor.cjs.prod.js', format: 'cjs', mode: 'production' }, 'umd-dev': { outFile: 'dist/vue3-json-editor.umd.js', format: 'umd', mode: 'development' }, 'umd-prod': { outFile: 'dist/vue3-json-editor.umd.prod.js', format: 'umd', mode: 'production' }, 'esm-dev': { outFile: 'dist/vue3-json-editor.esm.js', format: 'es', mode: 'development' }, 'esm-prod': { outFile: 'dist/vue3-json-editor.esm.prod.js', format: 'es', mode: 'production' } } function createEntries () { return Object.keys(builds).map((c) => createEntry(builds[c])) } function onwarn (msg, warn) { if (!/Circular/.test(msg)) { warn(msg) } } function createEntry (config) { const c = { external: ['vue'], input: 'components/index.ts', plugins: [], output: { file: config.outFile, format: config.format, globals: { vue: 'Vue' }, exports: 'named' }, onwarn } if (config.format === 'iife' || config.format === 'umd') { c.output.name = c.output.name || 'vue3-json-editor' c.output.extend = true } c.plugins = [...plugins] if (config.mode === 'production') { c.plugins.push(terser()) } return c } const buildConfig = [...createEntries()] export default buildConfig