blob: 2049c8848fb7c4e18874d9f03df414057d6d4366 [file] [log] [blame]
"use strict";
/**
* @fileoverview Really small utility functions that didn't deserve their own files
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.upperCaseFirst = exports.MemberNameType = exports.isDefinitionFile = exports.getNameFromMember = exports.getNameFromIndexSignature = exports.getEnumNames = exports.formatWordList = exports.findFirstResult = exports.arraysAreEqual = void 0;
const utils_1 = require("@typescript-eslint/utils");
const type_utils_1 = require("@typescript-eslint/type-utils");
/**
* Check if the context file name is *.d.ts or *.d.tsx
*/
function isDefinitionFile(fileName) {
return /\.d\.tsx?$/i.test(fileName || '');
}
exports.isDefinitionFile = isDefinitionFile;
/**
* Upper cases the first character or the string
*/
function upperCaseFirst(str) {
return str[0].toUpperCase() + str.slice(1);
}
exports.upperCaseFirst = upperCaseFirst;
function arraysAreEqual(a, b, eq) {
return (a === b ||
(a !== undefined &&
b !== undefined &&
a.length === b.length &&
a.every((x, idx) => eq(x, b[idx]))));
}
exports.arraysAreEqual = arraysAreEqual;
/** Returns the first non-`undefined` result. */
function findFirstResult(inputs, getResult) {
for (const element of inputs) {
const result = getResult(element);
if (result !== undefined) {
return result;
}
}
return undefined;
}
exports.findFirstResult = findFirstResult;
/**
* Gets a string representation of the name of the index signature.
*/
function getNameFromIndexSignature(node) {
const propName = node.parameters.find((parameter) => parameter.type === utils_1.AST_NODE_TYPES.Identifier);
return propName ? propName.name : '(index signature)';
}
exports.getNameFromIndexSignature = getNameFromIndexSignature;
var MemberNameType;
(function (MemberNameType) {
MemberNameType[MemberNameType["Private"] = 1] = "Private";
MemberNameType[MemberNameType["Quoted"] = 2] = "Quoted";
MemberNameType[MemberNameType["Normal"] = 3] = "Normal";
MemberNameType[MemberNameType["Expression"] = 4] = "Expression";
})(MemberNameType || (MemberNameType = {}));
exports.MemberNameType = MemberNameType;
/**
* Gets a string name representation of the name of the given MethodDefinition
* or PropertyDefinition node, with handling for computed property names.
*/
function getNameFromMember(member, sourceCode) {
if (member.key.type === utils_1.AST_NODE_TYPES.Identifier) {
return {
type: MemberNameType.Normal,
name: member.key.name,
};
}
if (member.key.type === utils_1.AST_NODE_TYPES.PrivateIdentifier) {
return {
type: MemberNameType.Private,
name: `#${member.key.name}`,
};
}
if (member.key.type === utils_1.AST_NODE_TYPES.Literal) {
const name = `${member.key.value}`;
if ((0, type_utils_1.requiresQuoting)(name)) {
return {
type: MemberNameType.Quoted,
name: `"${name}"`,
};
}
else {
return {
type: MemberNameType.Normal,
name,
};
}
}
return {
type: MemberNameType.Expression,
name: sourceCode.text.slice(...member.key.range),
};
}
exports.getNameFromMember = getNameFromMember;
function getEnumNames(myEnum) {
return Object.keys(myEnum).filter(x => isNaN(parseInt(x)));
}
exports.getEnumNames = getEnumNames;
/**
* Given an array of words, returns an English-friendly concatenation, separated with commas, with
* the `and` clause inserted before the last item.
*
* Example: ['foo', 'bar', 'baz' ] returns the string "foo, bar, and baz".
*/
function formatWordList(words) {
if (!(words === null || words === void 0 ? void 0 : words.length)) {
return '';
}
if (words.length === 1) {
return words[0];
}
return [words.slice(0, -1).join(', '), words.slice(-1)[0]].join(' and ');
}
exports.formatWordList = formatWordList;
//# sourceMappingURL=misc.js.map