@@ -16,56 +16,68 @@ export const noSharereplayBeforeTakeuntilRule = ruleCreator({
1616 } ,
1717 name : 'no-sharereplay-before-takeuntil' ,
1818 create : ( context ) => {
19- return {
20- 'CallExpression[callee.name="shareReplay"]' : ( node : es . CallExpression ) => {
21- const pipeCallExpression = node . parent as es . CallExpression ;
22- if (
23- ! pipeCallExpression . arguments
24- || ! isMemberExpression ( pipeCallExpression . callee )
25- || ! isIdentifier ( pipeCallExpression . callee . property )
26- || pipeCallExpression . callee . property . name !== 'pipe'
27- ) {
28- return ;
29- }
19+ function checkCallExpression ( node : es . CallExpression ) {
20+ const pipeCallExpression = node . parent as es . CallExpression ;
21+ if (
22+ ! pipeCallExpression . arguments
23+ || ! isMemberExpression ( pipeCallExpression . callee )
24+ || ! isIdentifier ( pipeCallExpression . callee . property )
25+ || pipeCallExpression . callee . property . name !== 'pipe'
26+ ) {
27+ return ;
28+ }
29+
30+ const takeUntilIndex = pipeCallExpression . arguments . findIndex ( arg =>
31+ isCallExpression ( arg )
32+ && (
33+ ( isIdentifier ( arg . callee )
34+ && arg . callee . name === 'takeUntil' )
35+ || ( isMemberExpression ( arg . callee )
36+ && isIdentifier ( arg . callee . property )
37+ && arg . callee . property . name === 'takeUntil' )
38+ ) ,
39+ ) ;
3040
31- const takeUntilIndex = pipeCallExpression . arguments . findIndex ( arg =>
32- isCallExpression ( arg )
33- && isIdentifier ( arg . callee )
34- && arg . callee . name === 'takeUntil' ,
35- ) ;
41+ if ( takeUntilIndex === - 1 ) {
42+ return ;
43+ }
3644
37- if ( takeUntilIndex === - 1 ) {
38- return ;
39- }
45+ const shareReplayConfig = node . arguments [ 0 ] ;
46+ if (
47+ ! shareReplayConfig
48+ || ! isObjectExpression ( shareReplayConfig )
49+ ) {
50+ // refCount defaults to false if no config is provided.
51+ context . report ( {
52+ messageId : 'forbidden' ,
53+ node : node . callee ,
54+ } ) ;
55+ return ;
56+ }
4057
41- const shareReplayConfig = node . arguments [ 0 ] ;
42- if (
43- ! shareReplayConfig
44- || ! isObjectExpression ( shareReplayConfig )
45- ) {
46- // refCount defaults to false if no config is provided.
47- context . report ( {
48- messageId : 'forbidden' ,
49- node : node . callee ,
50- } ) ;
51- return ;
52- }
58+ const refCountElement = shareReplayConfig . properties
59+ . filter ( isProperty )
60+ . find ( prop =>
61+ isIdentifier ( prop . key )
62+ && prop . key . name === 'refCount' ) ;
63+ if (
64+ ! refCountElement
65+ || ( isLiteral ( refCountElement . value )
66+ && refCountElement . value . value === false )
67+ ) {
68+ context . report ( {
69+ messageId : 'forbidden' ,
70+ node : node . callee ,
71+ } ) ;
72+ }
73+ }
5374
54- const refCountElement = shareReplayConfig . properties
55- . filter ( isProperty )
56- . find ( prop =>
57- isIdentifier ( prop . key )
58- && prop . key . name === 'refCount' ) ;
59- if (
60- ! refCountElement
61- || ( isLiteral ( refCountElement . value )
62- && refCountElement . value . value === false )
63- ) {
64- context . report ( {
65- messageId : 'forbidden' ,
66- node : node . callee ,
67- } ) ;
68- }
75+ return {
76+ 'CallExpression[callee.name="shareReplay"]' : ( node : es . CallExpression ) => {
77+ checkCallExpression ( node ) ;
78+ } ,
79+ 'CallExpression[callee.property.name="shareReplay"]' : ( node : es . CallExpression ) => {
80+ checkCallExpression ( node ) ;
6981 } ,
7082 } ;
7183 } ,
0 commit comments