396 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			396 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import corejs2Polyfills from '@babel/compat-data/corejs2-built-ins';
 | 
						|
import semver from 'semver';
 | 
						|
import defineProvider from '@babel/helper-define-polyfill-provider';
 | 
						|
import * as _babel from '@babel/core';
 | 
						|
 | 
						|
const define = (name, pure, global = [], meta) => {
 | 
						|
  return {
 | 
						|
    name,
 | 
						|
    pure,
 | 
						|
    global,
 | 
						|
    meta
 | 
						|
  };
 | 
						|
};
 | 
						|
const pureAndGlobal = (pure, global, minRuntimeVersion = null) => define(global[0], pure, global, {
 | 
						|
  minRuntimeVersion
 | 
						|
});
 | 
						|
const globalOnly = global => define(global[0], null, global);
 | 
						|
const pureOnly = (pure, name) => define(name, pure, []);
 | 
						|
const ArrayNatureIterators = ["es6.object.to-string", "es6.array.iterator", "web.dom.iterable"];
 | 
						|
const CommonIterators = ["es6.string.iterator", ...ArrayNatureIterators];
 | 
						|
const PromiseDependencies = ["es6.object.to-string", "es6.promise"];
 | 
						|
const BuiltIns = {
 | 
						|
  DataView: globalOnly(["es6.typed.data-view"]),
 | 
						|
  Float32Array: globalOnly(["es6.typed.float32-array"]),
 | 
						|
  Float64Array: globalOnly(["es6.typed.float64-array"]),
 | 
						|
  Int8Array: globalOnly(["es6.typed.int8-array"]),
 | 
						|
  Int16Array: globalOnly(["es6.typed.int16-array"]),
 | 
						|
  Int32Array: globalOnly(["es6.typed.int32-array"]),
 | 
						|
  Map: pureAndGlobal("map", ["es6.map", ...CommonIterators]),
 | 
						|
  Number: globalOnly(["es6.number.constructor"]),
 | 
						|
  Promise: pureAndGlobal("promise", PromiseDependencies),
 | 
						|
  RegExp: globalOnly(["es6.regexp.constructor"]),
 | 
						|
  Set: pureAndGlobal("set", ["es6.set", ...CommonIterators]),
 | 
						|
  Symbol: pureAndGlobal("symbol/index", ["es6.symbol"]),
 | 
						|
  Uint8Array: globalOnly(["es6.typed.uint8-array"]),
 | 
						|
  Uint8ClampedArray: globalOnly(["es6.typed.uint8-clamped-array"]),
 | 
						|
  Uint16Array: globalOnly(["es6.typed.uint16-array"]),
 | 
						|
  Uint32Array: globalOnly(["es6.typed.uint32-array"]),
 | 
						|
  WeakMap: pureAndGlobal("weak-map", ["es6.weak-map", ...CommonIterators]),
 | 
						|
  WeakSet: pureAndGlobal("weak-set", ["es6.weak-set", ...CommonIterators]),
 | 
						|
  setImmediate: pureOnly("set-immediate", "web.immediate"),
 | 
						|
  clearImmediate: pureOnly("clear-immediate", "web.immediate"),
 | 
						|
  parseFloat: pureOnly("parse-float", "es6.parse-float"),
 | 
						|
  parseInt: pureOnly("parse-int", "es6.parse-int")
 | 
						|
};
 | 
						|
