-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
/
plugins-compat-data.ts
26 lines (22 loc) 路 1.08 KB
/
plugins-compat-data.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import originalPlugins from "@babel/compat-data/plugins";
import originalPluginsBugfixes from "@babel/compat-data/plugin-bugfixes";
import originalOverlappingPlugins from "@babel/compat-data/overlapping-plugins";
import availablePlugins from "./available-plugins.ts";
const keys: <O extends object>(o: O) => (keyof O)[] = Object.keys;
export const plugins = filterAvailable(originalPlugins);
export const pluginsBugfixes = filterAvailable(originalPluginsBugfixes);
export const overlappingPlugins = filterAvailable(originalOverlappingPlugins);
// @ts-expect-error: we extend this here, since it's a syntax plugin and thus
// doesn't make sense to store it in a compat-data package.
overlappingPlugins["syntax-import-attributes"] = ["syntax-import-assertions"];
function filterAvailable<Data extends { [name: string]: unknown }>(
data: Data,
): { [Name in keyof Data & keyof typeof availablePlugins]: Data[Name] } {
const result = {} as any;
for (const plugin of keys(data)) {
if (Object.hasOwn(availablePlugins, plugin)) {
result[plugin] = data[plugin];
}
}
return result;
}