eslint-plugin-rxjs-x 0.8.1 → 0.8.3

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 CHANGED
@@ -159,7 +159,9 @@ declare const allRules: {
159
159
  description: "Disallow unsafe `shareReplay` usage.";
160
160
  recommended: "recommended";
161
161
  }, TSESLint.RuleListener>;
162
- 'no-sharereplay-before-takeuntil': TSESLint.RuleModule<"forbidden", [], {
162
+ 'no-sharereplay-before-takeuntil': TSESLint.RuleModule<"forbidden", readonly {
163
+ takeUntilAlias?: string[];
164
+ }[], {
163
165
  description: "Disallow using `shareReplay({ refCount: false })` before `takeUntil`.";
164
166
  recommended: "strict";
165
167
  }, TSESLint.RuleListener>;
package/dist/index.d.ts CHANGED
@@ -159,7 +159,9 @@ declare const allRules: {
159
159
  description: "Disallow unsafe `shareReplay` usage.";
160
160
  recommended: "recommended";
161
161
  }, TSESLint.RuleListener>;
162
- 'no-sharereplay-before-takeuntil': TSESLint.RuleModule<"forbidden", [], {
162
+ 'no-sharereplay-before-takeuntil': TSESLint.RuleModule<"forbidden", readonly {
163
+ takeUntilAlias?: string[];
164
+ }[], {
163
165
  description: "Disallow using `shareReplay({ refCount: false })` before `takeUntil`.";
164
166
  recommended: "strict";
165
167
  }, TSESLint.RuleListener>;
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.8.1";
3
+ var version = "0.8.3";
4
4
 
5
5
  // src/configs/recommended.ts
6
6
  var createRecommendedConfig = (plugin2) => ({
@@ -288,6 +288,9 @@ function isProperty(node) {
288
288
  function isPropertyDefinition(node) {
289
289
  return node.type === _utils.AST_NODE_TYPES.PropertyDefinition;
290
290
  }
291
+ function isSpreadElement(node) {
292
+ return node.type === _utils.AST_NODE_TYPES.SpreadElement;
293
+ }
291
294
  function isUnaryExpression(node) {
292
295
  return node.type === _utils.AST_NODE_TYPES.UnaryExpression;
293
296
  }
@@ -2836,29 +2839,39 @@ var noSharereplayRule = ruleCreator({
2836
2839
  });
2837
2840
 
2838
2841
  // src/rules/no-sharereplay-before-takeuntil.ts
2842
+ var defaultOptions11 = [];
2839
2843
  var noSharereplayBeforeTakeuntilRule = ruleCreator({
2840
- defaultOptions: [],
2844
+ defaultOptions: defaultOptions11,
2841
2845
  meta: {
2842
2846
  docs: {
2843
2847
  description: "Disallow using `shareReplay({ refCount: false })` before `takeUntil`.",
2844
2848
  recommended: "strict"
2845
2849
  },
2846
2850
  messages: {
2847
- forbidden: "shareReplay before takeUntil is forbidden unless 'refCount: true' is specified."
2851
+ forbidden: "shareReplay before '{{takeUntilAlias}}' is forbidden unless 'refCount: true' is specified."
2848
2852
  },
2849
- schema: [],
2853
+ schema: [{
2854
+ properties: {
2855
+ takeUntilAlias: { type: "array", description: "List of operators to treat as takeUntil.", default: ["takeUntilDestroyed"] }
2856
+ },
2857
+ type: "object"
2858
+ }],
2850
2859
  type: "problem"
2851
2860
  },
2852
2861
  name: "no-sharereplay-before-takeuntil",
2853
2862
  create: (context) => {
2863
+ const [config = {}] = context.options;
2864
+ const { takeUntilAlias = ["takeUntilDestroyed"] } = config;
2854
2865
  function checkCallExpression(node) {
2855
2866
  const pipeCallExpression = node.parent;
2856
2867
  if (!pipeCallExpression.arguments || !isMemberExpression(pipeCallExpression.callee) || !isIdentifier(pipeCallExpression.callee.property) || pipeCallExpression.callee.property.name !== "pipe") {
2857
2868
  return;
2858
2869
  }
2870
+ const allTakeUntilAlias = ["takeUntil", ...takeUntilAlias];
2871
+ const takeUntilRegex = new RegExp(`^(${allTakeUntilAlias.join("|")})$`);
2859
2872
  const { isOrderValid, operatorNode: takeUntilNode } = findIsLastOperatorOrderValid(
2860
2873
  pipeCallExpression,
2861
- /^takeUntil$/,
2874
+ takeUntilRegex,
2862
2875
  DEFAULT_VALID_POST_COMPLETION_OPERATORS
2863
2876
  );
2864
2877
  if (!isOrderValid || !takeUntilNode) {
@@ -2871,6 +2884,7 @@ var noSharereplayBeforeTakeuntilRule = ruleCreator({
2871
2884
  if (!shareReplayConfig || !isObjectExpression(shareReplayConfig)) {
2872
2885
  context.report({
2873
2886
  messageId: "forbidden",
2887
+ data: { takeUntilAlias: isIdentifier(takeUntilNode) ? takeUntilNode.name : "takeUntil" },
2874
2888
  node: node.callee
2875
2889
  });
2876
2890
  return;
@@ -2879,6 +2893,7 @@ var noSharereplayBeforeTakeuntilRule = ruleCreator({
2879
2893
  if (!refCountElement || isLiteral(refCountElement.value) && refCountElement.value.value === false) {
2880
2894
  context.report({
2881
2895
  messageId: "forbidden",
2896
+ data: { takeUntilAlias: isIdentifier(takeUntilNode) ? takeUntilNode.name : "takeUntil" },
2882
2897
  node: node.callee
2883
2898
  });
2884
2899
  }
@@ -3229,9 +3244,9 @@ import { ${functionName} } from ${quote}rxjs${quote};`
3229
3244
 
3230
3245
  // src/rules/no-unbound-methods.ts
3231
3246
 
3232
- var defaultOptions11 = [];
3247
+ var defaultOptions12 = [];
3233
3248
  var noUnboundMethodsRule = ruleCreator({
3234
- defaultOptions: defaultOptions11,
3249
+ defaultOptions: defaultOptions12,
3235
3250
  meta: {
3236
3251
  docs: {
3237
3252
  description: "Disallow passing unbound methods.",
@@ -3361,7 +3376,7 @@ var noUnnecessaryCollectionRule = ruleCreator({
3361
3376
  }
3362
3377
  return;
3363
3378
  }
3364
- if (args.length === 1 && couldBeObservable(firstArg)) {
3379
+ if (args.length === 1 && !isSpreadElement(firstArg) && couldBeObservable(firstArg)) {
3365
3380
  context.report({
3366
3381
  messageId: "forbidden",
3367
3382
  node: node.callee,
@@ -3394,9 +3409,9 @@ var noUnnecessaryCollectionRule = ruleCreator({
3394
3409
 
3395
3410
  // src/rules/no-unsafe-catch.ts
3396
3411
 
3397
- var defaultOptions12 = [];
3412
+ var defaultOptions13 = [];
3398
3413
  var noUnsafeCatchRule = ruleCreator({
3399
- defaultOptions: defaultOptions12,
3414
+ defaultOptions: defaultOptions13,
3400
3415
  meta: {
3401
3416
  docs: {
3402
3417
  description: "Disallow unsafe `catchError` usage in effects and epics.",
@@ -3455,9 +3470,9 @@ var noUnsafeCatchRule = ruleCreator({
3455
3470
 
3456
3471
  // src/rules/no-unsafe-first.ts
3457
3472
 
3458
- var defaultOptions13 = [];
3473
+ var defaultOptions14 = [];
3459
3474
  var noUnsafeFirstRule = ruleCreator({
3460
- defaultOptions: defaultOptions13,
3475
+ defaultOptions: defaultOptions14,
3461
3476
  meta: {
3462
3477
  docs: {
3463
3478
  description: "Disallow unsafe `first`/`take` usage in effects and epics.",
@@ -3579,9 +3594,9 @@ var noUnsafeSubjectNext = ruleCreator({
3579
3594
  // src/rules/no-unsafe-switchmap.ts
3580
3595
 
3581
3596
  var _decamelize = require('decamelize'); var _decamelize2 = _interopRequireDefault(_decamelize);
3582
- var defaultOptions14 = [];
3597
+ var defaultOptions15 = [];
3583
3598
  var noUnsafeSwitchmapRule = ruleCreator({
3584
- defaultOptions: defaultOptions14,
3599
+ defaultOptions: defaultOptions15,
3585
3600
  meta: {
3586
3601
  docs: {
3587
3602
  description: "Disallow unsafe `switchMap` usage in effects and epics.",
@@ -3704,9 +3719,9 @@ var noUnsafeSwitchmapRule = ruleCreator({
3704
3719
 
3705
3720
  // src/rules/no-unsafe-takeuntil.ts
3706
3721
 
3707
- var defaultOptions15 = [];
3722
+ var defaultOptions16 = [];
3708
3723
  var noUnsafeTakeuntilRule = ruleCreator({
3709
- defaultOptions: defaultOptions15,
3724
+ defaultOptions: defaultOptions16,
3710
3725
  meta: {
3711
3726
  docs: {
3712
3727
  description: "Disallow applying operators after `takeUntil`.",
@@ -3767,9 +3782,9 @@ var noUnsafeTakeuntilRule = ruleCreator({
3767
3782
  });
3768
3783
 
3769
3784
  // src/rules/prefer-observer.ts
3770
- var defaultOptions16 = [];
3785
+ var defaultOptions17 = [];
3771
3786
  var preferObserverRule = ruleCreator({
3772
- defaultOptions: defaultOptions16,
3787
+ defaultOptions: defaultOptions17,
3773
3788
  meta: {
3774
3789
  docs: {
3775
3790
  description: "Disallow passing separate handlers to `subscribe` and `tap`.",
@@ -4005,9 +4020,9 @@ var preferRootOperatorsRule = ruleCreator({
4005
4020
 
4006
4021
  // src/rules/suffix-subjects.ts
4007
4022
 
4008
- var defaultOptions17 = [];
4023
+ var defaultOptions18 = [];
4009
4024
  var suffixSubjectsRule = ruleCreator({
4010
- defaultOptions: defaultOptions17,
4025
+ defaultOptions: defaultOptions18,
4011
4026
  meta: {
4012
4027
  docs: {
4013
4028
  description: "Enforce the use of a suffix in subject identifiers.",
@@ -4204,9 +4219,9 @@ var suffixSubjectsRule = ruleCreator({
4204
4219
  // src/rules/throw-error.ts
4205
4220
 
4206
4221
 
4207
- var defaultOptions18 = [];
4222
+ var defaultOptions19 = [];
4208
4223
  var throwErrorRule = ruleCreator({
4209
- defaultOptions: defaultOptions18,
4224
+ defaultOptions: defaultOptions19,
4210
4225
  meta: {
4211
4226
  docs: {
4212
4227
  description: "Enforce passing only `Error` values to `throwError` or `Subject.error`.",
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.8.1";
3
+ var version = "0.8.3";
4
4
 
5
5
  // src/configs/recommended.ts
6
6
  var createRecommendedConfig = (plugin2) => ({
@@ -288,6 +288,9 @@ function isProperty(node) {
288
288
  function isPropertyDefinition(node) {
289
289
  return node.type === AST_NODE_TYPES.PropertyDefinition;
290
290
  }
291
+ function isSpreadElement(node) {
292
+ return node.type === AST_NODE_TYPES.SpreadElement;
293
+ }
291
294
  function isUnaryExpression(node) {
292
295
  return node.type === AST_NODE_TYPES.UnaryExpression;
293
296
  }
@@ -2836,29 +2839,39 @@ var noSharereplayRule = ruleCreator({
2836
2839
  });
2837
2840
 
2838
2841
  // src/rules/no-sharereplay-before-takeuntil.ts
2842
+ var defaultOptions11 = [];
2839
2843
  var noSharereplayBeforeTakeuntilRule = ruleCreator({
2840
- defaultOptions: [],
2844
+ defaultOptions: defaultOptions11,
2841
2845
  meta: {
2842
2846
  docs: {
2843
2847
  description: "Disallow using `shareReplay({ refCount: false })` before `takeUntil`.",
2844
2848
  recommended: "strict"
2845
2849
  },
2846
2850
  messages: {
2847
- forbidden: "shareReplay before takeUntil is forbidden unless 'refCount: true' is specified."
2851
+ forbidden: "shareReplay before '{{takeUntilAlias}}' is forbidden unless 'refCount: true' is specified."
2848
2852
  },
2849
- schema: [],
2853
+ schema: [{
2854
+ properties: {
2855
+ takeUntilAlias: { type: "array", description: "List of operators to treat as takeUntil.", default: ["takeUntilDestroyed"] }
2856
+ },
2857
+ type: "object"
2858
+ }],
2850
2859
  type: "problem"
2851
2860
  },
2852
2861
  name: "no-sharereplay-before-takeuntil",
2853
2862
  create: (context) => {
2863
+ const [config = {}] = context.options;
2864
+ const { takeUntilAlias = ["takeUntilDestroyed"] } = config;
2854
2865
  function checkCallExpression(node) {
2855
2866
  const pipeCallExpression = node.parent;
2856
2867
  if (!pipeCallExpression.arguments || !isMemberExpression(pipeCallExpression.callee) || !isIdentifier(pipeCallExpression.callee.property) || pipeCallExpression.callee.property.name !== "pipe") {
2857
2868
  return;
2858
2869
  }
2870
+ const allTakeUntilAlias = ["takeUntil", ...takeUntilAlias];
2871
+ const takeUntilRegex = new RegExp(`^(${allTakeUntilAlias.join("|")})$`);
2859
2872
  const { isOrderValid, operatorNode: takeUntilNode } = findIsLastOperatorOrderValid(
2860
2873
  pipeCallExpression,
2861
- /^takeUntil$/,
2874
+ takeUntilRegex,
2862
2875
  DEFAULT_VALID_POST_COMPLETION_OPERATORS
2863
2876
  );
2864
2877
  if (!isOrderValid || !takeUntilNode) {
@@ -2871,6 +2884,7 @@ var noSharereplayBeforeTakeuntilRule = ruleCreator({
2871
2884
  if (!shareReplayConfig || !isObjectExpression(shareReplayConfig)) {
2872
2885
  context.report({
2873
2886
  messageId: "forbidden",
2887
+ data: { takeUntilAlias: isIdentifier(takeUntilNode) ? takeUntilNode.name : "takeUntil" },
2874
2888
  node: node.callee
2875
2889
  });
2876
2890
  return;
@@ -2879,6 +2893,7 @@ var noSharereplayBeforeTakeuntilRule = ruleCreator({
2879
2893
  if (!refCountElement || isLiteral(refCountElement.value) && refCountElement.value.value === false) {
2880
2894
  context.report({
2881
2895
  messageId: "forbidden",
2896
+ data: { takeUntilAlias: isIdentifier(takeUntilNode) ? takeUntilNode.name : "takeUntil" },
2882
2897
  node: node.callee
2883
2898
  });
2884
2899
  }
@@ -3229,9 +3244,9 @@ import { ${functionName} } from ${quote}rxjs${quote};`
3229
3244
 
3230
3245
  // src/rules/no-unbound-methods.ts
3231
3246
  import { ESLintUtils as ESLintUtils9 } from "@typescript-eslint/utils";
3232
- var defaultOptions11 = [];
3247
+ var defaultOptions12 = [];
3233
3248
  var noUnboundMethodsRule = ruleCreator({
3234
- defaultOptions: defaultOptions11,
3249
+ defaultOptions: defaultOptions12,
3235
3250
  meta: {
3236
3251
  docs: {
3237
3252
  description: "Disallow passing unbound methods.",
@@ -3361,7 +3376,7 @@ var noUnnecessaryCollectionRule = ruleCreator({
3361
3376
  }
3362
3377
  return;
3363
3378
  }
3364
- if (args.length === 1 && couldBeObservable(firstArg)) {
3379
+ if (args.length === 1 && !isSpreadElement(firstArg) && couldBeObservable(firstArg)) {
3365
3380
  context.report({
3366
3381
  messageId: "forbidden",
3367
3382
  node: node.callee,
@@ -3394,9 +3409,9 @@ var noUnnecessaryCollectionRule = ruleCreator({
3394
3409
 
3395
3410
  // src/rules/no-unsafe-catch.ts
3396
3411
  import { stripIndent as stripIndent5 } from "common-tags";
3397
- var defaultOptions12 = [];
3412
+ var defaultOptions13 = [];
3398
3413
  var noUnsafeCatchRule = ruleCreator({
3399
- defaultOptions: defaultOptions12,
3414
+ defaultOptions: defaultOptions13,
3400
3415
  meta: {
3401
3416
  docs: {
3402
3417
  description: "Disallow unsafe `catchError` usage in effects and epics.",
@@ -3455,9 +3470,9 @@ var noUnsafeCatchRule = ruleCreator({
3455
3470
 
3456
3471
  // src/rules/no-unsafe-first.ts
3457
3472
  import { stripIndent as stripIndent6 } from "common-tags";
3458
- var defaultOptions13 = [];
3473
+ var defaultOptions14 = [];
3459
3474
  var noUnsafeFirstRule = ruleCreator({
3460
- defaultOptions: defaultOptions13,
3475
+ defaultOptions: defaultOptions14,
3461
3476
  meta: {
3462
3477
  docs: {
3463
3478
  description: "Disallow unsafe `first`/`take` usage in effects and epics.",
@@ -3579,9 +3594,9 @@ var noUnsafeSubjectNext = ruleCreator({
3579
3594
  // src/rules/no-unsafe-switchmap.ts
3580
3595
  import { stripIndent as stripIndent7 } from "common-tags";
3581
3596
  import decamelize from "decamelize";
3582
- var defaultOptions14 = [];
3597
+ var defaultOptions15 = [];
3583
3598
  var noUnsafeSwitchmapRule = ruleCreator({
3584
- defaultOptions: defaultOptions14,
3599
+ defaultOptions: defaultOptions15,
3585
3600
  meta: {
3586
3601
  docs: {
3587
3602
  description: "Disallow unsafe `switchMap` usage in effects and epics.",
@@ -3704,9 +3719,9 @@ var noUnsafeSwitchmapRule = ruleCreator({
3704
3719
 
3705
3720
  // src/rules/no-unsafe-takeuntil.ts
3706
3721
  import { stripIndent as stripIndent8 } from "common-tags";
3707
- var defaultOptions15 = [];
3722
+ var defaultOptions16 = [];
3708
3723
  var noUnsafeTakeuntilRule = ruleCreator({
3709
- defaultOptions: defaultOptions15,
3724
+ defaultOptions: defaultOptions16,
3710
3725
  meta: {
3711
3726
  docs: {
3712
3727
  description: "Disallow applying operators after `takeUntil`.",
@@ -3767,9 +3782,9 @@ var noUnsafeTakeuntilRule = ruleCreator({
3767
3782
  });
3768
3783
 
3769
3784
  // src/rules/prefer-observer.ts
3770
- var defaultOptions16 = [];
3785
+ var defaultOptions17 = [];
3771
3786
  var preferObserverRule = ruleCreator({
3772
- defaultOptions: defaultOptions16,
3787
+ defaultOptions: defaultOptions17,
3773
3788
  meta: {
3774
3789
  docs: {
3775
3790
  description: "Disallow passing separate handlers to `subscribe` and `tap`.",
@@ -4005,9 +4020,9 @@ var preferRootOperatorsRule = ruleCreator({
4005
4020
 
4006
4021
  // src/rules/suffix-subjects.ts
4007
4022
  import { AST_NODE_TYPES as AST_NODE_TYPES9, ESLintUtils as ESLintUtils11 } from "@typescript-eslint/utils";
4008
- var defaultOptions17 = [];
4023
+ var defaultOptions18 = [];
4009
4024
  var suffixSubjectsRule = ruleCreator({
4010
- defaultOptions: defaultOptions17,
4025
+ defaultOptions: defaultOptions18,
4011
4026
  meta: {
4012
4027
  docs: {
4013
4028
  description: "Enforce the use of a suffix in subject identifiers.",
@@ -4204,9 +4219,9 @@ var suffixSubjectsRule = ruleCreator({
4204
4219
  // src/rules/throw-error.ts
4205
4220
  import { ESLintUtils as ESLintUtils12 } from "@typescript-eslint/utils";
4206
4221
  import * as tsutils4 from "ts-api-utils";
4207
- var defaultOptions18 = [];
4222
+ var defaultOptions19 = [];
4208
4223
  var throwErrorRule = ruleCreator({
4209
- defaultOptions: defaultOptions18,
4224
+ defaultOptions: defaultOptions19,
4210
4225
  meta: {
4211
4226
  docs: {
4212
4227
  description: "Enforce passing only `Error` values to `throwError` or `Subject.error`.",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eslint-plugin-rxjs-x",
3
3
  "type": "commonjs",
4
- "version": "0.8.1",
4
+ "version": "0.8.3",
5
5
  "packageManager": "yarn@4.10.3+sha512.c38cafb5c7bb273f3926d04e55e1d8c9dfa7d9c3ea1f36a4868fa028b9e5f72298f0b7f401ad5eb921749eb012eb1c3bb74bf7503df3ee43fd600d14a018266f",
6
6
  "description": "ESLint v9+ plugin for RxJS",
7
7
  "author": "Jason Weinzierl <weinzierljason@gmail.com>",
@@ -11,6 +11,10 @@
11
11
  "type": "git",
12
12
  "url": "git+https://github.com/JasonWeinzierl/eslint-plugin-rxjs-x.git"
13
13
  },
14
+ "publishConfig": {
15
+ "provenance": true,
16
+ "registry": "https://registry.npmjs.org"
17
+ },
14
18
  "bugs": {
15
19
  "url": "https://github.com/JasonWeinzierl/eslint-plugin-rxjs-x/issues"
16
20
  },