Skip to content

Commit 42cb285

Browse files
liuxingbaoyuJLHwungnicolo-ribaudo
authored
Improve @babel/core types (#17404)
Co-authored-by: Huáng Jùnliàng <[email protected]> Co-authored-by: Nicolò Ribaudo <[email protected]>
1 parent 6a0192d commit 42cb285

File tree

28 files changed

+317
-247
lines changed

28 files changed

+317
-247
lines changed

eslint/babel-eslint-parser/src/worker/configuration.cts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import babel = require("./babel-core.cts");
22
import semver = require("semver");
33
import ESLINT_VERSION = require("../utils/eslint-version.cts");
4-
import type { InputOptions } from "@babel/core";
4+
import type { InputOptions, NormalizedOptions } from "@babel/core";
55
import type { Options } from "../types.cts";
66
import type { PartialConfig } from "../../../../packages/babel-core/src/config";
77

@@ -80,7 +80,7 @@ function validateResolvedConfig(
8080
config: PartialConfig,
8181
options: Options,
8282
parseOptions: InputOptions,
83-
) {
83+
): InputOptions | NormalizedOptions {
8484
if (config !== null) {
8585
if (options.requireConfigFile !== false) {
8686
if (!config.hasFilesystemConfig()) {
@@ -113,13 +113,15 @@ function getDefaultParserOptions(options: InputOptions): InputOptions {
113113

114114
export async function normalizeBabelParseConfig(
115115
options: Options,
116-
): Promise<InputOptions> {
116+
): Promise<InputOptions | NormalizedOptions> {
117117
const parseOptions = normalizeParserOptions(options, babel.version);
118118
const config = await babel.loadPartialConfigAsync(parseOptions);
119119
return validateResolvedConfig(config, options, parseOptions);
120120
}
121121

122-
export function normalizeBabelParseConfigSync(options: Options): InputOptions {
122+
export function normalizeBabelParseConfigSync(
123+
options: Options,
124+
): InputOptions | NormalizedOptions {
123125
const parseOptions = normalizeParserOptions(options, babel.version);
124126
const config = babel.loadPartialConfigSync(parseOptions);
125127
return validateResolvedConfig(config, options, parseOptions);

eslint/babel-eslint-parser/src/worker/maybeParseSync.cts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import convert = require("../convert/index.cts");
33
import astInfo = require("./ast-info.cts");
44
import extractParserOptionsPlugin = require("./extract-parser-options-plugin.cjs");
55

6-
import type { InputOptions, ConfigItem } from "@babel/core";
6+
import type { InputOptions, ConfigItem, NormalizedOptions } from "@babel/core";
77
import type { AST, ParseResult } from "../types.cts";
88

99
const { getVisitorKeys, getTokLabels } = astInfo;
@@ -15,7 +15,7 @@ const MULTIPLE_OVERRIDES = /More than one plugin attempted to override parsing/;
1515

1616
export = function maybeParseSync(
1717
code: string,
18-
options: InputOptions,
18+
options: InputOptions | NormalizedOptions,
1919
): {
2020
ast: AST.Program | null;
2121
parserOptions: ParseResult | null;

packages/babel-core/src/config/cache-contexts.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import type { Targets } from "@babel/helper-compilation-targets";
2-
31
import type { ConfigContext } from "./config-chain.ts";
4-
import type { CallerMetadata } from "./validation/options.ts";
2+
import type {
3+
CallerMetadata,
4+
TargetsListOrObject,
5+
} from "./validation/options.ts";
56

67
export type { ConfigContext as FullConfig };
78

89
export type FullPreset = {
9-
targets: Targets;
10+
targets: TargetsListOrObject;
1011
} & ConfigContext;
1112
export type FullPlugin = {
1213
assumptions: { [name: string]: boolean };
@@ -19,7 +20,7 @@ export type SimpleConfig = {
1920
caller: CallerMetadata | undefined;
2021
};
2122
export type SimplePreset = {
22-
targets: Targets;
23+
targets: TargetsListOrObject;
2324
} & SimpleConfig;
2425
export type SimplePlugin = {
2526
assumptions: {

packages/babel-core/src/config/config-chain.ts

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import buildDebug from "debug";
55
import type { Handler } from "gensync";
66
import { validate } from "./validation/options.ts";
77
import type {
8-
ValidatedOptions,
9-
IgnoreList,
108
ConfigApplicableTest,
119
BabelrcSearch,
1210
CallerMetadata,
13-
IgnoreItem,
11+
MatchItem,
12+
InputOptions,
13+
ConfigChainOptions,
1414
} from "./validation/options.ts";
1515
import pathPatternToRegex from "./pattern-to-regex.ts";
1616
import { ConfigPrinter, ChainFormatter } from "./printer.ts";
@@ -45,12 +45,12 @@ import type {
4545
export type ConfigChain = {
4646
plugins: Array<UnloadedDescriptor<PluginAPI>>;
4747
presets: Array<UnloadedDescriptor<PresetAPI>>;
48-
options: Array<ValidatedOptions>;
48+
options: Array<ConfigChainOptions>;
4949
files: Set<string>;
5050
};
5151

5252
export type PresetInstance = {
53-
options: ValidatedOptions;
53+
options: InputOptions;
5454
alias: string;
5555
dirname: string;
5656
externalDependencies: ReadonlyDeepArray<string>;
@@ -78,7 +78,7 @@ export function* buildPresetChain(
7878
return {
7979
plugins: dedupDescriptors(chain.plugins),
8080
presets: dedupDescriptors(chain.presets),
81-
options: chain.options.map(o => normalizeOptions(o)),
81+
options: chain.options.map(o => createConfigChainOptions(o)),
8282
files: new Set(),
8383
};
8484
}
@@ -132,9 +132,9 @@ const loadPresetOverridesEnvDescriptors = makeWeakCacheSync(
132132

133133
export type FileHandling = "transpile" | "ignored" | "unsupported";
134134
export type RootConfigChain = ConfigChain & {
135-
babelrc: ConfigFile | void;
136-
config: ConfigFile | void;
137-
ignore: IgnoreFile | void;
135+
babelrc: ConfigFile | undefined;
136+
config: ConfigFile | undefined;
137+
ignore: IgnoreFile | undefined;
138138
fileHandling: FileHandling;
139139
files: Set<string>;
140140
};
@@ -143,7 +143,7 @@ export type RootConfigChain = ConfigChain & {
143143
* Build a config chain for Babel's full root configuration.
144144
*/
145145
export function* buildRootChain(
146-
opts: ValidatedOptions,
146+
opts: InputOptions,
147147
context: ConfigContext,
148148
): Handler<RootConfigChain | null> {
149149
let configReport, babelRcReport;
@@ -279,7 +279,9 @@ export function* buildRootChain(
279279
return {
280280
plugins: isIgnored ? [] : dedupDescriptors(chain.plugins),
281281
presets: isIgnored ? [] : dedupDescriptors(chain.presets),
282-
options: isIgnored ? [] : chain.options.map(o => normalizeOptions(o)),
282+
options: isIgnored
283+
? []
284+
: chain.options.map(o => createConfigChainOptions(o)),
283285
fileHandling: isIgnored ? "ignored" : "transpile",
284286
ignore: ignoreFile || undefined,
285287
babelrc: babelrcFile || undefined,
@@ -306,7 +308,7 @@ function babelrcLoadEnabled(
306308

307309
let babelrcPatterns = babelrcRoots;
308310
if (!Array.isArray(babelrcPatterns)) {
309-
babelrcPatterns = [babelrcPatterns as IgnoreItem];
311+
babelrcPatterns = [babelrcPatterns];
310312
}
311313
babelrcPatterns = babelrcPatterns.map(pat => {
312314
return typeof pat === "string"
@@ -457,7 +459,7 @@ function buildRootDescriptors(
457459
alias: string,
458460
descriptors: (
459461
dirname: string,
460-
options: ValidatedOptions,
462+
options: InputOptions,
461463
alias: string,
462464
) => OptionsAndDescriptors,
463465
) {
@@ -482,7 +484,7 @@ function buildEnvDescriptors(
482484
alias: string,
483485
descriptors: (
484486
dirname: string,
485-
options: ValidatedOptions,
487+
options: InputOptions,
486488
alias: string,
487489
) => OptionsAndDescriptors,
488490
envName: string,
@@ -496,7 +498,7 @@ function buildOverrideDescriptors(
496498
alias: string,
497499
descriptors: (
498500
dirname: string,
499-
options: ValidatedOptions,
501+
options: InputOptions,
500502
alias: string,
501503
) => OptionsAndDescriptors,
502504
index: number,
@@ -512,7 +514,7 @@ function buildOverrideEnvDescriptors(
512514
alias: string,
513515
descriptors: (
514516
dirname: string,
515-
options: ValidatedOptions,
517+
options: InputOptions,
516518
alias: string,
517519
) => OptionsAndDescriptors,
518520
index: number,
@@ -533,7 +535,7 @@ function buildOverrideEnvDescriptors(
533535

534536
function makeChainWalker<
535537
ArgT extends {
536-
options: ValidatedOptions;
538+
options: InputOptions;
537539
dirname: string;
538540
filepath?: string;
539541
},
@@ -666,7 +668,7 @@ function makeChainWalker<
666668

667669
function* mergeExtendsChain(
668670
chain: ConfigChain,
669-
opts: ValidatedOptions,
671+
opts: InputOptions,
670672
dirname: string,
671673
context: ConfigContext,
672674
files: Set<ConfigFile>,
@@ -736,7 +738,7 @@ function emptyChain(): ConfigChain {
736738
};
737739
}
738740

739-
function normalizeOptions(opts: ValidatedOptions): ValidatedOptions {
741+
function createConfigChainOptions(opts: InputOptions): ConfigChainOptions {
740742
const options = {
741743
...opts,
742744
};
@@ -833,8 +835,8 @@ function configFieldIsApplicable(
833835
*/
834836
function ignoreListReplacer(
835837
_key: string,
836-
value: IgnoreList | IgnoreItem,
837-
): IgnoreList | IgnoreItem | string {
838+
value: MatchItem[] | MatchItem,
839+
): MatchItem[] | MatchItem | string {
838840
if (value instanceof RegExp) {
839841
return String(value);
840842
}
@@ -847,8 +849,8 @@ function ignoreListReplacer(
847849
*/
848850
function shouldIgnore(
849851
context: ConfigContext,
850-
ignore: IgnoreList | undefined | null,
851-
only: IgnoreList | undefined | null,
852+
ignore: MatchItem[] | undefined | null,
853+
only: MatchItem[] | undefined | null,
852854
dirname: string,
853855
): boolean {
854856
if (ignore && matchesPatterns(context, ignore, dirname)) {
@@ -888,7 +890,7 @@ function shouldIgnore(
888890
*/
889891
function matchesPatterns(
890892
context: ConfigContext,
891-
patterns: IgnoreList,
893+
patterns: MatchItem[],
892894
dirname: string,
893895
configName?: string,
894896
): boolean {
@@ -898,7 +900,7 @@ function matchesPatterns(
898900
}
899901

900902
function matchPattern(
901-
pattern: IgnoreItem,
903+
pattern: MatchItem,
902904
dirname: string,
903905
pathToTest: string | undefined,
904906
context: ConfigContext,

0 commit comments

Comments
 (0)