const InstanceProperties = {
 | 
						|
  __defineGetter__: globalOnly(["es7.object.define-getter"]),
 | 
						|
  __defineSetter__: globalOnly(["es7.object.define-setter"]),
 | 
						|
  __lookupGetter__: globalOnly(["es7.object.lookup-getter"]),
 | 
						|
  __lookupSetter__: globalOnly(["es7.object.lookup-setter"]),
 | 
						|
  anchor: globalOnly(["es6.string.anchor"]),
 | 
						|
  big: globalOnly(["es6.string.big"]),
 | 
						|
  bind: globalOnly(["es6.function.bind"]),
 | 
						|
  blink: globalOnly(["es6.string.blink"]),
 | 
						|
  bold: globalOnly(["es6.string.bold"]),
 | 
						|
  codePointAt: globalOnly(["es6.string.code-point-at"]),
 | 
						|
  copyWithin: globalOnly(["es6.array.copy-within"]),
 | 
						|
  endsWith: globalOnly(["es6.string.ends-with"]),
 | 
						|
  entries: globalOnly(ArrayNatureIterators),
 | 
						|
  every: globalOnly(["es6.array.every"]),
 | 
						|
  fill: globalOnly(["es6.array.fill"]),
 | 
						|
  filter: globalOnly(["es6.array.filter"]),
 | 
						|
  finally: globalOnly(["es7.promise.finally", ...PromiseDependencies]),
 | 
						|
  find: globalOnly(["es6.array.find"]),
 | 
						|
  findIndex: globalOnly(["es6.array.find-index"]),
 | 
						|
  fixed: globalOnly(["es6.string.fixed"]),
 | 
						|
  flags: globalOnly(["es6.regexp.flags"]),
 | 
						|
  flatMap: globalOnly(["es7.array.flat-map"]),
 | 
						|
  fontcolor: globalOnly(["es6.string.fontcolor"]),
 | 
						|
  fontsize: globalOnly(["es6.string.fontsize"]),
 | 
						|
  forEach: globalOnly(["es6.array.for-each"]),
 | 
						|
  includes: globalOnly(["es6.string.includes", "es7.array.includes"]),
 | 
						|
  indexOf: globalOnly(["es6.array.index-of"]),
 | 
						|
  italics: globalOnly(["es6.string.italics"]),
 | 
						|
  keys: globalOnly(ArrayNatureIterators),
 | 
						|
  lastIndexOf: globalOnly(["es6.array.last-index-of"]),
 | 
						|
  link: globalOnly(["es6.string.link"]),
 | 
						|
  map: globalOnly(["es6.array.map"]),
 | 
						|
  match: globalOnly(["es6.regexp.match"]),
 | 
						|
  name: globalOnly(["es6.function.name"]),
 | 
						|
  padStart: globalOnly(["es7.string.pad-start"]),
 | 
						|
  padEnd: globalOnly(["es7.string.pad-end"]),
 | 
						|
  reduce: globalOnly(["es6.array.reduce"]),
 | 
						|
  reduceRight: globalOnly(["es6.array.reduce-right"]),
 | 
						|
  repeat: globalOnly(["es6.string.repeat"]),
 | 
						|
  replace: globalOnly(["es6.regexp.replace"]),
 | 
						|
  search: globalOnly(["es6.regexp.search"]),
 | 
						|
  small: globalOnly(["es6.string.small"]),
 | 
						|
  some: globalOnly(["es6.array.some"]),
 | 
						|
  sort: globalOnly(["es6.array.sort"]),
 | 
						|
  split: globalOnly(["es6.regexp.split"]),
 | 
						|
  startsWith: globalOnly(["es6.string.starts-with"]),
 | 
						|
  strike: globalOnly(["es6.string.strike"]),
 | 
						|
  sub: globalOnly(["es6.string.sub"]),
 | 
						|
  sup: globalOnly(["es6.string.sup"]),
 | 
						|
  toISOString: globalOnly(["es6.date.to-iso-string"]),
 | 
						|
  toJSON: globalOnly(["es6.date.to-json"]),
 | 
						|
  toString: globalOnly(["es6.object.to-string", "es6.date.to-string", "es6.regexp.to-string"]),
 | 
						|
  trim: globalOnly(["es6.string.trim"]),
 | 
						|
  trimEnd: globalOnly(["es7.string.trim-right"]),
 | 
						|
  trimLeft: globalOnly(["es7.string.trim-left"]),
 | 
						|
  trimRight: globalOnly(["es7.string.trim-right"]),
 | 
						|
  trimStart: globalOnly(["es7.string.trim-left"]),
 | 
						|
  values: globalOnly(ArrayNatureIterators)
 | 
						|
};
 | 
						|
 | 
						|
