eslint-plugin-rxjs-x 0.9.3 → 0.9.4
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/dist/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +126 -57
- package/dist/index.mjs +127 -58
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -258,9 +258,10 @@ declare const allRules: {
|
|
|
258
258
|
description: "Disallow importing operators from `rxjs/operators`.";
|
|
259
259
|
recommended: "recommended";
|
|
260
260
|
}, TSESLint.RuleListener>;
|
|
261
|
-
'suffix-subjects': TSESLint.RuleModule<"forbidden", readonly {
|
|
261
|
+
'suffix-subjects': TSESLint.RuleModule<"forbidden" | "forbiddenProperty", readonly {
|
|
262
262
|
parameters?: boolean;
|
|
263
263
|
properties?: boolean;
|
|
264
|
+
objects?: boolean;
|
|
264
265
|
suffix?: string;
|
|
265
266
|
types?: Record<string, boolean>;
|
|
266
267
|
variables?: boolean;
|
package/dist/index.d.ts
CHANGED
|
@@ -258,9 +258,10 @@ declare const allRules: {
|
|
|
258
258
|
description: "Disallow importing operators from `rxjs/operators`.";
|
|
259
259
|
recommended: "recommended";
|
|
260
260
|
}, TSESLint.RuleListener>;
|
|
261
|
-
'suffix-subjects': TSESLint.RuleModule<"forbidden", readonly {
|
|
261
|
+
'suffix-subjects': TSESLint.RuleModule<"forbidden" | "forbiddenProperty", readonly {
|
|
262
262
|
parameters?: boolean;
|
|
263
263
|
properties?: boolean;
|
|
264
|
+
objects?: boolean;
|
|
264
265
|
suffix?: string;
|
|
265
266
|
types?: Record<string, boolean>;
|
|
266
267
|
variables?: boolean;
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// package.json
|
|
2
2
|
var name = "eslint-plugin-rxjs-x";
|
|
3
|
-
var version = "0.9.
|
|
3
|
+
var version = "0.9.4";
|
|
4
4
|
|
|
5
5
|
// src/configs/recommended.ts
|
|
6
6
|
var createRecommendedConfig = (plugin2) => ({
|
|
@@ -412,52 +412,6 @@ function findIsLastOperatorOrderValid(pipeCallExpression, operatorsRegExp, allow
|
|
|
412
412
|
return { isOrderValid, operatorNode };
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
-
// src/constants.ts
|
|
416
|
-
var defaultObservable = String.raw`[Aa]ction(s|s\$|\$)$`;
|
|
417
|
-
var SOURCES_OBJECT_ACCEPTING_STATIC_OBSERVABLE_CREATORS = [
|
|
418
|
-
"combineLatest",
|
|
419
|
-
"forkJoin"
|
|
420
|
-
];
|
|
421
|
-
var MULTIPLE_OBSERVABLE_ACCEPTING_STATIC_OBSERVABLE_CREATORS = [
|
|
422
|
-
"combineLatest",
|
|
423
|
-
"forkJoin",
|
|
424
|
-
"merge",
|
|
425
|
-
"zip",
|
|
426
|
-
"concat",
|
|
427
|
-
"race"
|
|
428
|
-
];
|
|
429
|
-
var DEFAULT_UNBOUND_ALLOWED_TYPES = [
|
|
430
|
-
"Signal"
|
|
431
|
-
];
|
|
432
|
-
var DEFAULT_VALID_POST_COMPLETION_OPERATORS = [
|
|
433
|
-
"count",
|
|
434
|
-
"defaultIfEmpty",
|
|
435
|
-
"endWith",
|
|
436
|
-
"every",
|
|
437
|
-
"finalize",
|
|
438
|
-
"finally",
|
|
439
|
-
"isEmpty",
|
|
440
|
-
"last",
|
|
441
|
-
"max",
|
|
442
|
-
"min",
|
|
443
|
-
"publish",
|
|
444
|
-
"publishBehavior",
|
|
445
|
-
"publishLast",
|
|
446
|
-
"publishReplay",
|
|
447
|
-
"reduce",
|
|
448
|
-
"share",
|
|
449
|
-
"shareReplay",
|
|
450
|
-
"skipLast",
|
|
451
|
-
"takeLast",
|
|
452
|
-
"throwIfEmpty",
|
|
453
|
-
"toArray"
|
|
454
|
-
];
|
|
455
|
-
|
|
456
|
-
// src/utils/is-sources-object-accepting-static-observable-creator.ts
|
|
457
|
-
function isSourcesObjectAcceptingStaticObservableCreator(expression) {
|
|
458
|
-
return isCallExpression(expression) && isIdentifier(expression.callee) && SOURCES_OBJECT_ACCEPTING_STATIC_OBSERVABLE_CREATORS.includes(expression.callee.name);
|
|
459
|
-
}
|
|
460
|
-
|
|
461
415
|
// src/utils/rule-creator.ts
|
|
462
416
|
|
|
463
417
|
var REPO_URL = "https://github.com/JasonWeinzierl/eslint-plugin-rxjs-x";
|
|
@@ -755,6 +709,9 @@ var finnishRule = ruleCreator({
|
|
|
755
709
|
},
|
|
756
710
|
"PropertyDefinition[computed=false]": (node) => {
|
|
757
711
|
if (validate.properties) {
|
|
712
|
+
if (node.override) {
|
|
713
|
+
return;
|
|
714
|
+
}
|
|
758
715
|
checkNode(node.key);
|
|
759
716
|
}
|
|
760
717
|
},
|
|
@@ -784,19 +741,44 @@ var finnishRule = ruleCreator({
|
|
|
784
741
|
},
|
|
785
742
|
"MethodDefinition[kind='get'][computed=false]": (node) => {
|
|
786
743
|
if (validate.properties) {
|
|
744
|
+
if (node.override) {
|
|
745
|
+
return;
|
|
746
|
+
}
|
|
787
747
|
checkNode(node.key, node);
|
|
788
748
|
}
|
|
789
749
|
},
|
|
790
750
|
"MethodDefinition[kind='method'][computed=false]": (node) => {
|
|
791
751
|
if (validate.methods) {
|
|
752
|
+
if (node.override) {
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
792
755
|
checkNode(node.key, node);
|
|
793
756
|
}
|
|
794
757
|
},
|
|
795
758
|
"MethodDefinition[kind='set'][computed=false]": (node) => {
|
|
796
759
|
if (validate.properties) {
|
|
760
|
+
if (node.override) {
|
|
761
|
+
return;
|
|
762
|
+
}
|
|
797
763
|
checkNode(node.key, node);
|
|
798
764
|
}
|
|
799
765
|
},
|
|
766
|
+
"TSAbstractMethodDefinition[computed=false]": (node) => {
|
|
767
|
+
if (node.override) {
|
|
768
|
+
return;
|
|
769
|
+
}
|
|
770
|
+
if (validate.methods && node.kind === "method") {
|
|
771
|
+
checkNode(node.key, node);
|
|
772
|
+
}
|
|
773
|
+
if (validate.properties && (node.kind === "get" || node.kind === "set")) {
|
|
774
|
+
checkNode(node.key, node);
|
|
775
|
+
}
|
|
776
|
+
if (validate.parameters) {
|
|
777
|
+
node.value.params.forEach((param) => {
|
|
778
|
+
checkNode(param);
|
|
779
|
+
});
|
|
780
|
+
}
|
|
781
|
+
},
|
|
800
782
|
"ObjectExpression > Property[computed=false] > Identifier": (node) => {
|
|
801
783
|
if (!validate.objects) {
|
|
802
784
|
return;
|
|
@@ -1150,6 +1132,49 @@ var noCreateRule = ruleCreator({
|
|
|
1150
1132
|
|
|
1151
1133
|
|
|
1152
1134
|
|
|
1135
|
+
|
|
1136
|
+
// src/constants.ts
|
|
1137
|
+
var defaultObservable = String.raw`[Aa]ction(s|s\$|\$)$`;
|
|
1138
|
+
var SOURCES_OBJECT_ACCEPTING_STATIC_OBSERVABLE_CREATORS = [
|
|
1139
|
+
"combineLatest",
|
|
1140
|
+
"forkJoin"
|
|
1141
|
+
];
|
|
1142
|
+
var MULTIPLE_OBSERVABLE_ACCEPTING_STATIC_OBSERVABLE_CREATORS = [
|
|
1143
|
+
"combineLatest",
|
|
1144
|
+
"forkJoin",
|
|
1145
|
+
"merge",
|
|
1146
|
+
"zip",
|
|
1147
|
+
"concat",
|
|
1148
|
+
"race"
|
|
1149
|
+
];
|
|
1150
|
+
var DEFAULT_UNBOUND_ALLOWED_TYPES = [
|
|
1151
|
+
"Signal"
|
|
1152
|
+
];
|
|
1153
|
+
var DEFAULT_VALID_POST_COMPLETION_OPERATORS = [
|
|
1154
|
+
"count",
|
|
1155
|
+
"defaultIfEmpty",
|
|
1156
|
+
"endWith",
|
|
1157
|
+
"every",
|
|
1158
|
+
"finalize",
|
|
1159
|
+
"finally",
|
|
1160
|
+
"isEmpty",
|
|
1161
|
+
"last",
|
|
1162
|
+
"max",
|
|
1163
|
+
"min",
|
|
1164
|
+
"publish",
|
|
1165
|
+
"publishBehavior",
|
|
1166
|
+
"publishLast",
|
|
1167
|
+
"publishReplay",
|
|
1168
|
+
"reduce",
|
|
1169
|
+
"share",
|
|
1170
|
+
"shareReplay",
|
|
1171
|
+
"skipLast",
|
|
1172
|
+
"takeLast",
|
|
1173
|
+
"throwIfEmpty",
|
|
1174
|
+
"toArray"
|
|
1175
|
+
];
|
|
1176
|
+
|
|
1177
|
+
// src/rules/no-cyclic-action.ts
|
|
1153
1178
|
function isTypeReference2(type) {
|
|
1154
1179
|
return Boolean(type.target);
|
|
1155
1180
|
}
|
|
@@ -4139,6 +4164,7 @@ var preferRootOperatorsRule = ruleCreator({
|
|
|
4139
4164
|
// src/rules/suffix-subjects.ts
|
|
4140
4165
|
|
|
4141
4166
|
var defaultOptions18 = [];
|
|
4167
|
+
var baseShouldHaveSuffix = 'Subject identifiers must end with "{{suffix}}".';
|
|
4142
4168
|
var suffixSubjectsRule = ruleCreator({
|
|
4143
4169
|
defaultOptions: defaultOptions18,
|
|
4144
4170
|
meta: {
|
|
@@ -4147,13 +4173,15 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4147
4173
|
requiresTypeChecking: true
|
|
4148
4174
|
},
|
|
4149
4175
|
messages: {
|
|
4150
|
-
forbidden:
|
|
4176
|
+
forbidden: baseShouldHaveSuffix,
|
|
4177
|
+
forbiddenProperty: `${baseShouldHaveSuffix} Add a type annotation, assertion, or 'satisfies' to silence this rule.`
|
|
4151
4178
|
},
|
|
4152
4179
|
schema: [
|
|
4153
4180
|
{
|
|
4154
4181
|
properties: {
|
|
4155
4182
|
parameters: { type: "boolean", description: "Require for parameters." },
|
|
4156
|
-
properties: { type: "boolean", description:
|
|
4183
|
+
properties: { type: "boolean", description: 'Require for properties, except object literal keys (see "objects" option).' },
|
|
4184
|
+
objects: { type: "boolean", description: "Require for object literal keys." },
|
|
4157
4185
|
suffix: { type: "string", description: "The suffix to enforce." },
|
|
4158
4186
|
types: { type: "object", description: "Enforce for specific types. Keys are a RegExp, values are a boolean." },
|
|
4159
4187
|
variables: { type: "boolean", description: "Require for variables." }
|
|
@@ -4171,6 +4199,7 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4171
4199
|
const validate = {
|
|
4172
4200
|
parameters: true,
|
|
4173
4201
|
properties: true,
|
|
4202
|
+
objects: true,
|
|
4174
4203
|
variables: true,
|
|
4175
4204
|
...config
|
|
4176
4205
|
};
|
|
@@ -4192,7 +4221,7 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4192
4221
|
String.raw`${escapeRegExp(suffix)}\$?$`,
|
|
4193
4222
|
"i"
|
|
4194
4223
|
);
|
|
4195
|
-
function checkNode(nameNode, typeNode) {
|
|
4224
|
+
function checkNode(nameNode, typeNode, shouldMessage = "forbidden") {
|
|
4196
4225
|
const tsNode = esTreeNodeToTSNodeMap.get(nameNode);
|
|
4197
4226
|
const text = tsNode.getText();
|
|
4198
4227
|
if (!suffixRegex.test(text) && couldBeType2(typeNode != null ? typeNode : nameNode, "Subject")) {
|
|
@@ -4205,7 +4234,7 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4205
4234
|
context.report({
|
|
4206
4235
|
data: { suffix },
|
|
4207
4236
|
loc: getLoc(tsNode),
|
|
4208
|
-
messageId:
|
|
4237
|
+
messageId: shouldMessage
|
|
4209
4238
|
});
|
|
4210
4239
|
}
|
|
4211
4240
|
}
|
|
@@ -4221,7 +4250,7 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4221
4250
|
if (!found) {
|
|
4222
4251
|
return;
|
|
4223
4252
|
}
|
|
4224
|
-
if (!validate.variables && found
|
|
4253
|
+
if (!validate.variables && isVariableDeclarator(found)) {
|
|
4225
4254
|
return;
|
|
4226
4255
|
}
|
|
4227
4256
|
if (!validate.parameters) {
|
|
@@ -4240,6 +4269,9 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4240
4269
|
"PropertyDefinition[computed=false]": (node) => {
|
|
4241
4270
|
const anyNode = node;
|
|
4242
4271
|
if (validate.properties) {
|
|
4272
|
+
if (node.override) {
|
|
4273
|
+
return;
|
|
4274
|
+
}
|
|
4243
4275
|
checkNode(anyNode.key);
|
|
4244
4276
|
}
|
|
4245
4277
|
},
|
|
@@ -4261,21 +4293,58 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4261
4293
|
},
|
|
4262
4294
|
"MethodDefinition[kind='get'][computed=false]": (node) => {
|
|
4263
4295
|
if (validate.properties) {
|
|
4296
|
+
if (node.override) {
|
|
4297
|
+
return;
|
|
4298
|
+
}
|
|
4264
4299
|
checkNode(node.key, node);
|
|
4265
4300
|
}
|
|
4266
4301
|
},
|
|
4267
4302
|
"MethodDefinition[kind='set'][computed=false]": (node) => {
|
|
4268
4303
|
if (validate.properties) {
|
|
4304
|
+
if (node.override) {
|
|
4305
|
+
return;
|
|
4306
|
+
}
|
|
4269
4307
|
checkNode(node.key, node);
|
|
4270
4308
|
}
|
|
4271
4309
|
},
|
|
4310
|
+
"TSAbstractMethodDefinition[computed=false]": (node) => {
|
|
4311
|
+
if (node.override) {
|
|
4312
|
+
return;
|
|
4313
|
+
}
|
|
4314
|
+
if (validate.properties && (node.kind === "get" || node.kind === "set")) {
|
|
4315
|
+
checkNode(node.key, node);
|
|
4316
|
+
}
|
|
4317
|
+
if (validate.parameters) {
|
|
4318
|
+
node.value.params.forEach((param) => {
|
|
4319
|
+
checkNode(param);
|
|
4320
|
+
});
|
|
4321
|
+
}
|
|
4322
|
+
},
|
|
4272
4323
|
"ObjectExpression > Property[computed=false] > Identifier": (node) => {
|
|
4273
|
-
if (validate.
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4324
|
+
if (!validate.objects) {
|
|
4325
|
+
return;
|
|
4326
|
+
}
|
|
4327
|
+
const parent = node.parent;
|
|
4328
|
+
if (node !== parent.key) {
|
|
4329
|
+
return;
|
|
4330
|
+
}
|
|
4331
|
+
const found = findParent(
|
|
4332
|
+
node,
|
|
4333
|
+
"CallExpression",
|
|
4334
|
+
"VariableDeclarator",
|
|
4335
|
+
"TSSatisfiesExpression",
|
|
4336
|
+
"TSAsExpression"
|
|
4337
|
+
);
|
|
4338
|
+
if (found) {
|
|
4339
|
+
if (isCallExpression(found)) {
|
|
4340
|
+
return;
|
|
4341
|
+
} else if (isVariableDeclarator(found) && !!found.id.typeAnnotation) {
|
|
4342
|
+
return;
|
|
4343
|
+
} else if (isTSAsExpression(found) || isTSSatisfiesExpression(found)) {
|
|
4344
|
+
return;
|
|
4277
4345
|
}
|
|
4278
4346
|
}
|
|
4347
|
+
checkNode(node, void 0, "forbiddenProperty");
|
|
4279
4348
|
},
|
|
4280
4349
|
"ObjectPattern > Property > Identifier": (node) => {
|
|
4281
4350
|
const found = findParent(
|
|
@@ -4288,7 +4357,7 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4288
4357
|
if (!found) {
|
|
4289
4358
|
return;
|
|
4290
4359
|
}
|
|
4291
|
-
if (!validate.variables && found
|
|
4360
|
+
if (!validate.variables && isVariableDeclarator(found)) {
|
|
4292
4361
|
return;
|
|
4293
4362
|
}
|
|
4294
4363
|
if (!validate.parameters) {
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// package.json
|
|
2
2
|
var name = "eslint-plugin-rxjs-x";
|
|
3
|
-
var version = "0.9.
|
|
3
|
+
var version = "0.9.4";
|
|
4
4
|
|
|
5
5
|
// src/configs/recommended.ts
|
|
6
6
|
var createRecommendedConfig = (plugin2) => ({
|
|
@@ -412,52 +412,6 @@ function findIsLastOperatorOrderValid(pipeCallExpression, operatorsRegExp, allow
|
|
|
412
412
|
return { isOrderValid, operatorNode };
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
-
// src/constants.ts
|
|
416
|
-
var defaultObservable = String.raw`[Aa]ction(s|s\$|\$)$`;
|
|
417
|
-
var SOURCES_OBJECT_ACCEPTING_STATIC_OBSERVABLE_CREATORS = [
|
|
418
|
-
"combineLatest",
|
|
419
|
-
"forkJoin"
|
|
420
|
-
];
|
|
421
|
-
var MULTIPLE_OBSERVABLE_ACCEPTING_STATIC_OBSERVABLE_CREATORS = [
|
|
422
|
-
"combineLatest",
|
|
423
|
-
"forkJoin",
|
|
424
|
-
"merge",
|
|
425
|
-
"zip",
|
|
426
|
-
"concat",
|
|
427
|
-
"race"
|
|
428
|
-
];
|
|
429
|
-
var DEFAULT_UNBOUND_ALLOWED_TYPES = [
|
|
430
|
-
"Signal"
|
|
431
|
-
];
|
|
432
|
-
var DEFAULT_VALID_POST_COMPLETION_OPERATORS = [
|
|
433
|
-
"count",
|
|
434
|
-
"defaultIfEmpty",
|
|
435
|
-
"endWith",
|
|
436
|
-
"every",
|
|
437
|
-
"finalize",
|
|
438
|
-
"finally",
|
|
439
|
-
"isEmpty",
|
|
440
|
-
"last",
|
|
441
|
-
"max",
|
|
442
|
-
"min",
|
|
443
|
-
"publish",
|
|
444
|
-
"publishBehavior",
|
|
445
|
-
"publishLast",
|
|
446
|
-
"publishReplay",
|
|
447
|
-
"reduce",
|
|
448
|
-
"share",
|
|
449
|
-
"shareReplay",
|
|
450
|
-
"skipLast",
|
|
451
|
-
"takeLast",
|
|
452
|
-
"throwIfEmpty",
|
|
453
|
-
"toArray"
|
|
454
|
-
];
|
|
455
|
-
|
|
456
|
-
// src/utils/is-sources-object-accepting-static-observable-creator.ts
|
|
457
|
-
function isSourcesObjectAcceptingStaticObservableCreator(expression) {
|
|
458
|
-
return isCallExpression(expression) && isIdentifier(expression.callee) && SOURCES_OBJECT_ACCEPTING_STATIC_OBSERVABLE_CREATORS.includes(expression.callee.name);
|
|
459
|
-
}
|
|
460
|
-
|
|
461
415
|
// src/utils/rule-creator.ts
|
|
462
416
|
import { ESLintUtils as ESLintUtils2 } from "@typescript-eslint/utils";
|
|
463
417
|
var REPO_URL = "https://github.com/JasonWeinzierl/eslint-plugin-rxjs-x";
|
|
@@ -755,6 +709,9 @@ var finnishRule = ruleCreator({
|
|
|
755
709
|
},
|
|
756
710
|
"PropertyDefinition[computed=false]": (node) => {
|
|
757
711
|
if (validate.properties) {
|
|
712
|
+
if (node.override) {
|
|
713
|
+
return;
|
|
714
|
+
}
|
|
758
715
|
checkNode(node.key);
|
|
759
716
|
}
|
|
760
717
|
},
|
|
@@ -784,19 +741,44 @@ var finnishRule = ruleCreator({
|
|
|
784
741
|
},
|
|
785
742
|
"MethodDefinition[kind='get'][computed=false]": (node) => {
|
|
786
743
|
if (validate.properties) {
|
|
744
|
+
if (node.override) {
|
|
745
|
+
return;
|
|
746
|
+
}
|
|
787
747
|
checkNode(node.key, node);
|
|
788
748
|
}
|
|
789
749
|
},
|
|
790
750
|
"MethodDefinition[kind='method'][computed=false]": (node) => {
|
|
791
751
|
if (validate.methods) {
|
|
752
|
+
if (node.override) {
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
792
755
|
checkNode(node.key, node);
|
|
793
756
|
}
|
|
794
757
|
},
|
|
795
758
|
"MethodDefinition[kind='set'][computed=false]": (node) => {
|
|
796
759
|
if (validate.properties) {
|
|
760
|
+
if (node.override) {
|
|
761
|
+
return;
|
|
762
|
+
}
|
|
797
763
|
checkNode(node.key, node);
|
|
798
764
|
}
|
|
799
765
|
},
|
|
766
|
+
"TSAbstractMethodDefinition[computed=false]": (node) => {
|
|
767
|
+
if (node.override) {
|
|
768
|
+
return;
|
|
769
|
+
}
|
|
770
|
+
if (validate.methods && node.kind === "method") {
|
|
771
|
+
checkNode(node.key, node);
|
|
772
|
+
}
|
|
773
|
+
if (validate.properties && (node.kind === "get" || node.kind === "set")) {
|
|
774
|
+
checkNode(node.key, node);
|
|
775
|
+
}
|
|
776
|
+
if (validate.parameters) {
|
|
777
|
+
node.value.params.forEach((param) => {
|
|
778
|
+
checkNode(param);
|
|
779
|
+
});
|
|
780
|
+
}
|
|
781
|
+
},
|
|
800
782
|
"ObjectExpression > Property[computed=false] > Identifier": (node) => {
|
|
801
783
|
if (!validate.objects) {
|
|
802
784
|
return;
|
|
@@ -1150,6 +1132,49 @@ var noCreateRule = ruleCreator({
|
|
|
1150
1132
|
import { ESLintUtils as ESLintUtils4 } from "@typescript-eslint/utils";
|
|
1151
1133
|
import { stripIndent as stripIndent3 } from "common-tags";
|
|
1152
1134
|
import ts4 from "typescript";
|
|
1135
|
+
|
|
1136
|
+
// src/constants.ts
|
|
1137
|
+
var defaultObservable = String.raw`[Aa]ction(s|s\$|\$)$`;
|
|
1138
|
+
var SOURCES_OBJECT_ACCEPTING_STATIC_OBSERVABLE_CREATORS = [
|
|
1139
|
+
"combineLatest",
|
|
1140
|
+
"forkJoin"
|
|
1141
|
+
];
|
|
1142
|
+
var MULTIPLE_OBSERVABLE_ACCEPTING_STATIC_OBSERVABLE_CREATORS = [
|
|
1143
|
+
"combineLatest",
|
|
1144
|
+
"forkJoin",
|
|
1145
|
+
"merge",
|
|
1146
|
+
"zip",
|
|
1147
|
+
"concat",
|
|
1148
|
+
"race"
|
|
1149
|
+
];
|
|
1150
|
+
var DEFAULT_UNBOUND_ALLOWED_TYPES = [
|
|
1151
|
+
"Signal"
|
|
1152
|
+
];
|
|
1153
|
+
var DEFAULT_VALID_POST_COMPLETION_OPERATORS = [
|
|
1154
|
+
"count",
|
|
1155
|
+
"defaultIfEmpty",
|
|
1156
|
+
"endWith",
|
|
1157
|
+
"every",
|
|
1158
|
+
"finalize",
|
|
1159
|
+
"finally",
|
|
1160
|
+
"isEmpty",
|
|
1161
|
+
"last",
|
|
1162
|
+
"max",
|
|
1163
|
+
"min",
|
|
1164
|
+
"publish",
|
|
1165
|
+
"publishBehavior",
|
|
1166
|
+
"publishLast",
|
|
1167
|
+
"publishReplay",
|
|
1168
|
+
"reduce",
|
|
1169
|
+
"share",
|
|
1170
|
+
"shareReplay",
|
|
1171
|
+
"skipLast",
|
|
1172
|
+
"takeLast",
|
|
1173
|
+
"throwIfEmpty",
|
|
1174
|
+
"toArray"
|
|
1175
|
+
];
|
|
1176
|
+
|
|
1177
|
+
// src/rules/no-cyclic-action.ts
|
|
1153
1178
|
function isTypeReference2(type) {
|
|
1154
1179
|
return Boolean(type.target);
|
|
1155
1180
|
}
|
|
@@ -4137,8 +4162,9 @@ var preferRootOperatorsRule = ruleCreator({
|
|
|
4137
4162
|
});
|
|
4138
4163
|
|
|
4139
4164
|
// src/rules/suffix-subjects.ts
|
|
4140
|
-
import {
|
|
4165
|
+
import { ESLintUtils as ESLintUtils12 } from "@typescript-eslint/utils";
|
|
4141
4166
|
var defaultOptions18 = [];
|
|
4167
|
+
var baseShouldHaveSuffix = 'Subject identifiers must end with "{{suffix}}".';
|
|
4142
4168
|
var suffixSubjectsRule = ruleCreator({
|
|
4143
4169
|
defaultOptions: defaultOptions18,
|
|
4144
4170
|
meta: {
|
|
@@ -4147,13 +4173,15 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4147
4173
|
requiresTypeChecking: true
|
|
4148
4174
|
},
|
|
4149
4175
|
messages: {
|
|
4150
|
-
forbidden:
|
|
4176
|
+
forbidden: baseShouldHaveSuffix,
|
|
4177
|
+
forbiddenProperty: `${baseShouldHaveSuffix} Add a type annotation, assertion, or 'satisfies' to silence this rule.`
|
|
4151
4178
|
},
|
|
4152
4179
|
schema: [
|
|
4153
4180
|
{
|
|
4154
4181
|
properties: {
|
|
4155
4182
|
parameters: { type: "boolean", description: "Require for parameters." },
|
|
4156
|
-
properties: { type: "boolean", description:
|
|
4183
|
+
properties: { type: "boolean", description: 'Require for properties, except object literal keys (see "objects" option).' },
|
|
4184
|
+
objects: { type: "boolean", description: "Require for object literal keys." },
|
|
4157
4185
|
suffix: { type: "string", description: "The suffix to enforce." },
|
|
4158
4186
|
types: { type: "object", description: "Enforce for specific types. Keys are a RegExp, values are a boolean." },
|
|
4159
4187
|
variables: { type: "boolean", description: "Require for variables." }
|
|
@@ -4171,6 +4199,7 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4171
4199
|
const validate = {
|
|
4172
4200
|
parameters: true,
|
|
4173
4201
|
properties: true,
|
|
4202
|
+
objects: true,
|
|
4174
4203
|
variables: true,
|
|
4175
4204
|
...config
|
|
4176
4205
|
};
|
|
@@ -4192,7 +4221,7 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4192
4221
|
String.raw`${escapeRegExp(suffix)}\$?$`,
|
|
4193
4222
|
"i"
|
|
4194
4223
|
);
|
|
4195
|
-
function checkNode(nameNode, typeNode) {
|
|
4224
|
+
function checkNode(nameNode, typeNode, shouldMessage = "forbidden") {
|
|
4196
4225
|
const tsNode = esTreeNodeToTSNodeMap.get(nameNode);
|
|
4197
4226
|
const text = tsNode.getText();
|
|
4198
4227
|
if (!suffixRegex.test(text) && couldBeType2(typeNode != null ? typeNode : nameNode, "Subject")) {
|
|
@@ -4205,7 +4234,7 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4205
4234
|
context.report({
|
|
4206
4235
|
data: { suffix },
|
|
4207
4236
|
loc: getLoc(tsNode),
|
|
4208
|
-
messageId:
|
|
4237
|
+
messageId: shouldMessage
|
|
4209
4238
|
});
|
|
4210
4239
|
}
|
|
4211
4240
|
}
|
|
@@ -4221,7 +4250,7 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4221
4250
|
if (!found) {
|
|
4222
4251
|
return;
|
|
4223
4252
|
}
|
|
4224
|
-
if (!validate.variables && found
|
|
4253
|
+
if (!validate.variables && isVariableDeclarator(found)) {
|
|
4225
4254
|
return;
|
|
4226
4255
|
}
|
|
4227
4256
|
if (!validate.parameters) {
|
|
@@ -4240,6 +4269,9 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4240
4269
|
"PropertyDefinition[computed=false]": (node) => {
|
|
4241
4270
|
const anyNode = node;
|
|
4242
4271
|
if (validate.properties) {
|
|
4272
|
+
if (node.override) {
|
|
4273
|
+
return;
|
|
4274
|
+
}
|
|
4243
4275
|
checkNode(anyNode.key);
|
|
4244
4276
|
}
|
|
4245
4277
|
},
|
|
@@ -4261,21 +4293,58 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4261
4293
|
},
|
|
4262
4294
|
"MethodDefinition[kind='get'][computed=false]": (node) => {
|
|
4263
4295
|
if (validate.properties) {
|
|
4296
|
+
if (node.override) {
|
|
4297
|
+
return;
|
|
4298
|
+
}
|
|
4264
4299
|
checkNode(node.key, node);
|
|
4265
4300
|
}
|
|
4266
4301
|
},
|
|
4267
4302
|
"MethodDefinition[kind='set'][computed=false]": (node) => {
|
|
4268
4303
|
if (validate.properties) {
|
|
4304
|
+
if (node.override) {
|
|
4305
|
+
return;
|
|
4306
|
+
}
|
|
4269
4307
|
checkNode(node.key, node);
|
|
4270
4308
|
}
|
|
4271
4309
|
},
|
|
4310
|
+
"TSAbstractMethodDefinition[computed=false]": (node) => {
|
|
4311
|
+
if (node.override) {
|
|
4312
|
+
return;
|
|
4313
|
+
}
|
|
4314
|
+
if (validate.properties && (node.kind === "get" || node.kind === "set")) {
|
|
4315
|
+
checkNode(node.key, node);
|
|
4316
|
+
}
|
|
4317
|
+
if (validate.parameters) {
|
|
4318
|
+
node.value.params.forEach((param) => {
|
|
4319
|
+
checkNode(param);
|
|
4320
|
+
});
|
|
4321
|
+
}
|
|
4322
|
+
},
|
|
4272
4323
|
"ObjectExpression > Property[computed=false] > Identifier": (node) => {
|
|
4273
|
-
if (validate.
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4324
|
+
if (!validate.objects) {
|
|
4325
|
+
return;
|
|
4326
|
+
}
|
|
4327
|
+
const parent = node.parent;
|
|
4328
|
+
if (node !== parent.key) {
|
|
4329
|
+
return;
|
|
4330
|
+
}
|
|
4331
|
+
const found = findParent(
|
|
4332
|
+
node,
|
|
4333
|
+
"CallExpression",
|
|
4334
|
+
"VariableDeclarator",
|
|
4335
|
+
"TSSatisfiesExpression",
|
|
4336
|
+
"TSAsExpression"
|
|
4337
|
+
);
|
|
4338
|
+
if (found) {
|
|
4339
|
+
if (isCallExpression(found)) {
|
|
4340
|
+
return;
|
|
4341
|
+
} else if (isVariableDeclarator(found) && !!found.id.typeAnnotation) {
|
|
4342
|
+
return;
|
|
4343
|
+
} else if (isTSAsExpression(found) || isTSSatisfiesExpression(found)) {
|
|
4344
|
+
return;
|
|
4277
4345
|
}
|
|
4278
4346
|
}
|
|
4347
|
+
checkNode(node, void 0, "forbiddenProperty");
|
|
4279
4348
|
},
|
|
4280
4349
|
"ObjectPattern > Property > Identifier": (node) => {
|
|
4281
4350
|
const found = findParent(
|
|
@@ -4288,7 +4357,7 @@ var suffixSubjectsRule = ruleCreator({
|
|
|
4288
4357
|
if (!found) {
|
|
4289
4358
|
return;
|
|
4290
4359
|
}
|
|
4291
|
-
if (!validate.variables && found
|
|
4360
|
+
if (!validate.variables && isVariableDeclarator(found)) {
|
|
4292
4361
|
return;
|
|
4293
4362
|
}
|
|
4294
4363
|
if (!validate.parameters) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-rxjs-x",
|
|
3
3
|
"type": "commonjs",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.4",
|
|
5
5
|
"packageManager": "yarn@4.12.0+sha512.f45ab632439a67f8bc759bf32ead036a1f413287b9042726b7cc4818b7b49e14e9423ba49b18f9e06ea4941c1ad062385b1d8760a8d5091a1a31e5f6219afca8",
|
|
6
6
|
"description": "Modern ESLint plugin for RxJS",
|
|
7
7
|
"author": "Jason Weinzierl <weinzierljason@gmail.com>",
|