From 59c4bbb4abef918a24e93201c9213a3b8e31f3ba Mon Sep 17 00:00:00 2001 From: Daniel Tschinder Date: Tue, 15 Jan 2019 12:54:57 -0800 Subject: [PATCH] perf: Make plugins a map instead of object Fix plugin options --- packages/babel-parser/src/parser/base.js | 5 +++-- packages/babel-parser/src/parser/index.js | 10 ++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/babel-parser/src/parser/base.js b/packages/babel-parser/src/parser/base.js index 96fd7fed83..796abb0df2 100644 --- a/packages/babel-parser/src/parser/base.js +++ b/packages/babel-parser/src/parser/base.js @@ -26,10 +26,11 @@ export default class BaseParser { } hasPlugin(name: string): boolean { - return Object.hasOwnProperty.call(this.plugins, name); + return this.plugins.has(name); } getPluginOption(plugin: string, name: string) { - if (this.hasPlugin(plugin)) return this.plugins[plugin][name]; + // $FlowIssue + if (this.hasPlugin(plugin)) return this.plugins.get(plugin)[name]; } } diff --git a/packages/babel-parser/src/parser/index.js b/packages/babel-parser/src/parser/index.js index 35e7e01f6c..00617bd863 100644 --- a/packages/babel-parser/src/parser/index.js +++ b/packages/babel-parser/src/parser/index.js @@ -6,9 +6,7 @@ import type { PluginList } from "../plugin-utils"; import { getOptions } from "../options"; import StatementParser from "./statement"; -export type PluginsMap = { - [key: string]: { [option: string]: any }, -}; +export type PluginsMap = Map; export default class Parser extends StatementParser { // Forward-declaration so typescript plugin can override jsx plugin @@ -35,10 +33,10 @@ export default class Parser extends StatementParser { } function pluginsMap(plugins: PluginList): PluginsMap { - const pluginMap: PluginsMap = (Object.create(null): Object); + const pluginMap: PluginsMap = new Map(); for (const plugin of plugins) { - const [name, options = {}] = Array.isArray(plugin) ? plugin : [plugin, {}]; - if (!pluginMap[name]) pluginMap[name] = options || {}; + const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}]; + if (!pluginMap.has(name)) pluginMap.set(name, options || {}); } return pluginMap; }