diff --git a/packages/babel-core/src/transformation/file/index.js b/packages/babel-core/src/transformation/file/index.js index 17beab202c..96353a8a8c 100644 --- a/packages/babel-core/src/transformation/file/index.js +++ b/packages/babel-core/src/transformation/file/index.js @@ -573,7 +573,7 @@ export default class File extends Store { if (!opts.code) return this.makeResult(result); let gen = generate; - if (opts.generatorOpts.generator) { + if (opts.generatorOpts && opts.generatorOpts.generator) { gen = opts.generatorOpts.generator; if (typeof gen === "string") { diff --git a/packages/babel-core/src/transformation/file/options/config.js b/packages/babel-core/src/transformation/file/options/config.js deleted file mode 100644 index aa955a5f96..0000000000 --- a/packages/babel-core/src/transformation/file/options/config.js +++ /dev/null @@ -1,125 +0,0 @@ -/* eslint max-len: "off" */ - -export default { - filename: { - default: "unknown", - }, - - filenameRelative: {}, - - inputSourceMap: {}, - - env: { - default: {}, - }, - - mode: {}, - - retainLines: { - default: false, - }, - - highlightCode: { - default: true, - }, - - suppressDeprecationMessages: { - default: false, - }, - - presets: { - default: [], - }, - - plugins: { - default: [], - }, - - ignore: { - default: [], - }, - - only: {}, - - code: { - default: true, - }, - - metadata: { - default: true, - }, - - ast: { - default: true, - }, - - extends: {}, - - comments: { - default: true, - }, - - shouldPrintComment: {}, - - wrapPluginVisitorMethod: {}, - - compact: { - default: "auto", - }, - - minified: { - default: false, - }, - - sourceMap: { - alias: "sourceMaps", - }, - - sourceMaps: { - default: false, - }, - - sourceMapTarget: {}, - - sourceFileName: {}, - - sourceRoot: {}, - - babelrc: { - default: true, - }, - - sourceType: { - default: "module", - }, - - auxiliaryCommentBefore: {}, - - auxiliaryCommentAfter: {}, - - resolveModuleSource: {}, - - getModuleId: {}, - - moduleRoot: {}, - - moduleIds: { - default: false, - }, - - moduleId: {}, - - passPerPreset: { - default: false, - }, - - // Deprecate top level parserOpts - parserOpts: { - default: false, - }, - - // Deprecate top level generatorOpts - generatorOpts: { - default: false, - }, -}; diff --git a/packages/babel-core/src/transformation/file/options/option-manager.js b/packages/babel-core/src/transformation/file/options/option-manager.js index 84ffedce33..e79c3b7ee0 100644 --- a/packages/babel-core/src/transformation/file/options/option-manager.js +++ b/packages/babel-core/src/transformation/file/options/option-manager.js @@ -4,9 +4,7 @@ import * as messages from "babel-messages"; import resolvePlugin from "../../../helpers/resolve-plugin"; import resolvePreset from "../../../helpers/resolve-preset"; import cloneDeepWith from "lodash/cloneDeepWith"; -import clone from "lodash/clone"; import merge from "../../../helpers/merge"; -import config from "./config"; import removed from "./removed"; import buildConfigChain from "./build-config-chain"; import path from "path"; @@ -33,6 +31,48 @@ type MergeOptions = { dirname?: string }; +const optionNames = new Set([ + "filename", + "filenameRelative", + "inputSourceMap", + "env", + "mode", + "retainLines", + "highlightCode", + "suppressDeprecationMessages", + "presets", + "plugins", + "ignore", + "only", + "code", + "metadata", + "ast", + "extends", + "comments", + "shouldPrintComment", + "wrapPluginVisitorMethod", + "compact", + "minified", + "sourceMaps", + "sourceMapTarget", + "sourceFileName", + "sourceRoot", + "babelrc", + "sourceType", + "auxiliaryCommentBefore", + "auxiliaryCommentAfter", + "resolveModuleSource", + "getModuleId", + "moduleRoot", + "moduleIds", + "moduleId", + "passPerPreset", + // Deprecate top level parserOpts + "parserOpts", + // Deprecate top level generatorOpts + "generatorOpts", +]); + export default class OptionManager { constructor() { this.resolvedConfigs = []; @@ -73,14 +113,17 @@ export default class OptionManager { } static createBareOptions() { - const opts = {}; - - for (const key in config) { - const opt = config[key]; - opts[key] = clone(opt.default); - } - - return opts; + return { + sourceType: "module", + babelrc: true, + filename: "unknown", + code: true, + metadata: true, + ast: true, + comments: true, + compact: "auto", + highlightCode: true, + }; } static normalisePlugin(plugin, loc, i, alias) { @@ -169,11 +212,18 @@ export default class OptionManager { dirname = dirname || process.cwd(); loc = loc || alias; - for (const key in opts) { - const option = config[key]; + if (opts.sourceMap !== undefined) { + if (opts.sourceMaps !== undefined) { + throw new Error(`Both ${alias}.sourceMap and .sourceMaps have been set`); + } + opts.sourceMaps = opts.sourceMap; + delete opts.sourceMap; + } + + for (const key in opts) { // check for an unknown option - if (!option) { + if (!optionNames.has(key)) { if (removed[key]) { throw new ReferenceError(`Using removed Babel 5 option: ${alias}.${key} - ${removed[key].message}`); } else { @@ -321,33 +371,11 @@ export default class OptionManager { return presetFactory(context, options, meta); } - normaliseOptions() { - const opts = this.options; - - for (const key in config) { - const option = config[key]; - const val = opts[key]; - - // optional - if (!val && option.optional) continue; - - // aliases - if (option.alias) { - opts[option.alias] = opts[option.alias] || val; - } else { - opts[key] = val; - } - } - } - init(opts: Object = {}): Object { for (const config of buildConfigChain(opts)) { this.mergeOptions(config); } - // normalise - this.normaliseOptions(opts); - return this.options; } }