eslint-plugin-rxjs-x 0.9.3 → 0.9.5

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 CHANGED
@@ -4,7 +4,7 @@
4
4
  [![NPM version](https://img.shields.io/npm/v/eslint-plugin-rxjs-x.svg)](https://www.npmjs.com/package/eslint-plugin-rxjs-x)
5
5
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/JasonWeinzierl/eslint-plugin-rxjs-x/badge)](https://scorecard.dev/viewer/?uri=github.com/JasonWeinzierl/eslint-plugin-rxjs-x)
6
6
 
7
- This ESLint plugin is intended to prevent issues with [RxJS](https://github.com/ReactiveX/rxjs).
7
+ This ESLint plugin is intended to prevent issues with [RxJS 7](https://github.com/ReactiveX/rxjs/tree/7.x).
8
8
 
9
9
  Most of these rules require TypeScript typed linting and are indicated as such below.
10
10
 
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";
3
+ var version = "0.9.5";
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: `Subject identifiers must end with "{{suffix}}".`
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: "Require for properties." },
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: "forbidden"
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.type === _utils.AST_NODE_TYPES.VariableDeclarator) {
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.properties) {
4274
- const parent = node.parent;
4275
- if (node === parent.key && !isSourcesObjectAcceptingStaticObservableCreator(parent.parent.parent)) {
4276
- checkNode(node);
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.type === _utils.AST_NODE_TYPES.VariableDeclarator) {
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";
3
+ var version = "0.9.5";
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 { AST_NODE_TYPES as AST_NODE_TYPES8, ESLintUtils as ESLintUtils12 } from "@typescript-eslint/utils";
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: `Subject identifiers must end with "{{suffix}}".`
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: "Require for properties." },
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: "forbidden"
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.type === AST_NODE_TYPES8.VariableDeclarator) {
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.properties) {
4274
- const parent = node.parent;
4275
- if (node === parent.key && !isSourcesObjectAcceptingStaticObservableCreator(parent.parent.parent)) {
4276
- checkNode(node);
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.type === AST_NODE_TYPES8.VariableDeclarator) {
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.3",
4
+ "version": "0.9.5",
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>",
@@ -67,8 +67,8 @@
67
67
  },
68
68
  "peerDependencies": {
69
69
  "eslint": "^8.57.0 || ^9.0.0",
70
- "rxjs": ">=7.2.0",
71
- "typescript": ">=4.8.4"
70
+ "rxjs": "^7.2.0",
71
+ "typescript": ">=4.8.4 <6.0.0"
72
72
  },
73
73
  "peerDependenciesMeta": {
74
74
  "rxjs": {