UNPKG

4.1 kBJavaScriptView Raw
1"use strict";
2/**
3 * @fileoverview Really small utility functions that didn't deserve their own files
4 */
5Object.defineProperty(exports, "__esModule", { value: true });
6exports.upperCaseFirst = exports.MemberNameType = exports.isDefinitionFile = exports.getNameFromMember = exports.getNameFromIndexSignature = exports.getEnumNames = exports.formatWordList = exports.findFirstResult = exports.arraysAreEqual = void 0;
7const utils_1 = require("@typescript-eslint/utils");
8const type_utils_1 = require("@typescript-eslint/type-utils");
9/**
10 * Check if the context file name is *.d.ts or *.d.tsx
11 */
12function isDefinitionFile(fileName) {
13 return /\.d\.tsx?$/i.test(fileName || '');
14}
15exports.isDefinitionFile = isDefinitionFile;
16/**
17 * Upper cases the first character or the string
18 */
19function upperCaseFirst(str) {
20 return str[0].toUpperCase() + str.slice(1);
21}
22exports.upperCaseFirst = upperCaseFirst;
23function arraysAreEqual(a, b, eq) {
24 return (a === b ||
25 (a !== undefined &&
26 b !== undefined &&
27 a.length === b.length &&
28 a.every((x, idx) => eq(x, b[idx]))));
29}
30exports.arraysAreEqual = arraysAreEqual;
31/** Returns the first non-`undefined` result. */
32function findFirstResult(inputs, getResult) {
33 for (const element of inputs) {
34 const result = getResult(element);
35 if (result !== undefined) {
36 return result;
37 }
38 }
39 return undefined;
40}
41exports.findFirstResult = findFirstResult;
42/**
43 * Gets a string representation of the name of the index signature.
44 */
45function getNameFromIndexSignature(node) {
46 const propName = node.parameters.find((parameter) => parameter.type === utils_1.AST_NODE_TYPES.Identifier);
47 return propName ? propName.name : '(index signature)';
48}
49exports.getNameFromIndexSignature = getNameFromIndexSignature;
50var MemberNameType;
51(function (MemberNameType) {
52 MemberNameType[MemberNameType["Private"] = 1] = "Private";
53 MemberNameType[MemberNameType["Quoted"] = 2] = "Quoted";
54 MemberNameType[MemberNameType["Normal"] = 3] = "Normal";
55 MemberNameType[MemberNameType["Expression"] = 4] = "Expression";
56})(MemberNameType || (MemberNameType = {}));
57exports.MemberNameType = MemberNameType;
58/**
59 * Gets a string name representation of the name of the given MethodDefinition
60 * or PropertyDefinition node, with handling for computed property names.
61 */
62function getNameFromMember(member, sourceCode) {
63 if (member.key.type === utils_1.AST_NODE_TYPES.Identifier) {
64 return {
65 type: MemberNameType.Normal,
66 name: member.key.name,
67 };
68 }
69 if (member.key.type === utils_1.AST_NODE_TYPES.PrivateIdentifier) {
70 return {
71 type: MemberNameType.Private,
72 name: `#${member.key.name}`,
73 };
74 }
75 if (member.key.type === utils_1.AST_NODE_TYPES.Literal) {
76 const name = `${member.key.value}`;
77 if ((0, type_utils_1.requiresQuoting)(name)) {
78 return {
79 type: MemberNameType.Quoted,
80 name: `"${name}"`,
81 };
82 }
83 else {
84 return {
85 type: MemberNameType.Normal,
86 name,
87 };
88 }
89 }
90 return {
91 type: MemberNameType.Expression,
92 name: sourceCode.text.slice(...member.key.range),
93 };
94}
95exports.getNameFromMember = getNameFromMember;
96function getEnumNames(myEnum) {
97 return Object.keys(myEnum).filter(x => isNaN(parseInt(x)));
98}
99exports.getEnumNames = getEnumNames;
100/**
101 * Given an array of words, returns an English-friendly concatenation, separated with commas, with
102 * the `and` clause inserted before the last item.
103 *
104 * Example: ['foo', 'bar', 'baz' ] returns the string "foo, bar, and baz".
105 */
106function formatWordList(words) {
107 if (!(words === null || words === void 0 ? void 0 : words.length)) {
108 return '';
109 }
110 if (words.length === 1) {
111 return words[0];
112 }
113 return [words.slice(0, -1).join(', '), words.slice(-1)[0]].join(' and ');
114}
115exports.formatWordList = formatWordList;
116//# sourceMappingURL=misc.js.map
\No newline at end of file