2 Object.defineProperty(exports, "__esModule", { value: true });
3 var ts = require("typescript");
4 var type_1 = require("../typeguard/type");
5 var util_1 = require("./util");
6 function isEmptyObjectType(type) {
7 if (type_1.isObjectType(type) &&
8 type.objectFlags & ts.ObjectFlags.Anonymous &&
9 type.getProperties().length === 0 &&
10 type.getCallSignatures().length === 0 &&
11 type.getConstructSignatures().length === 0 &&
12 type.getStringIndexType() === undefined &&
13 type.getNumberIndexType() === undefined) {
14 var baseTypes = type.getBaseTypes();
15 return baseTypes === undefined || baseTypes.every(isEmptyObjectType);
19 exports.isEmptyObjectType = isEmptyObjectType;
20 function removeOptionalityFromType(checker, type) {
21 if (!containsTypeWithFlag(type, ts.TypeFlags.Undefined))
23 var allowsNull = containsTypeWithFlag(type, ts.TypeFlags.Null);
24 type = checker.getNonNullableType(type);
25 return allowsNull ? checker.getNullableType(type, ts.TypeFlags.Null) : type;
27 exports.removeOptionalityFromType = removeOptionalityFromType;
28 function containsTypeWithFlag(type, flag) {
29 for (var _i = 0, _a = unionTypeParts(type); _i < _a.length; _i++) {
31 if (util_1.isTypeFlagSet(t, flag))
36 function isTypeAssignableToNumber(checker, type) {
37 return isTypeAssignableTo(checker, type, ts.TypeFlags.NumberLike);
39 exports.isTypeAssignableToNumber = isTypeAssignableToNumber;
40 function isTypeAssignableToString(checker, type) {
41 return isTypeAssignableTo(checker, type, ts.TypeFlags.StringLike);
43 exports.isTypeAssignableToString = isTypeAssignableToString;
44 function isTypeAssignableTo(checker, type, flags) {
45 flags |= ts.TypeFlags.Any;
46 var typeParametersSeen;
47 return (function check(t) {
48 if (type_1.isTypeParameter(t) && t.symbol !== undefined && t.symbol.declarations !== undefined) {
49 if (typeParametersSeen === undefined) {
50 typeParametersSeen = new Set([t]);
52 else if (!typeParametersSeen.has(t)) {
53 typeParametersSeen.add(t);
58 var declaration = t.symbol.declarations[0];
59 if (declaration.constraint === undefined)
61 return check(checker.getTypeFromTypeNode(declaration.constraint));
63 if (type_1.isUnionType(t))
64 return t.types.every(check);
65 if (type_1.isIntersectionType(t))
66 return t.types.some(check);
67 return util_1.isTypeFlagSet(t, flags);
70 function getCallSignaturesOfType(type) {
71 if (type_1.isUnionType(type)) {
73 for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
75 signatures.push.apply(signatures, getCallSignaturesOfType(t));
79 if (type_1.isIntersectionType(type)) {
80 var signatures = void 0;
81 for (var _b = 0, _c = type.types; _b < _c.length; _b++) {
83 var sig = getCallSignaturesOfType(t);
84 if (sig.length !== 0) {
85 if (signatures !== undefined)
90 return signatures === undefined ? [] : signatures;
92 return type.getCallSignatures();
94 exports.getCallSignaturesOfType = getCallSignaturesOfType;
95 function unionTypeParts(type) {
96 return type_1.isUnionType(type) ? type.types : [type];
98 exports.unionTypeParts = unionTypeParts;
99 function isThenableType(checker, node, type) {
100 if (type === void 0) { type = checker.getTypeAtLocation(node); }
101 for (var _i = 0, _a = unionTypeParts(checker.getApparentType(type)); _i < _a.length; _i++) {
103 var then = ty.getProperty('then');
104 if (then === undefined)
106 var thenType = checker.getTypeOfSymbolAtLocation(then, node);
107 for (var _b = 0, _c = unionTypeParts(thenType); _b < _c.length; _b++) {
109 for (var _d = 0, _e = t.getCallSignatures(); _d < _e.length; _d++) {
110 var signature = _e[_d];
111 if (signature.parameters.length !== 0 && isCallback(checker, signature.parameters[0], node))
118 exports.isThenableType = isThenableType;
119 function isCallback(checker, param, node) {
120 var type = checker.getApparentType(checker.getTypeOfSymbolAtLocation(param, node));
121 if (param.valueDeclaration.dotDotDotToken) {
122 type = type.getNumberIndexType();
123 if (type === undefined)
126 for (var _i = 0, _a = unionTypeParts(type); _i < _a.length; _i++) {
128 if (t.getCallSignatures().length !== 0)
133 function isFalsyType(type) {
134 if (type.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Null | ts.TypeFlags.Void))
136 if (type_1.isLiteralType(type))
138 if (type.flags & ts.TypeFlags.BooleanLiteral)
139 return type.intrinsicName === 'false';
142 exports.isFalsyType = isFalsyType;
143 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQkFBaUM7QUFDakMsMENBQWtIO0FBQ2xILCtCQUF1QztBQUV2QyxTQUFnQixpQkFBaUIsQ0FBQyxJQUFhO0lBQzNDLElBQUksbUJBQVksQ0FBQyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLFNBQVM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssU0FBUyxFQUFFO1FBQ3pDLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QyxPQUFPLFNBQVMsS0FBSyxTQUFTLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3hFO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQVpELDhDQVlDO0FBRUQsU0FBZ0IseUJBQXlCLENBQUMsT0FBdUIsRUFBRSxJQUFhO0lBQzVFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUM7SUFDaEIsSUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxPQUFPLFVB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