@definitelytyped/dtslint 0.0.95 → 0.0.97
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/README.md +1 -1
- package/bin/src/checks.d.ts +7 -0
- package/bin/src/checks.js +133 -0
- package/bin/src/checks.js.map +1 -0
- package/bin/src/index.d.ts +2 -0
- package/bin/src/index.js +233 -0
- package/bin/src/index.js.map +1 -0
- package/bin/src/lint.d.ts +6 -0
- package/bin/src/lint.js +194 -0
- package/bin/src/lint.js.map +1 -0
- package/bin/src/rules/dtHeaderRule.d.ts +6 -0
- package/bin/src/rules/dtHeaderRule.js +62 -0
- package/bin/src/rules/dtHeaderRule.js.map +1 -0
- package/bin/src/rules/expectRule.d.ts +23 -0
- package/bin/src/rules/expectRule.js +346 -0
- package/bin/src/rules/expectRule.js.map +1 -0
- package/bin/src/rules/exportJustNamespaceRule.d.ts +7 -0
- package/bin/src/rules/exportJustNamespaceRule.js +105 -0
- package/bin/src/rules/exportJustNamespaceRule.js.map +1 -0
- package/bin/src/rules/noAnyUnionRule.d.ts +7 -0
- package/bin/src/rules/noAnyUnionRule.js +49 -0
- package/bin/src/rules/noAnyUnionRule.js.map +1 -0
- package/bin/src/rules/noBadReferenceRule.d.ts +8 -0
- package/bin/src/rules/noBadReferenceRule.js +54 -0
- package/bin/src/rules/noBadReferenceRule.js.map +1 -0
- package/bin/src/rules/noConstEnumRule.d.ts +7 -0
- package/bin/src/rules/noConstEnumRule.js +51 -0
- package/bin/src/rules/noConstEnumRule.js.map +1 -0
- package/bin/src/rules/noDeadReferenceRule.d.ts +7 -0
- package/bin/src/rules/noDeadReferenceRule.js +62 -0
- package/bin/src/rules/noDeadReferenceRule.js.map +1 -0
- package/bin/src/rules/noDeclareCurrentPackageRule.d.ts +6 -0
- package/bin/src/rules/noDeclareCurrentPackageRule.js +56 -0
- package/bin/src/rules/noDeclareCurrentPackageRule.js.map +1 -0
- package/bin/src/rules/noImportDefaultOfExportEqualsRule.d.ts +7 -0
- package/bin/src/rules/noImportDefaultOfExportEqualsRule.js +71 -0
- package/bin/src/rules/noImportDefaultOfExportEqualsRule.js.map +1 -0
- package/bin/src/rules/noOutsideDependenciesRule.d.ts +6 -0
- package/bin/src/rules/noOutsideDependenciesRule.js +52 -0
- package/bin/src/rules/noOutsideDependenciesRule.js.map +1 -0
- package/bin/src/rules/noPaddingRule.d.ts +7 -0
- package/bin/src/rules/noPaddingRule.js +98 -0
- package/bin/src/rules/noPaddingRule.js.map +1 -0
- package/bin/src/rules/noRedundantJsdoc2Rule.d.ts +10 -0
- package/bin/src/rules/noRedundantJsdoc2Rule.js +245 -0
- package/bin/src/rules/noRedundantJsdoc2Rule.js.map +1 -0
- package/bin/src/rules/noRelativeImportInTestRule.d.ts +11 -0
- package/bin/src/rules/noRelativeImportInTestRule.js +60 -0
- package/bin/src/rules/noRelativeImportInTestRule.js.map +1 -0
- package/bin/src/rules/noSelfImportRule.d.ts +6 -0
- package/bin/src/rules/noSelfImportRule.js +51 -0
- package/bin/src/rules/noSelfImportRule.js.map +1 -0
- package/bin/src/rules/noSingleDeclareModuleRule.d.ts +7 -0
- package/bin/src/rules/noSingleDeclareModuleRule.js +68 -0
- package/bin/src/rules/noSingleDeclareModuleRule.js.map +1 -0
- package/bin/src/rules/noSingleElementTupleTypeRule.d.ts +6 -0
- package/bin/src/rules/noSingleElementTupleTypeRule.js +50 -0
- package/bin/src/rules/noSingleElementTupleTypeRule.js.map +1 -0
- package/bin/src/rules/noUnnecessaryGenericsRule.d.ts +8 -0
- package/bin/src/rules/noUnnecessaryGenericsRule.js +130 -0
- package/bin/src/rules/noUnnecessaryGenericsRule.js.map +1 -0
- package/bin/src/rules/noUselessFilesRule.d.ts +7 -0
- package/bin/src/rules/noUselessFilesRule.js +46 -0
- package/bin/src/rules/noUselessFilesRule.js.map +1 -0
- package/bin/src/rules/npmNamingRule.d.ts +21 -0
- package/bin/src/rules/npmNamingRule.js +291 -0
- package/bin/src/rules/npmNamingRule.js.map +1 -0
- package/bin/src/rules/preferDeclareFunctionRule.d.ts +7 -0
- package/bin/src/rules/preferDeclareFunctionRule.js +52 -0
- package/bin/src/rules/preferDeclareFunctionRule.js.map +1 -0
- package/bin/src/rules/redundantUndefinedRule.d.ts +6 -0
- package/bin/src/rules/redundantUndefinedRule.js +55 -0
- package/bin/src/rules/redundantUndefinedRule.js.map +1 -0
- package/bin/src/rules/strictExportDeclareModifiersRule.d.ts +6 -0
- package/bin/src/rules/strictExportDeclareModifiersRule.js +162 -0
- package/bin/src/rules/strictExportDeclareModifiersRule.js.map +1 -0
- package/bin/src/rules/trimFileRule.d.ts +8 -0
- package/bin/src/rules/trimFileRule.js +51 -0
- package/bin/src/rules/trimFileRule.js.map +1 -0
- package/bin/src/rules/voidReturnRule.d.ts +7 -0
- package/bin/src/rules/voidReturnRule.js +85 -0
- package/bin/src/rules/voidReturnRule.js.map +1 -0
- package/bin/src/suggestions.d.ts +12 -0
- package/bin/src/suggestions.js +62 -0
- package/bin/src/suggestions.js.map +1 -0
- package/bin/src/updateConfig.d.ts +1 -0
- package/bin/src/updateConfig.js +220 -0
- package/bin/src/updateConfig.js.map +1 -0
- package/bin/src/util.d.ts +12 -0
- package/bin/src/util.js +130 -0
- package/bin/src/util.js.map +1 -0
- package/bin/tsconfig.tsbuildinfo +1 -0
- package/dtslint-expect-only.json +1 -1
- package/dtslint.json +1 -1
- package/package.json +7 -6
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.Rule = void 0;
|
|
23
|
+
const Lint = __importStar(require("tslint"));
|
|
24
|
+
const ts = __importStar(require("typescript"));
|
|
25
|
+
const util_1 = require("../util");
|
|
26
|
+
class Rule extends Lint.Rules.TypedRule {
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
28
|
+
static FAILURE_STRING(typeParameter) {
|
|
29
|
+
return util_1.failure(Rule.metadata.ruleName, `Type parameter ${typeParameter} is used only once.`);
|
|
30
|
+
}
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
32
|
+
static FAILURE_STRING_NEVER(typeParameter) {
|
|
33
|
+
return util_1.failure(Rule.metadata.ruleName, `Type parameter ${typeParameter} is never used.`);
|
|
34
|
+
}
|
|
35
|
+
applyWithProgram(sourceFile, program) {
|
|
36
|
+
return this.applyWithFunction(sourceFile, ctx => walk(ctx, program.getTypeChecker()));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.Rule = Rule;
|
|
40
|
+
Rule.metadata = {
|
|
41
|
+
ruleName: "no-unnecessary-generics",
|
|
42
|
+
description: "Forbids signatures using a generic parameter only once.",
|
|
43
|
+
optionsDescription: "Not configurable.",
|
|
44
|
+
options: null,
|
|
45
|
+
type: "style",
|
|
46
|
+
typescriptOnly: true
|
|
47
|
+
};
|
|
48
|
+
function walk(ctx, checker) {
|
|
49
|
+
const { sourceFile } = ctx;
|
|
50
|
+
sourceFile.forEachChild(function cb(node) {
|
|
51
|
+
if (ts.isFunctionLike(node)) {
|
|
52
|
+
checkSignature(node);
|
|
53
|
+
}
|
|
54
|
+
node.forEachChild(cb);
|
|
55
|
+
});
|
|
56
|
+
function checkSignature(sig) {
|
|
57
|
+
if (!sig.typeParameters) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
for (const tp of sig.typeParameters) {
|
|
61
|
+
const typeParameter = tp.name.text;
|
|
62
|
+
const res = getSoleUse(sig, assertDefined(checker.getSymbolAtLocation(tp.name)), checker);
|
|
63
|
+
switch (res.type) {
|
|
64
|
+
case "ok":
|
|
65
|
+
break;
|
|
66
|
+
case "sole":
|
|
67
|
+
ctx.addFailureAtNode(res.soleUse, Rule.FAILURE_STRING(typeParameter));
|
|
68
|
+
break;
|
|
69
|
+
case "never":
|
|
70
|
+
ctx.addFailureAtNode(tp, Rule.FAILURE_STRING_NEVER(typeParameter));
|
|
71
|
+
break;
|
|
72
|
+
default:
|
|
73
|
+
assertNever(res);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function getSoleUse(sig, typeParameterSymbol, checker) {
|
|
79
|
+
const exit = {};
|
|
80
|
+
let soleUse;
|
|
81
|
+
try {
|
|
82
|
+
if (sig.typeParameters) {
|
|
83
|
+
for (const tp of sig.typeParameters) {
|
|
84
|
+
if (tp.constraint) {
|
|
85
|
+
recur(tp.constraint);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
for (const param of sig.parameters) {
|
|
90
|
+
if (param.type) {
|
|
91
|
+
recur(param.type);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (sig.type) {
|
|
95
|
+
recur(sig.type);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
if (err === exit) {
|
|
100
|
+
return { type: "ok" };
|
|
101
|
+
}
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
return soleUse ? { type: "sole", soleUse } : { type: "never" };
|
|
105
|
+
function recur(node) {
|
|
106
|
+
if (ts.isIdentifier(node)) {
|
|
107
|
+
if (checker.getSymbolAtLocation(node) === typeParameterSymbol) {
|
|
108
|
+
if (soleUse === undefined) {
|
|
109
|
+
soleUse = node;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
throw exit;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
node.forEachChild(recur);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function assertDefined(value) {
|
|
122
|
+
if (value === undefined) {
|
|
123
|
+
throw new Error("unreachable");
|
|
124
|
+
}
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
function assertNever(_) {
|
|
128
|
+
throw new Error("unreachable");
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=noUnnecessaryGenericsRule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noUnnecessaryGenericsRule.js","sourceRoot":"","sources":["../../../src/rules/noUnnecessaryGenericsRule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.Rule = void 0;
|
|
23
|
+
const Lint = __importStar(require("tslint"));
|
|
24
|
+
const util_1 = require("../util");
|
|
25
|
+
// Same functionality as https://github.com/palantir/tslint/pull/1654, but simpler implementation.
|
|
26
|
+
// Remove when that PR is in.
|
|
27
|
+
class Rule extends Lint.Rules.AbstractRule {
|
|
28
|
+
apply(sourceFile) {
|
|
29
|
+
const { statements, referencedFiles, typeReferenceDirectives } = sourceFile;
|
|
30
|
+
if (statements.length + referencedFiles.length + typeReferenceDirectives.length !== 0) {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
return [new Lint.RuleFailure(sourceFile, 0, 1, Rule.FAILURE_STRING, this.ruleName)];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.Rule = Rule;
|
|
37
|
+
Rule.metadata = {
|
|
38
|
+
ruleName: "no-useless-files",
|
|
39
|
+
description: "Forbids files with no content.",
|
|
40
|
+
optionsDescription: "Not configurable.",
|
|
41
|
+
options: null,
|
|
42
|
+
type: "functionality",
|
|
43
|
+
typescriptOnly: false
|
|
44
|
+
};
|
|
45
|
+
Rule.FAILURE_STRING = util_1.failure(Rule.metadata.ruleName, "File has no content.");
|
|
46
|
+
//# sourceMappingURL=noUselessFilesRule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noUselessFilesRule.js","sourceRoot":"","sources":["../../../src/rules/noUselessFilesRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAG/B,kCAAkC;AAElC,kGAAkG;AAClG,6BAA6B;AAE7B,MAAa,IAAK,SAAQ,IAAI,CAAC,KAAK,CAAC,YAAY;IAY/C,KAAK,CAAC,UAAyB;QAC7B,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,uBAAuB,EAAE,GAAG,UAAU,CAAC;QAC5E,IAAI,UAAU,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,GAAG,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;YACrF,OAAO,EAAE,CAAC;SACX;QAED,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtF,CAAC;;AAnBH,oBAoBC;AAnBQ,aAAQ,GAAuB;IACpC,QAAQ,EAAE,kBAAkB;IAC5B,WAAW,EAAE,gCAAgC;IAC7C,kBAAkB,EAAE,mBAAmB;IACvC,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,eAAe;IACrB,cAAc,EAAE,KAAK;CACtB,CAAC;AAEK,mBAAc,GAAG,cAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ExportErrorKind, Mode } from "@definitelytyped/dts-critic";
|
|
2
|
+
import * as Lint from "tslint";
|
|
3
|
+
import * as ts from "typescript";
|
|
4
|
+
/** Options as parsed from the rule configuration. */
|
|
5
|
+
declare type ConfigOptions = {
|
|
6
|
+
mode: Mode.NameOnly;
|
|
7
|
+
singleLine?: boolean;
|
|
8
|
+
} | {
|
|
9
|
+
mode: Mode.Code;
|
|
10
|
+
errors: [ExportErrorKind, boolean][];
|
|
11
|
+
singleLine?: boolean;
|
|
12
|
+
};
|
|
13
|
+
export declare class Rule extends Lint.Rules.AbstractRule {
|
|
14
|
+
static metadata: Lint.IRuleMetadata;
|
|
15
|
+
apply(sourceFile: ts.SourceFile): Lint.RuleFailure[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Given npm-naming lint failures, returns a rule configuration that prevents such failures.
|
|
19
|
+
*/
|
|
20
|
+
export declare function disabler(failures: Lint.IRuleFailureJson[]): false | [true, ConfigOptions];
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.disabler = exports.Rule = void 0;
|
|
23
|
+
const dts_critic_1 = require("@definitelytyped/dts-critic");
|
|
24
|
+
const Lint = __importStar(require("tslint"));
|
|
25
|
+
const suggestions_1 = require("../suggestions");
|
|
26
|
+
const util_1 = require("../util");
|
|
27
|
+
const defaultOptions = {
|
|
28
|
+
mode: dts_critic_1.Mode.NameOnly
|
|
29
|
+
};
|
|
30
|
+
class Rule extends Lint.Rules.AbstractRule {
|
|
31
|
+
apply(sourceFile) {
|
|
32
|
+
return this.applyWithFunction(sourceFile, walk, toCriticOptions(parseOptions(this.ruleArguments)));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.Rule = Rule;
|
|
36
|
+
Rule.metadata = {
|
|
37
|
+
ruleName: "npm-naming",
|
|
38
|
+
description: "Ensure that package name and DefinitelyTyped header match npm package info.",
|
|
39
|
+
optionsDescription: `An object with a \`mode\` property should be provided.
|
|
40
|
+
If \`mode\` is '${dts_critic_1.Mode.Code}', then option \`errors\` can be provided.
|
|
41
|
+
\`errors\` should be an array specifying which code checks should be enabled or disabled.`,
|
|
42
|
+
options: {
|
|
43
|
+
oneOf: [
|
|
44
|
+
{
|
|
45
|
+
type: "object",
|
|
46
|
+
properties: {
|
|
47
|
+
mode: {
|
|
48
|
+
type: "string",
|
|
49
|
+
enum: [dts_critic_1.Mode.NameOnly]
|
|
50
|
+
},
|
|
51
|
+
"single-line": {
|
|
52
|
+
description: "Whether to print error messages in a single line. Used for testing.",
|
|
53
|
+
type: "boolean"
|
|
54
|
+
},
|
|
55
|
+
required: ["mode"]
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: "object",
|
|
60
|
+
properties: {
|
|
61
|
+
mode: {
|
|
62
|
+
type: "string",
|
|
63
|
+
enum: [dts_critic_1.Mode.Code]
|
|
64
|
+
},
|
|
65
|
+
errors: {
|
|
66
|
+
type: "array",
|
|
67
|
+
items: {
|
|
68
|
+
type: "array",
|
|
69
|
+
items: [
|
|
70
|
+
{
|
|
71
|
+
description: "Name of the check.",
|
|
72
|
+
type: "string",
|
|
73
|
+
enum: [dts_critic_1.ErrorKind.NeedsExportEquals, dts_critic_1.ErrorKind.NoDefaultExport]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
description: "Whether the check is enabled or disabled.",
|
|
77
|
+
type: "boolean"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
minItems: 2,
|
|
81
|
+
maxItems: 2
|
|
82
|
+
},
|
|
83
|
+
default: []
|
|
84
|
+
},
|
|
85
|
+
"single-line": {
|
|
86
|
+
description: "Whether to print error messages in a single line. Used for testing.",
|
|
87
|
+
type: "boolean"
|
|
88
|
+
},
|
|
89
|
+
required: ["mode"]
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
optionExamples: [
|
|
95
|
+
true,
|
|
96
|
+
[true, { mode: dts_critic_1.Mode.NameOnly }],
|
|
97
|
+
[
|
|
98
|
+
true,
|
|
99
|
+
{
|
|
100
|
+
mode: dts_critic_1.Mode.Code,
|
|
101
|
+
errors: [
|
|
102
|
+
[dts_critic_1.ErrorKind.NeedsExportEquals, true],
|
|
103
|
+
[dts_critic_1.ErrorKind.NoDefaultExport, false]
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
],
|
|
108
|
+
type: "functionality",
|
|
109
|
+
typescriptOnly: true
|
|
110
|
+
};
|
|
111
|
+
function parseOptions(args) {
|
|
112
|
+
if (args.length === 0) {
|
|
113
|
+
return defaultOptions;
|
|
114
|
+
}
|
|
115
|
+
const arg = args[0];
|
|
116
|
+
// eslint-disable-next-line eqeqeq
|
|
117
|
+
if (arg == null) {
|
|
118
|
+
return defaultOptions;
|
|
119
|
+
}
|
|
120
|
+
if (!arg.mode || typeof arg.mode !== "string") {
|
|
121
|
+
return defaultOptions;
|
|
122
|
+
}
|
|
123
|
+
const mode = dts_critic_1.parseMode(arg.mode);
|
|
124
|
+
if (!mode) {
|
|
125
|
+
return defaultOptions;
|
|
126
|
+
}
|
|
127
|
+
const singleLine = !!arg["single-line"];
|
|
128
|
+
switch (mode) {
|
|
129
|
+
case dts_critic_1.Mode.NameOnly:
|
|
130
|
+
return { mode, singleLine };
|
|
131
|
+
case dts_critic_1.Mode.Code:
|
|
132
|
+
if (!arg.errors || !Array.isArray(arg.errors)) {
|
|
133
|
+
return { mode, errors: [], singleLine };
|
|
134
|
+
}
|
|
135
|
+
return { mode, errors: parseEnabledErrors(arg.errors), singleLine };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function parseEnabledErrors(errors) {
|
|
139
|
+
const enabledChecks = [];
|
|
140
|
+
for (const tuple of errors) {
|
|
141
|
+
if (Array.isArray(tuple) && tuple.length === 2 && typeof tuple[0] === "string" && typeof tuple[1] === "boolean") {
|
|
142
|
+
const error = dts_critic_1.parseExportErrorKind(tuple[0]);
|
|
143
|
+
if (error) {
|
|
144
|
+
enabledChecks.push([error, tuple[1]]);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return enabledChecks;
|
|
149
|
+
}
|
|
150
|
+
function toCriticOptions(options) {
|
|
151
|
+
switch (options.mode) {
|
|
152
|
+
case dts_critic_1.Mode.NameOnly:
|
|
153
|
+
return options;
|
|
154
|
+
case dts_critic_1.Mode.Code:
|
|
155
|
+
return { ...options, errors: new Map(options.errors) };
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function walk(ctx) {
|
|
159
|
+
const { sourceFile } = ctx;
|
|
160
|
+
const { text } = sourceFile;
|
|
161
|
+
const lookFor = (search, explanation) => {
|
|
162
|
+
const idx = text.indexOf(search);
|
|
163
|
+
if (idx !== -1) {
|
|
164
|
+
ctx.addFailureAt(idx, search.length, util_1.failure(Rule.metadata.ruleName, explanation));
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
if (util_1.isMainFile(sourceFile.fileName, /*allowNested*/ false)) {
|
|
168
|
+
try {
|
|
169
|
+
const optionsWithSuggestions = toOptionsWithSuggestions(ctx.options);
|
|
170
|
+
const diagnostics = dts_critic_1.dtsCritic(sourceFile.fileName, /* sourcePath */ undefined, optionsWithSuggestions);
|
|
171
|
+
const errors = filterErrors(diagnostics, ctx);
|
|
172
|
+
for (const error of errors) {
|
|
173
|
+
switch (error.kind) {
|
|
174
|
+
case dts_critic_1.ErrorKind.NoMatchingNpmPackage:
|
|
175
|
+
case dts_critic_1.ErrorKind.NoMatchingNpmVersion:
|
|
176
|
+
case dts_critic_1.ErrorKind.NonNpmHasMatchingPackage:
|
|
177
|
+
lookFor("// Type definitions for", errorMessage(error, ctx.options));
|
|
178
|
+
break;
|
|
179
|
+
case dts_critic_1.ErrorKind.DtsPropertyNotInJs:
|
|
180
|
+
case dts_critic_1.ErrorKind.DtsSignatureNotInJs:
|
|
181
|
+
case dts_critic_1.ErrorKind.JsPropertyNotInDts:
|
|
182
|
+
case dts_critic_1.ErrorKind.JsSignatureNotInDts:
|
|
183
|
+
case dts_critic_1.ErrorKind.NeedsExportEquals:
|
|
184
|
+
case dts_critic_1.ErrorKind.NoDefaultExport:
|
|
185
|
+
if (error.position) {
|
|
186
|
+
ctx.addFailureAt(error.position.start, error.position.length, util_1.failure(Rule.metadata.ruleName, errorMessage(error, ctx.options)));
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
ctx.addFailure(0, 1, util_1.failure(Rule.metadata.ruleName, errorMessage(error, ctx.options)));
|
|
190
|
+
}
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch (e) {
|
|
196
|
+
// We're ignoring exceptions.
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Don't recur, we're done.
|
|
200
|
+
}
|
|
201
|
+
const enabledSuggestions = [dts_critic_1.ErrorKind.JsPropertyNotInDts, dts_critic_1.ErrorKind.JsSignatureNotInDts];
|
|
202
|
+
function toOptionsWithSuggestions(options) {
|
|
203
|
+
if (options.mode === dts_critic_1.Mode.NameOnly) {
|
|
204
|
+
return options;
|
|
205
|
+
}
|
|
206
|
+
const optionsWithSuggestions = { mode: options.mode, errors: new Map(options.errors) };
|
|
207
|
+
enabledSuggestions.forEach(err => optionsWithSuggestions.errors.set(err, true));
|
|
208
|
+
return optionsWithSuggestions;
|
|
209
|
+
}
|
|
210
|
+
function filterErrors(diagnostics, ctx) {
|
|
211
|
+
const errors = [];
|
|
212
|
+
diagnostics.forEach(diagnostic => {
|
|
213
|
+
var _a, _b;
|
|
214
|
+
if (isSuggestion(diagnostic, ctx.options)) {
|
|
215
|
+
suggestions_1.addSuggestion(ctx, diagnostic.message, (_a = diagnostic.position) === null || _a === void 0 ? void 0 : _a.start, (_b = diagnostic.position) === null || _b === void 0 ? void 0 : _b.length);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
errors.push(diagnostic);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
return errors;
|
|
222
|
+
}
|
|
223
|
+
function isSuggestion(diagnostic, options) {
|
|
224
|
+
return (options.mode === dts_critic_1.Mode.Code &&
|
|
225
|
+
enabledSuggestions.includes(diagnostic.kind) &&
|
|
226
|
+
!options.errors.get(diagnostic.kind));
|
|
227
|
+
}
|
|
228
|
+
function tslintDisableOption(error) {
|
|
229
|
+
switch (error) {
|
|
230
|
+
case dts_critic_1.ErrorKind.NoMatchingNpmPackage:
|
|
231
|
+
case dts_critic_1.ErrorKind.NoMatchingNpmVersion:
|
|
232
|
+
case dts_critic_1.ErrorKind.NonNpmHasMatchingPackage:
|
|
233
|
+
return `false`;
|
|
234
|
+
case dts_critic_1.ErrorKind.NoDefaultExport:
|
|
235
|
+
case dts_critic_1.ErrorKind.NeedsExportEquals:
|
|
236
|
+
case dts_critic_1.ErrorKind.JsSignatureNotInDts:
|
|
237
|
+
case dts_critic_1.ErrorKind.JsPropertyNotInDts:
|
|
238
|
+
case dts_critic_1.ErrorKind.DtsSignatureNotInJs:
|
|
239
|
+
case dts_critic_1.ErrorKind.DtsPropertyNotInJs:
|
|
240
|
+
return JSON.stringify([true, { mode: dts_critic_1.Mode.Code, errors: [[error, false]] }]);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function errorMessage(error, opts) {
|
|
244
|
+
const message = error.message +
|
|
245
|
+
`\nIf you won't fix this error now or you think this error is wrong,
|
|
246
|
+
you can disable this check by adding the following options to your project's tslint.json file under "rules":
|
|
247
|
+
|
|
248
|
+
"npm-naming": ${tslintDisableOption(error.kind)}
|
|
249
|
+
`;
|
|
250
|
+
if (opts.singleLine) {
|
|
251
|
+
return message.replace(/(\r\n|\n|\r|\t)/gm, " ");
|
|
252
|
+
}
|
|
253
|
+
return message;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Given npm-naming lint failures, returns a rule configuration that prevents such failures.
|
|
257
|
+
*/
|
|
258
|
+
function disabler(failures) {
|
|
259
|
+
const disabledErrors = new Set();
|
|
260
|
+
for (const ruleFailure of failures) {
|
|
261
|
+
if (ruleFailure.ruleName !== "npm-naming") {
|
|
262
|
+
throw new Error(`Expected failures of rule "npm-naming", found failures of rule ${ruleFailure.ruleName}.`);
|
|
263
|
+
}
|
|
264
|
+
const message = ruleFailure.failure;
|
|
265
|
+
// Name errors.
|
|
266
|
+
if (message.includes("must have a matching npm package") ||
|
|
267
|
+
message.includes("must match a version that exists on npm") ||
|
|
268
|
+
message.includes("conflicts with the existing npm package")) {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
// Code errors.
|
|
272
|
+
if (message.includes("declaration should use 'export =' syntax")) {
|
|
273
|
+
disabledErrors.add(dts_critic_1.ErrorKind.NeedsExportEquals);
|
|
274
|
+
}
|
|
275
|
+
else if (message.includes("declaration specifies 'export default' but the JavaScript source \
|
|
276
|
+
does not mention 'default' anywhere")) {
|
|
277
|
+
disabledErrors.add(dts_critic_1.ErrorKind.NoDefaultExport);
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
return [true, { mode: dts_critic_1.Mode.NameOnly }];
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
if (dts_critic_1.defaultErrors.every(error => disabledErrors.has(error))) {
|
|
284
|
+
return [true, { mode: dts_critic_1.Mode.NameOnly }];
|
|
285
|
+
}
|
|
286
|
+
const errors = [];
|
|
287
|
+
disabledErrors.forEach(error => errors.push([error, false]));
|
|
288
|
+
return [true, { mode: dts_critic_1.Mode.Code, errors }];
|
|
289
|
+
}
|
|
290
|
+
exports.disabler = disabler;
|
|
291
|
+
//# sourceMappingURL=npmNamingRule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npmNamingRule.js","sourceRoot":"","sources":["../../../src/rules/npmNamingRule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.Rule = void 0;
|
|
23
|
+
const Lint = __importStar(require("tslint"));
|
|
24
|
+
const ts = __importStar(require("typescript"));
|
|
25
|
+
const util_1 = require("../util");
|
|
26
|
+
class Rule extends Lint.Rules.AbstractRule {
|
|
27
|
+
apply(sourceFile) {
|
|
28
|
+
return this.applyWithFunction(sourceFile, walk);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.Rule = Rule;
|
|
32
|
+
Rule.metadata = {
|
|
33
|
+
ruleName: "prefer-declare-function",
|
|
34
|
+
description: "Forbids `export const x = () => void`.",
|
|
35
|
+
optionsDescription: "Not configurable.",
|
|
36
|
+
options: null,
|
|
37
|
+
type: "style",
|
|
38
|
+
typescriptOnly: true
|
|
39
|
+
};
|
|
40
|
+
Rule.FAILURE_STRING = util_1.failure(Rule.metadata.ruleName, "Use a function declaration instead of a variable of function type.");
|
|
41
|
+
function walk(ctx) {
|
|
42
|
+
util_1.eachModuleStatement(ctx.sourceFile, statement => {
|
|
43
|
+
if (ts.isVariableStatement(statement)) {
|
|
44
|
+
for (const varDecl of statement.declarationList.declarations) {
|
|
45
|
+
if (varDecl.type !== undefined && varDecl.type.kind === ts.SyntaxKind.FunctionType) {
|
|
46
|
+
ctx.addFailureAtNode(varDecl, Rule.FAILURE_STRING);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=preferDeclareFunctionRule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preferDeclareFunctionRule.js","sourceRoot":"","sources":["../../../src/rules/preferDeclareFunctionRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,+CAAiC;AAEjC,kCAAuD;AAEvD,MAAa,IAAK,SAAQ,IAAI,CAAC,KAAK,CAAC,YAAY;IAe/C,KAAK,CAAC,UAAyB;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;;AAjBH,oBAkBC;AAjBQ,aAAQ,GAAuB;IACpC,QAAQ,EAAE,yBAAyB;IACnC,WAAW,EAAE,wCAAwC;IACrD,kBAAkB,EAAE,mBAAmB;IACvC,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,OAAO;IACb,cAAc,EAAE,IAAI;CACrB,CAAC;AAEK,mBAAc,GAAG,cAAO,CAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,EACtB,oEAAoE,CACrE,CAAC;AAOJ,SAAS,IAAI,CAAC,GAA2B;IACvC,0BAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;QAC9C,IAAI,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;YACrC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,eAAe,CAAC,YAAY,EAAE;gBAC5D,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE;oBAClF,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;iBACpD;aACF;SACF;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.Rule = void 0;
|
|
23
|
+
const Lint = __importStar(require("tslint"));
|
|
24
|
+
const ts = __importStar(require("typescript"));
|
|
25
|
+
const util_1 = require("../util");
|
|
26
|
+
class Rule extends Lint.Rules.AbstractRule {
|
|
27
|
+
apply(sourceFile) {
|
|
28
|
+
return this.applyWithFunction(sourceFile, walk);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.Rule = Rule;
|
|
32
|
+
Rule.metadata = {
|
|
33
|
+
ruleName: "redundant-undefined",
|
|
34
|
+
description: "Forbids optional parameters to include an explicit `undefined` in their type; requires it in optional properties.",
|
|
35
|
+
optionsDescription: "Not configurable.",
|
|
36
|
+
options: null,
|
|
37
|
+
type: "style",
|
|
38
|
+
typescriptOnly: true
|
|
39
|
+
};
|
|
40
|
+
function walk(ctx) {
|
|
41
|
+
if (ctx.sourceFile.fileName.includes("node_modules"))
|
|
42
|
+
return;
|
|
43
|
+
ctx.sourceFile.forEachChild(function recur(node) {
|
|
44
|
+
if (node.kind === ts.SyntaxKind.UndefinedKeyword &&
|
|
45
|
+
ts.isUnionTypeNode(node.parent) &&
|
|
46
|
+
isOptionalParameter(node.parent.parent)) {
|
|
47
|
+
ctx.addFailureAtNode(node, util_1.failure(Rule.metadata.ruleName, `Parameter is optional, so no need to include \`undefined\` in the type.`));
|
|
48
|
+
}
|
|
49
|
+
node.forEachChild(recur);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function isOptionalParameter(node) {
|
|
53
|
+
return node.kind === ts.SyntaxKind.Parameter && node.questionToken !== undefined;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=redundantUndefinedRule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redundantUndefinedRule.js","sourceRoot":"","sources":["../../../src/rules/redundantUndefinedRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,+CAAiC;AAEjC,kCAAkC;AAElC,MAAa,IAAK,SAAQ,IAAI,CAAC,KAAK,CAAC,YAAY;IAW/C,KAAK,CAAC,UAAyB;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;;AAbH,oBAcC;AAbQ,aAAQ,GAAuB;IACpC,QAAQ,EAAE,qBAAqB;IAC/B,WAAW,EACT,mHAAmH;IACrH,kBAAkB,EAAE,mBAAmB;IACvC,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,OAAO;IACb,cAAc,EAAE,IAAI;CACrB,CAAC;AAOJ,SAAS,IAAI,CAAC,GAA2B;IACvC,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO;IAC7D,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,KAAK,CAAC,IAAI;QAC7C,IACE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB;YAC5C,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,MAAO,CAAC;YAChC,mBAAmB,CAAC,IAAI,CAAC,MAAO,CAAC,MAAO,CAAC,EACzC;YACA,GAAG,CAAC,gBAAgB,CAClB,IAAI,EACJ,cAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,yEAAyE,CAAC,CAC3G,CAAC;SACH;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAa;IACxC,OAAO,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS,IAAK,IAAgC,CAAC,aAAa,KAAK,SAAS,CAAC;AAChH,CAAC"}
|