import { TransformOptions } from '@babel/core'; export interface BabelRegisterOptions extends TransformOptions { extensions?: string[]; cache?: boolean; } const defaultExtensions = ['.es6', '.es', '.jsx', '.js', '.mjs', '.ts', '.tsx']; const defaultRegisterOptions: BabelRegisterOptions = { presets: [ [ '@babel/preset-env', { targets: { node: true, }, }, ], '@babel/typescript', ], plugins: [ '@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-transform-object-assign', //"@babel/plugin-transform-modules-commonjs", ], extensions: defaultExtensions, }; export const initBabel = (options?: BabelRegisterOptions, mergeDefault = false, rootPaths?: string[]) => { let registerOptions: BabelRegisterOptions = options || defaultRegisterOptions; if (options && mergeDefault) { registerOptions = { ...defaultRegisterOptions, ...options, }; } // confine to specified root paths if passed if (rootPaths) { registerOptions.only = rootPaths; registerOptions.babelrcRoots = rootPaths; } require('@babel/register')(registerOptions); }; export const initBabelForPaths = ( paths: string[], options: TransformOptions = defaultRegisterOptions, mergeWithDefaultOptions = false ) => { initBabel(options, false, paths); };