/** * @license React * eslint-plugin-react-hooks.production.min.js * * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict';function ha(a,d){if(a){if("string"===typeof a)return ma(a,d);var f=Object.prototype.toString.call(a).slice(8,-1);"Object"===f&&a.constructor&&(f=a.constructor.name);if("Map"===f||"Set"===f)return Array.from(a);if("Arguments"===f||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(f))return ma(a,d)}}function ma(a,d){if(null==d||d>a.length)d=a.length;for(var f=0,p=Array(d);f=a.length?{done:!0}:{done:!1,value:a[p++]}},e:function(h){throw h;},f:d}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var t=!0,H=!1,r;return{s:function(){f=a[Symbol.iterator]()}, n:function(){var h=f.next();t=h.done;return h},e:function(h){H=!0;r=h},f:function(){try{t||null==f.return||f.return()}finally{if(H)throw r;}}}}function na(a){if("Identifier"===a.type)return/^use[A-Z0-9]/.test(a.name);if("MemberExpression"===a.type&&!a.computed&&na(a.property)){a=a.object;var d=/^[A-Z].*/;return"Identifier"===a.type&&d.test(a.name)}return!1}function oa(a){return"Identifier"===a.type&&/^[A-Z]/.test(a.name)} function pa(a,d){return a.name===d||"MemberExpression"===a.type&&"React"===a.object.name&&a.property.name===d}function ta(a){return!!(a.parent&&a.parent.callee&&pa(a.parent.callee,"forwardRef"))}function ua(a){return!!(a.parent&&a.parent.callee&&pa(a.parent.callee,"memo"))}function va(a){for(;a;){var d=wa(a);if(d&&(oa(d)||na(d))||ta(a)||ua(a))return!0;a=a.parent}return!1} function wa(a){if("FunctionDeclaration"===a.type||"FunctionExpression"===a.type&&a.id)return a.id;if("FunctionExpression"===a.type||"ArrowFunctionExpression"===a.type)return"VariableDeclarator"===a.parent.type&&a.parent.init===a?a.parent.id:"AssignmentExpression"===a.parent.type&&a.parent.right===a&&"="===a.parent.operator?a.parent.left:"Property"!==a.parent.type||a.parent.value!==a||a.parent.computed?"AssignmentPattern"!==a.parent.type||a.parent.right!==a||a.parent.computed?void 0:a.parent.left: a.parent.key} function xa(a){function d(){return{isUsed:!1,isSatisfiedRecursively:!1,isSubtreeUsed:!1,children:new Map}}function f(k,m){m=m.split(".");m=P(m);var D;try{for(m.s();!(D=m.n()).done;){var F=D.value,G=k.children.get(F);G||(G=d(),k.children.set(F,G));k=G}}catch(I){m.e(I)}finally{m.f()}return k}function p(k,m,D){m=m.split(".");m=P(m);var F;try{for(m.s();!(F=m.n()).done;){var G=k.children.get(F.value);if(!G)break;D(G);k=G}}catch(I){m.e(I)}finally{m.f()}}function t(k,m,D,F){k.children.forEach(function(G,I){var S= F(I);G.isSatisfiedRecursively?G.isSubtreeUsed&&D.add(S):G.isUsed?m.add(S):t(G,m,D,function(Q){return S+"."+Q})})}var H=a.dependencies,r=a.declaredDependencies,h=a.stableDependencies,x=a.externalDependencies,L=a.isEffect,C=d();H.forEach(function(k,m){f(C,m).isUsed=!0;p(C,m,function(D){D.isSubtreeUsed=!0})});r.forEach(function(k){f(C,k.key).isSatisfiedRecursively=!0});h.forEach(function(k){f(C,k).isSatisfiedRecursively=!0});a=new Set;var R=new Set;t(C,a,R,function(k){return k});var n=[],q=new Set,y= new Set;r.forEach(function(k){k=k.key;R.has(k)?-1===n.indexOf(k)?n.push(k):y.add(k):!L||k.endsWith(".current")||x.has(k)?q.add(k):-1===n.indexOf(k)&&n.push(k)});a.forEach(function(k){n.push(k)});return{suggestedDependencies:n,unnecessaryDependencies:q,duplicateDependencies:y,missingDependencies:a}} function V(a){switch(a.type){case "ObjectExpression":return"object";case "ArrayExpression":return"array";case "ArrowFunctionExpression":case "FunctionExpression":return"function";case "ClassExpression":return"class";case "ConditionalExpression":if(null!=V(a.consequent)||null!=V(a.alternate))return"conditional";break;case "LogicalExpression":if(null!=V(a.left)||null!=V(a.right))return"logical expression";break;case "JSXFragment":return"JSX fragment";case "JSXElement":return"JSX element";case "AssignmentExpression":if(null!= V(a.right))return"assignment expression";break;case "NewExpression":return"object construction";case "Literal":if(a.value instanceof RegExp)return"regular expression";break;case "TypeCastExpression":return V(a.expression);case "TSAsExpression":return V(a.expression)}return null} function ya(a){var d=a.declaredDependenciesNode,f=a.componentScope,p=a.scope;return a.declaredDependencies.map(function(t){var H=t.key;t=f.variables.find(function(x){return x.name===H});if(null==t)return null;var r=t.defs[0];if(null==r)return null;if("Variable"===r.type&&"VariableDeclarator"===r.node.type&&"Identifier"===r.node.id.type&&null!=r.node.init){var h=V(r.node.init);if(null!=h)return[t,h]}return"FunctionName"===r.type&&"FunctionDeclaration"===r.node.type?[t,"function"]:"ClassName"===r.type&& "ClassDeclaration"===r.node.type?[t,"class"]:null}).filter(Boolean).map(function(t){var H=t[0];t=t[1];var r=H.defs[0];a:{for(var h=!1,x=0;x=d.range[1]}exports.configs={recommended:{plugins:["react-hooks"],rules:{"react-hooks/rules-of-hooks":"error","react-hooks/exhaustive-deps":"warn"}}}; exports.rules={"rules-of-hooks":{meta:{type:"problem",docs:{description:"enforces the Rules of Hooks",recommended:!0,url:"https://reactjs.org/docs/hooks-rules.html"}},create:function(a){function d(h){h=P(h.references);try{for(h.s();!h.n().done;);}catch(x){h.e(x)}finally{h.f()}}var f=null,p=[],t=[],H=new WeakSet,r={};return r.onCodePathSegmentStart=function(h){return t.push(h)},r.onCodePathSegmentEnd=function(){return t.pop()},r.onCodePathStart=function(){return p.push(new Map)},r.onCodePathEnd=function(h, x){function L(l,A){var z=L.cache,u=z.get(l.id);A=new Set(A);if(A.has(l.id)){z=[].concat(A);l=z.slice(z.indexOf(l.id)+1);l=P(l);var E;try{for(l.s();!(E=l.n()).done;)q.add(E.value)}catch(M){l.e(M)}finally{l.f()}return BigInt("0")}A.add(l.id);if(void 0!==u)return u;if(h.thrownSegments.includes(l))u=BigInt("0");else if(0===l.prevSegments.length)u=BigInt("1");else{u=BigInt("0");E=P(l.prevSegments);var B;try{for(E.s();!(B=E.n()).done;)u+=L(B.value,A)}catch(M){E.e(M)}finally{E.f()}}l.reachable&&u===BigInt("0")? z.delete(l.id):z.set(l.id,u);return u}function C(l,A){var z=C.cache,u=z.get(l.id);A=new Set(A);if(A.has(l.id)){z=Array.from(A);l=z.slice(z.indexOf(l.id)+1);l=P(l);var E;try{for(l.s();!(E=l.n()).done;)q.add(E.value)}catch(M){l.e(M)}finally{l.f()}return BigInt("0")}A.add(l.id);if(void 0!==u)return u;if(h.thrownSegments.includes(l))u=BigInt("0");else if(0===l.nextSegments.length)u=BigInt("1");else{u=BigInt("0");E=P(l.nextSegments);var B;try{for(E.s();!(B=E.n()).done;)u+=C(B.value,A)}catch(M){E.e(M)}finally{E.f()}}z.set(l.id, u);return u}function R(l){var A=R.cache,z=A.get(l.id);if(null===z)return Infinity;if(void 0!==z)return z;A.set(l.id,null);if(0===l.prevSegments.length)z=1;else{z=Infinity;var u=P(l.prevSegments),E;try{for(u.s();!(E=u.n()).done;){var B=R(E.value);B {\n async function fetchData() {\n // You can await here\n const response = await MyAPI.getData(someId);\n // ...\n }\n fetchData();\n}, [someId]); // Or [] if effect doesn't need props or state\n\nLearn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching"}); for(var I=r.acquire(n),S=new Set,Q=null,N=I.upper;N;){S.add(N);if("function"===N.type)break;N=N.upper}if(N){Q=N;var ca=Array.isArray,T=f(function(b){if(!ca(b.defs))return!1;var e=b.defs[0];if(null==e||"VariableDeclarator"!==e.node.type)return!1;var c=e.node.init;if(null==c)return!1;for(;"TSAsExpression"===c.type;)c=c.expression;var g=e.node.parent;if(null==g&&(Ga(Q.block,e.node.id),g=e.node.parent,null==g))return!1;if("const"===g.kind&&"Literal"===c.type&&("string"===typeof c.value||"number"===typeof c.value|| null===c.value))return!0;if("CallExpression"!==c.type)return!1;c=c.callee;"MemberExpression"!==c.type||"React"!==c.object.name||null==c.property||c.computed||(c=c.property);if("Identifier"!==c.type)return!1;e=e.node.id;c=c.name;if("useRef"===c&&"Identifier"===e.type)return!0;if("useState"===c||"useReducer"===c){if("ArrayPattern"===e.type&&2===e.elements.length&&ca(b.identifiers)){if(e.elements[1]===b.identifiers[0]){if("useState"===c)for(b=b.references,g=c=0;g { return ","; })"]:["useCallback(",")"],ka=W[1];return[ea.insertTextBefore(e.node.init,W[0]),ea.insertTextAfter(e.node.init, ka)]}}]);d({node:e.node,message:v,suggest:ba})});else{!m&&0 ...)' if you only need '"+B.missingDep+"' in the '"+(B.setter+"' call.");break;default:throw Error("Unknown case.");}}d({node:q,message:"React Hook "+a.getSource(y)+" has "+(G(U,"a","missing","include")||G(N,"an","unnecessary","exclude")||G(ja,"a","duplicate","omit"))+K,suggest:[{desc:"Update the dependencies array to be: ["+da.map(F).join(", ")+"]",fix:function(b){return b.replaceText(q,"["+ da.map(F).join(", ")+"]")}}]})}}else{var M=null;O.forEach(function(b,e){M||b.references.forEach(function(c){if(!M&&h.has(c.identifier)){for(c=c.from;"function"!==c.type;)c=c.upper;c.block===n&&(M=e)}})});if(M){var sa=xa({dependencies:O,declaredDependencies:[],stableDependencies:Z,externalDependencies:new Set,isEffect:!0}).suggestedDependencies;d({node:y,message:"React Hook "+k+" contains a call to '"+M+"'. Without a list of dependencies, this can lead to an infinite chain of updates. To fix this, pass ["+ sa.join(", ")+("] as a second argument to the "+k+" Hook."),suggest:[{desc:"Add dependencies array: ["+sa.join(", ")+"]",fix:function(b){return b.insertTextAfter(n,", ["+sa.join(", ")+"]")}}]})}}}}var t=a.options&&a.options[0]&&a.options[0].enableDangerousAutofixThisMayCauseInfiniteLoops||!1,H={additionalHooks:a.options&&a.options[0]&&a.options[0].additionalHooks?new RegExp(a.options[0].additionalHooks):void 0,enableDangerousAutofixThisMayCauseInfiniteLoops:t},r=a.getSourceCode().scopeManager,h=new WeakMap, x=new WeakSet,L=new WeakMap,C=new WeakMap,R=new WeakSet;return{CallExpression:function(n){var q=Fa(n.callee,H);if(-1!==q){var y=n.arguments[q],k=n.callee,m=Ca(k).name,D=n.arguments[q+1];n=/Effect($|[^a-z])/g.test(m);if(y)if(D||n){switch(y.type){case "FunctionExpression":case "ArrowFunctionExpression":p(y,D,k,m,n);return;case "Identifier":if(!D||D.elements&&D.elements.some(function(F){return F&&"Identifier"===F.type&&F.name===y.name}))return;q=a.getScope().set.get(y.name);if(null==q||null==q.defs)return; q=q.defs[0];if(!q||!q.node)break;if("Variable"!==q.type&&"FunctionName"!==q.type)break;switch(q.node.type){case "FunctionDeclaration":p(q.node,D,k,m,n);return;case "VariableDeclarator":if(q=q.node.init)switch(q.type){case "ArrowFunctionExpression":case "FunctionExpression":p(q,D,k,m,n);return}}break;default:d({node:k,message:"React Hook "+m+" received a function whose dependencies are unknown. Pass an inline function instead."});return}d({node:k,message:"React Hook "+m+" has a missing dependency: '"+ y.name+"'. Either include it or remove the dependency array.",suggest:[{desc:"Update the dependencies array to be: ["+y.name+"]",fix:function(F){return F.replaceText(D,"["+y.name+"]")}}]})}else"useMemo"!==m&&"useCallback"!==m||d({node:k,message:"React Hook "+m+" does nothing when called with only one argument. Did you forget to pass an array of dependencies?"});else d({node:k,message:"React Hook "+m+" requires an effect callback. Did you forget to pass a callback to the hook?"})}}}}}};