Expose an API to check if a helper is available in a given version range.
This commit is contained in:
parent
eb0e999987
commit
810b7916c2
@ -32,6 +32,20 @@ declare module "lodash/merge" {
|
|||||||
declare export default <T: Object>(T, Object) => T;
|
declare export default <T: Object>(T, Object) => T;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare module "semver" {
|
||||||
|
declare module.exports: {
|
||||||
|
valid(v: string): boolean;
|
||||||
|
gt(v1: string, v2: string): boolean;
|
||||||
|
lt(v1: string, v2: string): boolean;
|
||||||
|
major(v: string): number;
|
||||||
|
minor(v: string): number;
|
||||||
|
patch(v: string): number;
|
||||||
|
satisfies(v1: string, r1: string): boolean;
|
||||||
|
|
||||||
|
intersects(r1: string, r2: string): boolean;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
declare module "source-map" {
|
declare module "source-map" {
|
||||||
declare export type SourceMap = {
|
declare export type SourceMap = {
|
||||||
version: 3,
|
version: 3,
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import { NodePath, Hub, Scope } from "@babel/traverse";
|
|||||||
import { codeFrameColumns } from "@babel/code-frame";
|
import { codeFrameColumns } from "@babel/code-frame";
|
||||||
import traverse from "@babel/traverse";
|
import traverse from "@babel/traverse";
|
||||||
import * as t from "@babel/types";
|
import * as t from "@babel/types";
|
||||||
|
import semver from "semver";
|
||||||
|
|
||||||
import type { NormalizedFile } from "../normalize-file";
|
import type { NormalizedFile } from "../normalize-file";
|
||||||
|
|
||||||
@ -136,6 +137,30 @@ export default class File {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a given helper is available in @babel/core's helper list.
|
||||||
|
*
|
||||||
|
* This _also_ allows you to pass a Babel version specifically. If the
|
||||||
|
* helper exists, but was not available for the full given range, it will be
|
||||||
|
* considered unavailable.
|
||||||
|
*/
|
||||||
|
availableHelper(name: string, versionRange: ?string) {
|
||||||
|
let minVersion;
|
||||||
|
try {
|
||||||
|
minVersion = helpers.minVersion(name);
|
||||||
|
} catch (err) {
|
||||||
|
if (err.code !== "BABEL_HELPER_UNKNOWN") throw err;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
typeof versionRange !== "string" ||
|
||||||
|
(!semver.intersects(`<${minVersion}`, versionRange) &&
|
||||||
|
!semver.intersects(`>=8.0.0`, versionRange))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
addHelper(name: string): Object {
|
addHelper(name: string): Object {
|
||||||
const declar = this.declarations[name];
|
const declar = this.declarations[name];
|
||||||
if (declar) return t.cloneNode(declar);
|
if (declar) return t.cloneNode(declar);
|
||||||
|
|||||||
@ -31,6 +31,10 @@ export default class PluginPass {
|
|||||||
return this._map.get(key);
|
return this._map.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
availableHelper(name: string, versionRange: ?string) {
|
||||||
|
return this.file.availableHelper(name, versionRange);
|
||||||
|
}
|
||||||
|
|
||||||
addHelper(name: string) {
|
addHelper(name: string) {
|
||||||
return this.file.addHelper(name);
|
return this.file.addHelper(name);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user