114 lines
3.7 KiB
JavaScript
114 lines
3.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getTypeScriptTools = getTypeScriptTools;
|
|
exports.getTypeScript = getTypeScript;
|
|
exports.isArrayLikeObject = isArrayLikeObject;
|
|
exports.isClassOrInterface = isClassOrInterface;
|
|
exports.isObject = isObject;
|
|
exports.isReferenceObject = isReferenceObject;
|
|
exports.isUnionOrIntersection = isUnionOrIntersection;
|
|
exports.isTypeParameter = isTypeParameter;
|
|
exports.isAny = isAny;
|
|
exports.isUnknown = isUnknown;
|
|
exports.isStringLine = isStringLine;
|
|
exports.isNumberLike = isNumberLike;
|
|
exports.isBooleanLike = isBooleanLike;
|
|
exports.isBigIntLike = isBigIntLike;
|
|
exports.isNull = isNull;
|
|
function getTypeScriptTools(context) {
|
|
const sourceCode = context.sourceCode;
|
|
const ts = getTypeScript();
|
|
const tsNodeMap = sourceCode.parserServices.esTreeNodeToTSNodeMap;
|
|
const usedTS = Boolean(ts && tsNodeMap);
|
|
const hasFullTypeInformation = usedTS && sourceCode.parserServices.hasFullTypeInformation !== false;
|
|
const checker = (hasFullTypeInformation &&
|
|
sourceCode.parserServices.program &&
|
|
sourceCode.parserServices.program.getTypeChecker()) ||
|
|
null;
|
|
return {
|
|
tsNodeMap: tsNodeMap || new Map(),
|
|
checker,
|
|
usedTS,
|
|
hasFullTypeInformation,
|
|
};
|
|
}
|
|
let cacheTypeScript;
|
|
function getTypeScript() {
|
|
try {
|
|
return (cacheTypeScript !== null && cacheTypeScript !== void 0 ? cacheTypeScript : (cacheTypeScript = require("typescript")));
|
|
}
|
|
catch (e) {
|
|
if (e.code === "MODULE_NOT_FOUND") {
|
|
return undefined;
|
|
}
|
|
if (typeof require === "undefined" ||
|
|
typeof require.define === "function") {
|
|
return undefined;
|
|
}
|
|
if (typeof e.message === "string" &&
|
|
e.message.includes("Dynamic require") &&
|
|
e.message.includes("is not supported")) {
|
|
return undefined;
|
|
}
|
|
throw e;
|
|
}
|
|
}
|
|
function isArrayLikeObject(tsType) {
|
|
const ts = getTypeScript();
|
|
return (isObject(tsType) &&
|
|
(tsType.objectFlags &
|
|
(ts.ObjectFlags.ArrayLiteral |
|
|
ts.ObjectFlags.EvolvingArray |
|
|
ts.ObjectFlags.Tuple)) !==
|
|
0);
|
|
}
|
|
function isClassOrInterface(tsType) {
|
|
const ts = getTypeScript();
|
|
return (isObject(tsType) &&
|
|
(tsType.objectFlags & ts.ObjectFlags.ClassOrInterface) !== 0);
|
|
}
|
|
function isObject(tsType) {
|
|
const ts = getTypeScript();
|
|
return (tsType.flags & ts.TypeFlags.Object) !== 0;
|
|
}
|
|
function isReferenceObject(tsType) {
|
|
const ts = getTypeScript();
|
|
return (isObject(tsType) &&
|
|
(tsType.objectFlags & ts.ObjectFlags.Reference) !== 0);
|
|
}
|
|
function isUnionOrIntersection(tsType) {
|
|
const ts = getTypeScript();
|
|
return (tsType.flags & ts.TypeFlags.UnionOrIntersection) !== 0;
|
|
}
|
|
function isTypeParameter(tsType) {
|
|
const ts = getTypeScript();
|
|
return (tsType.flags & ts.TypeFlags.TypeParameter) !== 0;
|
|
}
|
|
function isAny(tsType) {
|
|
const ts = getTypeScript();
|
|
return (tsType.flags & ts.TypeFlags.Any) !== 0;
|
|
}
|
|
function isUnknown(tsType) {
|
|
const ts = getTypeScript();
|
|
return (tsType.flags & ts.TypeFlags.Unknown) !== 0;
|
|
}
|
|
function isStringLine(tsType) {
|
|
const ts = getTypeScript();
|
|
return (tsType.flags & ts.TypeFlags.StringLike) !== 0;
|
|
}
|
|
function isNumberLike(tsType) {
|
|
const ts = getTypeScript();
|
|
return (tsType.flags & ts.TypeFlags.NumberLike) !== 0;
|
|
}
|
|
function isBooleanLike(tsType) {
|
|
const ts = getTypeScript();
|
|
return (tsType.flags & ts.TypeFlags.BooleanLike) !== 0;
|
|
}
|
|
function isBigIntLike(tsType) {
|
|
const ts = getTypeScript();
|
|
return (tsType.flags & ts.TypeFlags.BigIntLike) !== 0;
|
|
}
|
|
function isNull(tsType) {
|
|
const ts = getTypeScript();
|
|
return (tsType.flags & ts.TypeFlags.Null) !== 0;
|
|
}
|