@tsslint/config 3.0.0-alpha.0 → 3.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/tsslint-docgen.js +98 -0
- package/index.d.ts +3 -0
- package/index.js +3 -0
- package/lib/eslint-gen.d.ts +4 -0
- package/lib/eslint-gen.js +302 -0
- package/lib/eslint-types.d.ts +4667 -0
- package/lib/eslint-types.js +3 -0
- package/lib/eslint.d.ts +27 -0
- package/lib/eslint.js +122 -0
- package/lib/plugins/category.js +1 -1
- package/lib/plugins/ignore.js +3 -3
- package/lib/tsl.d.ts +3 -0
- package/lib/tsl.js +70 -0
- package/lib/tslint-gen.d.ts +4 -0
- package/lib/tslint-gen.js +299 -0
- package/lib/tslint-types.d.ts +3793 -0
- package/lib/tslint-types.js +3 -0
- package/lib/tslint.d.ts +27 -0
- package/lib/tslint.js +167 -0
- package/package.json +29 -4
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --experimental-strip-types --no-warnings
|
|
2
|
+
|
|
3
|
+
const path = require('path');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const nodeModulesDirs = [];
|
|
6
|
+
|
|
7
|
+
let dir = __dirname;
|
|
8
|
+
|
|
9
|
+
while (true) {
|
|
10
|
+
const nodeModuleDir = path.join(dir, 'node_modules');
|
|
11
|
+
if (fs.existsSync(nodeModuleDir)) {
|
|
12
|
+
nodeModulesDirs.push(nodeModuleDir);
|
|
13
|
+
}
|
|
14
|
+
const parentDir = path.resolve(dir, '..');
|
|
15
|
+
if (parentDir === dir) {
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
dir = parentDir;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const dtsGeneratePath = path.resolve(__dirname, '..', 'index.ts');
|
|
22
|
+
if (fs.existsSync(dtsGeneratePath)) {
|
|
23
|
+
console.log('Skip dts docgen in development environment.');
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
const { generateESlintTypes } = require('../lib/eslint-gen');
|
|
29
|
+
const { generateTSLintTypes } = require('../lib/tslint-gen');
|
|
30
|
+
|
|
31
|
+
generateESlintTypes(nodeModulesDirs).then(({ dts, stats }) => {
|
|
32
|
+
fs.writeFileSync(path.resolve(__dirname, '..', 'lib', 'eslint-types.d.ts'), dts);
|
|
33
|
+
|
|
34
|
+
const indexPath = path.resolve(__dirname, '..', 'lib', 'eslint.d.ts');
|
|
35
|
+
if (fs.existsSync(indexPath)) {
|
|
36
|
+
let indexContent = fs.readFileSync(indexPath, 'utf8');
|
|
37
|
+
const fnIndex = indexContent.indexOf('export declare function importESLintRules');
|
|
38
|
+
const jsDocEnd = indexContent.lastIndexOf('*/', fnIndex) + 2;
|
|
39
|
+
const jsDocStart = indexContent.lastIndexOf('/**', jsDocEnd);
|
|
40
|
+
|
|
41
|
+
if (jsDocStart !== -1 && jsDocEnd !== -1 && jsDocStart < fnIndex) {
|
|
42
|
+
const statsTable = [
|
|
43
|
+
'| Plugin | Rules |',
|
|
44
|
+
'| :--- | :--- |',
|
|
45
|
+
...Object.entries(stats)
|
|
46
|
+
.filter(([_, count]) => count > 0)
|
|
47
|
+
.sort((a, b) => b[1] - a[1])
|
|
48
|
+
.map(([name, count]) => `| <span>${name}</span> | ${count} |`),
|
|
49
|
+
].join('\n * ');
|
|
50
|
+
|
|
51
|
+
const newJsDoc = `/**
|
|
52
|
+
* Converts an ESLint rules configuration to TSSLint rules.
|
|
53
|
+
*
|
|
54
|
+
* ${statsTable}
|
|
55
|
+
*
|
|
56
|
+
* If you have added new ESLint plugins, please run \`npx tsslint-docgen\` to update this list.
|
|
57
|
+
*/`;
|
|
58
|
+
indexContent = indexContent.slice(0, jsDocStart) + newJsDoc + indexContent.slice(jsDocEnd);
|
|
59
|
+
fs.writeFileSync(indexPath, indexContent);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
generateTSLintTypes(nodeModulesDirs).then(({ dts, stats }) => {
|
|
64
|
+
fs.writeFileSync(path.resolve(__dirname, '..', 'lib', 'tslint-types.d.ts'), dts);
|
|
65
|
+
|
|
66
|
+
const indexPath = path.resolve(__dirname, '..', 'lib', 'tslint.d.ts');
|
|
67
|
+
if (fs.existsSync(indexPath)) {
|
|
68
|
+
let indexContent = fs.readFileSync(indexPath, 'utf8');
|
|
69
|
+
const fnIndex = indexContent.indexOf('export declare function importTSLintRules');
|
|
70
|
+
const jsDocEnd = indexContent.lastIndexOf('*/', fnIndex) + 2;
|
|
71
|
+
const jsDocStart = indexContent.lastIndexOf('/**', jsDocEnd);
|
|
72
|
+
|
|
73
|
+
if (jsDocStart !== -1 && jsDocEnd !== -1 && jsDocStart < fnIndex) {
|
|
74
|
+
const statsTable = [
|
|
75
|
+
'| Dir | Rules |',
|
|
76
|
+
'| :--- | :--- |',
|
|
77
|
+
...Object.entries(stats)
|
|
78
|
+
.filter(([_, count]) => count > 0)
|
|
79
|
+
.sort((a, b) => b[1] - a[1])
|
|
80
|
+
.map(([name, count]) => `| <span>${name}</span> | ${count} |`),
|
|
81
|
+
].join('\n * ');
|
|
82
|
+
|
|
83
|
+
const newJsDoc = `/**
|
|
84
|
+
* Converts a TSLint rules configuration to TSSLint rules.
|
|
85
|
+
*
|
|
86
|
+
* ${statsTable}
|
|
87
|
+
*
|
|
88
|
+
* If you have added new TSLint plugins, please run \`npx tsslint-docgen\` to update this list.
|
|
89
|
+
*/`;
|
|
90
|
+
indexContent = indexContent.slice(0, jsDocStart) + newJsDoc + indexContent.slice(jsDocEnd);
|
|
91
|
+
fs.writeFileSync(indexPath, indexContent);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
console.error(err);
|
|
98
|
+
}
|
package/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export * from '@tsslint/types';
|
|
2
|
+
export * from './lib/eslint.js';
|
|
2
3
|
export { create as createCategoryPlugin } from './lib/plugins/category.js';
|
|
3
4
|
export { create as createDiagnosticsPlugin } from './lib/plugins/diagnostics.js';
|
|
4
5
|
export { create as createIgnorePlugin } from './lib/plugins/ignore.js';
|
|
6
|
+
export * from './lib/tsl.js';
|
|
7
|
+
export * from './lib/tslint.js';
|
|
5
8
|
import type { Config, Plugin, Rule } from '@tsslint/types';
|
|
6
9
|
export declare function defineRule(rule: Rule): Rule;
|
|
7
10
|
export declare function definePlugin(plugin: Plugin): Plugin;
|
package/index.js
CHANGED
|
@@ -20,12 +20,15 @@ exports.definePlugin = definePlugin;
|
|
|
20
20
|
exports.defineConfig = defineConfig;
|
|
21
21
|
exports.isCLI = isCLI;
|
|
22
22
|
__exportStar(require("@tsslint/types"), exports);
|
|
23
|
+
__exportStar(require("./lib/eslint.js"), exports);
|
|
23
24
|
var category_js_1 = require("./lib/plugins/category.js");
|
|
24
25
|
Object.defineProperty(exports, "createCategoryPlugin", { enumerable: true, get: function () { return category_js_1.create; } });
|
|
25
26
|
var diagnostics_js_1 = require("./lib/plugins/diagnostics.js");
|
|
26
27
|
Object.defineProperty(exports, "createDiagnosticsPlugin", { enumerable: true, get: function () { return diagnostics_js_1.create; } });
|
|
27
28
|
var ignore_js_1 = require("./lib/plugins/ignore.js");
|
|
28
29
|
Object.defineProperty(exports, "createIgnorePlugin", { enumerable: true, get: function () { return ignore_js_1.create; } });
|
|
30
|
+
__exportStar(require("./lib/tsl.js"), exports);
|
|
31
|
+
__exportStar(require("./lib/tslint.js"), exports);
|
|
29
32
|
function defineRule(rule) {
|
|
30
33
|
return rule;
|
|
31
34
|
}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateESlintTypes = generateESlintTypes;
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const variableNameRegex = /^[a-zA-Z_$][0-9a-zA-Z_$]*$/;
|
|
7
|
+
async function generateESlintTypes(nodeModulesDirs, loader = async (mod) => {
|
|
8
|
+
try {
|
|
9
|
+
return require(mod);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return await import(mod);
|
|
13
|
+
}
|
|
14
|
+
}) {
|
|
15
|
+
let indentLevel = 0;
|
|
16
|
+
let dts = '';
|
|
17
|
+
let defId = 0;
|
|
18
|
+
line(`export interface ESLintRulesConfig {`);
|
|
19
|
+
indentLevel++;
|
|
20
|
+
const visited = new Set();
|
|
21
|
+
const defs = new Map();
|
|
22
|
+
const stats = {};
|
|
23
|
+
for (const nodeModulesDir of nodeModulesDirs) {
|
|
24
|
+
const pkgs = readdirDirSync(nodeModulesDir);
|
|
25
|
+
for (const pkg of pkgs) {
|
|
26
|
+
if (pkg.startsWith('@')) {
|
|
27
|
+
const subPkgs = readdirDirSync(path.join(nodeModulesDir, pkg));
|
|
28
|
+
for (const subPkg of subPkgs) {
|
|
29
|
+
if (subPkg === 'eslint-plugin' || subPkg.startsWith('eslint-plugin-')) {
|
|
30
|
+
const pluginName = `${pkg}/${subPkg}`;
|
|
31
|
+
let plugin = await loader(pluginName);
|
|
32
|
+
if ('default' in plugin) {
|
|
33
|
+
plugin = plugin.default;
|
|
34
|
+
}
|
|
35
|
+
if (plugin.rules) {
|
|
36
|
+
stats[pluginName] = 0;
|
|
37
|
+
for (const ruleName in plugin.rules) {
|
|
38
|
+
const rule = plugin.rules[ruleName];
|
|
39
|
+
if (subPkg === 'eslint-plugin') {
|
|
40
|
+
if (addRule(pkg, ruleName, rule)) {
|
|
41
|
+
stats[pluginName]++;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
if (addRule(pkg, `${subPkg.slice('eslint-plugin-'.length)}/${ruleName}`, rule)) {
|
|
46
|
+
stats[pluginName]++;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (pkg.startsWith('eslint-plugin-')) {
|
|
55
|
+
let plugin = await loader(pkg);
|
|
56
|
+
if ('default' in plugin) {
|
|
57
|
+
plugin = plugin.default;
|
|
58
|
+
}
|
|
59
|
+
if (plugin.rules) {
|
|
60
|
+
const scope = pkg.replace('eslint-plugin-', '');
|
|
61
|
+
stats[pkg] = 0;
|
|
62
|
+
for (const ruleName in plugin.rules) {
|
|
63
|
+
const rule = plugin.rules[ruleName];
|
|
64
|
+
if (addRule(scope, ruleName, rule)) {
|
|
65
|
+
stats[pkg]++;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (pkg === 'eslint') {
|
|
71
|
+
const rulesDir = path.join(nodeModulesDir, pkg, 'lib', 'rules');
|
|
72
|
+
const ruleFiles = fs.readdirSync(rulesDir);
|
|
73
|
+
stats['eslint'] = 0;
|
|
74
|
+
for (const ruleFile of ruleFiles) {
|
|
75
|
+
if (ruleFile.endsWith('.js')) {
|
|
76
|
+
const ruleName = ruleFile.replace('.js', '');
|
|
77
|
+
const rule = await loader(path.join(rulesDir, ruleFile));
|
|
78
|
+
if (addRule(undefined, ruleName, rule)) {
|
|
79
|
+
stats['eslint']++;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
indentLevel--;
|
|
87
|
+
line(`}`);
|
|
88
|
+
line(``);
|
|
89
|
+
for (const [typeName, typeString] of defs.values()) {
|
|
90
|
+
line(`type ${typeName} = ${typeString};`);
|
|
91
|
+
}
|
|
92
|
+
return { dts, stats };
|
|
93
|
+
function addRule(scope, ruleName, rule) {
|
|
94
|
+
let ruleKey;
|
|
95
|
+
if (scope) {
|
|
96
|
+
ruleKey = `${scope}/${ruleName}`;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
ruleKey = `${ruleName}`;
|
|
100
|
+
}
|
|
101
|
+
if (visited.has(ruleKey)) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
visited.add(ruleKey);
|
|
105
|
+
const meta = rule.meta ?? {};
|
|
106
|
+
const { description, url } = meta.docs ?? {};
|
|
107
|
+
const { schema } = meta;
|
|
108
|
+
if (description || url) {
|
|
109
|
+
line(`/**`);
|
|
110
|
+
if (description) {
|
|
111
|
+
line(` * ${description.replace(/\*\//g, '* /')}`);
|
|
112
|
+
}
|
|
113
|
+
if (url) {
|
|
114
|
+
line(` * @see ${url}`);
|
|
115
|
+
}
|
|
116
|
+
line(` */`);
|
|
117
|
+
}
|
|
118
|
+
let optionsType;
|
|
119
|
+
if (schema) {
|
|
120
|
+
if (Array.isArray(schema)) {
|
|
121
|
+
const optionsTypes = [];
|
|
122
|
+
for (const item of schema) {
|
|
123
|
+
const itemType = parseSchema(schema, item, indentLevel);
|
|
124
|
+
optionsTypes.push(itemType);
|
|
125
|
+
}
|
|
126
|
+
optionsType = `[`;
|
|
127
|
+
optionsType += optionsTypes
|
|
128
|
+
.map(type => `(${type})?`)
|
|
129
|
+
.join(', ');
|
|
130
|
+
optionsType += `]`;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
optionsType = parseSchema(schema, schema, indentLevel);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (optionsType) {
|
|
137
|
+
line(`'${ruleKey}'?: ${optionsType},`);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
line(`'${ruleKey}'?: any[],`);
|
|
141
|
+
}
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
function line(line) {
|
|
145
|
+
dts += indent(indentLevel) + line + '\n';
|
|
146
|
+
}
|
|
147
|
+
function parseSchema(schema, item, indentLevel) {
|
|
148
|
+
if (typeof item === 'object') {
|
|
149
|
+
if (item.$ref) {
|
|
150
|
+
const paths = item.$ref
|
|
151
|
+
.replace('#/items/', '#/')
|
|
152
|
+
.split('/').slice(1);
|
|
153
|
+
let current = schema;
|
|
154
|
+
for (const path of paths) {
|
|
155
|
+
try {
|
|
156
|
+
current = current[path];
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
current = undefined;
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (current) {
|
|
164
|
+
let resolved = defs.get(current);
|
|
165
|
+
if (!resolved) {
|
|
166
|
+
resolved = [`Def${defId++}_${paths[paths.length - 1]}`, parseSchema(schema, current, 0)];
|
|
167
|
+
defs.set(current, resolved);
|
|
168
|
+
}
|
|
169
|
+
return resolved[0];
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
console.error(`Failed to resolve schema path: ${item.$ref}`);
|
|
173
|
+
return 'unknown';
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else if (Array.isArray(item)) {
|
|
177
|
+
return item.map(item => parseSchema(schema, item, indentLevel)).join(' | ');
|
|
178
|
+
}
|
|
179
|
+
else if (Array.isArray(item.type)) {
|
|
180
|
+
return item.type.map((type) => parseSchema(schema, type, indentLevel)).join(' | ');
|
|
181
|
+
}
|
|
182
|
+
else if (item.properties) {
|
|
183
|
+
let res = `{\n`;
|
|
184
|
+
indentLevel++;
|
|
185
|
+
const properties = item.properties;
|
|
186
|
+
const requiredArr = item.required ?? [];
|
|
187
|
+
for (const key in properties) {
|
|
188
|
+
const property = properties[key];
|
|
189
|
+
if (property.description) {
|
|
190
|
+
res += indent(indentLevel) + `/**\n`;
|
|
191
|
+
res += indent(indentLevel) + ` * ${property.description.replace(/\*\//g, '* /')}\n`;
|
|
192
|
+
res += indent(indentLevel) + ` */\n`;
|
|
193
|
+
}
|
|
194
|
+
const propertyType = parseSchema(schema, property, indentLevel);
|
|
195
|
+
const isRequired = requiredArr.includes(key);
|
|
196
|
+
if (!variableNameRegex.test(key)) {
|
|
197
|
+
res += indent(indentLevel) + `'${key}'${isRequired ? '' : '?'}: ${propertyType},\n`;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
res += indent(indentLevel) + `${key}${isRequired ? '' : '?'}: ${propertyType},\n`;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
indentLevel--;
|
|
204
|
+
res += indent(indentLevel) + `}`;
|
|
205
|
+
if (item.additionalProperties) {
|
|
206
|
+
res += ` & `;
|
|
207
|
+
res += parseAdditionalProperties(schema, item.additionalProperties, indentLevel);
|
|
208
|
+
}
|
|
209
|
+
return res;
|
|
210
|
+
}
|
|
211
|
+
else if (Array.isArray(item.required)) {
|
|
212
|
+
let res = `{ `;
|
|
213
|
+
const propertiesType = [];
|
|
214
|
+
for (const key of item.required) {
|
|
215
|
+
const propertyType = `any`;
|
|
216
|
+
if (!variableNameRegex.test(key)) {
|
|
217
|
+
propertiesType.push(`'${key}': ${propertyType}`);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
propertiesType.push(`${key}: ${propertyType}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
res += propertiesType.join(', ');
|
|
224
|
+
res += ` }`;
|
|
225
|
+
return res;
|
|
226
|
+
}
|
|
227
|
+
else if (item.const) {
|
|
228
|
+
return JSON.stringify(item.const);
|
|
229
|
+
}
|
|
230
|
+
else if (item.type === 'array') {
|
|
231
|
+
if (Array.isArray(item.items)) {
|
|
232
|
+
return `[${item.items.map((item) => parseSchema(schema, item, indentLevel)).join(', ')}]`;
|
|
233
|
+
}
|
|
234
|
+
if (item.items) {
|
|
235
|
+
return `(${parseSchema(schema, item.items, indentLevel)})[]`;
|
|
236
|
+
}
|
|
237
|
+
return `any[]`;
|
|
238
|
+
}
|
|
239
|
+
else if (item.enum) {
|
|
240
|
+
return item.enum.map((v) => JSON.stringify(v)).join(' | ');
|
|
241
|
+
}
|
|
242
|
+
else if (item.type) {
|
|
243
|
+
return parseSchema(schema, item.type, indentLevel);
|
|
244
|
+
}
|
|
245
|
+
else if (item.anyOf) {
|
|
246
|
+
return item.anyOf.map((item) => parseSchema(schema, item, indentLevel)).join(' | ');
|
|
247
|
+
}
|
|
248
|
+
else if (item.oneOf) {
|
|
249
|
+
return item.oneOf.map((item) => parseSchema(schema, item, indentLevel)).join(' | ');
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else if (item === 'string' || item === 'boolean' || item === 'null' || item === 'number') {
|
|
253
|
+
return item;
|
|
254
|
+
}
|
|
255
|
+
else if (item === 'object') {
|
|
256
|
+
if (item.additionalProperties) {
|
|
257
|
+
return parseAdditionalProperties(schema, item.additionalProperties, indentLevel);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
return `{ [key: string]: unknown }`;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else if (item === 'integer') {
|
|
264
|
+
return 'number';
|
|
265
|
+
}
|
|
266
|
+
else if (item === 'array') {
|
|
267
|
+
return 'any[]';
|
|
268
|
+
}
|
|
269
|
+
return 'unknown';
|
|
270
|
+
}
|
|
271
|
+
function indent(indentLevel) {
|
|
272
|
+
return '\t'.repeat(indentLevel);
|
|
273
|
+
}
|
|
274
|
+
function parseAdditionalProperties(schema, item, indentLevel) {
|
|
275
|
+
if (item === true) {
|
|
276
|
+
return `{ [key: string]: unknown }`;
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
return `{ [key: string]: ${parseSchema(schema, item, indentLevel)} }`;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
function readdirDirSync(_path) {
|
|
283
|
+
return fs.readdirSync(_path, { withFileTypes: true })
|
|
284
|
+
.filter(dirent => {
|
|
285
|
+
if (dirent.isDirectory()) {
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
if (dirent.isSymbolicLink()) {
|
|
289
|
+
const fullPath = path.join(_path, dirent.name);
|
|
290
|
+
try {
|
|
291
|
+
return fs.statSync(fullPath).isDirectory();
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return false;
|
|
298
|
+
})
|
|
299
|
+
.map(dirent => dirent.name);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=eslint-gen.js.map
|