// This isn't present in older @babel/compat-data versions
 | 
						|
if ("es6.array.slice" in corejs2Polyfills) {
 | 
						|
  InstanceProperties.slice = globalOnly(["es6.array.slice"]);
 | 
						|
}
 | 
						|
const StaticProperties = {
 | 
						|
  Array: {
 | 
						|
    from: pureAndGlobal("array/from", ["es6.symbol", "es6.array.from", ...CommonIterators]),
 | 
						|
    isArray: pureAndGlobal("array/is-array", ["es6.array.is-array"]),
 | 
						|
    of: pureAndGlobal("array/of", ["es6.array.of"])
 | 
						|
  },
 | 
						|
  Date: {
 | 
						|
    now: pureAndGlobal("date/now", ["es6.date.now"])
 | 
						|
  },
 | 
						|
  JSON: {
 | 
						|
    stringify: pureOnly("json/stringify", "es6.symbol")
 | 
						|
  },
 | 
						|
  Math: {
 | 
						|
    // 'Math' was not included in the 7.0.0
 | 
						|
    // release of '@babel/runtime'. See issue https://github.com/babel/babel/pull/8616.
 | 
						|
    acosh: pureAndGlobal("math/acosh", ["es6.math.acosh"], "7.0.1"),
 | 
						|
    asinh: pureAndGlobal("math/asinh", ["es6.math.asinh"], "7.0.1"),
 | 
						|
    atanh: pureAndGlobal("math/atanh", ["es6.math.atanh"], "7.0.1"),
 | 
						|
    cbrt: pureAndGlobal("math/cbrt", ["es6.math.cbrt"], "7.0.1"),
 | 
						|
    clz32: pureAndGlobal("math/clz32", ["es6.math.clz32"], "7.0.1"),
 | 
						|
    cosh: pureAndGlobal("math/cosh", ["es6.math.cosh"], "7.0.1"),
 | 
						|
    expm1: pureAndGlobal("math/expm1", ["es6.math.expm1"], "7.0.1"),
 | 
						|
    fround: pureAndGlobal("math/fround", ["es6.math.fround"], "7.0.1"),
 | 
						|
    hypot: pureAndGlobal("math/hypot", ["es6.math.hypot"], "7.0.1"),
 | 
						|
    imul: pureAndGlobal("math/imul", ["es6.math.imul"], "7.0.1"),
 | 
						|
    log1p: pureAndGlobal("math/log1p", ["es6.math.log1p"], "7.0.1"),
 | 
						|
    log10: pureAndGlobal("math/log10", ["es6.math.log10"], "7.0.1"),
 | 
						|
    log2: pureAndGlobal("math/log2", ["es6.math.log2"], "7.0.1"),
 | 
						|
    sign: pureAndGlobal("math/sign", ["es6.math.sign"], "7.0.1"),
 | 
						|
    sinh: pureAndGlobal("math/sinh", ["es6.math.sinh"], "7.0.1"),
 | 
						|
    tanh: pureAndGlobal("math/tanh", ["es6.math.tanh"], "7.0.1"),
 | 
						|
    trunc: pureAndGlobal("math/trunc", ["es6.math.trunc"], "7.0.1")
 | 
						|
  },
 | 
						|
  Number: {
 | 
						|
    EPSILON: pureAndGlobal("number/epsilon", ["es6.number.epsilon"]),
 | 
						|
    MIN_SAFE_INTEGER: pureAndGlobal("number/min-safe-integer", ["es6.number.min-safe-integer"]),
 | 
						|
    MAX_SAFE_INTEGER: pureAndGlobal("number/max-safe-integer", ["es6.number.max-safe-integer"]),
 | 
						|
    isFinite: pureAndGlobal("number/is-finite", ["es6.number.is-finite"]),
 | 
						|
    isInteger: pureAndGlobal("number/is-integer", ["es6.number.is-integer"]),
 | 
						|
    isSafeInteger: pureAndGlobal("number/is-safe-integer", ["es6.number.is-safe-integer"]),
 | 
						|
    isNaN: pureAndGlobal("number/is-nan", ["es6.number.is-nan"]),
 | 
						|
    parseFloat: pureAndGlobal("number/parse-float", ["es6.number.parse-float"]),
 | 
						|
    parseInt: pureAndGlobal("number/parse-int", ["es6.number.parse-int"])
 | 
						|
  },
 | 
						|
  Object: {
 | 
						|
    assign: pureAndGlobal("object/assign", ["es6.object.assign"]),
 | 
						|
    create: pureAndGlobal("object/create", ["es6.object.create"]),
 | 
						|
    defineProperties: pureAndGlobal("object/define-properties", ["es6.object.define-properties"]),
 | 
						|
    defineProperty: pureAndGlobal("object/define-property", ["es6.object.define-property"]),
 | 
						|
    entries: pureAndGlobal("object/entries", ["es7.object.entries"]),
 | 
						|
    freeze: pureAndGlobal("object/freeze", ["es6.object.freeze"]),
 | 
						|
    getOwnPropertyDescriptor: pureAndGlobal("object/get-own-property-descriptor", ["es6.object.get-own-property-descriptor"]),
 | 
						|
    getOwnPropertyDescriptors: pureAndGlobal("object/get-own-property-descriptors", ["es7.object.get-own-property-descriptors"]),
 | 
						|
    getOwnPropertyNames: pureAndGlobal("object/get-own-property-names", ["es6.object.get-own-property-names"]),
 | 
						|
    getOwnPropertySymbols: pureAndGlobal("object/get-own-property-symbols", ["es6.symbol"]),
 | 
						|
    getPrototypeOf: pureAndGlobal("object/get-prototype-of", ["es6.object.get-prototype-of"]),
 | 
						|
    is: pureAndGlobal("object/is", ["es6.object.is"]),
 | 
						|
    isExtensible: pureAndGlobal("object/is-extensible", ["es6.object.is-extensible"]),
 | 
						|
    isFrozen: pureAndGlobal("object/is-frozen", ["es6.object.is-frozen"]),
 | 
						|
    isSealed: pureAndGlobal("object/is-sealed", ["es6.object.is-sealed"]),
 | 
						|
    keys: pureAndGlobal("object/keys", ["es6.object.keys"]),
 | 
						|
    preventExtensions: pureAndGlobal("object/prevent-extensions", ["es6.object.prevent-extensions"]),
 | 
						|
    seal: pureAndGlobal("object/seal", ["es6.object.seal"]),
 | 
						|
    setPrototypeOf: pureAndGlobal("object/set-prototype-of", ["es6.object.set-prototype-of"]),
 | 
						|
    values: pureAndGlobal("object/values", ["es7.object.values"])
 | 
						|
  },
 | 
						|
  Promise: {
 | 
						|
    all: globalOnly(CommonIterators),
 | 
						|
    race: globalOnly(CommonIterators)
 | 
						|
  },
 | 
						|
  Reflect: {
 | 
						|
    apply: pureAndGlobal("reflect/apply", ["es6.reflect.apply"]),
 | 
						|
    construct: pureAndGlobal("reflect/construct", ["es6.reflect.construct"]),
 | 
						|
    defineProperty: pureAndGlobal("reflect/define-property", ["es6.reflect.define-property"]),
 | 
						|
    deleteProperty: pureAndGlobal("reflect/delete-property", ["es6.reflect.delete-property"]),
 | 
						|
    get: pureAndGlobal("reflect/get", ["es6.reflect.get"]),
 | 
						|
    getOwnPropertyDescriptor: pureAndGlobal("reflect/get-own-property-descriptor", ["es6.reflect.get-own-property-descriptor"]),
 | 
						|
    getPrototypeOf: pureAndGlobal("reflect/get-prototype-of", ["es6.reflect.get-prototype-of"]),
 | 
						|
    has: pureAndGlobal("reflect/has", ["es6.reflect.has"]),
 | 
						|
    isExtensible: pureAndGlobal("reflect/is-extensible", ["es6.reflect.is-extensible"]),
 | 
						|
    ownKeys: pureAndGlobal("reflect/own-keys", ["es6.reflect.own-keys"]),
 | 
						|
    preventExtensions: pureAndGlobal("reflect/prevent-extensions", ["es6.reflect.prevent-extensions"]),
 | 
						|
    set: pureAndGlobal("reflect/set", ["es6.reflect.set"]),
 | 
						|
    setPrototypeOf: pureAndGlobal("reflect/set-prototype-of", ["es6.reflect.set-prototype-of"])
 | 
						|
  },
 | 
						|
  String: {
 | 
						|
    at: pureOnly("string/at", "es7.string.at"),
 | 
						|
    fromCodePoint: pureAndGlobal("string/from-code-point", ["es6.string.from-code-point"]),
 | 
						|
    raw: pureAndGlobal("string/raw", ["es6.string.raw"])
 | 
						|
  },
 | 
						|
  Symbol: {
 | 
						|
    // FIXME: Pure disabled to work around zloirock/core-js#262.
 | 
						|
    asyncIterator: globalOnly(["es6.symbol", "es7.symbol.async-iterator"]),
 | 
						|
    for: pureOnly("symbol/for", "es6.symbol"),
 | 
						|
    hasInstance: pureOnly("symbol/has-instance", "es6.symbol"),
 | 
						|
    isConcatSpreadable: pureOnly("symbol/is-concat-spreadable", "es6.symbol"),
 | 
						|
    iterator: define("es6.symbol", "symbol/iterator", CommonIterators),
 | 
						|
    keyFor: pureOnly("symbol/key-for", "es6.symbol"),
 | 
						|
    match: pureAndGlobal("symbol/match", ["es6.regexp.match"]),
 | 
						|
    replace: pureOnly("symbol/replace", "es6.symbol"),
 | 
						|
    search: pureOnly("symbol/search", "es6.symbol"),
 | 
						|
    species: pureOnly("symbol/species", "es6.symbol"),
 | 
						|
    split: pureOnly("symbol/split", "es6.symbol"),
 | 
						|
    toPrimitive: pureOnly("symbol/to-primitive", "es6.symbol"),
 | 
						|
    toStringTag: pureOnly("symbol/to-string-tag", "es6.symbol"),
 | 
						|
    unscopables: pureOnly("symbol/unscopables", "es6.symbol")
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
const webPolyfills = {
 | 
						|
  "web.timers": {},
 | 
						|
  "web.immediate": {},
 | 
						|
  "web.dom.iterable": {}
 | 
						|
};
 | 
						|
const purePolyfills = {
 | 
						|
  "es6.parse-float": {},
 | 
						|
  "es6.parse-int": {},
 | 
						|
  "es7.string.at": {}
 | 
						|
};
 | 
						|
function addPlatformSpecificPolyfills (targets, method, polyfills) {
 | 
						|
  const targetNames = Object.keys(targets);
 | 
						|
  const isAnyTarget = !targetNames.length;
 | 
						|
  const isWebTarget = targetNames.some(name => name !== "node");
 | 
						|
  return {
 | 
						|
    ...polyfills,
 | 
						|
    ...(method === "usage-pure" ? purePolyfills : null),
 | 
						|
    ...(isAnyTarget || isWebTarget ? webPolyfills : null)
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
function hasMinVersion(minVersion, runtimeVersion) {
 | 
						|
  // If the range is unavailable, we're running the script during Babel's
 | 
						|
  // build process, and we want to assume that all versions are satisfied so
 | 
						|
  // that the built output will include all definitions.
 | 
						|
  if (!runtimeVersion || !minVersion) return true;
 | 
						|
  runtimeVersion = String(runtimeVersion);
 | 
						|
 | 
						|
  // semver.intersects() has some surprising behavior with comparing ranges
 | 
						|
  // with preprelease versions. We add '^' to ensure that we are always
 | 
						|
  // comparing ranges with ranges, which sidesteps this logic.
 | 
						|
  // For example:
 | 
						|
  //
 | 
						|
  //   semver.intersects(`<7.0.1`, "7.0.0-beta.0") // false - surprising
 | 
						|
  //   semver.intersects(`<7.0.1`, "^7.0.0-beta.0") // true - expected
 | 
						|
  //
 | 
						|
  // This is because the first falls back to
 | 
						|
  //
 | 
						|
  //   semver.satisfies("7.0.0-beta.0", `<7.0.1`) // false - surprising
 | 
						|
  //
 | 
						|
  // and this fails because a prerelease version can only satisfy a range
 | 
						|
  // if it is a prerelease within the same major/minor/patch range.
 | 
						|
  //
 | 
						|
  // Note: If this is found to have issues, please also revist the logic in
 | 
						|
  // babel-core's availableHelper() API.
 | 
						|
  if (semver.valid(runtimeVersion)) runtimeVersion = `^${runtimeVersion}`;
 | 
						|
  return !semver.intersects(`<${minVersion}`, runtimeVersion) && !semver.intersects(`>=8.0.0`, runtimeVersion);
 | 
						|
}
 | 
						|
 | 
						|
const {
 | 
						|
  types: t
 | 
						|
} = _babel.default || _babel;
 | 
						|
const BABEL_RUNTIME = "@babel/runtime-corejs2";
 | 
						|
const presetEnvCompat = "#__secret_key__@babel/preset-env__compatibility";
 | 
						|
const runtimeCompat = "#__secret_key__@babel/runtime__compatibility";
 | 
						|
const has = Function.call.bind(Object.hasOwnProperty);
 | 
						|
var index = defineProvider(function (api, {
 | 
						|
  [presetEnvCompat]: {
 | 
						|
    entryInjectRegenerator = false,
 | 
						|
    noRuntimeName = false
 | 
						|
  } = {},
 | 
						|
  [runtimeCompat]: {
 | 
						|
    useBabelRuntime = false,
 | 
						|
    runtimeVersion = "",
 | 
						|
    ext = ".js"
 | 
						|
  } = {}
 | 
						|
}) {
 | 
						|
  const resolve = api.createMetaResolver({
 | 
						|
    global: BuiltIns,
 | 
						|
    static: StaticProperties,
 | 
						|
    instance: InstanceProperties
 | 
						|
  });
 | 
						|
  const {
 | 
						|
    debug,
 | 
						|
    shouldInjectPolyfill,
 | 
						|
    method
 | 
						|
  } = api;
 | 
						|
  const polyfills = addPlatformSpecificPolyfills(api.targets, method, corejs2Polyfills);
 | 
						|
  const coreJSBase = useBabelRuntime ? `${BABEL_RUNTIME}/core-js` : method === "usage-pure" ? "core-js/library/fn" : "core-js/modules";
 | 
						|
  function inject(name, utils) {
 | 
						|
    if (typeof name === "string") {
 | 
						|
      // Some polyfills aren't always available, for example
 | 
						|
      // web.dom.iterable when targeting node
 | 
						|
      if (has(polyfills, name) && shouldInjectPolyfill(name)) {
 | 
						|
        debug(name);
 | 
						|
        utils.injectGlobalImport(`${coreJSBase}/${name}.js`);
 | 
						|
      }
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    name.forEach(name => inject(name, utils));
 | 
						|
  }
 | 
						|
  function maybeInjectPure(desc, hint, utils) {
 | 
						|
    let {
 | 
						|
      pure,
 | 
						|
      meta,
 | 
						|
      name
 | 
						|
    } = desc;
 | 
						|
    if (!pure || !shouldInjectPolyfill(name)) return;
 | 
						|
    if (runtimeVersion && meta && meta.minRuntimeVersion && !hasMinVersion(meta && meta.minRuntimeVersion, runtimeVersion)) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    // Unfortunately core-js and @babel/runtime-corejs2 don't have the same
 | 
						|
    // directory structure, so we need to special case this.
 | 
						|
    if (useBabelRuntime && pure === "symbol/index") pure = "symbol";
 | 
						|
    return utils.injectDefaultImport(`${coreJSBase}/${pure}${ext}`, hint);
 | 
						|
  }
 | 
						|
  return {
 | 
						|
    name: "corejs2",
 | 
						|
    runtimeName: noRuntimeName ? null : BABEL_RUNTIME,
 | 
						|
    polyfills,
 | 
						|
    entryGlobal(meta, utils, path) {
 | 
						|
      if (meta.kind === "import" && meta.source === "core-js") {
 | 
						|
        debug(null);
 | 
						|
        inject(Object.keys(polyfills), utils);
 | 
						|
        if (entryInjectRegenerator) {
 | 
						|
          utils.injectGlobalImport("regenerator-runtime/runtime.js");
 | 
						|
        }
 | 
						|
        path.remove();
 | 
						|
      }
 | 
						|
    },
 | 
						|
    usageGlobal(meta, utils) {
 | 
						|
      const resolved = resolve(meta);
 | 
						|
      if (!resolved) return;
 | 
						|
      let deps = resolved.desc.global;
 | 
						|
      if (resolved.kind !== "global" && "object" in meta && meta.object && meta.placement === "prototype") {
 | 
						|
        const low = meta.object.toLowerCase();
 | 
						|
        deps = deps.filter(m => m.includes(low));
 | 
						|
      }
 | 
						|
      inject(deps, utils);
 | 
						|
    },
 | 
						|
    usagePure(meta, utils, path) {
 | 
						|
      if (meta.kind === "in") {
 | 
						|
        if (meta.key === "Symbol.iterator") {
 | 
						|
          path.replaceWith(t.callExpression(utils.injectDefaultImport(`${coreJSBase}/is-iterable${ext}`, "isIterable"), [path.node.right] // meta.kind === "in" narrows this
 | 
						|
          ));
 | 
						|
        }
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      if (path.parentPath.isUnaryExpression({
 | 
						|
        operator: "delete"
 | 
						|
      })) return;
 | 
						|
      if (meta.kind === "property") {
 | 
						|
        // We can't compile destructuring.
 | 
						|
        if (!path.isMemberExpression()) return;
 | 
						|
        if (!path.isReferenced()) return;
 | 
						|
        if (meta.key === "Symbol.iterator" && shouldInjectPolyfill("es6.symbol") && path.parentPath.isCallExpression({
 | 
						|
          callee: path.node
 | 
						|
        }) && path.parentPath.node.arguments.length === 0) {
 | 
						|
          path.parentPath.replaceWith(t.callExpression(utils.injectDefaultImport(`${coreJSBase}/get-iterator${ext}`, "getIterator"), [path.node.object]));
 | 
						|
          path.skip();
 | 
						|
          return;
 | 
						|
        }
 | 
						|
      }
 | 
						|
      const resolved = resolve(meta);
 | 
						|
      if (!resolved) return;
 | 
						|
      const id = maybeInjectPure(resolved.desc, resolved.name, utils);
 | 
						|
      if (id) path.replaceWith(id);
 | 
						|
    },
 | 
						|
    visitor: method === "usage-global" && {
 | 
						|
      // yield*
 | 
						|
      YieldExpression(path) {
 | 
						|
        if (path.node.delegate) {
 | 
						|
          inject("web.dom.iterable", api.getUtils(path));
 | 
						|
        }
 | 
						|
      },
 | 
						|
      // for-of, [a, b] = c
 | 
						|
      "ForOfStatement|ArrayPattern"(path) {
 | 
						|
        CommonIterators.forEach(name => inject(name, api.getUtils(path)));
 | 
						|
      }
 | 
						|
    }
 | 
						|
  };
 | 
						|
});
 | 
						|
 | 
						|
export { index as default };
 | 
						|
//# sourceMappingURL=index.mjs.map
 |