From c2073232bc3141c00f2a53fd41e927dcbb12641e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Fri, 20 Mar 2020 13:26:06 +0100 Subject: [PATCH] Better flow coverage --- .flowconfig | 2 +- .../src/define-provider.js | 11 +++++++++++ .../babel-plugin-inject-polyfills/src/index.js | 12 +++--------- .../babel-plugin-inject-polyfills/src/types.js | 2 ++ .../src/add-platform-specific-polyfills.js | 6 +++++- .../src/index.js | 10 +++++----- .../src/index.js | 8 ++++---- .../src/index.js | 17 +++++++++++++---- 8 files changed, 44 insertions(+), 24 deletions(-) create mode 100644 packages/babel-plugin-inject-polyfills/src/define-provider.js diff --git a/.flowconfig b/.flowconfig index 332fb996..79dc85e8 100644 --- a/.flowconfig +++ b/.flowconfig @@ -10,4 +10,4 @@ include_warnings=true suppress_comment= \\(.\\|\n\\)*\\$FlowIgnore suppress_type=$FlowIgnore esproposal.optional_chaining=enable -module.name_mapper='^@babel\/plugin-inject-polyfills$' -> '/packages/babel-plugin-inject-polyfills/src/index' \ No newline at end of file +module.name_mapper='^@babel/plugin-inject-polyfills$' -> '/packages/babel-plugin-inject-polyfills/src/index' \ No newline at end of file diff --git a/packages/babel-plugin-inject-polyfills/src/define-provider.js b/packages/babel-plugin-inject-polyfills/src/define-provider.js new file mode 100644 index 00000000..07b195fd --- /dev/null +++ b/packages/babel-plugin-inject-polyfills/src/define-provider.js @@ -0,0 +1,11 @@ +// @flow + +import type { PolyfillProviderInternal, PolyfillProvider } from "./types"; + +export function defineProvider( + factory: PolyfillProvider, +): PolyfillProviderInternal { + // This will allow us to do some things + + return (factory: any); +} diff --git a/packages/babel-plugin-inject-polyfills/src/index.js b/packages/babel-plugin-inject-polyfills/src/index.js index 96601a42..6834d4b7 100644 --- a/packages/babel-plugin-inject-polyfills/src/index.js +++ b/packages/babel-plugin-inject-polyfills/src/index.js @@ -23,19 +23,13 @@ import { } from "./debug-utils"; import { validateIncludeExclude } from "./normalize-options"; -import type { - ProviderApi, - Options, - Targets, - MetaDescriptor, - PolyfillProvider, - Utils, -} from "./types"; +import type { ProviderApi, Options, Targets, MetaDescriptor } from "./types"; import createMetaResolver from "./meta-resolver"; +export { defineProvider } from "./define-provider"; export { resolveProvider } from "./config"; -export type { PolyfillProvider, MetaDescriptor, Utils }; +export type { PolyfillProvider, MetaDescriptor, Utils, Targets } from "./types"; export default declare((api, options: Options, dirname: string) => { api.assertVersion(7); diff --git a/packages/babel-plugin-inject-polyfills/src/types.js b/packages/babel-plugin-inject-polyfills/src/types.js index f33601a4..3a6acd0c 100644 --- a/packages/babel-plugin-inject-polyfills/src/types.js +++ b/packages/babel-plugin-inject-polyfills/src/types.js @@ -29,6 +29,8 @@ export type PolyfillProvider = ( dirname: string, ) => ProviderResult; +export opaque type PolyfillProviderInternal = PolyfillProvider; + export type MethodString = "entry-global" | "usage-global" | "usage-pure"; export type Targets = { diff --git a/packages/babel-polyfill-provider-corejs2/src/add-platform-specific-polyfills.js b/packages/babel-polyfill-provider-corejs2/src/add-platform-specific-polyfills.js index 28bf5372..67c8be1e 100644 --- a/packages/babel-polyfill-provider-corejs2/src/add-platform-specific-polyfills.js +++ b/packages/babel-polyfill-provider-corejs2/src/add-platform-specific-polyfills.js @@ -1,3 +1,7 @@ +// @flow + +import type { Targets } from "@babel/plugin-inject-polyfills"; + const webPolyfills = { "web.timers": {}, "web.immediate": {}, @@ -10,7 +14,7 @@ const purePolyfills = { "es7.string.at": {}, }; -export default function(targets, method, polyfills) { +export default function(targets: Targets, method: string, polyfills: Object) { const targetNames = Object.keys(targets); const isAnyTarget = !targetNames.length; const isWebTarget = targetNames.some(name => name !== "node"); diff --git a/packages/babel-polyfill-provider-corejs2/src/index.js b/packages/babel-polyfill-provider-corejs2/src/index.js index 5808c929..0e790438 100644 --- a/packages/babel-polyfill-provider-corejs2/src/index.js +++ b/packages/babel-polyfill-provider-corejs2/src/index.js @@ -10,7 +10,7 @@ import { import addPlatformSpecificPolyfills from "./add-platform-specific-polyfills"; import { hasMinVersion } from "./helpers"; -import type { PolyfillProvider } from "@babel/plugin-inject-polyfills"; +import { defineProvider } from "@babel/plugin-inject-polyfills"; import { types as t } from "@babel/core"; const presetEnvCompat: "#__secret_key__@babel/preset-env__compatibility" = @@ -26,13 +26,13 @@ type Options = {| }, |}; -export default (( +export default defineProvider(function( api, { version: runtimeVersion = "7.0.0-beta.0", [presetEnvCompat]: { entryInjectRegenerator } = {}, }, -) => { +) { const resolve = api.createMetaResolver({ global: BuiltIns, static: StaticProperties, @@ -50,7 +50,7 @@ export default (( const coreJSBase = method === "usage-pure" ? "core-js/library/fn" : "core-js/modules"; - function inject(name, utils) { + function inject(name: string | string[], utils) { if (typeof name === "string") { if (shouldInjectPolyfill(name)) { debug(name); @@ -185,4 +185,4 @@ export default (( }, }, }; -}: PolyfillProvider); +}); diff --git a/packages/babel-polyfill-provider-corejs3/src/index.js b/packages/babel-polyfill-provider-corejs3/src/index.js index 0fb96a54..42b079fd 100644 --- a/packages/babel-polyfill-provider-corejs3/src/index.js +++ b/packages/babel-polyfill-provider-corejs3/src/index.js @@ -16,7 +16,7 @@ import { import { types as t } from "@babel/core"; import { callMethod, coreJSModule, isCoreJSSource } from "./utils"; -import { type PolyfillProvider } from "@babel/plugin-inject-polyfills"; +import { defineProvider } from "@babel/plugin-inject-polyfills"; type Options = {| version?: number | string, @@ -24,10 +24,10 @@ type Options = {| shippedProposals?: boolean, |}; -export default (( +export default defineProvider(function( { getUtils, method, shouldInjectPolyfill, createMetaResolver, debug }, { version = 3, proposals, shippedProposals }, -) => { +) { const resolve = createMetaResolver({ global: BuiltIns, static: StaticProperties, @@ -254,4 +254,4 @@ export default (( }, }, }; -}: PolyfillProvider); +}); diff --git a/packages/babel-polyfill-provider-es-shims/src/index.js b/packages/babel-polyfill-provider-es-shims/src/index.js index c0f1c0ed..99fe6d89 100644 --- a/packages/babel-polyfill-provider-es-shims/src/index.js +++ b/packages/babel-polyfill-provider-es-shims/src/index.js @@ -1,6 +1,7 @@ // @flow -import type { PolyfillProvider, Utils } from "@babel/plugin-inject-polyfills"; +import { defineProvider, type Utils } from "@babel/plugin-inject-polyfills"; + import resolve from "resolve"; import debounce from "lodash.debounce"; @@ -13,11 +14,19 @@ import { InstanceProperties, } from "./mappings"; -export default (( +type Options = {| + missingDependencies?: { + log?: "per-file" | "deferred", + // When true, log all the polyfills without checking if they are installed + all?: boolean, + }, +|}; + +export default defineProvider(function( { shouldInjectPolyfill, createMetaResolver, debug }, options, dirname, -) => { +) { const resolvePolyfill = createMetaResolver({ global: Globals, static: StaticProperties, @@ -86,7 +95,7 @@ export default (( } }, }; -}: PolyfillProvider<*>); +}); function hasDependency(basedir, name) { try {