diff --git a/lib/babel-packages.js.flow b/lib/babel-packages.js.flow index d6d45648e64e..a9629d16a354 100644 --- a/lib/babel-packages.js.flow +++ b/lib/babel-packages.js.flow @@ -133,3 +133,27 @@ declare module "@babel/helper-validator-identifier" { declare function isIdentifierChar(code: number): boolean; declare function isIdentifierName(name: string): boolean; } + +declare module "@babel/helper-validator-option" { + declare class OptionValidator { + descriptor: string; + constructor(descriptor: string): OptionValidator; + validateTopLevelOptions(options: Object, TopLevelOptionShape: Object): void; + validateBooleanOption( + name: string, + value?: boolean, + defaultValue?: T + ): boolean | T; + validateStringOption( + name: string, + value?: string, + defaultValue?: T + ): string | T; + invariant(condition: boolean, message: string): void; + formatMessage(message: string): string; + } + declare function findSuggestion( + str: string, + arr: $ReadonlyArray + ): string; +} diff --git a/packages/babel-helper-validator-option/src/find-suggestion.js b/packages/babel-helper-validator-option/src/find-suggestion.ts similarity index 89% rename from packages/babel-helper-validator-option/src/find-suggestion.js rename to packages/babel-helper-validator-option/src/find-suggestion.ts index 57f14fc4a298..d418632ed307 100644 --- a/packages/babel-helper-validator-option/src/find-suggestion.js +++ b/packages/babel-helper-validator-option/src/find-suggestion.ts @@ -1,5 +1,3 @@ -// @flow - const { min } = Math; // a minimal leven distance implementation @@ -9,7 +7,7 @@ const { min } = Math; // that have less than 20 ASCII characters // https://rosettacode.org/wiki/Levenshtein_distance#ES5 -function levenshtein(a, b) { +function levenshtein(a: string, b: string): number { let t = [], u = [], i, @@ -44,7 +42,7 @@ function levenshtein(a, b) { * @param {string[]} arr * @returns {string} */ -export function findSuggestion(str: string, arr: string[]): string { +export function findSuggestion(str: string, arr: readonly string[]): string { const distances = arr.map(el => levenshtein(el, str)); return arr[distances.indexOf(min(...distances))]; } diff --git a/packages/babel-helper-validator-option/src/index.js b/packages/babel-helper-validator-option/src/index.ts similarity index 100% rename from packages/babel-helper-validator-option/src/index.js rename to packages/babel-helper-validator-option/src/index.ts diff --git a/packages/babel-helper-validator-option/src/validator.js b/packages/babel-helper-validator-option/src/validator.ts similarity index 90% rename from packages/babel-helper-validator-option/src/validator.js rename to packages/babel-helper-validator-option/src/validator.ts index d899023c5dab..eff7165bfb0f 100644 --- a/packages/babel-helper-validator-option/src/validator.js +++ b/packages/babel-helper-validator-option/src/validator.ts @@ -1,4 +1,3 @@ -// @flow import { findSuggestion } from "./find-suggestion.js"; export class OptionValidator { @@ -30,13 +29,13 @@ export class OptionValidator { // note: we do not consider rewrite them to high order functions // until we have to support `validateNumberOption`. - validateBooleanOption( + validateBooleanOption( name: string, value?: boolean, - defaultValue?: boolean, - ): boolean | void { + defaultValue?: T, + ): boolean | T { if (value === undefined) { - value = defaultValue; + return defaultValue; } else { this.invariant( typeof value === "boolean", @@ -46,13 +45,13 @@ export class OptionValidator { return value; } - validateStringOption( + validateStringOption( name: string, value?: string, - defaultValue?: string, - ): string | void { + defaultValue?: T, + ): string | T { if (value === undefined) { - value = defaultValue; + return defaultValue; } else { this.invariant( typeof value === "string",