oxlint-plugin-react-doctor 0.9.4-dev.bafef41 → 0.9.4-dev.da0647e

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.
Files changed (2) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -22,5 +22,5 @@ If the missing value is recreated every render, move it inside the hook or stabi
22
22
  `);for(let e=0;e<n.length;e++){let r=n[e];if(!r.includes(`-disable`))continue;let i=dPt.exec(r);if(i&&mPt(i[1])){t.add(e+2);continue}let a=fPt.exec(r);a&&mPt(a[1])&&t.add(e+1)}if(t.size===0)return null;let r=[],i=[],a=0,o=0;for(let t=0;t<e.length;t++)e[t]===`
23
23
  `&&(r.push(t),a+=Buffer.byteLength(e.slice(o,t+1),`utf8`),i.push(a-1),o=t+1);return{suppressedLines:t,utf16NewlineOffsets:r,utf8NewlineOffsets:i}},gPt=(e,t)=>{let n=0,r=t.length-1,i=0;for(;n<=r;){let a=Math.floor((n+r)/2);t[a]<e?(i=a+1,n=a+1):r=a-1}return i+1},_Pt=e=>{if(!e)return null;let t=pPt.get(e);if(t!==void 0)return t;let n=null;try{n=hPt(Bn(e,`utf8`))}catch{n=null}return pPt.set(e,n),n},vPt=(e,t)=>{if(t===null)return!1;let n=_Pt(e);return n?n.suppressedLines.has(gPt(t,n.utf16NewlineOffsets))||n.suppressedLines.has(gPt(t,n.utf8NewlineOffsets)):!1},yPt=e=>`\`${e}\` can only run inside a React component or custom Hook because React needs that render scope to track Hook state.`,bPt=(e,t)=>`\`${e}\` runs inside \`${t}\`, which is not a component or Hook, so React cannot attach Hook state to a render.`,G6=e=>`\`${e}\` changes Hook order between renders when called conditionally, so React can attach state to the wrong Hook.`,xPt=e=>`\`${e}\` can run a different number of times inside a loop, so React can attach state to the wrong Hook.`,SPt=e=>`\`${e}\` runs inside an async function, so React cannot guarantee the same Hook order during render.`,CPt=e=>`\`${e}\` cannot run in a class component because Hooks require a function component or custom Hook render scope.`,wPt=e=>`\`${e}\` can be skipped by try/catch/finally control flow, so React can attach state to the wrong Hook.`,TPt=e=>`\`${e}\` comes from useEffectEvent, so it only works when called from Effects in the same component.`,EPt=e=>`${TPt(e)} It also breaks if saved in a variable or passed around.`,DPt=()=>`A function from useEffectEvent only works inside Effects in the same component, so passing it around breaks the event/dependency split.`,OPt=new Set([`useEffect`,`useLayoutEffect`,`useInsertionEffect`]),kPt=e=>{let t=e.name.charCodeAt(0);return t>=65&&t<=90},APt=/^_+[A-Z]/,jPt=(e,t)=>Ks(e)?!0:APt.test(e)?!T(t.parent,`CallExpression`):!1,MPt=e=>{if(!e)return null;try{return new RegExp(e)}catch{return null}},NPt=e=>T(e,`Identifier`)?e.name:T(e,`MemberExpression`)&&!e.computed&&T(e.property,`Identifier`)?e.property.name:null,PPt=e=>typeof e!=`object`||!e?``:e.additionalEffectHooks??``,FPt=e=>typeof e!=`object`||!e?[]:e.allowedPascalCaseHookNamespaces??[],IPt=e=>{let t=e?.[`react-doctor`],n=typeof t==`object`&&t?t.rulesOfHooks:void 0;return{additionalEffectHooks:n?.additionalEffectHooks??PPt(e?.[`react-hooks`]),allowedPascalCaseHookNamespaces:n?.allowedPascalCaseHookNamespaces??FPt(e?.[`react-hooks`])}},LPt=(e,t,n)=>{if(!T(e,`CallExpression`))return null;let r=e.callee;if(T(r,`Identifier`)&&Gs(r.name)){let e=t.symbolFor(r);return e&&(e.kind===`parameter`||e.kind===`catch-clause-parameter`||r.name===`use`&&(zPt(e,t)!==`use`||e.kind===`function`))?null:{hookName:r.name}}if(T(r,`MemberExpression`)&&!r.computed&&T(r.property,`Identifier`)&&Gs(r.property.name)){let i=D(r.object),a=r.property.name;return rFt(e,t)?null:T(i,`Identifier`)?n.allowedPascalCaseHookNamespaces.includes(i.name)||!kPt(i)||a===`use`&&i.name!==`React`&&T(e.arguments[0],`ArrayExpression`)?null:{hookName:a}:null}return null},RPt=e=>{let t=e.declarationNode?.parent;for(;t&&!T(t,`ImportDeclaration`);)t=t.parent??null;if(!t||!T(t,`ImportDeclaration`))return!1;let n=t.source;return!!(n&&T(n,`Literal`)&&n.value===`react`)},zPt=(e,t,n=new Set)=>{if(n.has(e.id))return null;if(n.add(e.id),e.kind===`import`){if(!RPt(e))return null;let t=e.declarationNode;if(T(t,`ImportSpecifier`)){let e=t.imported;if(T(e,`Identifier`))return e.name}return e.name}let r=e.initializer;if(!r)return null;if(T(r,`MemberExpression`)&&T(r.object,`Identifier`)&&r.object.name===`React`&&T(r.property,`Identifier`)&&!r.computed)return r.property.name;if(BPt(r))return e.name;if(T(r,`MemberExpression`)&&BPt(r.object)&&T(r.property,`Identifier`)&&!r.computed)return r.property.name;if(T(r,`Identifier`)){let i=t.symbolFor(r);if(i){let r=zPt(i,t,n);if(!r)return null;let a=VPt(e.bindingIdentifier);return a===null?r:a}}return null},BPt=e=>{if(!T(e,`CallExpression`)||!T(e.callee,`Identifier`)||e.callee.name!==`require`)return!1;let t=e.arguments[0];return!t||!T(t,`Literal`)?!1:t.value===`react`},VPt=e=>{let t=e.parent;for(;t;){if(T(t,`Property`))return!t.computed&&T(t.key,`Identifier`)?t.key.name:T(t.key,`Literal`)&&typeof t.key.value==`string`?t.key.value:null;if(T(t,`VariableDeclarator`)||T(t,`ArrowFunctionExpression`)||T(t,`FunctionExpression`)||T(t,`FunctionDeclaration`))return null;t=t.parent??null}return null},HPt=e=>e===`use`,K6=(e,t,n=new Set)=>{let r=D(e);if(T(r,`Identifier`)){let e=t.symbolFor(r);if(!e||n.has(e.id))return!1;if(n.add(e.id),e.kind===`import`)return RPt(e)&&Gs(kt(e.declarationNode)??``);if(e.kind!==`const`||!e.initializer||!T(e.declarationNode,`VariableDeclarator`))return!1;let i=wi(e.bindingIdentifier);if(i){let n=D(e.initializer);return Gs(i)&&T(n,`Identifier`)&&Ce(n,t)&&!zt(n,i,t)}return e.declarationNode.id===e.bindingIdentifier?K6(e.initializer,t,n):!1}if(!T(r,`MemberExpression`))return!1;let i=C(r);if(!i||!Gs(i))return!1;let a=D(r.object);return T(a,`Identifier`)&&Ce(a,t)&&!zt(a,i,t)},UPt=(e,t)=>{let n=D(e);return K6(n,t)?!0:T(n,`UnaryExpression`)&&n.operator===`typeof`&&K6(n.argument,t)},WPt=(e,t)=>{let n=D(e);return T(n,`Literal`)?!0:T(n,`Identifier`)&&n.name===`undefined`&&t.isGlobalReference(n)},GPt=new Set([`==`,`!=`,`===`,`!==`]),q6=(e,t)=>{let n=D(e);return K6(n,t)?!0:T(n,`UnaryExpression`)&&n.operator===`!`?q6(n.argument,t):T(n,`LogicalExpression`)?q6(n.left,t)&&q6(n.right,t):!T(n,`BinaryExpression`)||!GPt.has(n.operator)?!1:UPt(n.left,t)&&WPt(n.right,t)||UPt(n.right,t)&&WPt(n.left,t)},KPt=e=>{let t=!1;return A(e,n=>{if(n!==e&&y(n))return!1;if(T(n,`ReturnStatement`)||T(n,`ThrowStatement`))return t=!0,!1}),t},qPt=(e,t)=>T(e,`IfStatement`)&&e.alternate===null&&ze(e.consequent)&&q6(e.test,t),JPt=(e,t,n)=>{if(!y(t)||!T(t.body,`BlockStatement`))return!1;let r=e;for(;r.parent&&r.parent!==t.body;){if(y(r.parent)||T(r.parent,`IfStatement`)||T(r.parent,`SwitchStatement`)||T(r.parent,`SwitchCase`)||T(r.parent,`ConditionalExpression`)||T(r.parent,`LogicalExpression`))return!1;r=r.parent}if(r.parent!==t.body)return!1;let i=t.body.body.findIndex(e=>e===r);if(i<=0)return!1;let a=t.body.body.slice(0,i).filter(e=>KPt(e));return a.length>0&&a.every(e=>qPt(e,n))},YPt=e=>{let t=e.callee;return T(t,`Identifier`)?t.name:T(t,`MemberExpression`)&&T(t.object,`Identifier`)&&t.object.name===`React`&&T(t.property,`Identifier`)?`React.${t.property.name}`:null},XPt=e=>{if((T(e,`FunctionDeclaration`)||T(e,`FunctionExpression`))&&e.id)return e.id.name;let t=e.parent;for(;t&&T(t,`CallExpression`);){let e=YPt(t);if(e!==null&&St.has(e))t=t.parent??null;else break}for(;t&&(T(t,`AssignmentPattern`)||t.type===`TSAsExpression`||t.type===`TSSatisfiesExpression`||t.type===`TSNonNullExpression`||t.type===`ChainExpression`);)t=t.parent??null;return t?T(t,`VariableDeclarator`)&&T(t.id,`Identifier`)?t.id.name:T(t,`AssignmentExpression`)&&T(t.left,`Identifier`)?t.left.name:T(t,`Property`)&&!t.computed&&T(t.key,`Identifier`)?t.key.name:null:null},ZPt=(e,t,n,r=new Set)=>{if(r.has(e))return 0;r.add(e);let i=0;return A(e,a=>{if(a!==e){if(y(a))return!1;LPt(a,t,n)&&(T(a,`CallExpression`)&&eFt(a,t,n,r)||(i+=1))}}),i},QPt=/^_?(?:init|create|make|build)(?:[A-Z0-9_]|$)/,$Pt=/Hooks?$/,eFt=(e,t,n,r)=>{let i=e.callee;if(!T(i,`Identifier`))return!1;let a=t.symbolFor(i);if(!a)return!1;let o=a.initializer&&y(a.initializer)?a.initializer:null;return o?ZPt(o,t,n,r)===0:!1},J6=/^[@~]\//,tFt=e=>{let t=e.split(`/`);return e.startsWith(`@`)?t.slice(0,2).join(`/`):t[0]??e},nFt=e=>An.has(e)||e.toLowerCase().includes(`react`)||Kte.has(tFt(e)),Y6=e=>{let t=e.callee;if(!T(t,`Identifier`))return!1;let n=He(e,t.name);return n===null||n.startsWith(`.`)||J6.test(n)?!1:!nFt(n)},rFt=(e,t)=>{let n=e.callee;if(!T(n,`MemberExpression`))return!1;let r=C(n);if(!r||!Gs(r))return!1;let i=D(n.object);if(!T(i,`Identifier`))return!1;let a=t.symbolFor(i);if(!a||Pt(a,e,t)||Nn(i,r,e,t))return!1;let o=Lu(i,t);return!o||o.source.startsWith(`.`)||J6.test(o.source)?!1:!nFt(o.source)},iFt=e=>{let t=e.callee;if(!T(t,`MemberExpression`)||!T(t.object,`Identifier`)||$Pt.test(t.object.name))return!1;let n=Ie(e,t.object.name);return!n||n.exportedName!==`default`?!1:!An.has(n.source)},aFt=e=>{let t=e.callee;if(!T(t,`Identifier`)||t.name!==`useMDXComponents`)return!1;let n=He(e,t.name);return n===null?!1:n.startsWith(`.`)||J6.test(n)},X6=e=>{let t=e.parent;for(;t;){if(T(t,`FunctionDeclaration`)||T(t,`FunctionExpression`)||T(t,`ArrowFunctionExpression`)){let e=XPt(t),n=e??`anonymous`;return{node:t,name:n,hasResolvedName:e!==null,isAsync:!!t.async,isComponentOrHook:Rp(t)||(e===null?!1:jPt(n,t))}}t=t.parent??null}return null},oFt=e=>{let t=e.parent;for(;t;){if(T(t,`ClassDeclaration`)||T(t,`ClassExpression`))return!0;if(T(t,`FunctionDeclaration`)||T(t,`FunctionExpression`)||T(t,`ArrowFunctionExpression`)){let e=t.parent;if(!(e&&(T(e,`MethodDefinition`)||T(e,`PropertyDefinition`))))return!1}t=t.parent??null}return!1},sFt=(e,t)=>{let n=e.parent;for(;n&&n!==t;){if(T(n,`TryStatement`)||T(n,`CatchClause`))return!0;n=n.parent??null}return!1},cFt=(e,t)=>{let n=e.parent;for(;n&&n!==t;){if(T(n,`ForStatement`)||T(n,`ForInStatement`)||T(n,`ForOfStatement`)||T(n,`WhileStatement`)||T(n,`DoWhileStatement`))return!0;n=n.parent??null}return!1},Z6=e=>{let t=e.parent;for(;t;){if(y(t)){if(Rp(t))return t;let e=XPt(t);if(e!==null&&jPt(e,t))return t}t=t.parent??null}return null},lFt=(e,t)=>Z6(e.declarationNode)===Z6(t),uFt=(e,t)=>e===`useEffectEvent`||OPt.has(e)||!!(t&&t.test(e)),dFt=(e,t)=>{let n=e.parent;if(!n||!T(n,`CallExpression`))return!1;let r=NPt(n.callee);return!r||!n.arguments.some(t=>t===e)?!1:uFt(r,t)},fFt=(e,t)=>{let n=e.parent;for(;n;){if(y(n)&&dFt(n,t))return!0;n=n.parent??null}return!1},pFt=e=>{let t=e.parent;return!!(t&&T(t,`CallExpression`)&&t.callee===e)},mFt=e=>{let t=e.parent;return!!(t&&T(t,`VariableDeclarator`)&&t.init===e&&T(t.id,`Identifier`))},hFt=x({id:`rules-of-hooks`,title:`Hook called conditionally`,severity:`error`,tags:[`test-noise`],recommendation:`Call hooks at the top level of a React function component or custom Hook so React sees the same hook order on every render.`,category:`Correctness`,create:e=>{let t=e=>{let t=e;return typeof t.start==`number`?t.start:Array.isArray(t.range)?t.range[0]:null},n={get filename(){return e.filename},get settings(){return e.settings},get scopes(){return e.scopes},get cfg(){return e.cfg},report:n=>{vPt(e.filename,t(n.node))||e.report(n)}},r=IPt(n.settings),i=MPt(r.additionalEffectHooks);return{CallExpression(e){let t=LPt(e,n.scopes,r);if(!t)return;let{hookName:i}=t;if(i===`useEffectEvent`&&!mFt(e)&&!rqe(e.callee,e,n.scopes)){n.report({node:e.callee,message:DPt()});return}if(eFt(e,n.scopes,r)||aFt(e))return;let a=X6(e);if(!a){if(Y6(e))return;n.report({node:e.callee,message:yPt(i)});return}if(oFt(e)){if(Y6(e)||iFt(e))return;n.report({node:e.callee,message:CPt(i)});return}if(a.isAsync){n.report({node:e.callee,message:SPt(i)});return}let o=!a.isComponentOrHook&&a.hasResolvedName&&QPt.test(a.name)&&Z6(a.node)===null&&ZPt(a.node,n.scopes,r)>=2;if(HPt(i)){let t=a.node,r=a.isComponentOrHook||o;for(;!r&&t;){let e=X6(t);if(!e)break;t=e.node,e.isComponentOrHook&&(r=!0)}if(!r){if(!a.hasResolvedName||Y6(e))return;n.report({node:e.callee,message:bPt(i,a.name)});return}sFt(e,a.node)&&n.report({node:e.callee,message:wPt(i)});return}if(!a.isComponentOrHook&&!o){if(!a.hasResolvedName){let t=a.node,r=!1;for(;t;){let e=X6(t);if(!e)break;if(e.isComponentOrHook){r=!0;break}t=e.node}if(!r)return;n.report({node:e.callee,message:G6(i)});return}if(Y6(e))return;n.report({node:e.callee,message:bPt(i,a.name)});return}if(cFt(e,a.node)){n.report({node:e.callee,message:xPt(i)});return}if(sFt(e,a.node)){n.report({node:e.callee,message:wPt(i)});return}if(Em(e,a.node)){n.report({node:e.callee,message:G6(i)});return}!n.cfg.isUnconditionalFromEntry(e)&&!JPt(e,a.node,n.scopes)&&n.report({node:e.callee,message:G6(i)})},Identifier(e){let t=n.scopes.referenceFor(e)?.resolvedSymbol;!t||!Yp(t,n.scopes)||lFt(t,e)&&(fFt(e,i)||n.report({node:e,message:pFt(e)?TPt(t.name):EPt(t.name)}))}}}}),gFt=x({id:`scope`,title:`scope attribute on non-th element`,tags:[`react-jsx-only`],severity:`warn`,recommendation:"Remove `scope` from this element or move it to the related `<th>` cell.",category:`Accessibility`,create:e=>({JSXOpeningElement(t){let n=nb(t.attributes,`scope`);if(!n)return;let r=Jn(t,e.settings);Xr.has(r)&&r!==`th`&&e.report({node:n,message:"The `scope` attribute only works on `<th>` cells, so screen readers get no table-header help from it here."})}})}),_Ft=e=>{let t=e?.[`react-doctor`],n=typeof t==`object`&&t?t.selfClosingComp??{}:{};return{component:n.component??!0,html:n.html??!0}},vFt=e=>{if(!T(e,`JSXIdentifier`))return!1;let t=e.name.charCodeAt(0);return t>=97&&t<=122},yFt=x({id:`self-closing-comp`,title:`Element not self-closing`,severity:`warn`,defaultEnabled:!1,recommendation:"Use `<X />` for childless elements so empty closing tags do not add noise.",category:`Architecture`,create:e=>{let t=_Ft(e.settings);return{JSXElement(n){if(!n.closingElement||n.children.length>1)return;if(n.children.length===1){let e=n.children[0];if(!T(e,`JSXText`))return;let t=e.value;if(!(t.includes(`
24
24
  `)&&/^\s*$/.test(t)))return}let r=n.openingElement.name,i=T(r,`JSXMemberExpression`)||T(r,`JSXNamespacedName`)||T(r,`JSXIdentifier`)&&!vFt(r),a=T(r,`JSXIdentifier`)&&vFt(r);i&&!t.component||a&&!t.html||e.report({node:n.openingElement,message:`This tag has no children, so the closing tag adds noise without changing output.`})}}}}),bFt=new Set([`log`,`info`,`warn`]),xFt=new Set([`analytics`,`posthog`,`mixpanel`,`segment`,`amplitude`,`datadog`,`sentry`]),SFt=new Set([`track`,`identify`,`page`,`capture`,`captureMessage`,`captureException`,`log`]),CFt=(e,t)=>e===`console`?bFt.has(t):xFt.has(e)?SFt.has(t):!1,wFt=`next/server`,Q6=new Set([`after`,`unstable_after`]),TFt=(e,t)=>{if(e.kind!==`import`)return!1;let n=Ie(t,e.name);return!!(n&&n.source===wFt&&!n.isNamespace&&n.exportedName&&Q6.has(n.exportedName))},EFt=e=>{if(!T(e.declarationNode,`VariableDeclarator`)||!T(e.declarationNode.id,`ObjectPattern`))return!1;let t=e.bindingIdentifier;T(t.parent,`AssignmentPattern`)&&t.parent.left===t&&(t=t.parent);let n=t.parent;return!!(T(n,`Property`)&&n.value===t&&n.parent===e.declarationNode.id)},DFt=(e,t,n)=>{let r=D(e),i=new Set;for(;T(r,`Identifier`);){let e=n.symbolFor(r);if(!e||i.has(e.id))return!1;if(e.kind===`import`){let n=Ie(t,e.name);return!!(n?.source===wFt&&n.isNamespace)}if(e.kind!==`const`||!e.initializer||!T(e.declarationNode,`VariableDeclarator`)||e.declarationNode.id!==e.bindingIdentifier)return!1;i.add(e.id),r=D(e.initializer)}return!1},OFt=(e,t,n,r=new Set)=>{let i=D(e);if(T(i,`MemberExpression`)){let e=S(i,{allowComputedString:!0});return!!(e&&Q6.has(e)&&DFt(i.object,t,n))}if(!T(i,`Identifier`))return!1;let a=n.symbolFor(i);if(!a||r.has(a.id))return!1;if(TFt(a,t))return!0;let o=wi(a.bindingIdentifier);return a.kind===`const`&&a.initializer&&EFt(a)&&o&&Q6.has(o)?DFt(a.initializer,t,n):a.kind!==`const`||!a.initializer||!T(a.declarationNode,`VariableDeclarator`)||a.declarationNode.id!==a.bindingIdentifier?!1:(r.add(a.id),OFt(a.initializer,t,n,r))},kFt=e=>{let t=v(e),n=t.parent;return T(n,`CallExpression`)&&n.arguments[0]===t?n:null},AFt=(e,t)=>{let n=kFt(e);return!!(n&&OFt(n.callee,n,t))},jFt=(e,t)=>{if(T(e,`FunctionDeclaration`)&&e.id)return t.scopeFor(e).symbols.find(t=>t.declarationNode===e)??null;let n=v(e),r=n.parent;return!T(r,`VariableDeclarator`)||r.init!==n||!T(r.id,`Identifier`)?null:t.symbolFor(r.id)},MFt=e=>{let t=e.declarationNode;return T(t,`VariableDeclarator`)&&(t=t.parent),!!(t?.parent&&(T(t.parent,`ExportNamedDeclaration`)||T(t.parent,`ExportDefaultDeclaration`)))},NFt=(e,t)=>{let n=b(e);for(;n;){if(n===t)return!0;n=b(n)}return!1},PFt=(e,t,n)=>{if(AFt(e,t))return!0;let r=jFt(e,t);if(!r||MFt(r)||n.has(r.id))return!1;let i=new Set(n).add(r.id),a=!1;for(let n of r.references){if(n.flag!==`read`)return!1;if(!NFt(n.identifier,e)){if(AFt(n.identifier,t)){a=!0;continue}if(!FFt(n.identifier,t,i))return!1;a=!0}}return a},FFt=(e,t,n=new Set)=>{let r=b(e);for(;r;){if(PFt(r,t,n))return!0;r=b(r)}return!1},IFt=x({id:`server-after-nonblocking`,title:`Blocking side effect before response`,tags:[`test-noise`],severity:`warn`,recommendation:"`import { after } from 'next/server'`, then wrap it: `after(() => analytics.track(...))`. The response sends right away.",create:e=>{let t=!1,n=0,r=e=>{IG(e)&&n++},i=e=>{IG(e)&&(n=Math.max(0,n-1))};return{Program(e){t=On(e,`use server`)},FunctionDeclaration:r,"FunctionDeclaration:exit":i,FunctionExpression:r,"FunctionExpression:exit":i,ArrowFunctionExpression:r,"ArrowFunctionExpression:exit":i,CallExpression(r){if(!t&&n===0||!T(r.callee,`MemberExpression`)||!T(r.callee.property,`Identifier`))return;let i=D(r.callee.object),a=T(i,`Identifier`)?i.name:null;if(!a)return;let o=r.callee.property.name;CFt(a,o)&&(FFt(r,e.scopes)||e.report({node:r,message:`${a}.${o}() runs before the response, so your users wait longer for it.`}))}}}}),LFt=new Set([`signed`,`logged`,`sign`]),RFt=e=>{let t=[];for(let n=0;n<e.length;n+=1){let r=e[n];if(LFt.has(r)&&e[n+1]===`in`){t.push(`${r}in`),n+=1;continue}t.push(r)}return t},$6=e=>{let t=RFt(yN(e));if(t.length===0)return!1;let n=!1,r=!1,i=!1,a=!1,o=!1;for(let e of t){if(Dte.test(e)||rte.has(e))return!0;Vte.has(e)&&(n=!0),wte.has(e)&&(r=!0),$ee.has(e)&&(i=!0),Fte.has(e)&&(a=!0),cte.has(e)&&(o=!0)}return!!(n&&(a||o)||r&&a||i&&o)},zFt=new Set([...mte,...u]),BFt=new Set([`set`,`update`]),VFt=new Set([`language`,`locale`]),HFt=e=>!T(e,`CallExpression`)||!T(e.callee,`Identifier`)?!1:zFt.has(e.callee.name)&&He(e,e.callee.name)!==null,UFt=e=>{if(!T(e,`CallExpression`)||!T(e.callee,`Identifier`)||e.arguments?.length!==1)return!1;let t=yN(e.callee.name);if(!t.some(e=>BFt.has(e))||!t.some(e=>VFt.has(e)))return!1;let n=He(e,e.callee.name)?.toLowerCase();return!!(n?.includes(`i18n`)||n?.includes(`locale`))},WFt=(e,t)=>{if(!T(e,`CallExpression`))return!1;if(T(e.callee,`Identifier`))return e.callee.name===`cookies`&&He(e,e.callee.name)===`next/headers`;if(!T(e.callee,`MemberExpression`)||!T(e.callee.property,`Identifier`)||e.callee.property.name!==`delete`)return!1;let n=D(e.callee.object);return T(n,`Identifier`)?t.has(n.name):qx(n)&&He(n,`cookies`)===`next/headers`},GFt=(e,t)=>HFt(e)||UFt(e)||WFt(e,t),KFt=e=>{let t=e;for(;t;){if(T(t,`TSAsExpression`)||T(t,`TSNonNullExpression`)||T(t,`TSSatisfiesExpression`)||T(t,`ChainExpression`)){t=t.expression;continue}if(T(t,`SequenceExpression`)){t=t.expressions?.[t.expressions.length-1];continue}return t}return null},qFt=(e,t)=>{let n=KFt(e);return!n||GFt(n,t)?!1:!e8(n)},e8=e=>e?T(e,`Literal`)?!0:T(e,`Identifier`)?e.name===`undefined`:T(e,`TemplateLiteral`)?(e.expressions??[]).every(e8):T(e,`UnaryExpression`)?e8(e.argument):T(e,`ArrayExpression`)?(e.elements??[]).every(e=>e===null||!T(e,`SpreadElement`)&&e8(e)):T(e,`ObjectExpression`)?(e.properties??[]).every(e=>T(e,`Property`)&&(!e.computed||e8(e.key))&&e8(e.value)):!1:!1,JFt=e=>T(e,`ReturnStatement`)||T(e,`ThrowStatement`)?e.argument??null:null,YFt=(e,t)=>qFt(JFt(e),t),XFt=(e,t)=>T(e,`CallExpression`)||T(e,`TaggedTemplateExpression`)||T(e,`NewExpression`)||T(e,`AssignmentExpression`)||T(e,`UpdateExpression`)||T(e,`UnaryExpression`)&&e.operator===`delete`||YFt(e,t),ZFt=e=>{let t=e.body;if(!t)return!1;let n=He(t,`cookies`)===`next/headers`?Jx(t):new Set;if(!T(t,`BlockStatement`)&&qFt(t,n))return!1;let r=!1,i=!1;return A(t,e=>{if(i||e!==t&&y(e))return!1;if(GFt(e,n)){r=!0;return}if(XFt(e,n))return i=!0,!1}),r&&!i},QFt=/^\s*(?:alter|create|delete|drop|grant|insert|merge|replace|revoke|truncate|update)\b/i,$Ft=/^(?:\s|--[^\r\n]*(?:\r?\n|$)|\/\*[\s\S]*?\*\/)+/,eIt=new Set([`apply`,`execute`,`perform`,`run`]),tIt=new Set([`append`,`create`,`delete`,`destroy`,`insert`,`mutate`,`persist`,`remove`,`set`,`update`,`upsert`,`write`]),nIt=new Set([`anon`,`public`,`publishable`]),rIt=new Set([`endpoint`,`header`,`kind`,`name`,`type`,`uri`,`url`]),t8=e=>!e||!T(e,`FunctionDeclaration`)&&!T(e,`FunctionExpression`)&&!T(e,`ArrowFunctionExpression`)?!1:!!e.async,n8=e=>{let t=e;for(;t;){if(T(t,`TSAsExpression`)||T(t,`TSNonNullExpression`)||T(t,`TSTypeAssertion`)||T(t,`TSSatisfiesExpression`)||T(t,`TSInstantiationExpression`)){t=t.expression;continue}if(T(t,`ChainExpression`)){t=t.expression;continue}return t}return null},r8=e=>{let t=n8(e);if(!t)return``;if(T(t,`Identifier`))return t.name;if(T(t,`ThisExpression`))return`this`;if(T(t,`MemberExpression`)){let e=r8(t.object),n=T(t.property,`Identifier`)?t.property.name:``;return n?e?`${e}.${n}`:n:e}return``},iIt=(e,t,n)=>{if(!n.has(t))return!0;let r=r8(e);return xn.test(r)},i8=(e,t,n=new Set)=>{let r=n8(e);if(!r)return!1;if(T(r,`MemberExpression`))return i8(r.object,t,n);if(!T(r,`Identifier`))return!1;let i=t.scopes.symbolFor(r);return!i||n.has(i.id)?!1:i.kind===`parameter`||i.kind===`catch-clause-parameter`?!0:(n.add(i.id),o(i,r,t.cfg).some(e=>i8(e,t,new Set(n))))},aIt=(e,t,n,r,i)=>{let a=n8(e.callee);if(!a)return null;if(T(a,`Identifier`)){let e=a.name;if(!t.has(e)&&!$6(e))return null;let n=i.scopes.symbolFor(a);return n?.kind===`parameter`||n?.kind===`catch-clause-parameter`||n&&n.kind!==`import`&&!r.has(e)&&!M(a,i.scopes)?null:e}if(T(a,`MemberExpression`)&&T(a.property,`Identifier`)){let e=a.property.name;return i8(a.object,i)?null:$6(e)?e:!t.has(e)||!iIt(a.object,e,n)?null:e}return null},oIt=e=>{if(!T(e,`CallExpression`))return!1;if(iS(e))return!0;let t=n8(e.callee);if(!t||!T(t,`MemberExpression`))return!1;let n=C(t);return!!(n&&(nt.has(n)||mIt.has(n)))},sIt=e=>{let t=yN(e);return!!(t.length>=2&&eIt.has(t[0])&&t.slice(1).some(e=>tIt.has(e)))},a8=(e,t)=>{if(!T(e,`CallExpression`))return null;let n=n8(e.callee);if(T(n,`Identifier`)){if(t.scopes.symbolFor(n)?.kind!==`import`)return null;let e=Ie(n,n.name);if(!e||e.isNamespace)return null;let r=e.exportedName===`default`?n.name:e.exportedName??n.name;return sIt(r)?r:null}if(!T(n,`MemberExpression`))return null;let r=n8(n.object);if(!T(r,`Identifier`)||t.scopes.symbolFor(r)?.kind!==`import`||!Ie(r,r.name)?.isNamespace)return null;let i=C(n);return i&&sIt(i)?i:null},o8=(e,t)=>{let n=t.cfg.enclosingFunction(e);return!!(n&&Em(e,n)&&!V(e,t))},s8=(e,t,n=new Set)=>{if(!y(e)||n.has(e))return!1;n.add(e);let r=!1;return A(e.body,i=>{if(r||i!==e.body&&y(i))return!1;if(o8(i,t))return;if(oIt(i)||a8(i,t)||v8(i,t)||y8(i,t)||cIt(i,t,n))return r=!0,!1;if(!T(i,`CallExpression`))return;let a=d8(i.callee,t);if(a&&s8(a,t,new Set(n)))return r=!0,!1}),r},cIt=(e,t,n=new Set)=>{if(!T(e,`CallExpression`)&&!T(e,`NewExpression`))return!1;for(let[r,i]of(e.arguments??[]).entries()){let a=d8(i,t);if(!a)continue;let o=n8(e.callee),s=o&&T(o,`MemberExpression`)?C(o):null;if((o&&T(o,`MemberExpression`)&&s&&r===0&&gIt.has(s)&&u8(o.object,t)&&!xt(o.object,s,e,t.scopes)||Tu(i,t.scopes,{requireProvenSynchronousCallbackReceiver:!0}))&&s8(a,t,new Set(n)))return!0}return!1},c8=(e,t)=>{let n=null;return A(e,r=>{if(r!==e&&y(r))return!1;if(o8(r,t))return;let i=T(r,`CallExpression`)?d8(r.callee,t):null;!oIt(r)&&!a8(r,t)&&!v8(r,t)&&!y8(r,t)&&!cIt(r,t)&&(!i||!s8(i,t))||(n===null||r.range[0]<n)&&(n=r.range[0])}),n},lIt=(e,t,n,r,i)=>{let a=!1;for(let o of e)A(o,e=>{if(a)return;if(y(e))return!1;if(!T(e,`CallExpression`)||!i.cfg.isUnconditionalFromEntry(e)||Em(e,o))return;let s=c8(o,i);s!==null&&s<e.range[0]||aIt(e,t,n,r,i)&&(a=!0)});return a},uIt=/^[A-Z]/,dIt=/(?:^|[/\\])test[/\\](?:app|src)[/\\]/,fIt=/(?:^|[/\\])app[/\\]/,pIt=new Set([`/tools/`]),mIt=new Set([`batch`,`generate`,`invoke`,`stream`,`streamEvents`]),hIt=new Set([`bind`,`pipe`,`withConfig`,`withStructuredOutput`]),gIt=new Set([`every`,`filter`,`find`,`findIndex`,`flatMap`,`forEach`,`map`,`reduce`,`reduceRight`,`some`,`sort`]),_It=new Set([`FormData`,`Headers`,`Map`,`Set`,`URLSearchParams`]),vIt=new Set([`Array`,`ReadonlyArray`,`Map`,`ReadonlyMap`,`Set`,`ReadonlySet`]),yIt=new Set([`createHash`,`createHmac`,`createSign`,`createVerify`,`createCipheriv`,`createDecipheriv`]),bIt=e=>e&&T(e,`TSTypeReference`)&&T(e.typeName,`Identifier`)?e.typeName.name:null,l8=(e,t,n)=>{if(T(e,`TSUnionType`)){let r=e.types.filter(e=>!T(e,`TSNullKeyword`)&&!T(e,`TSUndefinedKeyword`));return r.length>0&&r.every(e=>l8(e,t,n))}let r=bIt(e);return!!(r&&t.has(r)&&!Ms(e,r,n.scopes)&&!js(e,r))},xIt=(e,t)=>{let n=As(e);return n?T(n,`TSArrayType`)||T(n,`TSTupleType`)?!0:l8(n,vIt,t):!1},u8=(e,t,n=new Set)=>{let r=n8(e);if(!r)return!1;if(T(r,`ArrayExpression`))return!0;if(T(r,`NewExpression`))return T(r.callee,`Identifier`)&&(r.callee.name===`Array`||r.callee.name===`Map`||r.callee.name===`Set`)&&t.scopes.isGlobalReference(r.callee);if(!T(r,`Identifier`))return!1;let i=t.scopes.symbolFor(r);return!i||n.has(i.id)?!1:xIt(i,t)?!0:i.kind!==`const`||!i.initializer?!1:(n.add(i.id),u8(i.initializer,t,n))},d8=(e,t)=>{let n=n8(e);return n&&y(n)?n:n?M(n,t.scopes):null},SIt=(e,t)=>{let n=[],r=new Map,i=new Set,a=new Set,o=new Map,s=[{functionNode:e,argumentValues:null}],c=new Set,l=(e,n,c)=>{let l=o.get(e)??[];if(l.push(c),o.set(e,l),y(e)){let o=[],s=!1;for(let e of n??[]){if(!T(e,`SpreadElement`)){o.push(e);continue}if(T(e.argument,`ArrayExpression`)&&e.argument.elements.every(e=>!e||!T(e,`SpreadElement`))){for(let t of e.argument.elements)o.push(t);continue}s=!0;break}for(let[n,c]of(e.params??[]).entries()){if(!T(c,`Identifier`))continue;let e=t.scopes.symbolFor(c);if(!e)continue;let l=o[n]??null;if(s&&n>=o.length){a.add(e.id);continue}if(!l){i.add(e.id);continue}let u=r.get(e.id)??[];u.push(l),r.set(e.id,u)}}s.push({functionNode:e,argumentValues:n})};for(;s.length>0;){let e=s.shift()?.functionNode;!e||c.has(e)||!y(e)||(c.add(e),n.push(e.body),A(e.body,n=>{if(n!==e.body&&y(n))return xy(n)&&V(n,t)&&l(n,[],n.parent?.range[0]??n.range[0]),!1;if(!(!T(n,`CallExpression`)&&!T(n,`NewExpression`))&&V(n,t)){if(T(n,`CallExpression`)){let e=d8(n.callee,t);if(e){l(e,(n.arguments??[]).map(e=>e),n.range[0]);return}let i=n8(n.callee),a=i?t.scopes.symbolFor(i):null;if(a?.kind===`parameter`)for(let e of r.get(a.id)??[]){let r=d8(e,t);r&&l(r,(n.arguments??[]).map(e=>e),n.range[0])}}for(let[e,r]of(n.arguments??[]).entries()){let i=d8(r,t);if(!i)continue;let a=n8(n.callee),o=a&&T(a,`MemberExpression`)?C(a):null;if(a&&T(a,`MemberExpression`)&&o&&e===0&&gIt.has(o)&&u8(a.object,t)&&!xt(a.object,o,n,t.scopes)||Tu(r,t.scopes,{requireProvenSynchronousCallbackReceiver:!0})){let t=null;T(n,`CallExpression`)&&T(n.callee,`MemberExpression`)&&e===0&&T(n.callee.object,`ArrayExpression`)?t=[n.callee.object.elements.find(e=>e&&!T(e,`SpreadElement`))??null]:T(n,`CallExpression`)&&e===1&&n.arguments[0]&&T(n.arguments[0],`ArrayExpression`)&&(t=[n.arguments[0].elements.find(e=>e&&!T(e,`SpreadElement`))??null]),l(i,t,n.range[0])}}}}))}return{bodies:n,argumentValuesByParameterSymbolId:r,unknownParameterSymbolIds:i,unknownSpreadParameterSymbolIds:a,invocationStartsByFunction:o}},CIt=(e,t)=>{let n=[],r=[e],i=new Set;for(;r.length>0;){let e=r.shift();if(!e||i.has(e)||!y(e))continue;i.add(e);let a=T(e.body,`BlockStatement`)?(e.body.body??[]).slice(0,10):[e.body];for(let e of a)if(n.push(e),A(e,n=>{if(n!==e&&y(n))return xy(n)&&r.push(n),!1;if(!T(n,`CallExpression`)||!t.cfg.isUnconditionalFromEntry(n)||Em(n,e)||!V(n,t))return;let i=c8(e,t);if(i!==null&&i<n.range[0])return;let a=d8(n.callee,t);a&&r.push(a)}),c8(e,t)!==null)break}return n},wIt=(e,t)=>{let n=As(e);return!!(n&&l8(n,_It,t))},TIt=(e,t)=>{let n=n8(e);if(!n)return!1;if(T(n,`AwaitExpression`))return TIt(n.argument,t);if(T(n,`NewExpression`)&&T(n.callee,`Identifier`)&&ke.has(n.callee.name))return n.callee.name===`NextResponse`?t.scopes.symbolFor(n.callee)?.kind===`import`&&pe(n,n.callee.name,`next/server`)===`NextResponse`:t.scopes.isGlobalReference(n.callee);if(!T(n,`CallExpression`))return!1;let r=n8(n.callee);return T(r,`Identifier`)&&r.name===`headers`?t.scopes.symbolFor(r)?.kind===`import`&&pe(n,r.name,`next/headers`)===`headers`:T(r,`Identifier`)&&yIt.has(r.name)&&t.scopes.symbolFor(r)?.kind===`import`?pe(n,r.name,`node:crypto`)===r.name||pe(n,r.name,`crypto`)===r.name:!T(r,`MemberExpression`)||r.computed||!T(r.object,`Identifier`)||!T(r.property,`Identifier`)||!ct.has(r.property.name)?!1:r.object.name===`Response`?t.scopes.isGlobalReference(r.object):r.object.name===`NextResponse`&&t.scopes.symbolFor(r.object)?.kind===`import`&&pe(n,r.object.name,`next/server`)===`NextResponse`},f8=(e,t,n,r)=>{let i=r.cfg.enclosingFunction(t),a=o(e,t,r.cfg).filter(e=>V(e,r)),s=e.references.flatMap(e=>{if(e.flag===`read`)return[];let a=Pe(e.identifier);if(!a||!V(a,r))return[];let o=r.cfg.enclosingFunction(e.identifier);if(o===i)return[];let s=(o?n.invocationStartsByFunction.get(o)??[]:[]).filter(e=>e<t.range[0]).sort((e,t)=>t-e)[0];return s===void 0?[]:[{expression:a,position:s}]}).sort((e,t)=>t.position-e.position)[0];return s?e.references.filter(e=>e.flag!==`read`&&r.cfg.enclosingFunction(e.identifier)===i&&e.identifier.range[0]<t.range[0]).reduce((e,t)=>Math.max(e,t.identifier.range[0]),e.initializer?e.bindingIdentifier.range[0]:-1)>s.position?a:[s.expression]:a},p8=(e,t,n,r)=>{let i=f8(e,t,n,r);return i.length>0?[i[0]]:n.argumentValuesByParameterSymbolId.get(e.id)??[]},m8=(e,t,n,r=new Set)=>{let i=e;for(;i;){let e=n8(i);if(!e)return!1;if(TIt(e,t))return!0;if(T(e,`Identifier`)){let i=t.scopes.symbolFor(e);if(!i||r.has(i.id))return!1;if(r.add(i.id),i.kind===`parameter`){if(n.unknownSpreadParameterSymbolIds.has(i.id))return!1;let a=p8(i,e,n,t);return a.length>0?a.every(e=>m8(e,t,n,new Set(r))):wIt(i,t)?!0:n.unknownParameterSymbolIds.has(i.id)}let a=f8(i,e,n,t);if(a.length>0)return a.every(e=>m8(e,t,n,new Set(r)));let s=o(i,e,t.cfg);return s.length>0&&s.every(e=>m8(e,t,n,new Set(r)))}if(T(e,`MemberExpression`)){let t=C(e);if(t!==`headers`&&t!==`searchParams`)return!1;i=e.object;continue}if(T(e,`AwaitExpression`)){i=e.argument;continue}return!1}return!1},EIt=(e,t)=>{let n=n8(e);return n?T(n,`AwaitExpression`)?EIt(n.argument,t):!T(n,`CallExpression`)||!T(n.callee,`Identifier`)||n.callee.name!==`cookies`?!1:t.scopes.symbolFor(n.callee)?.kind===`import`&&pe(n,n.callee.name,`next/headers`)===`cookies`:!1},h8=(e,t,n,r=new Set)=>{let i=n8(e);if(!i)return!1;if(EIt(i,t))return!0;if(!T(i,`Identifier`))return!1;let a=t.scopes.symbolFor(i);if(!a||r.has(a.id))return!1;if(r.add(a.id),a.kind===`parameter`){let e=p8(a,i,n,t);return e.length>0&&e.every(e=>h8(e,t,n,new Set(r)))}let s=f8(a,i,n,t);if(s.length>0)return s.every(e=>h8(e,t,n,new Set(r)));let c=o(a,i,t.cfg);return c.length>0&&c.every(e=>h8(e,t,n,new Set(r)))},g8=(e,t,n)=>{A(e,r=>o8(r,t)?y(r)?!1:void 0:r!==e&&y(r)&&!xy(r)?!1:n(r))},DIt=(e,t)=>!T(e,`NewExpression`)||!T(e.callee,`Identifier`)?!1:t.scopes.symbolFor(e.callee)?.kind===`import`&&pe(e,e.callee.name,`@langchain/openai`)===`ChatOpenAI`,_8=(e,t,n,r=new Set)=>{let i=n8(e);if(!i)return!1;if(DIt(i,t))return!0;if(T(i,`Identifier`)){let e=t.scopes.symbolFor(i);if(!e||r.has(e.id))return!1;if(r.add(e.id),e.kind===`parameter`){let a=p8(e,i,n,t);return a.length>0&&a.every(e=>_8(e,t,n,new Set(r)))}let a=f8(e,i,n,t);if(a.length>0)return a.every(e=>_8(e,t,n,new Set(r)));let s=o(e,i,t.cfg);return s.length>0&&s.every(e=>_8(e,t,n,new Set(r)))}return!T(i,`CallExpression`)||!T(i.callee,`MemberExpression`)||i.callee.computed||!T(i.callee.property,`Identifier`)||!hIt.has(i.callee.property.name)?!1:_8(i.callee.object,t,n,new Set(r))?!0:i.arguments.some(e=>_8(e,t,n,new Set(r)))},OIt=(e,t)=>{let n=null;for(let r of e.bodies)if(g8(r,t,r=>{if(!(!T(r,`CallExpression`)||!T(r.callee,`MemberExpression`)||r.callee.computed||!T(r.callee.property,`Identifier`)||!mIt.has(r.callee.property.name)||!_8(r.callee.object,t,e)))return n=r.callee.property.name,!1}),n)break;return n?`ChatOpenAI.${n}()`:null},v8=(e,t)=>{let n=null,r=`mutation`;if(T(e,`AssignmentExpression`)?(n=e.left,r=`assignment`):T(e,`UpdateExpression`)?(n=e.argument,r=`update`):T(e,`UnaryExpression`)&&e.operator===`delete`&&(n=e.argument,r=`deletion`),!n)return null;let i=Gn(n);if(!i)return null;let a=t.scopes.symbolFor(i)?.scope.kind===`module`,o=t.scopes.isGlobalReference(i)&&i.name===`globalThis`;return a||o?`${i.name} module-state ${r}`:null},y8=(e,t)=>{if(!T(e,`TaggedTemplateExpression`))return null;let n=n8(e.tag),r=!!(T(n,`Identifier`)&&t.scopes.symbolFor(n)?.kind===`import`&&pe(n,n.name,`@vercel/postgres`)===`sql`),i=T(n,`MemberExpression`)&&C(n)===`sql`?n8(n.object):null,a=T(i,`Identifier`)?Ie(i,i.name):null,o=!!(T(i,`Identifier`)&&t.scopes.symbolFor(i)?.kind===`import`&&a?.isNamespace&&a.source===`@vercel/postgres`);if(!r&&!o)return null;let s=(e.quasi.quasis[0]?.value.raw??``).replace($Ft,``),c=QFt.exec(s);return c?`sql tagged-template ${c[0].trim().toUpperCase()}`:null},kIt=e=>{if(!Me.test(e))return!1;let t=yN(e);if(t.some(e=>nIt.has(e)))return!1;let n=t.at(-1);return!n||!rIt.has(n)},b8=(e,t,n=new Set)=>{let r=n8(e);if(!r)return!1;if(T(r,`MemberExpression`))return b8(r.object,t,n);if(!T(r,`Identifier`))return!1;let i=t.scopes.symbolFor(r);return!i||n.has(i.id)?!1:i.scope.kind===`module`?!0:(n.add(i.id),o(i,r,t.cfg).some(e=>b8(e,t,new Set(n))))},AIt=(e,t)=>{let n=t.scopes.symbolFor(e);if(!n||n.scope.kind!==`module`)return null;let r=n.kind===`import`?Ie(e,e.name):null,i=r&&!r.isNamespace&&r.exportedName!==`default`?r.exportedName??e.name:e.name;return kIt(i)?i:null},x8=(e,t,n=new Set)=>{let r=n8(e);if(!r||y(r))return null;if(T(r,`Identifier`)){let e=AIt(r,t);if(e)return e;let i=t.scopes.symbolFor(r);if(!i||n.has(i.id))return null;n.add(i.id);for(let e of o(i,r,t.cfg)){let r=x8(e,t,new Set(n));if(r)return r}return null}if(T(r,`MemberExpression`)){let e=C(r);return e&&kIt(e)&&b8(r.object,t)?e:null}if(T(r,`AwaitExpression`))return x8(r.argument,t,n);if(T(r,`ArrayExpression`)){for(let e of r.elements){if(!e||T(e,`SpreadElement`))continue;let r=x8(e,t,new Set(n));if(r)return r}return null}if(T(r,`ObjectExpression`)){for(let e of r.properties){if(!T(e,`Property`)||e.kind!==`init`)continue;let r=x8(e.value,t,new Set(n));if(r)return r}return null}if(T(r,`ConditionalExpression`))return x8(r.consequent,t,new Set(n))??x8(r.alternate,t,new Set(n));if(T(r,`LogicalExpression`)||T(r,`BinaryExpression`))return x8(r.left,t,new Set(n))??x8(r.right,t,new Set(n));if(T(r,`SequenceExpression`)){for(let e of r.expressions){let r=x8(e,t,new Set(n));if(r)return r}return null}if(T(r,`TemplateLiteral`))for(let e of r.expressions){let r=x8(e,t,new Set(n));if(r)return r}return null},jIt=(e,t)=>{if(!T(e.body,`BlockStatement`))return x8(e.body,t);let n=null;return A(e.body,r=>{if(n||r!==e.body&&y(r))return!1;if(!(!T(r,`ReturnStatement`)||!r.argument))return n=x8(r.argument,t),n?!1:void 0}),n},MIt=(e,t)=>{let n=null;for(let r of e.bodies)if(g8(r,t,e=>{if(n)return!1;let r=a8(e,t),i=r?`imported ${r}()`:v8(e,t)??y8(e,t);if(i)return n=i,!1}),n)break;return n},NIt=e=>{let t=!1;return A(e,n=>{if(t||n!==e&&y(n))return!1;if(T(n,`JSXElement`)||T(n,`JSXFragment`))return t=!0,!1}),t},PIt=e=>{if(!uIt.test(e.displayName))return!1;let t=e.functionNode.body;if(!T(t,`BlockStatement`))return NIt(t);let n=!1;return A(t,e=>{if(n||e!==t&&y(e))return!1;if(!(!T(e,`ReturnStatement`)||!e.argument))return n=NIt(e.argument),!1}),n},FIt={sign:new Set([`in`,`up`,`on`]),log:new Set([`in`])},IIt=e=>{let t=[];for(let n=0;n<e.length;n+=1){let r=e[n],i=FIt[r],a=e[n+1];if(i&&a&&i.has(a)){t.push(`${r}${a}`),n+=1;continue}t.push(r)}return t},LIt=new Set([`login`,`signin`,`signup`,`signon`,`register`,`registration`,`oauth`,`oauthcallback`,`otp`,`verifyotp`,`confirmotp`,`verifyemail`,`confirmemail`,`verifycode`,`confirmcode`,`resetpassword`,`forgotpassword`,`recoverpassword`,`magiclink`]),RIt=new Set([...LIt,`createaccount`,`emailverification`,`handleoauthcallback`,`passwordreset`,`verifyauthcode`]),zIt=/[_$]+/g,BIt=new Set([`signUp`,`signup`,`signIn`,`signin`,`signInWithPassword`,`signInWithOtp`,`signInWithOAuth`,`signInWithEmail`,`signInWithPhone`,`signInAnonymously`,`verifyOtp`,`verifyEmail`,`confirmOtp`,`resetPasswordForEmail`,`sendPasswordResetEmail`,`handleOAuthCallback`,`handleCallback`,`exchangeCodeForSession`]),VIt=e=>{let t=IIt(yN(e.replace(zIt,` `))),n=t.at(-1)===`action`?t.slice(0,-1):t;return LIt.has(n.join(``))},HIt=e=>{let t=IIt(yN(e.replace(zIt,` `))),n=t.at(-1)===`action`?t.slice(0,-1):t;for(let e=n.length;e>0;--e){let t=n.slice(0,e).join(``);if(RIt.has(t))return!0}return!1},UIt=(e,t)=>{for(let n of e.bodies){let e=!1;if(g8(n,t,t=>{if(e)return!1;if(!T(t,`CallExpression`))return;let n=n8(t.callee);if(!T(n,`MemberExpression`)||n.computed)return;let r=C(n);if(!r||!BIt.has(r))return;let i=n8(n.object),a;if(T(i,`Identifier`))a=i.name;else if(T(i,`MemberExpression`)&&!i.computed){if(C(i)!==`auth`)return;a=r8(i.object)}else return;if(xn.test(a))return e=!0,!1}),e)return!0}return!1},WIt=e=>yN(e).includes(`public`),GIt=(e,t,n,r,i)=>{if(!(t||IG(e.functionNode))||PIt(e)||VIt(e.displayName)||WIt(e.displayName))return;let a=SIt(e.functionNode,i);if(HIt(e.displayName)&&UIt(a,i)||lIt(CIt(e.functionNode,i),n,ate,r,i))return;let o=jIt(e.functionNode,i);if(o){i.report({node:e.reportNode,message:`Server action "${e.displayName}" returns the module-scoped secret "${o}" without authentication, so anyone can retrieve it directly.`});return}if(a.bodies.length===1&&ZFt(e.functionNode))return;let s=null;for(let e of a.bodies)if(g8(e,i,e=>{if(s)return!1;if(T(e,`CallExpression`))return s=aS(e,{locallyScopedSafeBindings:new Set,locallyScopedCookieBindings:new Set,shouldTraverseNestedFunction:()=>!1,isSafeReceiver:e=>m8(e,i,a),isCookieReceiver:e=>h8(e,i,a),useDefaultSafeReceiverDetection:!1,useDefaultCookieReceiverDetection:!1}),s?!1:void 0}),s)break;s??=MIt(a,i),s??=OIt(a,i),s&&i.report({node:e.reportNode,message:`Server action "${e.displayName}" performs unauthenticated privileged server work (${s}), so anyone can trigger it directly.`})},KIt=e=>{let t=[];for(let n of e.declarations??[]){if(!t8(n.init))continue;let e=T(n.id,`Identifier`)?n.id:null;t.push({functionNode:n.init,displayName:e?.name??`anonymous`,reportNode:e??n})}return t},qIt=e=>{let t=e.declaration;if(!t8(t))return null;let n=(T(t,`FunctionDeclaration`)||T(t,`FunctionExpression`))&&t.id?t.id:null;return{functionNode:t,displayName:n?.name??`default`,reportNode:n??e}},JIt=x({id:`server-auth-actions`,title:`Unauthenticated server action can be called directly`,severity:`error`,recommendation:`Check auth before changing server state or invoking billable services because exported server actions can be called directly by unauthenticated clients.`,create:e=>{if(fIt.test(e.filename??``)?Nee(e.filename,pIt):rt(e.filename))return Te;let t=!!(e.filename&&dIt.test(e.filename)),n=!1,r=null,i=new Set,a=Kr(e.settings,`serverAuthFunctionNames`),o=new Set(a),s=a.length>0?new Set([...Et,...a]):Et,c=t=>{i.has(t.functionNode)||(i.add(t.functionNode),GIt(t,n,s,o,e))};return{Program(e){r=e,n=On(e,`use server`)},ExportNamedDeclaration(e){if(t)return;let n=e.declaration;if(!n){if(!r||e.source||e.exportKind===`type`)return;for(let t of e.specifiers??[]){if(!T(t,`ExportSpecifier`)||t.exportKind===`type`)continue;let e=T(t.exported,`Identifier`)?t.exported.name:T(t.exported,`Literal`)&&typeof t.exported.value==`string`?t.exported.value:null;if(!e)continue;let n=nn(r,e);t8(n)&&c({functionNode:n,displayName:T(t.local,`Identifier`)?t.local.name:e,reportNode:t.local??t})}return}if(t8(n)){if(!T(n,`FunctionDeclaration`))return;c({functionNode:n,displayName:n.id?.name??`anonymous`,reportNode:n.id??e});return}if(T(n,`VariableDeclaration`))for(let e of KIt(n))c(e)},ExportDefaultDeclaration(e){if(t)return;let n=qIt(e);if(n){c(n);return}if(!r)return;let i=nn(r,`default`),a=t8(i)?{functionNode:i,displayName:T(e.declaration,`Identifier`)?e.declaration.name:`default`,reportNode:e.declaration??e}:null;a&&c(a)}}}}),YIt=x({id:`server-cache-with-object-literal`,title:`React.cache with object literal`,tags:[`test-noise`],severity:`warn`,recommendation:"Pass plain values like strings or numbers, not an object. React.cache() matches the exact value, so a new `{}` each render misses the cache.",create:e=>{let t=new Set;return{VariableDeclarator(e){if(!T(e.id,`Identifier`))return;let n=e.init;if(!T(n,`CallExpression`))return;let r=n.callee;(T(r,`Identifier`)&&r.name===`cache`||T(r,`MemberExpression`)&&T(r.object,`Identifier`)&&r.object.name===`React`&&T(r.property,`Identifier`)&&r.property.name===`cache`)&&t.add(e.id.name)},CallExpression(n){if(t.size===0||!T(n.callee,`Identifier`)||!t.has(n.callee.name))return;let r=n.arguments?.[0];!r||T(r,`SpreadElement`)||T(cg(r,e.scopes,og),`ObjectExpression`)&&e.report({node:n,message:`Passing a new object to React.cache() each render misses the cache, so it refetches every request.`})}}}}),XIt=new Set([`toSorted`,`toReversed`,`filter`,`map`,`slice`]),ZIt=/^use[A-Z0-9]/,QIt=e=>T(e.callee,`Identifier`)?ZIt.test(e.callee.name):T(e.callee,`MemberExpression`)&&T(e.callee.property,`Identifier`)&&ZIt.test(e.callee.property.name),$It=e=>!T(e,`CallExpression`)||!T(e.callee,`MemberExpression`)||!T(e.callee.property,`Identifier`)?null:e.callee.property.name,eLt=x({id:`server-dedup-props`,title:`Duplicate data in server props`,tags:[`test-noise`],severity:`warn`,recommendation:`Pass the source array once and build the other version on the client. Sending both ships the data twice to the browser.`,create:e=>{let t=!1,n=[];return{Program(e){t=On(e,`use client`),n.length=0},CallExpression(e){!t&&QIt(e)&&(t=!0)},JSXOpeningElement(e){if(t)return;let r=new Map,i=[];for(let t of e.attributes??[]){if(!T(t,`JSXAttribute`)||!T(t.name,`JSXIdentifier`)||t.name.name===`key`||!T(t.value,`JSXExpressionContainer`))continue;let e=t.value.expression;if(e){if(T(e,`Identifier`))r.set(e.name,t.name.name);else if(T(e,`CallExpression`)){let n=$It(e);if(!n||!XIt.has(n))continue;let r=Kn(e,{followCallChains:!0});if(!r)continue;i.push({propName:t.name.name,rootName:r,node:t})}}}for(let e of i){let t=r.get(e.rootName);t&&n.push({node:e.node,message:`Passing both "${e.propName}" & "${t}" ships the same data twice to your users (source: ${e.rootName}).`})}},"Program:exit"(){if(!t)for(let t of n)e.report(t)}}}}),tLt=(e,t)=>{let n=D(e);if(!T(n,`MemberExpression`))return!1;let r=D(n.object);return C(n)===`fetch`&&T(r,`Identifier`)&&r.name===`globalThis`&&t.scopes.isGlobalReference(r)},nLt=(e,t)=>{let n=D(e);return T(n,`Identifier`)&&n.name===`globalThis`&&t.scopes.isGlobalReference(n)},rLt=(e,t,n)=>T(t.id,`ObjectPattern`)&&!!(t.id.properties.some(t=>T(t,`Property`)&&t.value===e&&S(t,{allowComputedString:!0})===`fetch`)&&t.init&&nLt(t.init,n)),iLt=(e,t,n=new Set)=>{let r=D(e);if(tLt(r,t))return!0;if(!T(r,`Identifier`))return!1;if(r.name===`fetch`&&t.scopes.isGlobalReference(r))return!0;let i=t.scopes.symbolFor(r);return!i||i.kind!==`const`||n.has(i.id)||!T(i.declarationNode,`VariableDeclarator`)?!1:rLt(i.bindingIdentifier,i.declarationNode,t)?!0:i.declarationNode.id!==i.bindingIdentifier||!i.initializer?!1:(n.add(i.id),iLt(i.initializer,t,n))},aLt=(e,t)=>{if(!T(e,`CallExpression`))return!1;let n=D(e.callee);return!T(n,`Identifier`)||n.name!==`fetch`?!1:iLt(n,t)},oLt=e=>T(e,`Property`)?!e.computed&&T(e.key,`Identifier`)?e.key.name:T(e.key,`Literal`)&&typeof e.key.value==`string`?e.key.value:null:null,sLt=e=>(e.properties??[]).some(e=>{let t=oLt(e);return t===`cache`||t===`next`}),cLt=e=>(e.properties??[]).some(e=>T(e,`SpreadElement`)),lLt=RegExp(`/app/(?:[^/]+/)*(?:route|page|layout|template|loading|error|default)\\.${at}$`),uLt=/\/(?:node_modules|dist|build|\.next)\//,dLt=/^(?:@remix-run\/|@react-router\/|react-router(?:-dom)?$)/,fLt=e=>(e.body??[]).some(e=>T(e,`ImportDeclaration`)&&!cn(e)&&typeof e.source?.value==`string`&&dLt.test(e.source.value)),pLt=e=>{if(!T(e,`NewExpression`)||!T(e.callee,`Identifier`)||e.callee.name!==`URL`)return!1;let t=e.arguments?.[1];return T(t,`MemberExpression`)&&T(t.object,`MetaProperty`)&&T(t.property,`Identifier`)&&t.property.name===`url`},mLt=x({id:`server-fetch-without-revalidate`,title:`Fetch without revalidate`,severity:`warn`,disabledWhen:[`nextjs:15`,`nextjs:static-export`],recommendation:'Pass `{ next: { revalidate: <seconds> } }` (or `cache: "no-store"`) so old data doesn\'t stick around.',create:e=>{let t=!1;return{Program(n){let r=ge(e.filename??``);if(!db(e,`app`)||!lLt.test(r)){t=!1;return}if(uLt.test(r)){t=!1;return}t=!(n.body??[]).some(e=>T(e,`ExpressionStatement`)&&T(e.expression,`Literal`)&&e.expression.value===`use client`)&&!fLt(n)},CallExpression(n){if(!t||!aLt(n,e)||iS(n))return;let r=n.arguments?.[1];if(r&&(!T(r,`ObjectExpression`)||sLt(r)||cLt(r)))return;let i=n.arguments?.[0];if(pLt(i))return;let a=T(i,`Literal`)&&typeof i.value==`string`?`"${i.value}"`:`url`;e.report({node:n,message:`fetch(${a}) is cached forever by default, so your users can see stale data.`})}}}}),hLt=new Set([`readFileSync`,`readFile`,`readdir`,`readdirSync`,`stat`,`statSync`,`access`,`accessSync`]),gLt=new Set([`readdir`,`readdirSync`]),_Lt=new Set([`writeFile`,`writeFileSync`,`appendFile`,`appendFileSync`,`unlink`,`unlinkSync`,`rm`,`rmSync`,`rmdir`,`rmdirSync`,`rename`,`renameSync`,`copyFile`,`copyFileSync`,`mkdir`,`mkdirSync`]),S8=e=>{if(!T(e,`CallExpression`))return null;let t=e.callee;return T(t,`Identifier`)?t.name:T(t,`MemberExpression`)&&T(t.property,`Identifier`)?t.property.name:null},vLt=e=>{let t=S8(e);return t!==null&&hLt.has(t)},yLt=e=>{let t=!1;return A(e,e=>{if(t)return;let n=S8(e);n!==null&&_Lt.has(n)&&(t=!0)}),t},bLt=e=>{if(!T(e,`CallExpression`)||!T(e.callee,`Identifier`)||e.callee.name!==`fetch`)return!1;let t=e.arguments?.[0];if(!t||!T(t,`NewExpression`)||!T(t.callee,`Identifier`)||t.callee.name!==`URL`)return!1;let n=t.arguments?.[1];return n?T(n,`MemberExpression`)&&T(n.object,`MetaProperty`)&&T(n.property,`Identifier`)&&n.property.name===`url`:!1},xLt=(e,t)=>{if(t.size===0)return!1;let n=!1;return A(e,e=>{n||T(e,`Identifier`)&&t.has(e.name)&&(n=!0)}),n},SLt=(e,t)=>{let n=new Set(t);return n.size===0||A(e,e=>{if(T(e,`VariableDeclaration`))for(let t of e.declarations??[]){if(!t.init)continue;let e=new Set;Si(t.init,e),[...e].some(e=>n.has(e))&&yi(t.id,n)}}),n},CLt=(e,t,n,r)=>{let i=SLt(t,r),a=yLt(t);A(t,t=>{let r=null;if(vLt(t)||bLt(t)?r=t:T(t,`AwaitExpression`)&&t.argument&&(vLt(t.argument)||bLt(t.argument))&&(r=t.argument),!r||xLt(r,i)||!T(r,`CallExpression`))return;let o=S8(r);if(o!==null&&gLt.has(o)&&a)return;let s=`io`;T(r.callee,`MemberExpression`)&&T(r.callee.property,`Identifier`)?s=`${T(r.callee.object,`Identifier`)?r.callee.object.name:`?`}.${r.callee.property.name}`:T(r.callee,`Identifier`)&&(s=r.callee.name),e.report({node:r,message:`${s}() runs on every request in ${n}, re-reading the same file each time.`})})},wLt=e=>{let t=new Set;for(let n of e)yi(n,t);return t},TLt=x({id:`server-hoist-static-io`,title:`Static file read on every request`,tags:[`test-noise`],severity:`warn`,recommendation:"Move the read to module scope so it runs once at load: `const FONT_DATA = await fetch(new URL('./fonts/Inter.ttf', import.meta.url)).then(r => r.arrayBuffer())`.",create:e=>({ExportNamedDeclaration(t){let n=t.declaration;if(!T(n,`FunctionDeclaration`))return;let r=n.id?.name;!r||!sn.has(r)||T(n.body,`BlockStatement`)&&CLt(e,n.body,`${r} route handler`,wLt(n.params??[]))},ExportDefaultDeclaration(t){if(!db(e,`pages/api`))return;let n=t.declaration;if(!y(n)||!n.async)return;let r=n.body;T(r,`BlockStatement`)&&CLt(e,r,`pages/api handler`,wLt(n.params??[]))}})}),ELt=new Set([`Map`,`Set`,`WeakMap`,`WeakSet`]),DLt=new Set([`seal`,`preventExtensions`]),OLt=new Set([`push`,`pop`,`shift`,`unshift`,`splice`,`sort`,`reverse`,`fill`,`copyWithin`]),kLt=new Set([...OLt,`set`,`add`,`delete`,`clear`]),ALt={Array:OLt,Map:new Set([`set`,`delete`,`clear`]),WeakMap:new Set([`set`,`delete`]),Set:new Set([`add`,`delete`,`clear`]),WeakSet:new Set([`add`,`delete`])},jLt=new Set([`assign`,`defineProperty`,`defineProperties`,`setPrototypeOf`]),MLt=e=>{let t=D(e);return T(t,`ArrayExpression`)?`Array`:T(t,`ObjectExpression`)?`Object`:T(t,`NewExpression`)&&T(t.callee,`Identifier`)&&ELt.has(t.callee.name)?t.callee.name:null},NLt=(e,t)=>{if(!e)return null;let n=D(e),r=!1,i=!0;for(;T(n,`CallExpression`);){let e=sg(n,t,DLt);if(!e)break;let a=n.arguments[0];if(!a||T(a,`SpreadElement`))return null;r=!0,e===`seal`&&(i=!1),n=D(a)}if(r&&T(n,`ObjectExpression`)){let e=new Set,t=new Map;for(let r of n.properties){if(!T(r,`Property`)||r.kind!==`init`)continue;let n=S(r,{allowComputedString:!0});if(n===null)continue;e.add(n);let i=MLt(r.value);i&&t.set(n,i)}return{containerKind:`{}`,writablePropertyNames:e,nestedPropertyKinds:t,allowsPropertyDeletion:i}}let a=MLt(n);return a?{containerKind:{Array:`[]`,Object:`{}`}[a]??`new ${a}()`,writablePropertyNames:null,nestedPropertyKinds:null,allowsPropertyDeletion:!0}:null},C8=e=>!e.computed&&T(e.property,`Identifier`)?e.property.name:e.computed&&T(e.property,`Literal`)&&typeof e.property.value==`string`?e.property.value:null,w8=e=>{let t=e;for(;t.parent;){if(Kt.has(t.parent.type)&&`expression`in t.parent&&t.parent.expression===t){t=t.parent;continue}if(T(t.parent,`MemberExpression`)&&t.parent.object===t){t=t.parent;continue}break}return t},PLt=e=>{let t=w8(e);if(t===e||!T(t,`MemberExpression`))return!1;let n=t.parent;if(!n)return!1;if(T(n,`AssignmentExpression`)&&n.left===t||T(n,`UpdateExpression`)&&n.argument===t||T(n,`UnaryExpression`)&&n.operator===`delete`&&n.argument===t)return!0;if(T(n,`CallExpression`)&&n.callee===t){let e=C8(t);return e!==null&&kLt.has(e)}return!1},FLt=e=>{let t=e;for(;t.parent&&Kt.has(t.parent.type)&&`expression`in t.parent&&t.parent.expression===t;)t=t.parent;return!t.parent||!T(t.parent,`MemberExpression`)||t.parent.object!==t?null:C8(t.parent)},ILt=e=>{let t=w8(e),n=t.parent;return!!(n&&T(n,`UnaryExpression`)&&n.operator===`delete`&&n.argument===t)},LLt=e=>{let t=w8(e);return T(t,`MemberExpression`)?D(t.object)===e:!1},RLt=(e,t)=>{let n=w8(e),r=n.parent;if(!T(n,`MemberExpression`)||!r||!T(r,`CallExpression`)||r.callee!==n)return!0;let i=C8(n);return i?!!ALt[t]?.has(i):!1},zLt=(e,t,n)=>{if(t===`setPrototypeOf`)return!1;if(t===`defineProperty`){let t=e.arguments[1];return!!(t&&T(t,`Literal`)&&typeof t.value==`string`&&n.has(t.value))}let r=e.arguments[1];return T(r,`ObjectExpression`)?r.properties.some(e=>{if(T(e,`SpreadElement`))return n.size>0;let t=S(e,{allowComputedString:!0});return t!==null&&n.has(t)}):n.size>0},BLt=(e,t=null)=>{let n=e.parent;for(;n&&n!==t;){if(y(n)&&!xy(n))return!0;n=n.parent??null}return!1},VLt=(e,t,n,r,i)=>{let a=e.parent;if(!a||!T(a,`CallExpression`))return!1;let o=(a.arguments??[]).findIndex(t=>t===e);if(o===-1)return!1;let s=a.callee;if(T(s,`MemberExpression`)){let e=C8(s),n=D(s.object);return!!(i&&T(n,`Identifier`)&&n.name===`Object`&&t.isGlobalReference(n)&&e!==null&&jLt.has(e)&&o===0&&(!r?.writablePropertyNames||zLt(a,e,r.writablePropertyNames)))}if(!n||!T(s,`Identifier`))return!1;let c=t.symbolFor(s);if(!c)return!1;let l=c.initializer;if(!y(l))return!1;let u=l.params?.[o];if(!u||!T(u,`Identifier`))return!1;let d=t.symbolFor(u);return d?d.references.some(e=>{let n=i||BLt(e.identifier,l);return n&&HLt(e.identifier,r)||VLt(e.identifier,t,!1,r,n)}):!1},HLt=(e,t)=>{if(!PLt(e))return!1;if(!t?.writablePropertyNames)return!0;let n=FLt(e);if(!n||!t.writablePropertyNames.has(n))return!1;if(LLt(e))return t.allowsPropertyDeletion||!ILt(e);let r=t.nestedPropertyKinds?.get(n);return!!(r&&RLt(e,r))},ULt=(e,t)=>{let n=[e],r=new Set([e]);for(let e of n)for(let i of e.references){let e=i.identifier.parent;if(!e||!T(e,`VariableDeclarator`)||e.init!==i.identifier)continue;let a=t.symbolFor(e.id);!a||a.scope.kind!==`module`||r.has(a)||(r.add(a),n.push(a))}return n},WLt=(e,t,n)=>ULt(e,t).some(e=>e.references.some(e=>{let r=BLt(e.identifier);return r&&HLt(e.identifier,n)||VLt(e.identifier,t,!0,n,r)})),GLt=x({id:`server-no-mutable-module-state`,title:`Mutable module state on the server`,severity:`error`,recommendation:"Keep per-request data inside the action, or in headers, cookies, or `React.cache`. Module-scope `let`/`var` is shared by every request.",create:e=>{let t=!1;return{Program(e){t=On(e,`use server`)},VariableDeclaration(n){if(t&&T(n.parent,`Program`))for(let t of n.declarations??[]){let r=T(t.id,`Identifier`)?t.id.name:`<unnamed>`;if(n.kind===`let`||n.kind===`var`){e.report({node:t,message:`Module-scoped ${n.kind} "${r}" is shared by every request, so any write to it leaks state between your users.`});continue}let i=NLt(t.init,e.scopes);if(!i||!T(t.id,`Identifier`))continue;let a=e.scopes.symbolFor(t.id);a&&WLt(a,e.scopes,i)&&e.report({node:t,message:`Module-scoped const "${r} = ${i.containerKind}" leaks state between your users, since every request shares it.`})}}}}}),KLt=e=>{if(!T(e,`VariableDeclaration`))return!1;for(let t of e.declarations??[])if(T(t.init,`AwaitExpression`))return!0;return!1},qLt=(e,t,n)=>{if(t.length===0||!T(e,`VariableDeclaration`))return!1;for(let r of e.declarations??[])if(r.init&&Zi(r.init,t,n.scopes))return!0;return!1},JLt=new Set([`require`,`ensure`,`assert`,`verify`,`validate`,`check`,`connect`,`disconnect`,`begin`,`acquire`,`lock`,`init`,`initialize`,`setup`,`authorize`,`authenticate`]),YLt=e=>{if(!T(e,`VariableDeclaration`))return!1;for(let t of e.declarations??[]){let e=t.init;if(!T(e,`AwaitExpression`))continue;let n=e.argument;if(T(n,`Identifier`)||T(n,`MemberExpression`))return!0}return!1},XLt=[`next/headers`,`next-intl/server`],ZLt=e=>T(e,`Identifier`)?XLt.some(t=>pe(e,e.name,t)!==null)?!0:pe(e,e.name,`next/server`)===`connection`:!1,QLt=e=>{if(!T(e,`VariableDeclaration`))return!1;for(let t of e.declarations??[]){let e=t.init;if(!T(e,`AwaitExpression`))continue;let n=e.argument;if(T(n,`CallExpression`)&&ZLt(n.callee))return!0}return!1},$Lt=(e,t)=>{if(!T(e,`VariableDeclaration`))return!1;for(let n of e.declarations??[]){if(!T(n.init,`AwaitExpression`))continue;let e=n.init.argument;if(!T(e,`CallExpression`))continue;if(Vt(e,t.scopes))return!0;if(Ai(e,t.scopes)!==null)continue;let r=Un(e);if(!r)continue;if($6(r))return!0;let[i]=yN(r);if(i&&JLt.has(i))return!0}return!1},eRt=x({id:`server-sequential-independent-await`,title:`Sequential independent awaits`,severity:`warn`,tags:[`test-noise`],recommendation:"These two awaits don't depend on each other. Wrap them in `Promise.all([...])` so they run at the same time.",create:e=>{let t=t=>{for(let n=0;n<t.length-1;n++){let r=t[n];if(!T(r,`VariableDeclaration`)||!KLt(r))continue;let i=r.declarations.map(e=>e.id),a=t[n+1];T(a,`VariableDeclaration`)&&KLt(a)&&(qLt(a,i,e)||YLt(a)||QLt(r)||QLt(a)||$Lt(r,e)||(e.report({node:a,message:`This await doesn't use the previous result, so your users wait twice as long for nothing.`}),n++))}},n=e=>{!T(e,`FunctionDeclaration`)&&!T(e,`FunctionExpression`)&&!T(e,`ArrowFunctionExpression`)||e.async&&T(e.body,`BlockStatement`)&&t(e.body.body??[])};return{FunctionDeclaration:n,FunctionExpression:n,ArrowFunctionExpression:n}}}),tRt=e=>{if(e.kind!==`import`)return null;let t=e.declarationNode.parent;if(!t||!T(t,`ImportDeclaration`)||cn(t)||T(e.declarationNode,`ImportSpecifier`)&&e.declarationNode.importKind===`type`)return null;let n=t.source.value;return typeof n==`string`&&(n===`tabs`||/(?:^|\/)tabs$/.test(n))?n:null},nRt=(e,t,n)=>{let r=e.name;if(T(r,`JSXIdentifier`)){let e=w(r,n.scopes);return!!(e&&tRt(e)&&kt(e.declarationNode)===t)}if(!T(r,`JSXMemberExpression`)||!T(r.object,`JSXIdentifier`)||r.property.name!==t)return!1;let i=w(r.object,n.scopes);return!!(i&&tRt(i)&&T(i.declarationNode,`ImportNamespaceSpecifier`))},rRt=(e,t)=>{let n=e.parent?.parent;for(;n;){if(T(n,`JSXElement`)&&nRt(n.openingElement,`TabsList`,t))return!0;n=n.parent}return!1},iRt=x({id:`shadcn-tabs-trigger-requires-list`,title:`Tabs trigger is outside TabsList`,severity:`warn`,category:`Correctness`,defaultEnabled:!1,recommendation:`Render each imported TabsTrigger inside its library TabsList so keyboard navigation and tablist semantics share one scope.`,create:e=>({JSXOpeningElement(t){!nRt(t,`TabsTrigger`,e)||rRt(t,e)||e.report({node:t,message:`This TabsTrigger is outside TabsList, so the library cannot provide the expected tablist grouping and keyboard behavior. Nest it inside TabsList.`})}})}),aRt=e=>{let t=e?.[`react-doctor`];return{mode:(typeof t==`object`&&t?t.stateInConstructor??{}:{}).mode??`always`}},oRt=e=>T(e,`Identifier`)?e.name===`state`:T(e,`Literal`)&&typeof e.value==`string`?e.value===`state`:!1,sRt=e=>{let t=e.parent;for(;t;){if(T(t,`MethodDefinition`)&&`kind`in t&&t.kind===`constructor`)return!0;if(T(t,`ClassDeclaration`)||T(t,`ClassExpression`))return!1;t=t.parent??null}return!1},cRt=x({id:`state-in-constructor`,title:`State initialized in constructor`,severity:`warn`,defaultEnabled:!1,recommendation:`Use one class-state setup pattern so readers know where initial state lives.`,category:`Architecture`,create:e=>{let{mode:t}=aRt(e.settings);return{PropertyDefinition(n){if(t!==`always`||n.static||!oRt(n.key))return;let r=kO(n);!r||!Pa(r)||e.report({node:n.key,message:`This class uses a state field instead of the configured constructor pattern, so state setup is inconsistent across the codebase.`})},AssignmentExpression(n){if(t!==`never`)return;let r=n.left;if(!T(r,`MemberExpression`)||!T(r.object,`ThisExpression`)||!oRt(r.property))return;let i=kO(n);!i||!Pa(i)||sRt(n)&&e.report({node:r,message:`This class sets state in the constructor instead of the configured class-field pattern, so state setup is inconsistent across the codebase.`})}}}}),lRt=[`react`,`react-dom`],uRt=(e,t)=>e===t||e.startsWith(`${t}/`),dRt=e=>{let t=!1,n=!1;for(let r of e.body){if(!T(r,`ImportDeclaration`)||cn(r))continue;let e=r.source.value;typeof e==`string`&&(uRt(e,`solid-js`)&&(n=!0),lRt.some(t=>uRt(e,t))&&(t=!0))}return{hasReactRuntime:t,hasSolidRuntime:n}},T8="Your styles don't render because you passed the `style` prop a string instead of an object.",fRt=e=>{let t=e?.[`react-doctor`];return{allow:(typeof t==`object`&&t?t.stylePropObject??{}:{}).allow??[]}},pRt=e=>{let t=D(e);return T(t,`ObjectExpression`)?!1:T(t,`Literal`)?!(t.value===null||typeof t.value==`object`):T(t,`TemplateLiteral`)?!0:(T(t,`Identifier`)&&t.name,!1)},mRt=e=>{let t=D(e);if(!T(t,`Identifier`))return null;let n=E(t,t.name);return!n||!n.initializer?null:n.initializer},hRt=e=>{if(e.type===`TSStringKeyword`||e.type===`TSNumberKeyword`||e.type===`TSBooleanKeyword`||e.type===`TSBigIntKeyword`||e.type===`TSSymbolKeyword`)return`primitive`;if(e.type===`TSObjectKeyword`||e.type===`TSTypeLiteral`||e.type===`TSTypeReference`||e.type===`TSArrayType`||e.type===`TSTupleType`||e.type===`TSFunctionType`||e.type===`TSNullKeyword`||e.type===`TSUndefinedKeyword`)return`object`;if(e.type===`TSUnionType`){let t=!1;for(let n of e.types){if(n.type===`TSUndefinedKeyword`||n.type===`TSNullKeyword`||n.type===`TSNeverKeyword`)continue;let e=hRt(n);if(e===`unknown`)return`unknown`;if(e===`primitive`&&(t=!0),e===`object`)return`object`}return t?`primitive`:`unknown`}return`unknown`},gRt=e=>{let t=D(e);if(!T(t,`Identifier`))return null;let n=E(t,t.name);if(!n)return null;let r=n.bindingIdentifier.typeAnnotation;return!r||typeof r!=`object`?null:r.typeAnnotation??null},_Rt=e=>{if(pRt(e))return!0;let t=mRt(e);if(t&&pRt(t))return!0;if(!t){let t=gRt(e);if(t&&hRt(t)===`primitive`)return!0}return!1},vRt=e=>e.attributes.some(e=>!T(e,`JSXAttribute`)||!T(e.name,`JSXIdentifier`)||e.name.name!==`classList`||!T(e.value,`JSXExpressionContainer`)?!1:T(e.value.expression,`ObjectExpression`)),yRt=x({id:`style-prop-object`,title:`Style prop is not an object`,severity:`warn`,recommendation:"Pass `style` as an object so React can apply CSS properties instead of ignoring a string style value.",category:`Correctness`,create:e=>{let{allow:t}=fRt(e.settings),n=new Set(t),r=!1;return{Program:e=>{let t=dRt(e),n=!1;!t.hasReactRuntime&&!t.hasSolidRuntime&&A(e,e=>{if(T(e,`JSXOpeningElement`)&&vRt(e))return n=!0,!1}),r=!t.hasReactRuntime&&(t.hasSolidRuntime||n)},JSXOpeningElement(t){if(r||!T(t.name,`JSXIdentifier`))return;let i=j(t);if(!(i&&n.has(i))){if(i){let e=i.charCodeAt(0);if(!(e>=97&&e<=122))return}for(let n of t.attributes){if(!T(n,`JSXAttribute`)||!T(n.name,`JSXIdentifier`)||n.name.name!==`style`)continue;let t=n.value;if(t){if(T(t,`Literal`)&&typeof t.value==`string`){e.report({node:n,message:T8});return}if(T(t,`JSXExpressionContainer`)){let r=t.expression;r&&r.type!==`JSXEmptyExpression`&&_Rt(r)&&e.report({node:n,message:T8})}}}}},CallExpression(t){if(r||!fa(t))return;let i=t.arguments[0];if(!i)return;let a=null;if(T(i,`Literal`)&&typeof i.value==`string`?a=i.value:T(i,`Identifier`)&&(a=i.name),a&&n.has(a))return;let o=t.arguments[1];if(!(!o||!T(o,`ObjectExpression`)))for(let t of o.properties){if(!T(t,`Property`)||t.computed)continue;let n=t.key;(T(n,`Identifier`)&&n.name===`style`||T(n,`Literal`)&&n.value===`style`)&&_Rt(t.value)&&e.report({node:t,message:T8})}}}}}),bRt=/^-?[a-z][a-z-]*$/,E8=e=>({propertyName:e,arrayRestOffset:null,excludedPropertyNames:null}),xRt=e=>({propertyName:null,arrayRestOffset:e,excludedPropertyNames:null}),SRt=e=>({propertyName:null,arrayRestOffset:null,excludedPropertyNames:e}),D8=(e,t,n,r)=>{if(T(e,`Identifier`)){r.set(e.name,{sourcePath:t,defaultValues:n});return}if(T(e,`AssignmentPattern`)){let i=t.segments.length===0?n:[...n,e.right];D8(e.left,t,i,r);return}if(T(e,`RestElement`)){let i=t.segments.length===0?{...t,segments:[xRt(0)]}:t;D8(e.argument,i,n,r);return}if(T(e,`ObjectPattern`)){let i=[],a=!1;for(let o of e.properties){if(!T(o,`Property`))continue;let e=S(o,{allowComputedString:!0,stringifyNonStringLiterals:!0});if(e===null){a=!0;continue}i.push(e),D8(o.value,{...t,segments:[...t.segments,E8(e)]},n,r)}if(a)return;let o=[...new Set(i)].toSorted(),s={...t,segments:[...t.segments,SRt(o)]};for(let t of e.properties)T(t,`RestElement`)&&D8(t.argument,s,n,r);return}if(T(e,`ArrayPattern`))for(let i=0;i<e.elements.length;i+=1){let a=e.elements[i];if(a){if(T(a,`RestElement`)){D8(a.argument,{...t,segments:[...t.segments,xRt(i)]},n,r);continue}D8(a,{...t,segments:[...t.segments,E8(String(i))]},n,r)}}},CRt=e=>{let t=new Map;return e.forEach((e,n)=>{D8(e,{parameterIndex:n,segments:[]},[],t)}),t},wRt=new Map,TRt=new Set,ERt=new Map,DRt=e=>{let t=D(e);return T(t,`Literal`)?t.value===null||t.value===!1||t.value===``:T(t,`Identifier`)?t.name===`undefined`:T(t,`UnaryExpression`)&&t.operator===`void`},O8=e=>[e.consequent,e.alternate].every(e=>{let t=D(e);return T(t,`ConditionalExpression`)?O8(t):!DRt(t)}),ORt=e=>{if(!e)return null;let t=D(e);if(T(t,`ConditionalExpression`))return{expression:t.test,parameterBindings:wRt,localBindingNames:TRt,localInitializers:ERt,alwaysProducesCssValue:O8(t)};if(T(t,`ArrowFunctionExpression`)||T(t,`FunctionExpression`)){let e=t.params,n=CRt(e),r=new Set;for(let t of e)yi(t,r);let i=new Map,a=D(t.body);if(T(a,`ConditionalExpression`))return{expression:a.test,parameterBindings:n,localBindingNames:r,localInitializers:i,alwaysProducesCssValue:O8(a)};if(T(a,`BlockStatement`))for(let e of a.body){if(T(e,`VariableDeclaration`)){for(let t of e.declarations){if(yi(t.id,r),e.kind===`const`&&t.init){let e=k8(t.init,{expression:t.init,parameterBindings:n,localBindingNames:r,localInitializers:i,alwaysProducesCssValue:!0});e&&D8(t.id,e.sourcePath,e.defaultValues,n)}e.kind===`const`&&T(t.id,`Identifier`)&&t.init&&i.set(t.id.name,t.init)}continue}if(!T(e,`ReturnStatement`)||!e.argument)continue;let t=D(e.argument);if(T(t,`ConditionalExpression`))return{expression:t.test,parameterBindings:n,localBindingNames:r,localInitializers:i,alwaysProducesCssValue:O8(t)}}}return null},k8=(e,t,n=new Set)=>{let r=D(e);if(T(r,`Identifier`)){let e=t.parameterBindings.get(r.name);if(e)return e;let i=t.localInitializers.get(r.name);if(!i||n.has(r.name))return null;n.add(r.name);let a=k8(i,t,n);return n.delete(r.name),a}if(!T(r,`MemberExpression`))return null;let i=k8(r.object,t,n);if(i===null)return null;let a=S(r,{allowComputedString:!0,stringifyNonStringLiterals:!0});if(a===null)return null;let o=i.sourcePath.segments.at(-1),s=Number(a),c=o!==void 0&&o.arrayRestOffset!==null&&/^(?:0|[1-9]\d*)$/.test(a)&&Number.isSafeInteger(s)&&s>=0,l=c&&i.sourcePath.segments.length===1,u=c?i.sourcePath.segments.slice(0,-1):i.sourcePath.segments,d=c?String((o?.arrayRestOffset??0)+s):a;return{...i,sourcePath:{...i.sourcePath,parameterIndex:l?i.sourcePath.parameterIndex+(o?.arrayRestOffset??0)+s:i.sourcePath.parameterIndex,segments:l?u:[...u,E8(d)]}}},kRt=(e,t)=>e.propertyName===t.propertyName&&e.arrayRestOffset===t.arrayRestOffset&&(e.excludedPropertyNames===null||t.excludedPropertyNames===null?e.excludedPropertyNames===t.excludedPropertyNames:e.excludedPropertyNames.length===t.excludedPropertyNames.length&&e.excludedPropertyNames.every((e,n)=>e===t.excludedPropertyNames?.[n])),ARt=(e,t)=>e.parameterIndex===t.parameterIndex&&e.segments.length===t.segments.length&&e.segments.every((e,n)=>kRt(e,t.segments[n])),jRt=(e,t)=>{let n=D(e.callee),r=Gn(n);if(!r)return!1;let i=w(r,t),a=i?.initializer?D(i.initializer):null,o=a;if(T(n,`MemberExpression`)&&T(a,`ObjectExpression`)){let e=S(n,{allowComputedString:!0,stringifyNonStringLiterals:!0}),t=a.properties.find(t=>e!==null&&T(t,`Property`)&&S(t,{allowComputedString:!0,stringifyNonStringLiterals:!0})===e);o=t&&T(t,`Property`)?t.value:null}if(!o||!T(o,`ArrowFunctionExpression`)&&!T(o,`FunctionExpression`)&&!T(o,`FunctionDeclaration`))return!1;let s=!1;return A(o.body,e=>T(e,`AssignmentExpression`)||T(e,`UpdateExpression`)?(s=!0,!1):!0),s},MRt=(e,t,n)=>{let r=new Set,i=new Set,a=(o,s)=>{let c=D(o),l=D(s);if(T(c,`Identifier`)){let t=e.localInitializers.get(c.name);if(t&&!e.parameterBindings.has(c.name)){if(r.has(c.name))return!1;r.add(c.name);let e=a(t,l);return r.delete(c.name),e}}if(T(l,`Identifier`)){let e=t.localInitializers.get(l.name);if(e&&!t.parameterBindings.has(l.name)){if(i.has(l.name))return!1;i.add(l.name);let t=a(c,e);return i.delete(l.name),t}}let u=k8(c,e),d=k8(l,t);if(u!==null||d!==null)return u!==null&&d!==null&&ARt(u.sourcePath,d.sourcePath)&&u.defaultValues.length===d.defaultValues.length&&u.defaultValues.every((e,t)=>a(e,d.defaultValues[t]));if(T(c,`Identifier`)&&T(l,`Identifier`)&&(e.localBindingNames.has(c.name)||t.localBindingNames.has(l.name))||c.type!==l.type)return!1;if(T(c,`Identifier`)&&T(l,`Identifier`))return c.name===l.name;if(T(c,`Literal`)&&T(l,`Literal`))return`regex`in c||`regex`in l?`regex`in c&&`regex`in l&&c.regex.pattern===l.regex.pattern&&c.regex.flags===l.regex.flags:c.value===l.value;if(T(c,`ThisExpression`))return!0;if(T(c,`MemberExpression`)&&T(l,`MemberExpression`)){let e=S(c,{allowComputedString:!0,stringifyNonStringLiterals:!0}),t=S(l,{allowComputedString:!0,stringifyNonStringLiterals:!0});return a(c.object,l.object)&&(e!==null||t!==null?e!==null&&e===t:c.computed===l.computed&&a(c.property,l.property))}if(T(c,`UnaryExpression`)&&T(l,`UnaryExpression`))return c.operator===l.operator&&a(c.argument,l.argument);if((T(c,`BinaryExpression`)||T(c,`LogicalExpression`))&&(T(l,`BinaryExpression`)||T(l,`LogicalExpression`)))return c.type===l.type&&c.operator===l.operator&&a(c.left,l.left)&&a(c.right,l.right);if(T(c,`ConditionalExpression`)&&T(l,`ConditionalExpression`))return a(c.test,l.test)&&a(c.consequent,l.consequent)&&a(c.alternate,l.alternate);if(T(c,`SequenceExpression`)&&T(l,`SequenceExpression`))return c.expressions.length===l.expressions.length&&c.expressions.every((e,t)=>a(e,l.expressions[t]));if(T(c,`TemplateLiteral`)&&T(l,`TemplateLiteral`))return c.quasis.length===l.quasis.length&&c.expressions.length===l.expressions.length&&c.quasis.every((e,t)=>(e.value.cooked??e.value.raw)===(l.quasis[t]?.value.cooked??l.quasis[t]?.value.raw))&&c.expressions.every((e,t)=>a(e,l.expressions[t]));if(T(c,`CallExpression`)&&T(l,`CallExpression`))return jRt(c,n)||jRt(l,n)||c.arguments.length===0&&l.arguments.length===0&&k8(c.callee,e)===null&&k8(l.callee,t)===null?!1:a(c.callee,l.callee)&&c.arguments.length===l.arguments.length&&c.arguments.every((e,t)=>a(e,l.arguments[t]));if(T(c,`SpreadElement`)&&T(l,`SpreadElement`))return a(c.argument,l.argument);if(T(c,`ArrayExpression`)&&T(l,`ArrayExpression`))return c.elements.length===l.elements.length&&c.elements.every((e,t)=>{let n=l.elements[t];return!e||!n?e===n:a(e,n)});if(T(c,`Property`)&&T(l,`Property`)){let e=S(c,{allowComputedString:!0,stringifyNonStringLiterals:!0}),t=S(l,{allowComputedString:!0,stringifyNonStringLiterals:!0});return(e!==null||t!==null?e!==null&&e===t:c.computed&&l.computed&&a(c.key,l.key))&&c.kind===l.kind&&c.method===l.method&&a(c.value,l.value)}return T(c,`ObjectExpression`)&&T(l,`ObjectExpression`)?c.properties.length===l.properties.length&&c.properties.every((e,t)=>a(e,l.properties[t])):!1};return a(e.expression,t.expression)},A8=(e,t,n)=>{let r=e.indexOf(`:`);if(r===-1)return;let i=e.slice(0,r).trim().toLowerCase();!i||i.startsWith(`--`)||!bRt.test(i)||n.push({property:i,isConditional:t.length>0,isImportant:/!\s*important\s*$/i.test(e),ternaryTests:t})},NRt=e=>{let t=[],n=0,r=``,i=[],a=null,o=!1,s=null,c=0,l=()=>{r=``,i=[]};return e.quasis.forEach((u,d)=>{let f=u.value.cooked??u.value.raw??``;for(let e=0;e<f.length;e+=1){let u=f[e],d=f[e+1];if(s===`block`){u===`*`&&d===`/`&&(s=null,e+=1);continue}if(s===`line`){(u===`
25
- `||u===`\r`)&&(s=null);continue}if(a){r+=u,o?o=!1:u===`\\`?o=!0:u===a&&(a=null);continue}if(u===`/`&&d===`*`){s=`block`,e+=1;continue}if(u===`/`&&d===`/`&&r.trim().length===0){s=`line`,e+=1;continue}if(u===`"`||u===`'`){a=u,r+=u;continue}u===`(`?(c+=1,r+=u):u===`)`?(c=Math.max(0,c-1),r+=u):u===`{`&&c===0?(n===0&&A8(r,i,t),n+=1,l()):u===`}`&&c===0?(n=Math.max(0,n-1),l()):u===`;`&&c===0?(n===0&&A8(r,i,t),l()):r+=u}let p=e.expressions[d];if(p&&n===0&&!s)if(r.trim().length===0)l();else{r+=`\0`;let e=ORt(p);e&&i.push(e)}}),n===0&&A8(r,i,t),t},PRt=(e,t)=>{let n=Gn(e);if(!n)return!1;let r=D(e),i=w(n,t);if(i?.kind===`const`&&i.initializer&&r===n)return PRt(i.initializer,t);if(!i||i.kind!==`import`)return!1;let a=i.declarationNode.parent;return!a||!T(a,`ImportDeclaration`)||a.source.value!==`styled-components`?!1:T(i.declarationNode,`ImportSpecifier`)?kt(i.declarationNode)===`css`&&n===r:T(i.declarationNode,`ImportNamespaceSpecifier`)&&T(r,`MemberExpression`)&&D(r.object)===n&&C(r)===`css`},FRt=x({id:`styled-components-duplicate-css-property-in-block`,title:`Duplicate CSS property in styled block`,severity:`warn`,requires:[`styled-components`],recommendation:`Merge repeated declarations of the same CSS property in a styled block into one, so a later conditional value doesn't silently override an earlier one.`,create:e=>({TaggedTemplateExpression(t){if(!yF(t,e.scopes)&&!PRt(t.tag,e.scopes))return;let n=NRt(t.quasi),r=new Map;for(let e of n){let t=r.get(e.property);t?t.push(e):r.set(e.property,[e])}for(let[n,i]of r){let r=i.filter(e=>e.isConditional);if(r.length<2)continue;let a=r[0].ternaryTests;r.every(t=>t.ternaryTests.length===a.length&&t.ternaryTests.every((t,n)=>MRt(t,a[n],e.scopes)))||i.some((t,n)=>{if(!t.isConditional||!t.ternaryTests.every(e=>e.alwaysProducesCssValue))return!1;for(let r=n-1;r>=0;--r){let n=i[r];if(!n.isConditional||n.ternaryTests.every(e=>e.alwaysProducesCssValue)){if(!t.isImportant&&n.isImportant||!n.isConditional)return!1;if(n.ternaryTests.length!==t.ternaryTests.length||t.ternaryTests.some((t,r)=>!MRt(t,n.ternaryTests[r],e.scopes)))return!0}}return!1})&&e.report({node:t,message:`The CSS property \`${n}\` is declared ${i.length} times at the same level here, so a later conditional value can override an earlier one — merge them into a single declaration to make the precedence explicit.`})}}})}),IRt=new WeakMap,LRt=new Map([[`selected`,new Set([`option`])]]),RRt=new Set([`theme`,`as`,`forwardedAs`]),zRt=e=>{let t=e.arguments[0];return!t||!T(t,`ObjectExpression`)?!1:t.properties.every(e=>T(e,`Property`)&&S(e)!==null&&S(e)!==`shouldForwardProp`)},BRt=e=>{let t=e;for(;T(t,`CallExpression`)&&!(!T(t.callee,`MemberExpression`)||t.callee.computed||!T(t.callee.property,`Identifier`));){let e=t.callee.property.name;if(e!==`attrs`&&(e!==`withConfig`||!zRt(t)))break;t=t.callee.object}return t},VRt=(e,t)=>{let n=BRt(e);if(!T(n,`MemberExpression`)||n.computed||!T(n.object,`Identifier`))return null;let r=He(n,n.object.name);if(r!==`styled-components`&&!(r===null&&n.object.name===`styled`&&t.scopes.isGlobalReference(n.object))||!T(n.property,`Identifier`))return null;let i=n.property.name.charCodeAt(0);return i<97||i>122?null:{tagName:n.property.name}},j8=(e,t,n)=>{if(n>3)return null;if(T(e,`TSTypeLiteral`))return e.members;if(T(e,`TSIntersectionType`)){let r=e.types.map(e=>j8(e,t,n+1));return r.some(e=>e===null)?null:r.flatMap(e=>e??[])}if(T(e,`TSInterfaceDeclaration`)){if(e.typeParameters)return null;let r=[...e.body.body];for(let i of e.extends??[])if(!(i.typeArguments||!T(i.expression,`Identifier`)))for(let e of sT(t,i.expression.name)){let i=j8(e,t,n+1);i&&r.push(...i)}return r}if(T(e,`TSTypeAliasDeclaration`))return e.typeParameters?null:j8(e.typeAnnotation,t,n+1);if(T(e,`TSTypeReference`)&&T(e.typeName,`Identifier`)&&!e.typeArguments){let r=sT(t,e.typeName.name);if(r.length===0)return null;let i=r.map(e=>j8(e,t,n+1));return i.some(e=>e===null)?null:i.flatMap(e=>e??[])}return null},HRt=e=>!T(e,`TSPropertySignature`)||e.computed?null:T(e.key,`Identifier`)?e.key.name:T(e.key,`Literal`)&&typeof e.key.value==`string`?e.key.value:null,URt=e=>vZ.has(e)||yZ.has(e.toLowerCase())||xw.has(e)||LRt.has(e),WRt=e=>LRt.get(e)??xw.get(e)??null,GRt=(e,t)=>{if(e.startsWith(`$`)||e.startsWith(`data-`)||e.startsWith(`aria-`)||RRt.has(e))return!0;if(!URt(e))return!1;let n=WRt(e);return n===null||n.has(t)},KRt=(e,t,n)=>{if(!T(e,`Identifier`))return!1;let r=n.scopes.symbolFor(e);if(!r)return!1;let i=e;for(;i;){let e=[];(T(i,`ArrowFunctionExpression`)||T(i,`FunctionDeclaration`)||T(i,`FunctionExpression`))&&e.push(...i.params),T(i,`VariableDeclarator`)&&i.id&&e.push(i.id);for(let i of e){if(!T(i,`ObjectPattern`))continue;let e=!1,a=!1;for(let o of i.properties)T(o,`RestElement`)&&T(o.argument,`Identifier`)&&n.scopes.symbolFor(o.argument)?.id===r.id&&(e=!0),T(o,`Property`)&&!o.computed&&T(o.key,`Identifier`)&&o.key.name===t&&(a=!0);if(e)return a}i=i.parent??null}return!1},qRt=(e,t,n)=>{let r=e.parent;if(!T(r,`VariableDeclarator`)||!T(r.id,`Identifier`))return!1;let i=r.parent;if(!i||T(i.parent,`ExportNamedDeclaration`))return!1;let a=n.scopes.symbolFor(r.id);if(!a)return!1;if(a.references.length===0){let t=d(e);if(!t)return!1;let n=IRt.get(t);return n||(n=new Set,IRt.set(t,n),A(t,e=>{T(e,`JSXOpeningElement`)&&T(e.name,`JSXIdentifier`)&&n?.add(e.name.name)})),n.has(r.id.name)}let o=!1,s=!1,c=!1;for(let e of a.references){let r=e.identifier.parent;if(r&&T(r,`JSXOpeningElement`)&&r.name===e.identifier){o=!0;for(let e of r.attributes)T(e,`JSXAttribute`)&&T(e.name,`JSXIdentifier`)&&e.name.name===t&&(s=!0),T(e,`JSXSpreadAttribute`)&&!KRt(e.argument,t,n)&&(s=!0);continue}c=!0}return o&&!s&&!c},JRt=x({id:`styled-components-non-transient-custom-prop-on-intrinsic-element`,title:`Non-transient custom prop on styled intrinsic element`,severity:`warn`,requires:[`styled-components:6`],recommendation:"Prefix custom styled-components props with `$` (e.g. `$active`) so styled-components v6 keeps them off the DOM node instead of forwarding them as invalid attributes.",create:e=>({TaggedTemplateExpression(t){let n=VRt(t.tag,e);if(!n)return;let r=t.typeArguments;if(!r||r.params.length===0)return;let i=j8(r.params[0],t,0);if(i)for(let r of i){let i=HRt(r);!i||GRt(i,n.tagName)||qRt(t,i,e)||e.report({node:r,message:`styled-components v6 forwards the custom prop \`${i}\` to the <${n.tagName}> DOM node, producing a React unknown-prop warning — prefix it with \`$\` to make it transient.`})}}})}),YRt=x({id:`tabindex-no-positive`,title:`Positive tabindex value`,tags:[`react-jsx-only`],severity:`warn`,recommendation:"Use `tabIndex={0}` (focusable in source order) or `tabIndex={-1}` (focus only in code).",category:`Accessibility`,create:e=>({JSXOpeningElement(t){if(rt(e.filename))return;let n=F(t.attributes,`tabIndex`);if(!n)return;let r=P(n),i=null;if(r!==null){let e=Number(r);Number.isFinite(e)&&(i=e)}else n.value&&T(n.value,`JSXExpressionContainer`)&&(i=si(n.value));i!==null&&i>0&&e.report({node:n,message:"Keyboard users get jumped out of the normal order by a positive `tabIndex`, so use `0` or `-1`."})}})}),M8=e=>{let t={isServerFnChain:!1,specifiedMethod:null,hasInputValidation:!1};if(!T(e,`CallExpression`)||!T(e.callee,`MemberExpression`))return t;let n=D(e.callee.object);for(;T(n,`CallExpression`);){let e=Un(n);if(e&&OG.has(e)){t.isServerFnChain=!0;let e=n.arguments?.[0];if(T(e,`ObjectExpression`))for(let n of e.properties??[])T(n,`Property`)&&T(n.key,`Identifier`)&&n.key.name===`method`&&T(n.value,`Literal`)&&typeof n.value.value==`string`&&(t.specifiedMethod=n.value.value)}if(e&&kG.has(e)&&(t.hasInputValidation=!0),T(n.callee,`MemberExpression`))n=D(n.callee.object);else break}return t},XRt=x({id:`tanstack-start-get-mutation`,title:`Mutation in GET server function`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,category:`Security`,recommendation:"Use `createServerFn({ method: 'POST' })` for data changes. GET requests can be prefetched and are open to CSRF.",create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`)||!T(t.callee.property,`Identifier`)||t.callee.property.name!==`handler`)return;let n=M8(t);if(!n.isServerFnChain||n.specifiedMethod&&_e.has(n.specifiedMethod.toUpperCase()))return;let r=t.arguments?.[0];if(!r||!T(r,`ArrowFunctionExpression`)&&!T(r,`FunctionExpression`))return;let i=r.body;if(!i)return;let a=aS(i,{locallyScopedSafeBindings:tS(i),locallyScopedCookieBindings:Jx(i)});a&&e.report({node:t,message:`This GET server function's side effect (${a}) is vulnerable to CSRF attacks.`})}})}),N8=e=>{if(!T(e,`CallExpression`))return null;let t=e.callee;if(T(t,`CallExpression`)&&T(t.callee,`Identifier`)){if(!DG.has(t.callee.name))return null;let n=e.arguments?.[0];return T(n,`ObjectExpression`)?n:null}if(T(t,`Identifier`)){if(!DG.has(t.name))return null;let n=e.arguments?.[0];return T(n,`ObjectExpression`)?n:null}return null},P8=e=>!T(e,`Property`)&&!T(e,`MethodDefinition`)?null:T(e.key,`Identifier`)?e.key.name:T(e.key,`Literal`)?String(e.key.value):null,ZRt=x({id:`tanstack-start-loader-parallel-fetch`,title:`Sequential awaits in loader`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,category:`Performance`,recommendation:"Use `const [a, b] = await Promise.all([fetchA(), fetchB()])` to avoid request waterfalls in route loaders",create:e=>({CallExpression(t){let n=N8(t);if(!n)return;let r=n.properties??[];for(let t of r){if(P8(t)!==`loader`||!T(t,`Property`))continue;let n=t.value;if(!n||!T(n,`ArrowFunctionExpression`)&&!T(n,`FunctionExpression`))continue;let r=n.body;!r||!T(r,`BlockStatement`)||kCt(r,2)!==null&&e.report({node:t,message:`Sequential awaits in this loader create a request waterfall that slows the route.`})}}})}),F8=`HeadContent`,QRt=`head`,I8=e=>T(e.object,`JSXIdentifier`)?e.object.name:T(e.object,`JSXMemberExpression`)?I8(e.object):null,$Rt=e=>T(e.property,`JSXIdentifier`)?e.property.name:null,ezt=e=>T(e.object,`Identifier`)?e.object.name:T(e.object,`MemberExpression`)?ezt(e.object):null,tzt=e=>T(e.property,`Identifier`)?e.property.name:null,nzt=e=>T(e,`JSXElement`)&&T(e.openingElement.name,`JSXIdentifier`)&&e.openingElement.name.name===QRt,rzt=e=>{let t=e.parent;for(;t;){if(nzt(t))return!0;t=t.parent}return!1},izt=e=>{if(T(e,`JSXIdentifier`)){let t=e.name.charAt(0);return t.toUpperCase()===t&&t.toLowerCase()!==t}if(!T(e,`JSXMemberExpression`))return!1;let t=I8(e);if(!t)return!1;let n=t.charAt(0);return n.toUpperCase()===n&&n.toLowerCase()!==n},azt=x({id:`tanstack-start-missing-head-content`,title:`Root route missing HeadContent`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Add `<HeadContent />` inside `<head>` in your __root route. Without it, route `head()` meta tags are dropped.",create:e=>{if(!wG.test(e.filename??``))return Te;let t=!1,n=!1,r=!1,i=new Set([F8]),a=new Set,o=e=>{if(!T(e,`ImportDeclaration`))return;let t=e.source.value===`@tanstack/react-router`,n=e.specifiers??[];for(let e of n){if(t&&T(e,`ImportNamespaceSpecifier`)){a.add(e.local.name);continue}T(e,`ImportSpecifier`)&&(!T(e.imported,`Identifier`)||e.imported.name!==F8||i.add(e.local.name))}},s=e=>{if(!T(e,`VariableDeclarator`)||!T(e.id,`Identifier`))return;let t=e.init;if(!t)return;if(T(t,`Identifier`)){i.has(t.name)&&i.add(e.id.name),a.has(t.name)&&a.add(e.id.name);return}if(!T(t,`MemberExpression`))return;let n=ezt(t),r=tzt(t);n&&a.has(n)&&r===F8&&i.add(e.id.name)};return{Program(e){let t=e.body??[];for(let e of t)o(e);for(let e of t)if(T(e,`VariableDeclaration`))for(let t of e.declarations??[])s(t)},ImportDeclaration(e){o(e)},VariableDeclarator(e){s(e)},JSXOpeningElement(e){if(T(e.name,`JSXIdentifier`)){e.name.name===QRt&&(n=!0),i.has(e.name.name)&&(t=!0),rzt(e)&&izt(e.name)&&(r=!0);return}if(!T(e.name,`JSXMemberExpression`))return;let o=I8(e.name),s=$Rt(e.name);o&&a.has(o)&&s===F8&&(t=!0),rzt(e)&&izt(e.name)&&(r=!0)},"Program:exit"(i){n&&!t&&!r&&e.report({node:i,message:`Without <HeadContent /> in the __root route, your route head() meta tags never render.`})}}}}),L8=new Set([`createRootRoute`,`createRootRouteWithContext`]),R8=`Scripts`,ozt=`body`,szt=[`component`,`shellComponent`],czt=e=>T(e.object,`JSXIdentifier`)?e.object:T(e.object,`JSXMemberExpression`)?czt(e.object):null,lzt=e=>T(e.property,`JSXIdentifier`)?e.property.name:null,z8=e=>T(e.object,`Identifier`)?e.object:T(e.object,`MemberExpression`)?z8(e.object):null,uzt=e=>T(e.property,`Identifier`)?e.property.name:null,dzt=e=>T(e,`JSXElement`)&&T(e.openingElement.name,`JSXIdentifier`)&&e.openingElement.name.name===ozt,fzt=e=>{let t=e.parent;for(;t;){if(dzt(t))return t;t=t.parent}return null},pzt=(e,t)=>my(e,t.scopes)?.declarationNode??e,B8=(e,t)=>{let n=e.parent;for(;n;){if(T(n,`FunctionDeclaration`))return n;if(T(n,`ArrowFunctionExpression`)||T(n,`FunctionExpression`)){let e=v(n).parent;if(e&&(T(e,`MethodDefinition`)||T(e,`PropertyDefinition`))&&S(e,{allowComputedString:!0})===`render`){let n=kO(e);if(n)return pzt(n,t)}return e&&T(e,`VariableDeclarator`)&&T(e.id,`Identifier`)?t.scopes.symbolFor(e.id)?.declarationNode??null:n}n=n.parent}return null},mzt=e=>{let t=e.parent;for(;t;){if(T(t,`VariableDeclarator`)&&T(t.id,`Identifier`))return t;if(y(t))return null;t=t.parent}return null},V8=(e,t)=>t.scopes.symbolFor(e)?.declarationNode??null,hzt=x({id:`tanstack-start-missing-scripts`,title:`Root route missing Scripts`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Render `<Scripts />` near the end of `<body>` in your __root route so TanStack Start can load client-side JavaScript.",create:e=>{if(!wG.test(e.filename??``))return Te;let t=new Set,n=new Set,r=new Set,i=new Set,a=new Set,o=new Set,s=new Set,c=new Set,l=new Map,u=new Map,d=new Map,f=i=>{if(!T(i,`ImportDeclaration`))return;let a=i.source.value===`@tanstack/react-router`;for(let o of i.specifiers??[]){let i=V8(o.local,e);if(i){if(T(o,`ImportDefaultSpecifier`)&&o.local.name===R8){t.add(i);continue}if(a&&T(o,`ImportNamespaceSpecifier`)){n.add(i);continue}!T(o,`ImportSpecifier`)||!T(o.imported,`Identifier`)||(o.imported.name===R8&&t.add(i),a&&L8.has(o.imported.name)&&r.add(i))}}},p=i=>{if(!T(i,`VariableDeclarator`)||!T(i.id,`Identifier`)||!i.init)return!1;let a=V8(i.id,e);if(!a)return!1;if(T(i.init,`Identifier`)){let o=V8(i.init,e),s=!1;if(o&&t.has(o)){let e=t.size;t.add(a),s=t.size!==e}if(o&&n.has(o)){let e=n.size;n.add(a),s=n.size!==e||s}if(o&&r.has(o)){let e=r.size;r.add(a),s=r.size!==e||s}return s}if(!T(i.init,`MemberExpression`))return!1;let o=z8(i.init),s=o?V8(o,e):null,c=uzt(i.init);if(!s||!n.has(s))return!1;if(c===R8){let e=t.size;return t.add(a),t.size!==e}if(c&&L8.has(c)){let e=r.size;return r.add(a),r.size!==e}return!1},m=r=>{if(T(r,`JSXIdentifier`)){let n=V8(r,e);return n?t.has(n):r.name===R8}if(!T(r,`JSXMemberExpression`))return!1;let i=czt(r),a=i?V8(i,e):null;return!!(a&&n.has(a)&&lzt(r)===R8)},h=t=>{let i=D(t.callee);for(;T(i,`CallExpression`);)i=D(i.callee);if(T(i,`Identifier`)){let t=V8(i,e);return t?r.has(t):L8.has(i.name)}if(!T(i,`MemberExpression`))return!1;let a=z8(i),o=a?V8(a,e):null,s=uzt(i);return!!(o&&n.has(o)&&s&&L8.has(s))},g=t=>{let n=D(t);if(y(n)){i.add(n);return}if(T(n,`ClassExpression`)){i.add(pzt(n,e));return}if(!T(n,`Identifier`))return;let r=V8(n,e);r&&i.add(r)};return{Program(e){for(let t of e.body??[])f(t);let t=(e.body??[]).filter(e=>T(e,`VariableDeclaration`)).flatMap(e=>e.declarations??[]),n=!1;do{n=!1;for(let e of t)n=p(e)||n}while(n)},ImportDeclaration(e){f(e)},VariableDeclarator(e){p(e)},CallExpression(t){if(!h(t))return;let n=t.arguments[0];if(!n||T(n,`SpreadElement`))return;let r=Va(n,szt,e.scopes,t);if(r)for(let e of r.properties)!T(e,`Property`)||!szt.includes(S(e,{allowComputedString:!0})??``)||g(e.value)},JSXOpeningElement(t){let n=fzt(t);if(T(t.name,`JSXIdentifier`)&&t.name.name===ozt){n&&a.add(n);return}if(m(t.name)){let r=mzt(t);if(r&&s.add(r),n){o.add(n);return}let i=B8(t,e);i&&c.add(i);return}if(!T(t.name,`JSXIdentifier`))return;let r=V8(t.name,e);if(!r)return;if(n){let e=u.get(n)??new Set;e.add(r),u.set(n,e)}let i=B8(t,e);if(!i)return;let d=l.get(i)??new Set;d.add(r),l.set(i,d)},JSXExpressionContainer(t){let n=fzt(t);if(!n||!T(t.expression,`Identifier`))return;let r=V8(t.expression,e);if(!r)return;let i=d.get(n)??new Set;i.add(r),d.set(n,i)},"Program:exit"(t){let n=new Set(i);for(let e of n)for(let t of l.get(e)??[])n.add(t);for(let r of a){let i=B8(r,e);if(!i||!n.has(i)||o.has(r)||[...d.get(r)??[]].some(e=>s.has(e)))continue;let a=new Set(u.get(r)??[]),f=!1;for(let e of a){if(c.has(e)){f=!0;break}for(let t of l.get(e)??[])a.add(t)}if(!f){e.report({node:t,message:`Without <Scripts /> inside <body>, the __root route does not load TanStack Start's client-side JavaScript.`});return}}}}}}),gzt=e=>!e||!T(e,`JSXAttribute`)||!e.value?null:T(e.value,`Literal`)&&typeof e.value.value==`string`?e.value.value:T(e.value,`JSXExpressionContainer`)&&T(e.value.expression,`Literal`)&&typeof e.value.expression.value==`string`?e.value.expression.value:null,_zt=x({id:`tanstack-start-no-anchor-element`,title:`Plain anchor reloads TanStack Router navigation`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Use `Link` from `@tanstack/react-router` so internal navigation keeps client state, preloading, and typed routes.",create:e=>db(e,`routes`)?{JSXOpeningElement(t){if(j(t)!==`a`)return;let n=t.attributes??[],r=U(n,`href`);if(!r?.value)return;let i=null;if(T(r.value,`Literal`)?i=r.value.value:T(r.value,`JSXExpressionContainer`)&&T(r.value.expression,`Literal`)&&(i=r.value.expression.value),typeof i!=`string`||!i.startsWith(`/`)||i.startsWith(`//`))return;let a=i.split(/[?#]/)[0]??i;a.startsWith(`/api/`)||/\.[a-z0-9]{1,8}$/i.test(a)||U(n,`download`)||gzt(U(n,`target`))!==`_blank`&&e.report({node:t,message:`Plain <a> reloads the whole page for internal navigation, so TanStack Router loses client state and preloading.`})}}:Te}),vzt=x({id:`tanstack-start-no-direct-fetch-in-loader`,title:`Direct fetch in route loader`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Use `createServerFn()` from @tanstack/react-start for type-safe RPC, input validation, and proper server/client code splitting",create:e=>({CallExpression(t){let n=N8(t);if(!n)return;let r=n.properties??[];for(let t of r)P8(t)===`loader`&&A(T(t,`Property`)?t.value:t,t=>{T(t,`CallExpression`)&&T(t.callee,`Identifier`)&&t.callee.name===`fetch`&&e.report({node:t,message:`Direct fetch() in a route loader runs on the client too with no type safety.`})})}})}),yzt=x({id:`tanstack-start-no-dynamic-server-fn-import`,title:`Dynamic server function import`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`error`,recommendation:"Use `import { myFn } from '~/utils/my.functions'`. The bundler only swaps server code for RPC stubs on static imports.",create:e=>({ImportExpression(t){let n=t.source;if(!n)return;let r=null;T(n,`Literal`)&&typeof n.value==`string`?r=n.value:T(n,`TemplateLiteral`)&&n.quasis?.length===1&&(r=n.quasis[0].value?.raw??null),r&&kit.test(r)&&e.report({node:t,message:`Dynamically importing a server-functions file leaks server code into the client bundle.`})}})}),bzt=new Set([`then`,`catch`,`finally`]),xzt=new Set([`useState`,`useSyncExternalStore`]),Szt=x({id:`tanstack-start-no-navigate-in-render`,title:`navigate() called during render`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Use `throw redirect({ to: '/path' })` in `beforeLoad` or `loader`. navigate() during render causes hydration issues.",create:e=>{if(!db(e,`routes`))return Te;let t=0,n=0,r=e=>qn(e,Xt)||qn(e,`useCallback`)||qn(e,`useMemo`),i=e=>{let t=e.parent;return!T(t,`CallExpression`)||t.callee===e?!1:T(t.callee,`MemberExpression`)&&!t.callee.computed&&T(t.callee.property,`Identifier`)&&bzt.has(t.callee.property.name)?!0:T(t.callee,`Identifier`)&&an.test(t.callee.name)&&!xzt.has(t.callee.name)&&t.arguments?.[0]===e},a=e=>T(e,`JSXAttribute`)&&T(e.name,`JSXIdentifier`)&&Pn.test(e.name.name),o=e=>T(e,`Property`)&&(T(e.key,`Identifier`)&&typeof e.key.name==`string`&&Pn.test(e.key.name)||T(e.key,`Literal`)&&typeof e.key.value==`string`&&Pn.test(e.key.value)),s=e=>T(e,`Property`)&&y(e.value)&&o(e),c=e=>T(e,`VariableDeclarator`)&&T(e.id,`Identifier`)&&typeof e.id.name==`string`&&Ot.test(e.id.name)&&y(e.init),l=e=>T(e,`FunctionDeclaration`)&&T(e.id,`Identifier`)&&typeof e.id.name==`string`&&Ot.test(e.id.name),u=e=>{let t=e.parent;for(;t;){if(a(t)||o(t))return!0;t=t.parent??null}return!1},d=t=>{let n=Xs(t);if(!n)return!1;let r=e.scopes.symbolFor(n);return r?r.references.some(e=>u(e.identifier)):!1},f=e=>{let t=e.parent;if(T(t,`ReturnStatement`)){let e=b(t),n=e?Zs(e):null;return!!(n&&an.test(n))}if(T(t,`ArrowFunctionExpression`)&&t.body===e){let e=Zs(t);return!!(e&&an.test(e))}return!1},p=e=>{if(Xs(e))return!1;let t=e.parent;return T(t,`CallExpression`)?t.callee===e||(t.arguments??[]).some(t=>t===e):!1},m=e=>{let t=b(e);for(;t;){if(i(t)||d(t)||f(t))return!0;if(!p(t))return!1;t=b(t)}return!1};return{CallExpression(i){if(r(i)&&t++,!(t>0||n>0)&&T(i.callee,`Identifier`)&&i.callee.name===`navigate`&&(i.arguments?.length??0)>0){if(m(i))return;e.report({node:i,message:`navigate() runs during render here, so server and browser output can diverge during hydration.`})}},"CallExpression:exit"(e){r(e)&&(t=Math.max(0,t-1))},JSXAttribute(e){a(e)&&n++},"JSXAttribute:exit"(e){a(e)&&(n=Math.max(0,n-1))},Property(e){s(e)&&n++},"Property:exit"(e){s(e)&&(n=Math.max(0,n-1))},VariableDeclarator(e){c(e)&&n++},"VariableDeclarator:exit"(e){c(e)&&(n=Math.max(0,n-1))},FunctionDeclaration(e){l(e)&&n++},"FunctionDeclaration:exit"(e){l(e)&&(n=Math.max(0,n-1))}}}}),Czt=e=>T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)&&T(e.callee.property,`Identifier`)&&e.callee.property.name===`handler`&&M8(e).isServerFnChain,wzt=new Set([`NODE_ENV`,`MODE`,`DEV`,`PROD`]),Tzt=/(?:secret|token|api[_]?key|password|private)/i,Ezt=e=>wzt.has(e)?!1:Tzt.test(e),Dzt=x({id:`tanstack-start-no-secrets-in-loader`,title:`Secret exposed in a loader`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`error`,category:`Security`,recommendation:"Loaders are isomorphic (run on both server and client). Wrap secret access in `createServerFn()` so it stays server-only",create:e=>({CallExpression(t){let n=N8(t);if(!n)return;let r=n.properties??[];for(let t of r){let n=P8(t);n!==`loader`&&n!==`beforeLoad`||A(T(t,`Property`)?t.value:t,t=>{if(Czt(t))return!1;if(!T(t,`MemberExpression`))return;let r=T(t.object,`MemberExpression`)&&T(t.object.object,`Identifier`)&&t.object.object.name===`process`&&T(t.object.property,`Identifier`)&&t.object.property.name===`env`,i=T(t.object,`MemberExpression`)&&T(t.object.object,`MetaProperty`)&&T(t.object.property,`Identifier`)&&t.object.property.name===`env`;if(!r&&!i)return;let a=T(t.property,`Identifier`)?t.property.name:null;if(a&&Ezt(a)){let r=i?`import.meta.env`:`process.env`;e.report({node:t,message:`Reading ${r}.${a} in ${n} leaks this secret to the client, where anyone can read it.`})}})}}})}),Ozt=x({id:`tanstack-start-no-use-server-in-handler`,title:`Redundant use server in handler`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`error`,recommendation:`TanStack Start handles server boundaries automatically via the Vite plugin. "use server" inside createServerFn causes compile errors.`,create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`)||!T(t.callee.property,`Identifier`)||t.callee.property.name!==`handler`)return;let n=t.arguments?.[0];if(!n||!T(n,`ArrowFunctionExpression`)&&!T(n,`FunctionExpression`))return;let r=n.body;T(r,`BlockStatement`)&&r.body?.some(e=>T(e,`ExpressionStatement`)&&(e.directive===`use server`||T(e.expression,`Literal`)&&e.expression.value===`use server`))&&e.report({node:n,message:`"use server" inside a createServerFn handler duplicates TanStack Start's server boundary, so the route can fail to compile.`})}})}),kzt=x({id:`tanstack-start-no-useeffect-fetch`,title:`fetch inside useEffect in route`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Fetch data in the route `loader` instead. The router loads it before rendering and avoids waterfalls.",create:e=>db(e,`routes`)?{CallExpression(t){if(!qn(t,Xt))return;let n=t.arguments?.[0];if(!n)return;let r=!1,i=_u(n);A(n,e=>{if(r||e!==n&&y(e)&&!i.has(e))return!1;T(e,`CallExpression`)&&T(e.callee,`Identifier`)&&e.callee.name===`fetch`&&(r=!0)}),r&&e.report({node:t,message:`fetch() inside useEffect makes your users wait through a loading spinner after render.`})}}:Te}),Azt=x({id:`tanstack-start-redirect-in-try-catch`,title:`redirect() inside try-catch`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"TanStack Router's `redirect()` and `notFound()` throw special errors caught by the router. Move them outside the try block or re-throw in the catch",create:e=>({ThrowStatement(t){let n=t.argument;T(n,`CallExpression`)&&T(n.callee,`Identifier`)&&Oit.has(n.callee.name)&&Gx(t)&&e.report({node:t,message:`throw ${n.callee.name}() inside a try block gets swallowed, so the redirect silently fails.`})}})}),jzt=x({id:`tanstack-start-route-property-order`,title:`Route property order breaks type inference`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`error`,recommendation:`Follow the route property order because TanStack Router's type inference depends on earlier properties feeding later ones.`,create:e=>({CallExpression(t){let n=N8(t);if(!n)return;let r=n.properties??[],i=[];for(let e of r){let t=P8(e);t!==null&&i.push(t)}let a=i.filter(e=>EG.has(e)),o=-1;for(let t of a){let r=EG.get(t)??-1;if(r<o){let r=TG[o];e.report({node:n,message:`Ordering route property "${t}" after "${r}" breaks type inference.`});return}o=r}}})}),Mzt=e=>kG.has(e)?`validator`:e,Nzt=x({id:`tanstack-start-server-fn-method-order`,title:`Server function method order breaks type inference`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`error`,recommendation:`Chain methods in order: .middleware() → .validator() → .client() → .server() → .handler(). Types depend on this sequence.`,create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`))return;let n=[],r=t;for(;T(r,`CallExpression`)&&T(r.callee,`MemberExpression`);){let e=T(r.callee.property,`Identifier`)?r.callee.property.name:null;e&&n.unshift(e),r=D(r.callee.object)}if(T(r,`CallExpression`)&&T(r.callee,`Identifier`)){if(!OG.has(r.callee.name))return}else return;let i=T(t.callee.property,`Identifier`)?t.callee.property.name:null;if(n[n.length-1]!==i)return;let a=n.filter(e=>jG.has(Mzt(e))),o=-1;for(let n of a){let r=jG.get(Mzt(n))??-1;if(r<o){let r=AG[o];e.report({node:t,message:`Chaining .${n}() after .${r}() breaks type inference.`});return}o=r}}})}),Pzt=e=>!!e.properties?.some(e=>T(e,`Property`)&&T(e.key,`Identifier`)&&e.key.name===`data`),Fzt=x({id:`tanstack-start-server-fn-validate-input`,title:`Server function without input validation`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Add `.validator(schema)` before `.handler()`. This data crosses the network and must be validated at runtime.",create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`)||!T(t.callee.property,`Identifier`)||t.callee.property.name!==`handler`)return;let n=M8(t);if(!n.isServerFnChain)return;let r=t.arguments?.[0];if(!r||!T(r,`ArrowFunctionExpression`)&&!T(r,`FunctionExpression`))return;let i=r.params?.[0];if(!i)return;let a=!1;if(T(i,`ObjectPattern`))a=Pzt(i);else if(T(i,`Identifier`)){let e=i.name;A(r,t=>{T(t,`MemberExpression`)&&T(t.object,`Identifier`)&&t.object.name===e&&T(t.property,`Identifier`)&&t.property.name===`data`&&(a=!0),T(t,`VariableDeclarator`)&&T(t.init,`Identifier`)&&t.init.name===e&&T(t.id,`ObjectPattern`)&&Pzt(t.id)&&(a=!0)})}a&&!n.hasInputValidation&&e.report({node:t,message:`This server function reads network data with no validator(), so anyone can send unvalidated input.`})}})}),H8=(e,t,n=new Set)=>{let r=D(e);if(T(r,`NewExpression`)){let e=Y1(r.callee,t);return e&&Q0(e.moduleSource)?e.apiName:null}if(!T(r,`Identifier`))return null;let i=t.symbolFor(r);return i?.kind!==`const`||!i.initializer||n.has(i.id)||!T(i.declarationNode,`VariableDeclarator`)||i.declarationNode.id!==i.bindingIdentifier?null:(n.add(i.id),H8(i.initializer,t,n))},Izt=new Set([`WebGLRenderer`,`WebGPURenderer`]),U8=(e,t)=>Izt.has(H8(e,t)??``),W8=x({id:`three-cap-device-pixel-ratio`,title:`Unbounded Three.js device pixel ratio`,category:`Performance`,severity:`warn`,recommendation:`Cap renderer pixel ratio, commonly at 2, so high-density displays do not multiply GPU work without a bound`,create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`)||C(t.callee)!==`setPixelRatio`||!U8(t.callee.object,e.scopes))return;let n=t.arguments[0];if(!n||T(n,`SpreadElement`))return;let r=a0(n,e.scopes);r&&e.report({node:r,message:`This renderer uses the device's raw pixel ratio without a cap. Bound the ratio to limit the rendered pixel count on high-density displays`})}})}),Lzt=(e,t)=>b(e)??t,G8=x({id:`three-limit-shadowed-point-lights`,title:`Too many shadow-casting Three.js point lights`,category:`Performance`,severity:`warn`,recommendation:`Keep at most two shadow-casting point lights in one scene, or use cheaper directional, spot, baked, or fake shadows`,create:e=>{let t=[],n=[],r=null;return{Program(e){r=e},CallExpression(n){if(!r||!T(n.callee,`MemberExpression`)||C(n.callee)!==`add`||H8(n.callee.object,e.scopes)!==`Scene`)return;let i=Lzt(n,r);if(Em(n,i))return;let a=B(n.callee.object,e);if(a)for(let r of n.arguments){if(T(r,`SpreadElement`)||H8(r,e.scopes)!==`PointLight`)continue;let n=B(r,e);n&&t.push({lightKey:n,owner:i,sceneKey:a})}},AssignmentExpression(t){let i=D(t.right);if(!r||t.operator!==`=`||!T(t.left,`MemberExpression`)||C(t.left)!==`castShadow`||H8(t.left.object,e.scopes)!==`PointLight`||!T(i,`Literal`)||i.value!==!0)return;let a=Lzt(t,r);if(Em(t,a))return;let o=B(t.left.object,e);o&&n.push({lightKey:o,node:t,owner:a})},"Program:exit"(){let r=new Map,i=new Map;for(let a of n){let n=t.find(e=>e.owner===a.owner&&e.lightKey===a.lightKey);if(!n)continue;let o=r.get(a.owner)??new Map,s=i.get(a.owner)??new Map;r.set(a.owner,o),i.set(a.owner,s);let c=s.get(n.sceneKey)??new Set;if(s.set(n.sceneKey,c),c.has(a.lightKey))continue;c.add(a.lightKey);let l=(o.get(n.sceneKey)??0)+1;o.set(n.sceneKey,l),!(l<=2)&&e.report({node:a.node,message:`This is the third or later shadow-casting point light added to the same scene. Each point-light shadow renders six cube faces, multiplying shadow passes`})}}}}}),K8=(e,t)=>{let n=D(e);for(;T(n,`MemberExpression`);)n=D(n.object);return H8(n,t)!==null},Rzt=(e,t)=>{let n=!1;return l0(e,t.scopes,e=>{if(n)return;if(T(e,`NewExpression`)){let r=Y1(e.callee,t.scopes);n=!!(r&&Q0(r.moduleSource));return}if(T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)){n=K8(e.callee.object,t.scopes);return}let r=T(e,`AssignmentExpression`)?D(e.left):T(e,`UpdateExpression`)?D(e.argument):null;n=!!(r&&T(r,`MemberExpression`)&&K8(r.object,t.scopes))}),n},zzt=(e,t)=>{if(!T(e,`CallExpression`)||!T(e.callee,`MemberExpression`)||C(e.callee)!==`addEventListener`)return null;let n=e.arguments[0],r=e.arguments[1],i=D(e.callee.object);return!n||T(n,`SpreadElement`)||!T(n,`Literal`)||n.value!==`pointermove`||!r||T(r,`SpreadElement`)||!T(i,`MemberExpression`)||C(i)!==`domElement`||!U8(i.object,t.scopes)?null:i0(r,t.scopes)},Bzt=(e,t)=>{if(T(e,`CallExpression`))return zzt(e,t);if(!T(e,`JSXOpeningElement`)||j(e)!==`canvas`)return null;let n=R(e.attributes,`onPointerMove`);if(!n?.value||!T(n.value,`JSXExpressionContainer`)||T(n.value.expression,`JSXEmptyExpression`))return null;let r=i0(n.value.expression,t.scopes);return r&&Rzt(r,t)?r:null},q8=x({id:`three-no-allocation-in-pointer-move`,title:`Three.js allocation inside pointer-move handler`,severity:`warn`,recommendation:`Reuse vectors, raycasters, and other Three.js objects while handling continuous pointer movement`,create:e=>{let t=new Set,n=n=>{let r=Bzt(n,e);!r||t.has(r)||(t.add(r),l0(r,e.scopes,(t,n)=>{if(!n){if(T(t,`NewExpression`)){let n=Y1(t.callee,e.scopes);if(!n||!Q0(n.moduleSource))return;e.report({node:t,message:`This Three.js constructor allocates on every pointer movement. Reuse an object created outside the handler`});return}!T(t,`CallExpression`)||!T(t.callee,`MemberExpression`)||C(t.callee)!==`clone`||!K8(t.callee.object,e.scopes)||e.report({node:t,message:`This clone allocates a Three.js object on every pointer movement. Copy into a reusable object instead`})}}))};return{CallExpression(e){n(e)},JSXOpeningElement(e){n(e)}}}}),Vzt=(e,t)=>{let n=!1;return l0(e,t,e=>{!n&&T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)&&_4.has(C(e.callee)??``)&&U8(e.callee.object,t)&&(n=!0)}),n},J8=(e,t)=>{if(T(e.callee,`MemberExpression`)&&C(e.callee)===`setAnimationLoop`&&U8(e.callee.object,t)){let n=e.arguments[0];return n&&!T(n,`SpreadElement`)?i0(n,t):null}let n=b2(e,t);return n&&Vzt(n,t)?n:null},Y8=x({id:`three-no-async-animation-loop`,title:`Async Three.js animation callback`,category:`Correctness`,severity:`warn`,recommendation:`Keep animation callbacks synchronous; start asynchronous work outside the loop and consume completed state during frames`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes);!y(r)||!r.async||t.has(r)||(t.add(r),e.report({node:r,message:`The animation scheduler ignores this Promise, so rejected work can become unhandled and awaited work can overlap across frames. Keep the callback synchronous`}))}}}}),X8=x({id:`three-no-clone-in-animation-loop`,title:`Three.js clone inside animation loop`,severity:`warn`,recommendation:`Clone once before the animation loop or copy values into a reusable scratch object during frames`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes);!r||t.has(r)||(t.add(r),l0(r,e.scopes,(t,n)=>{n||!T(t,`CallExpression`)||!T(t.callee,`MemberExpression`)||C(t.callee)!==`clone`||!K8(t.callee.object,e.scopes)||e.report({node:t,message:`This clone allocates a new Three.js object every executed frame. Copy into a reusable object or clone once outside the animation loop`})}))}}}}),Hzt=(e,t,n,r,i)=>{let a=J8(e,t);!a||r.has(a)||(r.add(a),l0(a,t,(e,r)=>{if(r||!T(e,`AssignmentExpression`)||e.operator!==`=`||!T(e.left,`MemberExpression`)||!T(e.right,`Literal`)||e.right.value!==!0)return;let a=C(e.left);if(!a||!n.has(a))return;let o=H8(e.left.object,t);o&&i({constructorName:o,node:e,propertyName:a})}))},Uzt=new Set([`needsUpdate`]),Z8=x({id:`three-no-material-recompile-in-animation-loop`,title:`Material recompiled inside animation loop`,category:`Performance`,severity:`error`,recommendation:`Change material defines or features outside the animation loop and set needsUpdate only when the compiled program must change`,create:e=>{let t=new Set;return{CallExpression(n){Hzt(n,e.scopes,Uzt,t,({constructorName:t,node:n})=>{t.endsWith(`Material`)&&e.report({node:n,message:`Setting material.needsUpdate every frame forces Three.js to reconsider and often rebuild the GPU program. Set it only after a shader-affecting material change`})})}}}}),Q8=x({id:`three-no-new-in-animation-loop`,title:`Allocation inside Three.js animation loop`,severity:`warn`,recommendation:`Allocate reusable objects before the animation loop and mutate them in place during each frame`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes);!r||t.has(r)||(t.add(r),l0(r,e.scopes,(t,n)=>{t.type!==`NewExpression`||n||e.report({node:t,message:`This constructor allocates a new object every executed frame. Reuse an object allocated outside the Three.js animation loop`})}))}}}}),Wzt=(e,t)=>Qs(e,t).some(e=>e.references.some(e=>{let t=e.identifier,n=t.parent;return!!(T(t,`JSXIdentifier`)&&n&&T(n,`JSXOpeningElement`)&&n.name===t)})),$8=x({id:`three-no-object-construction-in-render`,title:`Three.js object constructed during React render`,severity:`warn`,recommendation:`Construct mutable Three.js objects in a stable initializer, effect, event, or module scope instead of recreating them during React render`,create:e=>({NewExpression(t){let n=Y1(t.callee,e.scopes),r=X(t,e.scopes);if(!n||!Q0(n.moduleSource)||!r||qy(t,e.scopes))return;let i=Js(r);!i||!Gs(i)&&!gF(r,e.scopes,e.cfg)&&!Wzt(r,e.scopes)||e.report({node:t,message:`new ${n.apiName}() creates a fresh mutable Three.js object during this render. Move it to useMemo, a lazy useState initializer, an initialized-once ref, or module scope`})}})}),Gzt=new Set([`uniformsNeedUpdate`]),e5=x({id:`three-no-redundant-uniforms-need-update`,title:`Redundant uniformsNeedUpdate inside animation loop`,category:`Performance`,severity:`warn`,recommendation:`Mutate ShaderMaterial uniform values directly; Three.js uploads custom uniforms during rendering`,create:e=>{let t=new Set;return{CallExpression(n){Hzt(n,e.scopes,Gzt,t,({constructorName:t,node:n})=>{t!==`ShaderMaterial`&&t!==`RawShaderMaterial`||e.report({node:n,message:`Shader material custom uniforms are refreshed during rendering, so setting uniformsNeedUpdate on every animation frame is redundant`})})}}}}),t5=x({id:`three-no-state-in-animation-loop`,title:`React state update inside Three.js animation loop`,severity:`warn`,recommendation:`Mutate Three.js objects or refs during frames; reserve React state for guarded, infrequent transitions`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes);!r||t.has(r)||(t.add(r),l0(r,e.scopes,t=>{!T(t,`CallExpression`)||!C2(t.callee,e.scopes)||M2(t,r,e.scopes)||e.report({node:t,message:`This React state update can schedule a component render every frame. Mutate a Three.js object or ref, or guard an infrequent state transition`})}))}}}}),n5=x({id:`three-no-state-in-pointer-move`,title:`React state update inside Three.js pointer-move handler`,severity:`warn`,recommendation:`Keep continuous pointer previews in Three.js objects or refs and publish React state when the interaction commits`,create:e=>{let t=new Set,n=n=>{let r=Bzt(n,e);!r||t.has(r)||(t.add(r),l0(r,e.scopes,t=>{!T(t,`CallExpression`)||!C2(t.callee,e.scopes)||M2(t,r,e.scopes)||e.report({node:t,message:`This React state update can render on every pointer movement. Mutate a Three.js object or ref and publish state on pointer-up`})}))};return{CallExpression(e){n(e)},JSXOpeningElement(e){n(e)}}}}),Kzt=new Set([`defines`,`fragmentShader`,`vertexShader`]),qzt=[`customProgramCacheKey`,`onBeforeCompile`],r5=(e,t)=>{let n=e;for(;n;){if(n===t)return!0;n=n.parent}return!1},Jzt=e=>{let t=e;for(;T(t,`MemberExpression`);)t=t.object;return T(t,`Identifier`)?t:null},Yzt=(e,t,n)=>{let r=Jzt(e);if(!r||n.scopes.symbolFor(r)?.id!==t.id)return null;let i=e,a=null;for(;T(i,`MemberExpression`)&&(a=C(i),!T(i.object,`Identifier`));)i=i.object;return a&&Kzt.has(a)?a:null},i5=(e,t,n)=>{let r=new Set,i=e=>{let a=!1;return A(e,o=>{if(a||o!==e&&y(o))return!1;if(T(o,`ThisExpression`))return a=!0,!1;if(T(o,`MemberExpression`)){let e=Jzt(o),r=e?n.scopes.symbolFor(e):null;if(r&&!r5(r.scope,t)&&r.kind!==`import`&&r.kind!==`function`&&r.kind!==`class`)return a=!0,!1}if(!T(o,`Identifier`))return;let s=n.scopes.symbolFor(o),c=s?.kind===`const`&&!!(s.initializer&&(T(s.initializer,`ArrayExpression`)||T(s.initializer,`ObjectExpression`)||T(s.initializer,`NewExpression`)));if(s&&!r5(s.scope,t)&&(s.kind===`let`||s.kind===`var`||s.kind===`parameter`||c))return a=!0,!1;if(!s||!r5(s.scope,t)||r.has(s.id))return;let l=Os(s);if(!(!l||y(l)||T(l,`ArrayExpression`)||T(l,`ObjectExpression`)||T(l,`NewExpression`))&&(r.add(s.id),i(l)))return a=!0,!1}),a};return i(e)},Xzt=(e,t)=>{let n=t.scopes.ownScopeFor(e);if(!n||!y(e))return!1;let r=e.params[0];if(!r||!T(r,`Identifier`))return!1;let i=t.scopes.symbolFor(r);if(!i)return!1;let a=e=>{let n=!1;return A(e,r=>{if(n||r!==e&&y(r))return!1;if(T(r,`AssignmentExpression`)&&T(r.left,`MemberExpression`)&&Yzt(r.left,i,t))return n=!0,!1}),n},o=!1;return A(e.body,r=>{if(o||r!==e.body&&y(r))return!1;if(T(r,`AssignmentExpression`)&&T(r.left,`MemberExpression`)&&Yzt(r.left,i,t)&&i5(r.right,n,t)||T(r,`IfStatement`)&&i5(r.test,n,t)&&(a(r.consequent)||r.alternate&&a(r.alternate))||T(r,`ConditionalExpression`)&&i5(r.test,n,t)&&(a(r.consequent)||a(r.alternate))||T(r,`LogicalExpression`)&&i5(r.left,n,t)&&a(r.right)||T(r,`SwitchStatement`)&&(i5(r.discriminant,n,t)||r.cases.some(e=>e.test&&i5(e.test,n,t)))&&r.cases.some(e=>e.consequent.some(a))||(T(r,`WhileStatement`)||T(r,`DoWhileStatement`))&&i5(r.test,n,t)&&a(r.body)||T(r,`ForStatement`)&&r.test&&i5(r.test,n,t)&&a(r.body)||(T(r,`ForInStatement`)||T(r,`ForOfStatement`))&&i5(r.right,n,t)&&a(r.body))return o=!0,!1}),o},Zzt=(e,t)=>{if(!T(e,`Identifier`))return null;let n=t.scopes.symbolFor(e),r=n?Os(n):null;return!n||!r||!H8(r,t.scopes)?.endsWith(`Material`)?null:n},Qzt=(e,t)=>{let n=e.parent;if(!T(n,`VariableDeclarator`)||n.init!==e||!T(n.id,`Identifier`))return null;let r=t.scopes.symbolFor(n.id);return r&&Os(r)===e?r:null},$zt=(e,t)=>{if(M(e,t.scopes))return!0;let n=D(e);if(T(n,`Identifier`)){if(n.name===`undefined`&&t.scopes.isGlobalReference(n))return!1;let e=w(n,t.scopes);if(e?.kind!==`const`||!e.initializer)return!0;n=D(e.initializer)}return!(T(n,`ArrayExpression`)||T(n,`ClassExpression`)||T(n,`Literal`)||T(n,`ObjectExpression`)||T(n,`TemplateLiteral`)||T(n,`UnaryExpression`))},a5=x({id:`three-on-before-compile-require-program-cache-key`,title:`onBeforeCompile variant lacks a program cache key`,category:`Correctness`,severity:`error`,recommendation:`Return every mutable shader-patch variant from customProgramCacheKey on the same material`,create:e=>{let t=[],n=new Set;return{NewExpression(r){if(!H8(r,e.scopes)?.endsWith(`Material`))return;let i=r.arguments[0];if(!i||T(i,`SpreadElement`))return;let a=Va(i,qzt,e.scopes,r);if(!a)return;let o=rD(a.properties);if(!o)return;let s=o.find(e=>S(e,{allowComputedString:!0})===`customProgramCacheKey`),c=o.find(e=>S(e,{allowComputedString:!0})===`onBeforeCompile`),l=Qzt(r,e),u=!!(s&&$zt(s.value,e));if(u&&l&&n.add(l.id),!c)return;let d=M(c.value,e.scopes);!d||!Xzt(d,e)||t.push({hasConstructorCacheKey:u,materialSymbolId:l?.id??null,node:c})},AssignmentExpression(r){if(!T(r.left,`MemberExpression`))return;let i=C(r.left);if(i!==`onBeforeCompile`&&i!==`customProgramCacheKey`)return;let a=Zzt(r.left.object,e);if(!a)return;if(i===`customProgramCacheKey`){$zt(r.right,e)?n.add(a.id):n.delete(a.id);return}let o=M(r.right,e.scopes);!o||!Xzt(o,e)||t.push({hasConstructorCacheKey:!1,materialSymbolId:a.id,node:r})},"Program:exit"(){for(let r of t)r.materialSymbolId===null&&r.hasConstructorCacheKey||r.materialSymbolId!==null&&n.has(r.materialSymbolId)||e.report({node:r.node,message:`This onBeforeCompile patch changes shader source from mutable captured state, but the material has no customProgramCacheKey for those program variants`})}}}}),eBt=new Set([`Group`,`Mesh`,`Object3D`,`Scene`]),tBt=(e,t)=>{if(!T(e,`CallExpression`)||!T(e.callee,`MemberExpression`)||C(e.callee)!==`add`)return!1;let n=H8(e.callee.object,t.scopes);return n!==null&&eBt.has(n)},nBt=(e,t,n)=>V2(e,n).some(e=>{let r=v(e),i=r.parent;return!!(i&&tBt(i,n)&&i.arguments.some(e=>e===r)&&!Em(r,t))}),rBt=(e,t,n)=>{let r=new Set(V2(e,n).flatMap(e=>{let t=B(e,n);return t?[t]:[]}));if(r.size===0)return!1;let i=new Set([...r].flatMap(e=>[`${e}.geometry`,`${e}.material`])),a=!1;return l0(t,n.scopes,e=>{if(!a){if(T(e,`AssignmentExpression`)){let t=B(e.left,n);if(t&&i.has(t)){a=!0;return}}if(T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)){let t=C(e.callee),i=B(e.callee.object,n);i&&r.has(i)&&(t===`add`||t===`attach`||t===`copy`)&&(a=!0)}}}),a},iBt=(e,t)=>V2(e,t).some(e=>{let n=v(e),r=n.parent,i=r?.parent;return!!(r&&T(r,`SpreadElement`)&&r.argument===n&&i&&tBt(i,t)&&i.arguments.some(e=>e===r))}),o5=x({id:`three-prefer-instanced-mesh`,title:`Repeated Three.js meshes use separate draw calls`,category:`Performance`,severity:`warn`,recommendation:`Replace repeated Mesh objects that share geometry and material with one InstancedMesh and per-instance transforms`,create:e=>({NewExpression(t){if(H8(t,e.scopes)!==`Mesh`)return;let n=b(t),r=t.arguments[0],i=t.arguments[1];if(!n||!r||!i)return;let a=R0(n,e),o=ce(n,e.scopes,e=>D(e)===t,e.cfg,`every`),s=nBt(t,n,e)||o&&a.some(t=>iBt(t,e));Em(t,n)||rBt(t,n,e)||!H2(r,n,e)||!H2(i,n,e)||a.length===0||!s||e.report({node:t,message:`This map adds multiple Mesh objects with the same geometry and material, creating a draw call for each item. Use one InstancedMesh and set each instance transform`})}})}),s5=e=>{let t=e.specifier;return t.type===`keyword`?t.token:t.type===`identifier`||t.type===`type_name`?t.identifier:null},aBt=/\/\*[\s\S]*?(?:\*\/|$)|\/\/[^\r\n]*/g,oBt=/[^\r\n]/g,c5=e=>e.replace(aBt,e=>e.replace(oBt,` `)),sBt=/^[ \t]*#[ \t]*(?:if|ifdef|ifndef|elif|else|endif)\b/m,cBt=/^[ \t]*#[ \t]*include[ \t]+<[^>\r\n]+>[^\r\n]*/gm,lBt=e=>e.replace(cBt,e=>e.replace(/[^\r\n]/g,` `)),uBt=(e,t)=>{let n=c5(e);if(sBt.test(n))return null;try{return one(lBt(n),{includeLocation:!0,quiet:!0,stage:t})}catch{return null}},dBt=(e,t)=>e.segments.map(e=>({endOffset:e.endOffset+t,node:e.node,startOffset:e.startOffset+t})),fBt=(e,t,n)=>{let r=``,i=[];return e.forEach((e,n)=>{n>0&&t&&(i.push(...dBt(t,r.length)),r+=t.text),i.push(...dBt(e,r.length)),r+=e.text}),{fallbackNode:n,segments:i,text:r}},l5=(e,t,n)=>{let r=D(e),i=Yn(r);if(i!==null)return{fallbackNode:r,segments:i.length===0?[]:[{endOffset:i.length,node:r,startOffset:0}],text:i};if(T(r,`Identifier`)){let e=t.symbolFor(r);if(e?.kind!==`const`||!e.initializer||n.has(e.id)||!T(e.declarationNode,`VariableDeclarator`)||e.declarationNode.id!==e.bindingIdentifier)return null;let i=new Set(n);return i.add(e.id),l5(e.initializer,t,i)}if(T(r,`BinaryExpression`)&&r.operator===`+`){let e=l5(r.left,t,new Set(n)),i=l5(r.right,t,new Set(n));return e&&i?fBt([e,i],null,r):null}if(!T(r,`CallExpression`)||!T(r.callee,`MemberExpression`)||C(r.callee)!==`join`)return null;let a=D(r.callee.object);if(!T(a,`ArrayExpression`)||r.arguments.length>1)return null;let o=r.arguments[0],s;if(s=o?T(o,`SpreadElement`)?null:l5(o,t,new Set(n)):{fallbackNode:r,segments:[],text:`,`},!s)return null;let c=[];for(let e of a.elements){if(!e||T(e,`SpreadElement`))return null;let r=l5(e,t,new Set(n));if(!r)return null;c.push(r)}return fBt(c,s,r)},pBt=(e,t)=>{let n=l5(e,t,new Set);return n?{getOriginNodeAtOffset:e=>n.segments.find(t=>e>=t.startOffset&&e<t.endOffset)?.node??n.fallbackNode,text:n.text}:null},mBt=new Set([`RawShaderMaterial`,`ShaderMaterial`]),hBt=[`clipping`,`fog`,`fragmentShader`,`glslVersion`,`lights`,`morphNormals`,`morphTargets`,`skinning`,`transmission`,`uniforms`,`vertexShader`],gBt=(e,t,n)=>{if(!e)return null;let r=pBt(e,n.scopes);if(!r)return null;let i=uBt(r.text,t);return i?{expression:e,program:i,source:r,stage:t}:null},u5=(e,t)=>{let n=Y1(e.callee,t.scopes);if(!n||!Q0(n.moduleSource)||!mBt.has(n.apiName))return null;let r=e.arguments[0];if(!r||T(r,`SpreadElement`))return null;let i=Va(r,hBt,t.scopes,e);if(!i)return null;let a=new Set(hBt),o=new Map;for(let e=i.properties.length-1;e>=0;--e){let t=i.properties[e];if(!t||T(t,`SpreadElement`))return null;if(!T(t,`Property`))continue;let n=S(t,{allowComputedString:!0});if(!n)return null;a.has(n)&&(a.delete(n),t.kind===`init`&&!t.method&&o.set(n,t.value))}let s=o.get(`fragmentShader`),c=o.get(`vertexShader`);return{constructorName:n.apiName,constructorNode:e,fragmentShader:gBt(s,`fragment`,t),optionsObject:i,properties:o,vertexShader:gBt(c,`vertex`,t)}},_Bt=/^(?:float|vec[234]|mat[234](?:x[234])?)$/,vBt=new Set([`highp`,`lowp`,`mediump`]),yBt=e=>!!e?.some(e=>e.type===`keyword`&&vBt.has(e.token)),d5=x({id:`three-raw-shader-require-fragment-float-precision`,title:`Raw fragment shader lacks float precision`,category:`Correctness`,severity:`error`,recommendation:`Declare a default fragment float precision or qualify every floating-point declaration`,create:e=>({NewExpression(t){let n=u5(t,e);if(n?.constructorName!==`RawShaderMaterial`||!n.fragmentShader)return;let r=!1,i=[];Hn(n.fragmentShader.program,{precision:{enter:({node:e})=>{s5(e.specifier)===`float`&&(r=!0)}},fully_specified_type:{enter:({node:e})=>{let t=s5(e.specifier);i.length===0&&!r&&t&&_Bt.test(t)&&!yBt(e.qualifiers)&&i.push(e)}},parameter_declaration:{enter:({node:e})=>{let t=s5(e.specifier);i.length===0&&!r&&t&&_Bt.test(t)&&!yBt(e.qualifier)&&i.push(e)}}});let a=i[0];a&&e.report({node:n.fragmentShader.source.getOriginNodeAtOffset(a.location?.start.offset??0),message:`RawShaderMaterial does not receive Three.js precision declarations, and fragment GLSL has no default float precision for this unqualified declaration`})}})}),f5=e=>{let t=null;if(e.type===`float_constant`)t=Number(e.token.replace(/(?:lf|LF|f|F)$/,``));else if(e.type===`double_constant`)t=Number(e.token.replace(/(?:lf|LF)$/,``));else if(e.type===`uint_constant`)t=Number(e.token.replace(/[uU]$/,``));else if(e.type===`int_constant`)t=Number(e.token);else if(e.type===`group`)t=f5(e.expression);else if(e.type===`unary`&&(e.operator.literal===`+`||e.operator.literal===`-`)){let n=f5(e.expression);n!==null&&(t=e.operator.literal===`-`?-n:n)}return t!==null&&Number.isFinite(t)?t:null},bBt=new Set([`centroid`,`flat`,`noperspective`,`sample`,`smooth`]),xBt=new Set([`flat`,`noperspective`,`smooth`]),SBt=(e,t)=>{let n=[...Array.isArray(t)?t:[],...Array.isArray(e.quantifier)?e.quantifier:[]];if(n.length===0)return null;if(n.length===1)return f5(n[0].expression)??void 0},CBt=e=>e.type===`keyword`?e.token:null,wBt=e=>{let t=[...e].filter(e=>bBt.has(e));return t.some(e=>xBt.has(e))||t.push(`smooth`),t.sort().join(` `)},p5=e=>{let t=[],n=e.scopes[0]?.bindings;for(let r of e.program){if(r.type!==`declaration_statement`||r.declaration.type!==`declarator_list`)continue;let e=r.declaration,i=s5(e.specified_type.specifier);if(!i)continue;let a=e.specified_type.qualifiers??[],o=new Set,s=!1;for(let e of a){if(e.type===`layout_qualifier`){s=!0;continue}let t=CBt(e);t&&o.add(t)}for(let r of e.declarations){let a=r.identifier.identifier,c=n?.[a];t.push({arraySize:SBt(r,e.specified_type.specifier.quantifier),hasLayoutQualifier:s,interpolation:wBt(o),isStaticallyUsed:!!c?.references.some(e=>e!==c.declaration),name:a,node:r,qualifiers:o,typeName:i})}}return t},m5=e=>{if(e.identifier.type===`identifier`)return e.identifier.identifier;if(e.identifier.type!==`type_specifier`)return null;let t=e.identifier.specifier;return t.type===`keyword`?t.token:t.type===`identifier`||t.type===`type_name`?t.identifier:null},h5=(e,t)=>{let n=e.scopes[0]?.functions[t];return!!(n&&Object.values(n).some(e=>!!e.declaration))},g5=(e,t)=>RegExp(`^[ \\t]*#[ \\t]*define[ \\t]+${t}(?:[ \\t]|\\()`,`m`).test(c5(e)),TBt=new Set(`acosh.asinh.atanh.bitCount.bitfieldExtract.bitfieldInsert.bitfieldReverse.cosh.determinant.findLSB.findMSB.floatBitsToInt.floatBitsToUint.frexp.imulExtended.intBitsToFloat.interpolateAtCentroid.interpolateAtOffset.interpolateAtSample.inverse.isinf.isnan.ldexp.modf.outerProduct.packHalf2x16.packSnorm2x16.packUnorm2x16.round.roundEven.sinh.tanh.texelFetch.texelFetchOffset.texture.textureGrad.textureGradOffset.textureLod.textureLodOffset.textureOffset.textureProj.textureProjGrad.textureProjGradOffset.textureProjLod.textureProjLodOffset.textureProjOffset.textureSize.transpose.trunc.uaddCarry.uintBitsToFloat.umulExtended.unpackHalf2x16.unpackSnorm2x16.unpackUnorm2x16.usubBorrow`.split(`.`)),EBt=/^(?:uint|uvec[234]|mat[234]x[234]|sampler3D|sampler2DArray|[iu]sampler(?:2D|3D|Cube|2DArray))$/,DBt=/^(?:uint|uvec[234]|mat[234]x[234])$/,OBt=e=>{if(p5(e.program).some(e=>e.hasLayoutQualifier||e.qualifiers.has(`in`)||e.qualifiers.has(`out`)||EBt.test(e.typeName)))return!0;let t=!1;return Hn(e.program,{binary:{enter:({node:e})=>{(e.operator.literal===`<<`||e.operator.literal===`>>`||e.operator.literal===`&`||e.operator.literal===`|`||e.operator.literal===`^`)&&(t=!0)}},assignment:{enter:({node:e})=>{let n=String(e.operator.literal);(n===`<<=`||n===`>>=`||n===`&=`||n===`|=`||n===`^=`)&&(t=!0)}},function_call:{enter:({node:n})=>{let r=m5(n);r&&(TBt.has(r)||DBt.test(r))&&!g5(e.source.text,r)&&!h5(e.program,r)&&(t=!0)}},switch_statement:{enter:()=>{t=!0}}}),t},kBt=(e,t)=>{if(!e)return!1;if(T(e,`Literal`))return e.value===`300 es`;let n=Y1(e,t.scopes);return!n||!Q0(n.moduleSource)?null:n.apiName===`GLSL3`},_5=x({id:`three-raw-shader-require-glsl3-version`,title:`Raw shader uses GLSL 3 syntax without GLSL3`,category:`Correctness`,severity:`error`,recommendation:`Set glslVersion to THREE.GLSL3 when RawShaderMaterial uses GLSL 3 syntax`,create:e=>({NewExpression(t){let n=u5(t,e);if(n?.constructorName!==`RawShaderMaterial`||kBt(n.properties.get(`glslVersion`),e)!==!1)return;let r=[n.vertexShader,n.fragmentShader].find(e=>!!(e&&OBt(e)));r&&e.report({node:r.expression,message:`This RawShaderMaterial uses GLSL 3-only syntax but does not set glslVersion to THREE.GLSL3, so Three.js compiles it as GLSL 1`})}})}),ABt=new Set,jBt=[`uncacheAction`,`uncacheClip`],MBt=(e,t,n)=>u4(e,`clipAction`,n.scopes,e=>{let r=e.arguments[1];return r?T(r,`SpreadElement`)?!0:B(r,n)!==t:!1}),NBt=(e,t,n,r)=>{let i=[],a=[];return l0(e,r.scopes,(e,o)=>{if(o||!T(e,`CallExpression`)||!T(e.callee,`MemberExpression`)||!a4(e.callee.object,t,r.scopes))return;let s=C(e.callee);if(s===`stopAllAction`){i.push(e);return}let c=e.arguments[0];s===`uncacheRoot`&&c&&!T(c,`SpreadElement`)&&B(c,r)===n&&a.push(e)}),i.some(e=>a.some(t=>{let n=b(e),r=b(t);if(!n||!r||n!==r)return!1;let i=At(e),a=At(t);return i<0||a<0||i<a}))},v5=x({id:`three-require-animation-mixer-cleanup`,title:`Unreleased Three.js animation mixer actions`,category:`Correctness`,severity:`warn`,recommendation:`Stop component-owned AnimationMixer actions and uncache their owned root in React cleanup`,create:e=>({NewExpression(t){let n=Y1(t.callee,e.scopes),r=t.arguments[0];if(n?.moduleSource!==`three`||n.apiName!==`AnimationMixer`||!r||T(r,`SpreadElement`))return;let i=B(r,e);if(!i)return;let a=s4(t,e,{borrowedArgumentMethodNames:ABt});if(!a||a.hasUnknownOwnershipTransfer||!u4(a,`clipAction`,e.scopes)||MBt(a,i,e)||jBt.some(t=>u4(a,t,e.scopes)))return;let o=c4(a,e,t=>NBt(t,a,i,e));o.isProven||o.isUnknown||e.report({node:t,message:`This component-owned AnimationMixer caches actions but has no cleanup that stops all actions before uncaching its owned root`})}})}),PBt=new Set([`ArcballControls`,`DragControls`,`FirstPersonControls`,`FlyControls`,`MapControls`,`OrbitControls`,`PointerLockControls`,`TrackballControls`,`TransformControls`]),FBt=new Set,IBt=new Set([`DragControls`,`FirstPersonControls`,`FlyControls`,`MapControls`,`OrbitControls`,`PointerLockControls`,`TrackballControls`]),LBt=e=>e===`three-stdlib`||e.startsWith(`three/addons/controls/`)||e.startsWith(`three/examples/jsm/controls/`),y5=x({id:`three-require-controls-cleanup`,title:`Undisposed imperative Three.js controls`,category:`Correctness`,severity:`warn`,recommendation:`Dispose component-owned Three.js controls in a React cleanup so their DOM listeners are removed`,create:e=>({NewExpression(t){let n=Y1(t.callee,e.scopes);if(!n||!PBt.has(n.apiName)||!LBt(n.moduleSource))return;let r=s4(t,e,{borrowedArgumentMethodNames:FBt,retainsOwnershipInJsx:!0});if(!r||r.hasUnknownOwnershipTransfer)return;let i=IBt.has(n.apiName)?[`disconnect`,`dispose`]:[`dispose`],a=c4(r,e,t=>i.some(n=>l4(t,r,n,e.scopes)));if(!(a.isProven||a.isUnknown)){if(IBt.has(n.apiName)){let t=Ixt(r,e,`connect`,t=>i.some(n=>l4(t,r,n,e.scopes)));if(t.isProven||t.isUnknown)return}e.report({node:t,message:`These component-owned controls register DOM listeners but have no provable React cleanup. Dispose them when their owner changes or unmounts`})}}})}),RBt=new Set([`position`,`quaternion`,`rotation`,`scale`]),zBt=(e,t)=>{let n=D(e),r=!1;for(;T(n,`MemberExpression`);)RBt.has(C(n)??``)&&(r=!0),n=D(n.object);return r&&K8(e,t.scopes)},b5=(e,t,n=new Set)=>{let r=!1;return A(e,e=>{if(T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)&&C(e.callee)===`getDelta`&&H8(e.callee.object,t.scopes)===`Clock`)return r=!0,!1;if(!T(e,`Identifier`))return;let i=t.scopes.symbolFor(e);if(!(i?.kind!==`const`||!i.initializer||n.has(i.id)||i.references.some(e=>e.flag!==`read`))&&(n.add(i.id),b5(i.initializer,t,n)))return r=!0,!1}),r},BBt=(e,t)=>{if(!T(e.callee,`MemberExpression`))return null;let n=C(e.callee),r;if(n===`lerp`&&Z1(e.callee.object,`MathUtils`,t.scopes)===`three`?r=2:n&&K8(e.callee.object,t.scopes)&&(r=avt.get(n)),r===void 0)return null;let i=e.arguments[r];if(!i||T(i,`SpreadElement`))return null;let a=G2(i,t.scopes);return a!==null&&a>0&&a<1?i:null},x5=x({id:`three-require-frame-delta`,title:`Frame-rate-dependent Three.js animation`,category:`Correctness`,severity:`warn`,recommendation:`Scale incremental transforms and interpolation by Clock.getDelta(), use delta-aware damping, or assign from absolute animation time`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes);!r||t.has(r)||(t.add(r),l0(r,e.scopes,(t,n)=>{if(n)return;if(T(t,`UpdateExpression`)&&zBt(t.argument,e)){e.report({node:t,message:`This transform changes by a fixed amount per frame, so animation speed depends on refresh rate. Use a Three.js Clock delta instead of an update operator`});return}if(T(t,`AssignmentExpression`)&&(t.operator===`+=`||t.operator===`-=`)&&zBt(t.left,e)&&!b5(t.right,e)){e.report({node:t,message:`This transform changes by a fixed amount per frame, so animation speed depends on refresh rate. Multiply the increment by Clock.getDelta()`});return}if(!T(t,`CallExpression`))return;let r=BBt(t,e);!r||b5(r,e)||e.report({node:r,message:`This fixed interpolation factor converges once per frame, so its speed changes with refresh rate. Derive the factor from Clock.getDelta() or use delta-aware damping`})}))}}}}),VBt=(e,t)=>{let n=D(e.callee);if(!T(n,`MemberExpression`))return null;let r=C(n);if(r!==`setMatrixAt`&&r!==`setColorAt`||H8(n.object,t.scopes)!==`InstancedMesh`)return null;let i=B(n.object,t);return i?{bufferPropertyName:r===`setMatrixAt`?`instanceMatrix`:`instanceColor`,methodName:r,node:e,receiverKey:i}:null},HBt=(e,t)=>{let n=D(e.right),r=D(e.left);if(e.operator!==`=`||!T(n,`Literal`)||n.value!==!0||!T(r,`MemberExpression`)||C(r)!==`needsUpdate`)return null;let i=D(r.object);if(!T(i,`MemberExpression`))return null;let a=C(i);if(a!==`instanceMatrix`&&a!==`instanceColor`||H8(i.object,t.scopes)!==`InstancedMesh`)return null;let o=B(i.object,t);return o?{bufferPropertyName:a,node:e,receiverKey:o}:null},UBt=(e,t)=>{if(!Z2(e,t.scopes))return[];let n=[];for(let r of e.arguments){if(T(r,`SpreadElement`))continue;let i=D(r);if(T(i,`MemberExpression`)){let r=C(i);if((r===`instanceMatrix`||r===`instanceColor`)&&H8(i.object,t.scopes)===`InstancedMesh`){let a=B(i.object,t);a&&n.push({bufferPropertyName:r,node:e,receiverKey:a});continue}}if(H8(i,t.scopes)!==`InstancedMesh`)continue;let a=B(i,t);a&&(n.push({bufferPropertyName:`instanceMatrix`,node:e,receiverKey:a}),n.push({bufferPropertyName:`instanceColor`,node:e,receiverKey:a}))}return n},WBt=(e,t,n,r)=>{let i=r.cfg.enclosingFunction(e.node),a=t.filter(t=>t.receiverKey===e.receiverKey&&t.bufferPropertyName===e.bufferPropertyName&&r.cfg.enclosingFunction(t.node)===i);if(i)return Aa(e.node,a.map(e=>e.node),r);let o=O(e.node);return a.some(e=>{let t=O(e.node);return o!==null&&t!==null&&t>o&&!Em(e.node,n)})},S5=x({id:`three-require-instanced-buffer-update`,title:`Three.js instanced mesh buffer is not marked for upload`,category:`Correctness`,severity:`error`,recommendation:`After setMatrixAt or setColorAt, set the matching instance buffer's needsUpdate flag to true`,create:e=>{let t=[],n=[],r=null;return{Program(e){r=e},AssignmentExpression(t){let r=HBt(t,e);r&&n.push(r)},CallExpression(r){let i=VBt(r,e);if(i){t.push(i);return}n.push(...UBt(r,e))},"Program:exit"(){if(r)for(let i of t)WBt(i,n,r,e)||e.report({node:i.node,message:`After ${i.methodName}, set ${i.bufferPropertyName}.needsUpdate to true so Three.js uploads the changed instance data`})}}}}),C5=x({id:`three-require-owned-geometry-cleanup`,title:`Locally owned Three.js geometry is not disposed`,category:`Performance`,severity:`warn`,recommendation:`Dispose locally constructed geometries when their React owner releases them`,create:e=>d4({constructorNameSuffix:`Geometry`,context:e,message:`This locally constructed Three.js geometry owns GPU buffers but has no provable React cleanup. Dispose it when the owning component or hook releases it`})}),w5=x({id:`three-require-owned-material-cleanup`,title:`Locally owned Three.js material is not disposed`,category:`Performance`,severity:`warn`,recommendation:`Dispose locally constructed materials when their React owner releases them`,create:e=>d4({constructorNameSuffix:`Material`,context:e,message:`This locally constructed Three.js material owns a GPU shader program but has no provable React cleanup. Dispose it when the owning component or hook releases it`})}),T5=x({id:`three-require-owned-texture-cleanup`,title:`Locally owned Three.js texture is not disposed`,category:`Performance`,severity:`warn`,disabledWhen:[`r3f`],recommendation:`Dispose locally constructed textures when their React owner releases them`,create:p4.create}),GBt=new Set,KBt=new Set([`addPass`,`insertPass`]),qBt=[`three/addons/postprocessing/`,`three/examples/jsm/postprocessing/`],JBt=new Set([`three/addons`,`three/addons/Addons`,`three/addons/Addons.js`,`three/examples/jsm/Addons`,`three/examples/jsm/Addons.js`]),YBt=new Set(`AdaptiveToneMappingPass.AfterimagePass.BloomPass.BokehPass.CubeTexturePass.DotScreenPass.FilmPass.FXAAPass.GTAOPass.GlitchPass.HalftonePass.LUTPass.OutlinePass.OutputPass.RenderPixelatedPass.RenderTransitionPass.SAOPass.SMAAPass.SSAARenderPass.SSAOPass.SSRPass.SavePass.ShaderPass.TAARenderPass.TexturePass.UnrealBloomPass`.split(`.`)),XBt=new Set([`AdaptiveToneMappingPass`,`OutlinePass`,`SSAARenderPass`,`SSAOPass`,`SSRPass`,`UnrealBloomPass`]),ZBt=(e,t)=>JBt.has(t)||qBt.some(n=>t===`${n}${e}`||t===`${n}${e}.js`),QBt=(e,t)=>{let n=svt.get(e)??(e!==`EffectComposer`&&XBt.has(e)?145:146),r=JBt.has(t)?158:n;return Math.max(n,r)},$Bt=(e,t,n)=>qr(n.settings,`three:${QBt(e,t)}`),eVt=(e,t)=>e===`EffectComposer`&&ZBt(e,t),tVt=(e,t)=>e===`EffectComposer`&&t===`postprocessing`,nVt=(e,t)=>YBt.has(e)&&ZBt(e,t),rVt=(e,t,n)=>{let r=D(e.callee);return!T(r,`MemberExpression`)||!KBt.has(C(r)??``)?!1:t.some(e=>!e.hasUnknownOwnershipTransfer&&a4(r.object,e,n.scopes))},iVt=(e,t,n)=>{if(t.hasUnknownOwnershipTransfer)return;let r=c4(t,n,e=>l4(e,t,`dispose`,n.scopes));r.isProven||r.isUnknown||n.report({node:e,message:`This component-owned postprocessing resource has no provable React cleanup, so its GPU resources can survive dependency changes or unmount`})},E5=x({id:`three-require-postprocessing-cleanup`,title:`Undisposed Three.js postprocessing resource`,category:`Correctness`,severity:`warn`,recommendation:`Dispose component-owned postprocessing composers and resource-owning passes`,create:e=>({Program(t){let n=[],r=[];A(t,t=>{if(!T(t,`NewExpression`))return;let i=Y1(t.callee,e.scopes);if(i){if(eVt(i.apiName,i.moduleSource)&&$Bt(i.apiName,i.moduleSource,e)||tVt(i.apiName,i.moduleSource)){n.push(t);return}nVt(i.apiName,i.moduleSource)&&$Bt(i.apiName,i.moduleSource,e)&&r.push(t)}});let i=new Map;for(let t of n){let n=s4(t,e,{borrowedArgumentMethodNames:GBt,retainsOwnershipInJsx:!0});n&&i.set(t,n)}let a=[...i.values()].filter(t=>{let n=t.allocation;if(!T(n,`NewExpression`))return!1;let r=Y1(n.callee,e.scopes);return!!(r&&eVt(r.apiName,r.moduleSource))});for(let t of n){let n=i.get(t);n&&iVt(t,n,e)}for(let t of r){let n=s4(t,e,{borrowedArgumentMethodNames:GBt,isBorrowedArgument:t=>rVt(t,a,e),retainsOwnershipInJsx:!0});n&&iVt(t,n,e)}}})}),D5=new Set([`OrthographicCamera`,`PerspectiveCamera`]),aVt=new Set([`aspect`,`bottom`,`far`,`filmGauge`,`filmOffset`,`fov`,`left`,`near`,`right`,`top`,`zoom`]),oVt=(e,t)=>{let n=T(e,`AssignmentExpression`)?D(e.left):T(e,`UpdateExpression`)?D(e.argument):null;if(!n||!T(n,`MemberExpression`)||!aVt.has(C(n)??``)||!D5.has(H8(n.object,t.scopes)??``))return null;let r=B(n.object,t);return r?{node:e,receiverKey:r}:null},sVt=(e,t)=>{let n=D(e.callee);if(!T(n,`MemberExpression`)||C(n)!==`updateProjectionMatrix`||!D5.has(H8(n.object,t.scopes)??``))return null;let r=B(n.object,t);return r?{node:e,receiverKey:r}:null},cVt=(e,t)=>{if(!Z2(e,t.scopes))return[];let n=[];for(let r of e.arguments){if(T(r,`SpreadElement`)||!D5.has(H8(r,t.scopes)??``))continue;let i=B(r,t);i&&n.push({node:e,receiverKey:i})}return n},lVt=(e,t,n)=>{let r=O(e.node),i=O(t.node);if(r===null||i===null||i<=r)return!1;if(!Em(t.node,n))return!0;let a=Tm(e.node,n);return[...Tm(t.node,n)].every(e=>a.has(e))},uVt=(e,t,n,r)=>{let i=r.cfg.enclosingFunction(e.node),a=t.filter(t=>t.receiverKey===e.receiverKey&&r.cfg.enclosingFunction(t.node)===i);return i?Aa(e.node,a.map(e=>e.node),r):a.some(t=>lVt(e,t,n))},O5=x({id:`three-require-projection-matrix-update`,title:`Missing Three.js camera projection-matrix update`,category:`Correctness`,severity:`error`,recommendation:`Call camera.updateProjectionMatrix() after changing projection properties so Three.js renders the new frustum`,create:e=>{let t=[],n=[],r=null;return{Program(e){r=e},AssignmentExpression(n){let r=oVt(n,e);r&&t.push(r)},UpdateExpression(n){let r=oVt(n,e);r&&t.push(r)},CallExpression(t){let r=sVt(t,e);if(r){n.push(r);return}n.push(...cVt(t,e))},"Program:exit"(){if(r)for(let i of t)uVt(i,n,r,e)||e.report({node:i.node,message:`This camera projection property changes without a later updateProjectionMatrix() call on every path, so Three.js can keep rendering a stale projection matrix`})}}}}),dVt=new Set([`RenderTarget`,`WebGLCubeRenderTarget`,`WebGLRenderTarget`]),fVt=new Set([`readRenderTargetPixels`,`readRenderTargetPixelsAsync`,`setRenderTarget`,`setRenderTargetTextures`]),k5=x({id:`three-require-render-target-cleanup`,title:`Undisposed Three.js render target`,category:`Correctness`,severity:`warn`,recommendation:`Dispose component-owned render targets in a React cleanup that follows the render target binding`,create:e=>({NewExpression(t){let n=Y1(t.callee,e.scopes);if(!n||!dVt.has(n.apiName)||!Q0(n.moduleSource))return;let r=s4(t,e,{borrowedArgumentMethodNames:fVt});if(!r||r.hasUnknownOwnershipTransfer)return;let i=b(t);if(i&&u4(r,`dispose`,e.scopes,e=>e.range[0]>t.range[1]&&b(e)===i&&!Em(e,i)))return;let a=c4(r,e,t=>l4(t,r,`dispose`,e.scopes));a.isProven||a.isUnknown||e.report({node:t,message:`This component-owned render target is not disposed by a matching React cleanup, so its GPU framebuffer and textures can survive dependency changes or unmount`})}})}),pVt=new Set([`WebGLRenderer`,`WebGPURenderer`]),mVt=e=>{let t=e.arguments[0];return!!(T(t,`Literal`)&&t.value===null)},hVt=(e,t)=>{let n=v(e),r=n.parent;if(!T(r,`AssignmentExpression`)||r.operator!==`=`||r.right!==n)return!1;let i=D(r.left),a=ku(i,t),o=b(e),s=a?b(a.declarationNode):null;return!!(a&&T(i,`MemberExpression`)&&a.references.every(e=>{let t=v(e.identifier),n=t.parent;return T(n,`MemberExpression`)&&n.object===t&&C(n)===`current`})&&o&&(o===s||b(o)===s))},gVt=(e,t)=>{let n=v(e),r=n.parent;if(T(r,`VariableDeclarator`)&&r.init===n&&T(r.id,`Identifier`)){let e=t.symbolFor(r.id);return e?{symbol:e,refSymbol:null}:null}if(!T(r,`AssignmentExpression`)||r.operator!==`=`||r.right!==n)return null;let i=D(r.left);if(T(i,`Identifier`)){let e=t.symbolFor(i);return e?{symbol:e,refSymbol:null}:null}let a=ku(i,t);return a?{symbol:null,refSymbol:a}:null},A5=(e,t,n)=>{let r=D(e);return t.symbol?T(r,`Identifier`)&&n.symbolFor(r)?.id===t.symbol.id:!!(t.refSymbol&&ku(r,n)?.id===t.refSymbol.id)},_Vt=(e,t,n)=>{let r=e.handle;if(!r)return!1;let i=v(e.call),a=!1;return A(t,e=>{if(a)return!1;if(T(e,`AssignmentExpression`)&&A5(e.left,r,n)&&e.right!==i||T(e,`UpdateExpression`)&&A5(e.argument,r,n))return a=!0,!1}),!a},vVt=(e,t)=>{let n=new Set;return A(e.ownerFunction,r=>{if(!T(r,`CallExpression`)||!T(r.callee,`MemberExpression`)||!_4.has(C(r.callee)??``)||!a4(r.callee.object,e,t))return;let i=b(r);i&&n.add(i)}),n},yVt=(e,t)=>{let n=vVt(e,t);if(n.size===0)return[];let r=[];return A(e.ownerFunction,e=>{let i=b(e);!T(e,`CallExpression`)||!y2(e,`requestAnimationFrame`,t)||!i||!n.has(i)||r.push({call:e,handle:gVt(e,t)})}),r},bVt=(e,t,n)=>{let r=!1;return l0(e,n,e=>{if(r||!T(e,`CallExpression`)||!y2(e,`cancelAnimationFrame`,n))return;let i=e.arguments[0];i&&!T(i,`SpreadElement`)&&A5(i,t,n)&&(r=!0)}),r},xVt=(e,t)=>{let n=n=>a4(n,e,t.scopes),r=!1;return A(e.ownerFunction,e=>{if(r||!T(e,`JSXAttribute`))return;let i=e.parent;if(!T(e.name,`JSXIdentifier`)||!T(i,`JSXOpeningElement`)||!e.value||!T(e.value,`JSXExpressionContainer`)||T(e.value.expression,`JSXEmptyExpression`))return;let a=Z1(i.name,`Canvas`,t.scopes);if(!a||e.name.name!==`gl`&&!(e.name.name===`renderer`&&x4.has(a))||!K1.has(a))return;let o=e.value.expression;if(n(o)){r=!0;return}let s=M(o,t.scopes);s&&ce(s,t.scopes,n,t.cfg,`every`)&&(r=!0)}),r},j5=x({id:`three-require-renderer-cleanup`,title:`Undisposed Three.js renderer`,category:`Correctness`,severity:`warn`,recommendation:`Dispose component-owned renderers and stop their animation loop or animation frame in matching React cleanup`,create:e=>({NewExpression(t){let n=Y1(t.callee,e.scopes);if(!n||!pVt.has(n.apiName)||!Q0(n.moduleSource))return;let r=s4(t,e,{isBorrowedReference:t=>hVt(t,e.scopes)});if(!r||r.hasUnknownOwnershipTransfer||xVt(r,e))return;let i=c4(r,e,t=>l4(t,r,`dispose`,e.scopes)),a=u4(r,`setAnimationLoop`,e.scopes,e=>!mVt(e))?c4(r,e,t=>l4(t,r,`setAnimationLoop`,e.scopes,mVt)):{isProven:!0,isUnknown:!1},o=yVt(r,e.scopes).every(t=>{let n=t.handle;if(!n||!_Vt(t,r.ownerFunction,e.scopes))return!1;let i=c4(r,e,t=>bVt(t,n,e.scopes));return i.isProven||i.isUnknown});(i.isProven||i.isUnknown)&&(a.isProven||a.isUnknown)&&o||e.report({node:t,message:`This component-owned renderer is not fully released. Dispose it and stop its setAnimationLoop or requestAnimationFrame work in matching React cleanup`})}})}),SVt=e=>{let t=/^[biud]?vec([234])$/.exec(e);if(t)return[Number(t[1])];let n=/^mat([234])(?:x([234]))?$/.exec(e);return n?[Number(n[1]),Number(n[2]??n[1])]:[]},CVt=e=>{let t=SVt(e.typeName);return e.arraySize===null?t:[typeof e.arraySize==`number`?e.arraySize:null,...t]},wVt=e=>{let t=[],n=e;for(;n.type===`postfix`;){if(n.expression.type!==`quantifier`)return t.length>0?t:null;t.push(n.expression),n=n.postfix}return n.type===`quantifier`&&t.push(n),t.length>0?t:null},TVt=(e,t)=>{let n=new Map(p5(e.program).map(e=>[e.name,e])),r=e.program.scopes[0]?.bindings;Hn(e.program,{postfix:{enter:({node:i})=>{if(i.expression.type!==`identifier`)return;let a=wVt(i.postfix);if(!a)return;let o=n.get(i.expression.identifier),s=r?.[i.expression.identifier];if(!o||!s?.references.includes(i.expression))return;let c=CVt(o);for(let[n,r]of a.entries()){let i=c[n],a=f5(r.expression);i==null||a===null||!Number.isInteger(a)||a>=0&&a<i||t.report({node:e.source.getOriginNodeAtOffset(r.location?.start.offset??0),message:`The constant index ${a} is outside ${o.name}'s valid range 0–${i-1}, which is a GLSL compile error or undefined access`})}}}})},M5=x({id:`three-shader-no-constant-out-of-bounds-index`,title:`Shader uses a constant out-of-bounds index`,category:`Correctness`,severity:`error`,recommendation:`Keep constant array, vector, and matrix indices within their declared bounds`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&TVt(n.fragmentShader,e),n.vertexShader&&TVt(n.vertexShader,e))}})}),EVt=new Set([`gl_FragCoord`,`gl_FrontFacing`,`gl_HelperInvocation`,`gl_Layer`,`gl_PointCoord`,`gl_PrimitiveID`,`gl_SampleID`,`gl_SampleMaskIn`,`gl_SamplePosition`,`gl_ViewportIndex`]),DVt=(e,t)=>{let n=!1;return Hn(e,{identifier:{enter:e=>{n||e.parent?.type===`field_selection`||e.parent?.type===`function_call`&&e.key===`identifier`||e.parent?.type===`type_specifier`||(n=t.has(e.node)||EVt.has(e.node.identifier))}}}),n},OVt=new Set([`dFdx`,`dFdy`,`fwidth`]),kVt=new Set([`texture`,`texture2D`,`texture2DProj`,`texture3D`,`texture3DProj`,`textureCube`,`textureOffset`,`textureProj`,`textureProjOffset`]),AVt=e=>{let t=[],n=e;for(;n?.parentPath;){let e=n.parentPath,r=e.node;if(r.type===`function`)break;let i=r.type===`if_statement`?Reflect.get(r,`else`):null,a=n.key===`else`||Array.isArray(i)&&i.includes(n.node);r.type===`if_statement`&&(n.key===`body`||a)&&t.push(r.condition),r.type===`while_statement`&&n.key===`body`&&t.push(r.condition),r.type===`do_statement`&&n.key===`body`&&t.push(r.expression),r.type===`for_statement`&&n.key===`body`&&r.condition&&t.push(...[r.init,r.condition,r.operation].filter(Boolean)),r.type===`ternary`&&(n.key===`left`||n.key===`right`)&&t.push(r.expression),r.type===`binary`&&n.key===`right`&&(r.operator.literal===`&&`||r.operator.literal===`||`)&&t.push(r.left),r.type===`switch_statement`&&n.key===`cases`&&t.push(r.expression),n=e}return t},jVt=(e,t)=>{let n=e.program.scopes[0]?.bindings,r=new Set;for(let t of p5(e.program)){if(!t.qualifiers.has(`in`)&&!t.qualifiers.has(`varying`))continue;let e=n?.[t.name];if(e)for(let t of e.references)t!==e.declaration&&r.add(t)}Hn(e.program,{function_call:{enter:n=>{let i=m5(n.node);!i||!OVt.has(i)&&!kVt.has(i)||g5(e.source.text,i)||h5(e.program,i)||AVt(n).some(e=>DVt(e,r))&&t.report({node:e.source.getOriginNodeAtOffset(n.node.location?.start.offset??0),message:`${i} executes only on fragment-input-dependent lanes, so implicit derivatives are undefined. Move it before the divergent branch or use explicit gradients`})}}})},N5=x({id:`three-shader-no-derivatives-in-nonuniform-flow`,title:`Shader derivative runs in non-uniform control flow`,category:`Correctness`,severity:`error`,recommendation:`Evaluate derivatives and implicit-LOD texture samples before fragment-input-dependent branches`,create:e=>({NewExpression(t){let n=u5(t,e);n?.fragmentShader&&jVt(n.fragmentShader,e)}})}),P5=e=>e.args.filter(e=>e.type!==`literal`||e.literal!==`,`),MVt=(e,t)=>{g5(e.source.text,`clamp`)||h5(e.program,`clamp`)||Hn(e.program,{function_call:{enter:({node:n})=>{if(m5(n)!==`clamp`)return;let r=P5(n);if(r.length!==3)return;let i=f5(r[1]),a=f5(r[2]);i===null||a===null||i<=a||t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:`GLSL clamp requires minVal not to exceed maxVal, but this call uses ${i} and ${a}, so its result is undefined`})}}})},F5=x({id:`three-shader-no-invalid-clamp-bounds`,title:`Shader uses invalid clamp bounds`,category:`Correctness`,severity:`error`,recommendation:`Keep clamp minVal less than or equal to maxVal`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&MVt(n.fragmentShader,e),n.vertexShader&&MVt(n.vertexShader,e))}})}),NVt=(e,t)=>{let n=m5(e);if(n!==`bitfieldExtract`&&n!==`bitfieldInsert`||g5(t.source.text,n)||h5(t.program,n))return null;let r=P5(e),i=n===`bitfieldExtract`?1:2,a=i+1,o=r[i]?f5(r[i]):null,s=r[a]?f5(r[a]):null;return o===null||s===null||o>=0&&s>=0&&o+s<=32?null:`GLSL ${n} uses offset ${o} and width ${s}, outside a 32-bit integer`},PVt=(e,t,n,r)=>{let i=f5(e);i===null||i>=0&&i<32||r.report({node:n.source.getOriginNodeAtOffset(t??0),message:`GLSL shift count ${i} is outside the valid range 0–31`})},FVt=(e,t)=>{Hn(e.program,{binary:{enter:({node:n})=>{n.operator.literal!==`<<`&&n.operator.literal!==`>>`||PVt(n.right,n.location?.start.offset,e,t)}},assignment:{enter:({node:n})=>{let r=String(n.operator.literal);r!==`<<=`&&r!==`>>=`||PVt(n.right,n.location?.start.offset,e,t)}},function_call:{enter:({node:n})=>{let r=NVt(n,e);r&&t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:r})}}})},I5=x({id:`three-shader-no-invalid-constant-bit-operations`,title:`Shader uses invalid constant bit operations`,category:`Correctness`,severity:`error`,recommendation:`Keep shift counts and bitfield ranges within the integer bit width`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&FVt(n.fragmentShader,e),n.vertexShader&&FVt(n.vertexShader,e))}})}),IVt=new Set([`inversesqrt`,`log`,`log2`]),LVt=(e,t)=>{let n=m5(e);if(!n||g5(t.source.text,n)||h5(t.program,n))return null;let r=P5(e),i=r[0];if(!i)return null;let a=f5(i);if(n===`asin`||n===`acos`)return a!==null&&Math.abs(a)>1?`GLSL ${n} is undefined outside the range -1 to 1, but received ${a}`:null;if(n===`atan`&&r.length===2){let e=f5(r[1]);return a===0&&e===0?`GLSL atan is undefined when both arguments are zero`:null}if(n===`acosh`)return a!==null&&a<1?`GLSL acosh is undefined below 1, but received ${a}`:null;if(n===`atanh`)return a!==null&&Math.abs(a)>=1?`GLSL atanh is undefined outside the range -1 to 1, but received ${a}`:null;if(n===`ldexp`&&r.length===2){let e=f5(r[1]);return e!==null&&e>128?`GLSL ldexp is undefined above exponent 128, but received ${e}`:null}if(n===`pow`){if(a!==null&&a<0)return`GLSL pow is undefined for the negative base ${a}`;let e=r[1]?f5(r[1]):null;return a===0&&e!==null&&e<=0?`GLSL pow is undefined for a zero base and the nonpositive exponent ${e}`:null}return n===`sqrt`?a!==null&&a<0?`GLSL sqrt is undefined for the negative argument ${a}`:null:IVt.has(n)?a!==null&&a<=0?`GLSL ${n} is undefined for the nonpositive argument ${a}`:null:n!==`mod`||r.length!==2?null:f5(r[1])===0?`GLSL mod is undefined with a zero divisor`:null},RVt=(e,t,n,r,i)=>{f5(t)===0&&i.report({node:r.source.getOriginNodeAtOffset(n??0),message:`GLSL ${e.startsWith(`/`)?`division`:`remainder`} by a constant zero has undefined results`})},zVt=(e,t)=>{Hn(e.program,{binary:{enter:({node:n})=>{n.operator.literal!==`/`&&n.operator.literal!==`%`||RVt(n.operator.literal,n.right,n.location?.start.offset,e,t)}},assignment:{enter:({node:n})=>{n.operator.literal!==`/=`&&n.operator.literal!==`%=`||RVt(n.operator.literal,n.right,n.location?.start.offset,e,t)}},function_call:{enter:({node:n})=>{let r=LVt(n,e);r&&t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:r})}}})},L5=x({id:`three-shader-no-invalid-constant-math`,title:`Shader uses invalid constant math`,category:`Correctness`,severity:`error`,recommendation:`Keep constant arguments within the defined GLSL builtin and operator domains`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&zVt(n.fragmentShader,e),n.vertexShader&&zVt(n.vertexShader,e))}})}),BVt=(e,t)=>{g5(e.source.text,`smoothstep`)||h5(e.program,`smoothstep`)||Hn(e.program,{function_call:{enter:({node:n})=>{if(m5(n)!==`smoothstep`)return;let r=P5(n);if(r.length!==3)return;let i=f5(r[0]),a=f5(r[1]);if(i===null||a===null||i<a)return;let o=n.location?.start.offset??0;t.report({node:e.source.getOriginNodeAtOffset(o),message:`GLSL smoothstep requires edge0 to be less than edge1, but this call uses ${i} and ${a}, so its result is undefined`})}}})},R5=x({id:`three-shader-no-invalid-smoothstep-edges`,title:`Shader uses invalid smoothstep edges`,category:`Correctness`,severity:`error`,recommendation:`Keep smoothstep edge0 below edge1 and invert the result when a descending transition is needed`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&BVt(n.fragmentShader,e),n.vertexShader&&BVt(n.vertexShader,e))}})}),VVt=(e,t)=>{if(g5(e.source.text,`inverse`)||h5(e.program,`inverse`))return;let n=e.program.scopes[0]?.bindings,r=new Set(p5(e.program).filter(e=>e.qualifiers.has(`uniform`)).flatMap(e=>n?.[e.name]?.references??[]));Hn(e.program,{function_call:{enter:({node:n})=>{if(m5(n)!==`inverse`)return;let i=P5(n),a=i[0];i.length!==1||a?.type!==`identifier`||!r.has(a)||t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:`The matrix ${a.identifier} is uniform across this draw, but inverse recomputes it for every shader invocation. Compute and bind the inverse matrix on the CPU`})}}})},z5=x({id:`three-shader-no-inverse-of-uniform`,title:`Shader inverts a uniform matrix per invocation`,category:`Performance`,severity:`warn`,recommendation:`Compute uniform matrix inverses once on the CPU and upload the result`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&VVt(n.fragmentShader,e),n.vertexShader&&VVt(n.vertexShader,e))}})}),HVt=(e,t,n)=>{for(let r of p5(e.program))t.has(r.name)&&n.report({node:e.source.getOriginNodeAtOffset(r.node.location?.start.offset??0),message:`ShaderMaterial already injects ${r.name} into the ${e.stage} shader, so this declaration collides with Three.js's generated prefix`})},B5=x({id:`three-shader-no-redeclared-builtins`,title:`ShaderMaterial redeclares a Three.js builtin`,category:`Correctness`,severity:`error`,recommendation:`Use ShaderMaterial built-in attributes and uniforms without redeclaring them`,create:e=>({NewExpression(t){let n=u5(t,e);n?.constructorName===`ShaderMaterial`&&(n.vertexShader&&HVt(n.vertexShader,uvt,e),n.fragmentShader&&HVt(n.fragmentShader,lvt,e))}})}),UVt=new Set([`gl_FragDepth`,`gl_FragDepthEXT`]),WVt=new Set([`do_statement`,`for_statement`,`if_statement`,`switch_statement`,`ternary`,`while_statement`]),GVt=e=>e.operator.literal!==`=`||e.left.type!==`identifier`||!UVt.has(e.left.identifier)||e.right.type!==`postfix`||e.right.expression.type!==`identifier`||e.right.expression.identifier!==`gl_FragCoord`||e.right.postfix.type!==`field_selection`?!1:Reflect.get(e.right.postfix.selection,`identifier`)===`z`,KVt=e=>{let t=e.parentPath;for(;t;){if(WVt.has(t.node.type))return!1;if(t.node.type===`binary`){let e=t.node.operator.literal;if(e===`&&`||e===`||`)return!1}if(t.node.type===`function`)return t.node.prototype.header.name.identifier===`main`;t=t.parentPath}return!1},qVt=(e,t)=>{let n=[];if(Hn(e.program,{assignment:{enter:e=>{e.node.left.type===`identifier`&&UVt.has(e.node.left.identifier)&&n.push(e)}}}),n.length!==1||!GVt(n[0].node)||!KVt(n[0]))return;let r=n[0].node;t.report({node:e.source.getOriginNodeAtOffset(r.location?.start.offset??0),message:`This shader unconditionally writes the fixed-function depth value back to gl_FragDepth. Remove the redundant write so early depth testing remains available`})},V5=x({id:`three-shader-no-redundant-frag-depth`,title:`Shader redundantly writes fragment depth`,category:`Performance`,severity:`warn`,recommendation:`Let fixed-function depth supply gl_FragCoord.z when depth is unchanged`,create:e=>({NewExpression(t){let n=u5(t,e);n?.fragmentShader&&qVt(n.fragmentShader,e)}})}),JVt=/^[ \t]*#[ \t]*version\b/m,YVt=(e,t)=>{let n=c5(e.source.text).search(JVt);n<0||t.report({node:e.source.getOriginNodeAtOffset(n),message:`Three.js prepends its own shader prefix before custom source, so an inline #version directive is not first and cannot compile. Set the material glslVersion property instead`})},H5=x({id:`three-shader-no-version-directive`,title:`Three shader source contains a version directive`,category:`Correctness`,severity:`error`,recommendation:`Set glslVersion on the material instead of writing #version in shader source`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&YVt(n.fragmentShader,e),n.vertexShader&&YVt(n.vertexShader,e))}})}),XVt=new Set([2,3,4]),ZVt=(e,t)=>{g5(e.source.text,`pow`)||h5(e.program,`pow`)||Hn(e.program,{function_call:{enter:({node:n})=>{if(m5(n)!==`pow`)return;let r=P5(n);if(r.length!==2)return;let i=f5(r[1]);i===null||!XVt.has(i)||t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:`This pow call has the small integer exponent ${i}. Explicit multiplication avoids a general exponentiation operation and makes the intended cost clear`})}}})},U5=x({id:`three-shader-prefer-small-integer-pow`,title:`Shader uses pow for a small integer exponent`,category:`Performance`,severity:`warn`,recommendation:`Use explicit multiplication for powers of two, three, or four`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&ZVt(n.fragmentShader,e),n.vertexShader&&ZVt(n.vertexShader,e))}})}),QVt=new Set([`distance`,`length`]),$Vt=new Set([`<`,`<=`,`>`,`>=`]),W5=e=>e.type===`group`?W5(e.expression):e.type===`function_call`&&QVt.has(m5(e)??``)?e:null,eHt=(e,t)=>{let n=W5(e),r=f5(t);if(n&&r!==null&&r>=0)return{functionCall:n,threshold:r};let i=W5(t),a=f5(e);return i&&a!==null&&a>=0?{functionCall:i,threshold:a}:null},tHt=(e,t)=>{Hn(e.program,{binary:{enter:({node:n})=>{if(!$Vt.has(n.operator.literal))return;let r=eHt(n.left,n.right);if(!r)return;let i=m5(r.functionCall);!i||g5(e.source.text,i)||h5(e.program,i)||t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:`Compare squared ${i===`length`?`length using dot(v, v)`:`distance using dot(a - b, a - b)`} against ${r.threshold*r.threshold} to avoid computing a square root`})}}})},G5=x({id:`three-shader-prefer-squared-distance-comparison`,title:`Shader compares a computed distance`,category:`Performance`,severity:`warn`,recommendation:`Compare squared vector distance against a squared nonnegative threshold`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&tHt(n.fragmentShader,e),n.vertexShader&&tHt(n.vertexShader,e))}})}),nHt=(e,t)=>e===null!=(t===null)||typeof e==`number`&&typeof t==`number`&&e!==t,rHt=[`highp`,`mediump`,`lowp`],iHt=e=>rHt.find(t=>e.qualifiers.has(t))??null,aHt=(e,t)=>{if(e.typeName!==t.typeName)return`type ${e.typeName} in the vertex shader and ${t.typeName} in the fragment shader`;if(nHt(e.arraySize,t.arraySize))return`different array dimensions`;let n=iHt(e),r=iHt(t);return n===null||r===null||n===r?null:`precision ${n} in the vertex shader and ${r} in the fragment shader`},oHt=e=>new Map(e.filter(e=>e.qualifiers.has(`uniform`)&&e.isStaticallyUsed).map(e=>[e.name,e])),K5=x({id:`three-shader-require-matching-uniforms`,title:`Shader stages declare incompatible uniforms`,category:`Correctness`,severity:`error`,recommendation:`Use the same type, array dimensions, and precision for uniforms shared by both shader stages`,create:e=>({NewExpression(t){let n=u5(t,e);if(!n?.vertexShader||!n.fragmentShader)return;let r=oHt(p5(n.vertexShader.program)),i=oHt(p5(n.fragmentShader.program));for(let[t,a]of i){let i=r.get(t);if(!i)continue;let o=aHt(i,a);o&&e.report({node:n.fragmentShader.source.getOriginNodeAtOffset(a.node.location?.start.offset??0),message:`Uniform ${t} has ${o}, so the shader stages cannot link consistently`})}}})}),sHt=e=>e.qualifiers.has(`out`)||e.qualifiers.has(`varying`),cHt=e=>e.qualifiers.has(`in`)||e.qualifiers.has(`varying`),lHt=(e,t)=>e.typeName===t.typeName?nHt(e.arraySize,t.arraySize)?`different array dimensions`:e.interpolation===t.interpolation?null:`interpolation ${e.interpolation} in the vertex shader but ${t.interpolation} in the fragment shader`:`type ${e.typeName} in the vertex shader but ${t.typeName} in the fragment shader`,q5=x({id:`three-shader-require-matching-varyings`,title:`Shader stage interface does not match`,category:`Correctness`,severity:`error`,recommendation:`Declare every statically used fragment input as a compatible vertex output with the same name`,create:e=>({NewExpression(t){let n=u5(t,e);if(!n?.vertexShader||!n.fragmentShader)return;let r=new Map(p5(n.vertexShader.program).filter(sHt).map(e=>[e.name,e])),i=p5(n.fragmentShader.program).filter(e=>cHt(e)&&e.isStaticallyUsed&&!e.name.startsWith(`gl_`)&&!e.hasLayoutQualifier);for(let t of i){let i=r.get(t.name),a=i?lHt(i,t):`no matching vertex output`;a&&e.report({node:n.fragmentShader.source.getOriginNodeAtOffset(t.node.location?.start.offset??0),message:`Fragment input ${t.name} has ${a}, so the shader program cannot link with a defined value`})}}})}),uHt=e=>{let t=0;for(let n of e){let e=ovt.get(n);if(!e)return 0;t|=e}return t},J5=e=>{if(e.type===`assignment`&&e.operator.literal===`=`){if(e.left.type===`identifier`&&e.left.identifier===`gl_Position`)return 15;if(e.left.type===`postfix`&&e.left.expression.type===`identifier`&&e.left.expression.identifier===`gl_Position`&&e.left.postfix.type===`field_selection`){let t=Reflect.get(e.left.postfix.selection,`identifier`);return typeof t==`string`?uHt(t):0}}return e.type===`binary`&&e.operator.literal===`,`?J5(e.left)|J5(e.right):e.type===`group`?J5(e.expression):e.type===`ternary`?J5(e.left)&J5(e.right):0},Y5=e=>{let t=!1;return Hn(e,{assignment:{enter:({node:e})=>{J5(e)!==0&&(t=!0)}}}),t},dHt=e=>e.type===`bool_constant`?e.token===`true`:null,fHt=(e,t)=>{let n=t,r=!1;for(let t of e.statements){if(n.size===0)break;let e=X5(t,n);if(!e.isSupported)return e;n=e.activeStates,r||=e.hasUnwrittenReturn}return{activeStates:n,hasUnwrittenReturn:r,isSupported:!0}},X5=(e,t)=>{if(e.type===`compound_statement`)return fHt(e,t);if(e.type===`expression_statement`){let n=J5(e.expression);return n===0&&Y5(e.expression)?{activeStates:t,hasUnwrittenReturn:!1,isSupported:!1}:{activeStates:n===0?t:new Set([...t].map(e=>e|n)),hasUnwrittenReturn:!1,isSupported:!0}}if(e.type===`return_statement`)return{activeStates:new Set,hasUnwrittenReturn:[...t].some(e=>e!==15),isSupported:!0};if(e.type===`if_statement`){if(Y5(e.condition))return{activeStates:t,hasUnwrittenReturn:!1,isSupported:!1};let n=dHt(e.condition),r=X5(e.body,t);if(!r.isSupported)return r;let i=Reflect.get(e,`else`),a=Array.isArray(i)?i[i.length-1]:void 0,o=a?X5(a,t):{activeStates:t,hasUnwrittenReturn:!1,isSupported:!0};return o.isSupported?n===null?{activeStates:new Set([...r.activeStates,...o.activeStates]),hasUnwrittenReturn:r.hasUnwrittenReturn||o.hasUnwrittenReturn,isSupported:!0}:n?r:o:o}if(e.type===`for_statement`||e.type===`while_statement`){let n=e.type===`for_statement`?[Reflect.get(e,`init`),Reflect.get(e,`condition`),Reflect.get(e,`operation`)]:[e.condition];if(n.some(e=>!e)||n.some(Y5))return{activeStates:t,hasUnwrittenReturn:!1,isSupported:!1};let r=X5(e.body,t);return{activeStates:t,hasUnwrittenReturn:r.hasUnwrittenReturn,isSupported:r.isSupported}}return e.type===`declaration_statement`&&Y5(e.declaration)||e.type===`do_statement`||e.type===`switch_statement`||e.type===`break_statement`||e.type===`continue_statement`?{activeStates:t,hasUnwrittenReturn:!1,isSupported:!1}:{activeStates:t,hasUnwrittenReturn:!1,isSupported:!0}},pHt=(e,t)=>{let n=!1;return Hn(e.body,{function_call:{enter:({node:e})=>{let r=m5(e);r&&h5(t,r)&&(n=!0)}}}),n},mHt=(e,t)=>{let n=e.program.find(e=>e.type===`function`&&e.prototype.header.name.identifier===`main`)??null;if(!n||/^[ \t]*#[ \t]*define\b/m.test(c5(t))||pHt(n,e))return{mainFunction:n,writesPositionOnAllPaths:null};let r=fHt(n.body,new Set([0]));return r.isSupported?{mainFunction:n,writesPositionOnAllPaths:!r.hasUnwrittenReturn&&[...r.activeStates].every(e=>e===15)}:{mainFunction:n,writesPositionOnAllPaths:null}},Z5=x({id:`three-shader-require-position-on-all-paths`,title:`Vertex shader leaves gl_Position undefined`,category:`Correctness`,severity:`error`,recommendation:`Assign gl_Position before every return and on every path through main`,create:e=>({NewExpression(t){let n=u5(t,e);if(!n?.vertexShader)return;let r=mHt(n.vertexShader.program,n.vertexShader.source.text);!r.mainFunction||r.writesPositionOnAllPaths!==!1||e.report({node:n.vertexShader.source.getOriginNodeAtOffset(r.mainFunction.location?.start.offset??0),message:`At least one path through vertex main returns or falls through without assigning gl_Position, leaving the clip-space position undefined`})}})}),hHt=e=>{let t=new Set;for(let n=e.properties.length-1;n>=0;--n){let r=e.properties[n];if(!r||T(r,`SpreadElement`))return null;if(!T(r,`Property`))continue;let i=S(r,{allowComputedString:!0});if(!i)return null;t.add(i)}return t},gHt=new Map([[`ambientLightColor`,`lights`],[`bindMatrix`,`skinning`],[`bindMatrixInverse`,`skinning`],[`boneTexture`,`skinning`],[`boneTextureSize`,`skinning`],[`clippingPlanes`,`clipping`],[`directionalLights`,`lights`],[`directionalLightShadows`,`lights`],[`directionalShadowMap`,`lights`],[`directionalShadowMatrix`,`lights`],[`fogColor`,`fog`],[`fogDensity`,`fog`],[`fogFar`,`fog`],[`fogNear`,`fog`],[`hemisphereLights`,`lights`],[`lightProbe`,`lights`],[`ltc_1`,`lights`],[`ltc_2`,`lights`],[`morphTargetBaseInfluence`,`morphTargets`],[`morphTargetInfluences`,`morphTargets`],[`morphTargetsTexture`,`morphTargets`],[`morphTargetsTextureSize`,`morphTargets`],[`pointLights`,`lights`],[`pointLightShadows`,`lights`],[`pointShadowMap`,`lights`],[`pointShadowMatrix`,`lights`],[`probesMax`,`lights`],[`probesMin`,`lights`],[`probesResolution`,`lights`],[`probesSH`,`lights`],[`receiveShadow`,`lights`],[`rectAreaLights`,`lights`],[`spotLightMap`,`lights`],[`spotLightMatrix`,`lights`],[`spotLights`,`lights`],[`spotLightShadows`,`lights`],[`spotShadowMap`,`lights`],[`transmissionSamplerMap`,`transmission`],[`transmissionSamplerSize`,`transmission`]]),_Ht=(e,t)=>{if(t.constructorName!==`ShaderMaterial`||!cvt.has(e))return!1;let n=gHt.get(e);if(!n)return!0;let r=t.properties.get(n);return r!==void 0&&gn(r)!==!1},vHt=(e,t)=>e.qualifiers.has(`uniform`)&&e.isStaticallyUsed&&!e.name.startsWith(`gl_`)&&!_Ht(e.name,t),Q5=x({id:`three-shader-require-uniform-bindings`,title:`Shader uniform has no material binding`,category:`Correctness`,severity:`error`,recommendation:`Add every custom GLSL uniform to the ShaderMaterial uniforms object with a compatible value`,create:e=>({NewExpression(t){let n=u5(t,e);if(!n)return;let r=new Map;for(let e of[n.vertexShader,n.fragmentShader])if(e)for(let t of p5(e.program))vHt(t,n)&&!r.has(t.name)&&r.set(t.name,{declaration:t,shader:e});if(r.size===0)return;let i=[...r.keys()],a=n.properties.get(`uniforms`),o;if(!a)o=new Set;else{let t=Va(a,i,e.scopes,n.constructorNode);if(!t||!T(t,`ObjectExpression`))return;let r=hHt(t);if(!r)return;o=r}for(let[t,n]of r)o.has(t)||e.report({node:n.shader.source.getOriginNodeAtOffset(n.declaration.node.location?.start.offset??0),message:`GLSL uniform ${t} has no matching entry in this material's uniforms object, so it keeps its default value`})}})}),yHt=new Set([`three/tsl`,`three/webgpu`]),bHt=(e,t,n=new Set)=>{let r=!1;return A(e,e=>{if(r)return!1;if(T(e,`MemberExpression`)&&C(e)===`value`&&T4(e.object,t))return r=!0,!1;if(!T(e,`Identifier`))return;let i=t.symbolFor(e);if(!(i?.kind!==`const`||!i.initializer||n.has(i.id)||i.references.some(e=>e.flag!==`read`))&&(n.add(i.id),bHt(i.initializer,t,n)))return r=!0,!1}),r},$5=x({id:`three-tsl-no-js-uniform-branch`,title:`JavaScript branch reads a TSL uniform value`,category:`Correctness`,severity:`warn`,recommendation:`Express uniform-dependent shader control flow with TSL If, select, or Loop nodes so it runs on the GPU`,create:e=>({CallExpression(t){if(!Q1(t,`Fn`,yHt,e.scopes))return;let n=t.arguments[0];if(!n||T(n,`SpreadElement`))return;let r=M(n,e.scopes);if(!y(r))return;let i=new Set;l0(r,e.scopes,t=>{let n=dSt(t);if(!(!n||!bHt(n,e.scopes))){for(let e of i)if(z(n,e))return;i.add(n),e.report({node:n,message:`This JavaScript branch reads a TSL uniform while the shader graph is built, so later uniform changes cannot change the branch. Use TSL control flow`})}})}})}),xHt=(e,t)=>{let n=!1;return A(e,e=>{if(!n&&T(e,`NewExpression`)&&H8(e,t)===`WebGPURenderer`)return n=!0,!1}),n},e7=x({id:`three-webgpu-no-legacy-effect-composer`,title:`Legacy EffectComposer used with WebGPURenderer`,category:`Correctness`,severity:`error`,recommendation:`Use WebGPURenderer's node-based post-processing pipeline instead of the legacy WebGL EffectComposer`,create:e=>{let t=!1;return{Program(n){t=xHt(n,e.scopes)},NewExpression(n){!t||H8(n,e.scopes)!==`EffectComposer`||e.report({node:n,message:`Legacy EffectComposer does not support Three.js WebGPURenderer. Build post-processing with the renderer's node-based pipeline`})}}}}),SHt=new Set([`RawShaderMaterial`,`ShaderMaterial`]),t7=x({id:`three-webgpu-no-legacy-material-api`,title:`Legacy material API used with WebGPURenderer`,category:`Correctness`,severity:`error`,recommendation:`Use Three.js node materials and TSL for custom shaders rendered by WebGPURenderer`,create:e=>{let t=!1;return{Program(n){t=xHt(n,e.scopes)},NewExpression(n){let r=H8(n,e.scopes);!t||!r||SHt.has(r)&&e.report({node:n,message:`ShaderMaterial and RawShaderMaterial are not supported by Three.js WebGPURenderer. Build this shader with a node material and TSL`})},AssignmentExpression(n){!t||!T(n.left,`MemberExpression`)||C(n.left)!==`onBeforeCompile`||H8(n.left.object,e.scopes)?.endsWith(`Material`)&&e.report({node:n,message:`onBeforeCompile patches WebGL shader source and is not supported by Three.js WebGPURenderer. Use a node material and TSL`})}}}}),CHt=x({id:`use-lazy-motion`,title:`Full Framer Motion import`,tags:[`test-noise`],severity:`warn`,recommendation:'Use `import { LazyMotion, m } from "framer-motion"` with `domAnimation` features. Saves about 30kb.',create:e=>({ImportDeclaration(t){let n=t.source?.value;n!==`framer-motion`&&n!==`motion/react`||cn(t)||t.specifiers?.some(e=>!T(e,`ImportSpecifier`)||e.importKind===`type`?!1:kt(e)===`motion`)&&e.report({node:t,message:`Importing "motion" ships about 30 kb of extra code and slows page load. Use "m" with LazyMotion instead.`})}})}),wHt=new Set([`valtio`,`valtio/react`]),THt=[...wHt],EHt=new Set([`useCallback`,`useEffect`,`useInsertionEffect`,`useLayoutEffect`,`useMemo`]),DHt=e=>{if(e.kind!==`import`)return!1;let t=e.declarationNode.parent;return!!(t&&T(t,`ImportDeclaration`)&&typeof t.source.value==`string`&&wHt.has(t.source.value))},OHt=(e,t)=>{if(!T(e,`CallExpression`))return!1;let n=D(e.callee);if(T(n,`Identifier`)){let e=w(n,t);return!!(e&&DHt(e)&&kt(e.declarationNode)===`useSnapshot`)}if(!T(n,`MemberExpression`)||C(n)!==`useSnapshot`)return!1;let r=D(n.object);if(!T(r,`Identifier`))return!1;let i=w(r,t);return!!(i&&DHt(i)&&T(i.declarationNode,`ImportNamespaceSpecifier`))},n7=e=>T(e,`Identifier`)?[e]:T(e,`AssignmentPattern`)?n7(e.left):T(e,`RestElement`)?n7(e.argument):T(e,`ArrayPattern`)?e.elements.flatMap(e=>e?n7(e):[]):T(e,`ObjectPattern`)?e.properties.flatMap(e=>T(e,`Property`)?n7(e.value):T(e,`RestElement`)?n7(e.argument):[]):[],r7=e=>{let t=D(e);return T(t,`AssignmentPattern`)?r7(t.left):T(t,`RestElement`)?r7(t.argument):T(t,`ArrayPattern`)?t.elements.flatMap(e=>e?r7(e):[]):T(t,`ObjectPattern`)?t.properties.flatMap(e=>T(e,`Property`)?r7(e.value):r7(e.argument)):[t]},i7=(e,t)=>{if(e===t)return[];if(T(e,`AssignmentPattern`))return i7(e.left,t);if(T(e,`RestElement`))return null;if(T(e,`ArrayPattern`)){for(let[n,r]of e.elements.entries()){if(!r)continue;let e=i7(r,t);if(e)return[String(n),...e]}return null}if(!T(e,`ObjectPattern`))return null;for(let n of e.properties){if(!T(n,`Property`))continue;let e=i7(n.value,t);if(!e)continue;let r=S(n);return r===null?null:[r,...e]}return null},a7=(e,t,n=new Set,r=null,i=null)=>{let a=D(e);if(T(a,`MemberExpression`)){let e=a7(a.object,t,n,r,i);return e?{...e,properties:[...e.properties,C(a)]}:null}if(!T(a,`Identifier`))return null;let o=t.symbolFor(a);if(!o)return t.isGlobalReference(a)?{rootKey:`global:${a.name}`,properties:[]}:null;if(n.has(o.id))return null;if(o.kind===`const`&&o.initializer&&T(o.declarationNode,`VariableDeclarator`)){let e=o.declarationNode.id===o.bindingIdentifier,a=e?o.initializer:o.declarationNode.init;if(!a)return{rootKey:`symbol:${o.id}`,properties:[]};let s=D(a),c=e&&(T(s,`Identifier`)||T(s,`MemberExpression`)),l=e?null:i7(o.declarationNode.id,o.bindingIdentifier);if((c||l)&&(r===null||r.has(o.id))){let e=new Set(n);e.add(o.id);let a=a7(s,t,e,r,i);if(a){let e={...a,properties:[...a.properties,...l??[]]},t=o.declarationNode.range?.[1];return typeof t==`number`&&i?.set(o.id,{declarationEnd:t,path:e}),e}}}return{rootKey:`symbol:${o.id}`,properties:[]}},kHt=(e,t)=>{let n=e;for(;n;){if(n===t)return!0;n=n.parent}return!1},o7=(e,t)=>e.rootKey!==t.rootKey||e.properties.length>t.properties.length?!1:e.properties.every((e,n)=>e!==null&&e===t.properties[n]),AHt=e=>{let t=v(e);for(;;){let e=t.parent;if(!T(e,`MemberExpression`)||D(e.object)!==D(t))return t;t=v(e)}},jHt=e=>{let t=e,n=t.parent;for(;n;){if(T(n,`MemberExpression`)&&n.computed&&n.property===t||T(n,`Property`)&&n.computed&&n.key===t||T(n,`AssignmentPattern`)&&n.right===t)return!0;if(T(n,`AssignmentExpression`)||T(n,`UpdateExpression`)||T(n,`UnaryExpression`)&&n.operator===`delete`||T(n,`ForInStatement`)||T(n,`ForOfStatement`))return!1;t=n,n=t.parent}return!1},MHt=(e,t)=>{let n=v(e),r=n.parent;return!!(r&&T(r,`CallExpression`)&&OHt(r,t)&&r.arguments[0]===n)},NHt=(e,t,n,r)=>{if(t.properties.length!==n.path.properties.length||!o7(n.path,t))return!1;let i=v(e).parent;if(!T(i,`ArrayExpression`))return!1;let a=i.parent;return!!(T(a,`CallExpression`)&&a.arguments[1]===i&&k(a,EHt,r,{allowGlobalReactNamespace:!0}))},PHt=(e,t)=>{if(!OHt(e,t.scopes))return null;let n=e.arguments[0];if(!n||T(n,`SpreadElement`))return null;let r=a7(n,t.scopes);if(!r||r.properties.some(e=>e===null))return null;let i=v(e),a=i.parent;if(!T(a,`VariableDeclarator`)||a.init!==i||!T(a.parent,`VariableDeclaration`))return null;let o=X(e,t.scopes);if(!o)return null;let s=n7(a.id).flatMap(e=>{let n=t.scopes.symbolFor(e);return n?[n.scope]:[]}),c=a.range?.[1];return s.length===0||typeof c!=`number`?null:{declarationEnd:c,ownerFunction:o,path:r,snapshotBindingScopes:s}},FHt=(e,t,n,r,i)=>n.some(n=>{let a=v(n).parent,o=a?.range?.[0];if(!a||typeof o!=`number`||o<=e.declarationEnd||o>=t||X(a,i.scopes)!==e.ownerFunction)return!1;let s=a7(n,i.scopes,new Set,null);return!s||!o7(s,e.path)?!1:![...r.values()].some(e=>e.declarationEnd<o&&o7(s,e.path))}),IHt=e=>{let t=[],n=[],r=[];return{CallExpression(n){let r=PHt(n,e);r&&t.push(r)},Identifier(t){e.scopes.referenceFor(t)&&n.push(t)},AssignmentExpression(e){r.push(...r7(e.left))},UpdateExpression(e){r.push(e.argument)},"Program:exit"(){let i=new Set;for(let a of n){let n=AHt(a);if(i.has(n)||Ru(n)&&!jHt(n)||MHt(n,e.scopes))continue;let o=new Map,s=a7(n,e.scopes,new Set,null,o),c=n.range?.[0],l=X(n,e.scopes);if(!s||typeof c!=`number`||!l)continue;let u=e.scopes.scopeFor(n),d=t.find(t=>t.ownerFunction===l&&t.declarationEnd<c&&t.snapshotBindingScopes.some(e=>kHt(u,e))&&o7(t.path,s)&&(o.size===0||[...o.values()].some(e=>o7(e.path,t.path)||o7(t.path,e.path)&&s.properties.length>e.path.properties.length))&&!FHt(t,c,r,o,e));!d||NHt(n,s,d,e.scopes)||(i.add(n),e.report({node:n,message:`Read this Valtio value from the useSnapshot result during render. Keep proxy reads for callbacks so render uses the tracked, consistent snapshot.`}))}}}},LHt=x({id:`valtio-no-proxy-read-in-render`,title:`Valtio proxy read during render`,severity:`warn`,recommendation:`Read reactive render values from useSnapshot. Reserve the mutable proxy for event handlers, effects, and other callbacks that need the latest value.`,requires:[`valtio:1`],create:e=>sb({createVisitors:()=>IHt(e),shouldAnalyzeProgram:e=>ye(e,THt)})}),RHt=new Set([`valtio`,`valtio/react`]),zHt=new Set([`useEffect`,`useInsertionEffect`,`useLayoutEffect`]),BHt=new Set([`catch`,`finally`,`then`]),VHt=new Set([`IntersectionObserver`,`MutationObserver`,`PerformanceObserver`,`ResizeObserver`]),HHt=e=>{let t=Ue(e)?.source.value;return typeof t==`string`&&RHt.has(t)},UHt=(e,t,n)=>{let r=D(e);if(!T(r,`Identifier`))return!1;let i=t.symbolFor(r);if(!i||n.has(i.id))return!1;if(i.kind===`import`&&T(i.declarationNode,`ImportNamespaceSpecifier`)&&HHt(i))return!0;let a=Os(i);return a?(n.add(i.id),UHt(a,t,n)):!1},WHt=(e,t,n=new Set)=>{let r=D(e);if(T(r,`Identifier`)){let e=t.symbolFor(r);if(!e||n.has(e.id))return!1;if(e.kind===`import`&&HHt(e)&&kt(e.declarationNode)===`useSnapshot`)return!0;let i=Os(e);return i?(n.add(e.id),WHt(i,t,n)):!1}return!T(r,`MemberExpression`)||C(r)!==`useSnapshot`?!1:UHt(r.object,t,n)},GHt=(e,t,n=new Set)=>{let r=D(e);if(T(r,`CallExpression`))return WHt(r.callee,t.scopes)?r:null;if(!T(r,`Identifier`))return null;let i=t.scopes.symbolFor(r);if(!i||n.has(i.id))return null;let a=Os(i);return a?(n.add(i.id),GHt(a,t,n)):null},KHt=e=>{let t=e.parent;if(!T(t,`JSXExpressionContainer`))return!1;let n=t.parent;return!!(T(n,`JSXAttribute`)&&T(n.name,`JSXIdentifier`)&&Pn.test(n.name.name))},qHt=(e,t)=>{let n=D(e.callee);if(T(n,`Identifier`)&&be.has(n.name))return t.scopes.isGlobalReference(n);if(!T(n,`MemberExpression`))return!1;let r=C(n);if(!r||!be.has(r))return!1;let i=D(n.object);return!!(T(i,`Identifier`)&&(i.name===`globalThis`||i.name===`window`)&&t.scopes.isGlobalReference(i))},JHt=(e,t)=>{let n=e.parent;if(T(n,`NewExpression`)){let r=D(n.callee);return!!(n.arguments?.[0]===e&&T(r,`Identifier`)&&VHt.has(r.name)&&t.scopes.isGlobalReference(r))}if(!T(n,`CallExpression`)||!(n.arguments??[]).some(t=>t===e))return!1;if(n.arguments?.[0]===e&&k(n,zHt,t.scopes,{allowGlobalReactNamespace:!0,resolveNamedAliases:!0})||n.arguments?.[0]===e&&qHt(n,t))return!0;let r=D(n.callee);if(!T(r,`MemberExpression`))return!1;let i=C(r);return!!(i&&(Qe.has(i)||BHt.has(i)))},YHt=(e,t)=>{let n=v(e),r=n.parent;return!!(T(r,`CallExpression`)&&r.arguments?.[0]===n&&k(r,zHt,t.scopes,{allowGlobalReactNamespace:!0,resolveNamedAliases:!0}))},XHt=(e,t,n)=>n.has(e.id)?!1:(n.add(e.id),e.references.some(e=>{let r=v(e.identifier);if(YHt(r,t))return!0;let i=eUt(r,t);return!!(i&&XHt(i,t,n))})),ZHt=(e,t)=>{if(YHt(e,t))return!0;let n=Xs(e),r=n?t.scopes.symbolFor(n):null;return!!(r&&XHt(r,t,new Set))},QHt=(e,t)=>{let n=v(e),r=n.parent;if(T(r,`ArrowFunctionExpression`)&&r.body===n)return ZHt(r,t);if(!T(r,`ReturnStatement`)||r.argument!==n)return!1;let i=b(r);return!!(i&&ZHt(i,t))},$Ht=(e,t)=>KHt(e)||JHt(e,t)||QHt(e,t),eUt=(e,t)=>{let n=v(e),r=n.parent;if(!T(r,`VariableDeclarator`)||r.init!==n||!T(r.id,`Identifier`))return null;let i=t.scopes.symbolFor(r.id);return i?.kind===`const`?i:null},tUt=e=>{let t=e.parent;return T(t,`CallExpression`)&&t.callee===e?t:null},nUt=(e,t)=>{if(!Tu(e,t.scopes))return null;let n=e.parent;return T(n,`CallExpression`)||T(n,`NewExpression`)?n:null},s7=(e,t,n,r)=>{let i=b(e);return!i||i===t?!1:iUt(i,t,n,r)},rUt=(e,t,n,r)=>r.has(e.id)?!1:(r.add(e.id),e.references.some(e=>{let i=v(e.identifier);if($Ht(i,n))return!0;let a=eUt(i,n);if(a&&rUt(a,t,n,r))return!0;let o=tUt(i);if(o)return s7(o,t,n,r);let s=nUt(i,n);return!!(s&&s7(s,t,n,r))})),iUt=(e,t,n,r)=>{let i=v(e);if($Ht(i,n))return!0;let a=nUt(i,n);if(a)return s7(a,t,n,r);let o=Xs(e);if(!o)return!1;let s=n.scopes.symbolFor(o);return!!(s&&rUt(s,t,n,r))},aUt=e=>{let t=v(e),n=t.parent;return!!(T(n,`VariableDeclarator`)&&n.init===t&&T(n.id,`Identifier`))},oUt=x({id:`valtio-no-snapshot-in-callback`,title:`Valtio snapshot read in a callback`,severity:`warn`,requires:[`valtio`,`valtio:1`],recommendation:"Read from the original Valtio proxy inside callbacks. `useSnapshot()` results are for render reads; callback reads can become tracked render dependencies and cause extra re-renders.",create:e=>({Identifier(t){let n=e.scopes.referenceFor(t);if(!n||n.flag===`write`)return;let r=GHt(t,e);if(!r||aUt(t))return;let i=b(r);if(!i)return;let a=b(t);!a||a===i||iUt(a,i,e,new Set)&&e.report({node:t,message:`This callback reads a Valtio snapshot. Read the original proxy instead so callback-only fields do not become tracked render dependencies.`})}})}),sUt=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`keygen`,`link`,`menuitem`,`meta`,`param`,`source`,`track`,`wbr`]),cUt=e=>`React errors when \`<${e}>\` has children because it's a void element.`,lUt=e=>{for(let t of e)if(T(t,`JSXAttribute`)&&T(t.name,`JSXIdentifier`)&&(t.name.name===`children`||t.name.name===`dangerouslySetInnerHTML`))return!0;return!1},uUt=x({id:`void-dom-elements-no-children`,title:`Children on a void element`,severity:`warn`,recommendation:`Remove the children or use a non-void tag so React does not drop content the element cannot render.`,create:e=>({JSXElement(t){let n=t.openingElement,r=j(n);if(!sUt.has(r))return;let i=t.children.some(QD),a=lUt(n.attributes);(i||a)&&e.report({node:n.name,message:cUt(r)})},CallExpression(t){if(!fa(t))return;let n=t.arguments[0];if(!n||!T(n,`Literal`)||typeof n.value!=`string`)return;let r=n.value;if(!sUt.has(r))return;let i=t.arguments[1],a=t.arguments.slice(2).filter(e=>!ea(e)),o=!1;if(i&&T(i,`ObjectExpression`))for(let e of i.properties){if(!T(e,`Property`))continue;let t=e.key;if(T(t,`Identifier`)&&(t.name===`children`||t.name===`dangerouslySetInnerHTML`)||T(t,`Literal`)&&(t.value===`children`||t.value===`dangerouslySetInnerHTML`)){o=!0;break}}(a.length>0||o)&&e.report({node:n,message:cUt(r)})}})}),dUt=x({id:`waapi-animation-in-render`,title:`Web Animation starts during render`,severity:`error`,category:`Correctness`,recommendation:`Start element.animate() from an effect or interaction handler so React renders stay pure.`,create:e=>({CallExpression(t){T(t.callee,`MemberExpression`)&&C(t.callee)===`animate`&&(!zs(t.callee.object,`dom-event-target`,e.scopes)||!X(t,e.scopes)||e.report({node:t,message:`This Web Animation starts during render, so React retries and re-renders can replay it. Move element.animate() to an effect or interaction handler.`}))}})}),fUt=e=>T(e,`Literal`)&&typeof e.value==`number`?e.value:T(e,`UnaryExpression`)&&e.operator===`-`&&T(e.argument,`Literal`)&&typeof e.argument.value==`number`?-e.argument.value:null,pUt=e=>{let t=[];for(let n of e.elements){if(!n||!T(n,`ObjectExpression`)||n.properties.some(e=>!T(e,`Property`)))return null;let e=G(n.properties,`offset`);if(!e||T(e.value,`Literal`)&&e.value.value===null)continue;let r=fUt(e.value);if(r===null)return null;t.push({node:e.value,value:r})}return t},mUt=e=>{if(e.properties.some(e=>!T(e,`Property`)))return null;let t=G(e.properties,`offset`);if(!t||!T(t.value,`ArrayExpression`))return null;let n=[];for(let e of t.value.elements){if(!e||T(e,`Literal`)&&e.value===null)continue;let t=fUt(e);if(t===null)return null;n.push({node:e,value:t})}return n},hUt=e=>T(e,`ArrayExpression`)?pUt(e):T(e,`ObjectExpression`)?mUt(e):null,gUt=(e,t)=>{let n=null;for(let r of e){if(r.value<0||r.value>1){t.report({node:r.node,message:`This Web Animation offset is ${r.value}, but offsets must be between 0 and 1.`}),n=null;continue}n!==null&&r.value<n&&t.report({node:r.node,message:`This Web Animation offset moves backward from ${n} to ${r.value}. Keep offsets in nondecreasing order.`}),n=r.value}},_Ut=x({id:`web-animation-offsets-valid`,title:`Invalid Web Animation keyframe offsets`,severity:`error`,category:`Correctness`,recommendation:`Keep explicit Web Animation keyframe offsets between 0 and 1 and in nondecreasing order.`,create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`)||C(t.callee)!==`animate`||!zs(t.callee.object,`dom-event-target`,e.scopes))return;let n=t.arguments[0];if(!n)return;let r=hUt(n);r&&gUt(r,e)}})}),vUt=(e,t)=>{if(!T(e.callee,`MemberExpression`))return null;let n=C(e.callee);if(n===`readRenderTargetPixels`&&U8(e.callee.object,t.scopes))return`three`;if(!I2(e.callee.object,t.scopes))return null;if(n===`finish`)return`finish`;let r=null;if(n===`readPixels`?r=6:n===`getBufferSubData`&&(r=2),r===null)return null;let i=e.arguments[r];return i&&!T(i,`SpreadElement`)&&LK(i,t.scopes)?`raw`:null},yUt=x({id:`webgl-no-sync-readback-in-animation-loop`,title:`Synchronous GPU readback inside animation loop`,severity:`warn`,recommendation:`Move GPU readback to a discrete or asynchronous path and reuse the latest completed result during frames`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes)??b2(n,e.scopes);!r||t.has(r)||(t.add(r),l0(r,e.scopes,(t,n)=>{if(!T(t,`CallExpression`)||n)return;let r=vUt(t,e);r&&e.report({node:t,message:r===`finish`?`finish blocks the calling thread until queued GPU work completes. Synchronize outside the animation loop`:`Synchronous GPU readback can stall the frame until prior GPU work completes. Use an asynchronous or event-driven readback path`})}))}}}}),bUt=new Set([`_self`,`_top`,`_parent`]),xUt=[`frames`,`globalThis`,`parent`,`self`,`top`,`window`],SUt=new Set([`noopener`,`noreferrer`]),CUt=new Set([`1`,`true`,`yes`]);let c7,l7,u7,d7,f7,p7,m7,h7,g7,_7,v7=[],y7=new WeakMap,b7=new WeakMap,x7=new WeakMap,S7=new WeakMap,C7=new WeakMap,w7=new WeakMap;const T7=(e,t,n)=>{if(rn(e,t,n))return!0;let r=Q7?d(t):null;return!!(r&&rn(e,r,n))},E7=e=>{let t=e,n=t.parent,r=!1;for(;n;){if(T(n,`ArrayPattern`)||T(n,`ObjectPattern`))r=!0;else if(T(n,`AssignmentPattern`)){if(n.left!==t)return!1}else if(T(n,`Property`)){if(n.value!==t)return!1}else if(T(n,`RestElement`)){if(n.argument!==t)return!1}else if(T(n,`AssignmentExpression`))return r&&n.left===t;else if(T(n,`ForInStatement`)||T(n,`ForOfStatement`))return r&&n.left===t;else return!1;t=n,n=n.parent}return!1},wUt=(e,t)=>{let n=c7,r=n?.symbolFor(e),i=r?b7.get(r):void 0;return r&&i===void 0&&(i=r.references.some(e=>e.flag!==`read`||E7(e.identifier)),b7.set(r,i)),!!(n&&r&&(!i||t.range!=null&&!r.references.some(e=>(e.flag!==`read`||E7(e.identifier))&&e.identifier.range==null)&&!r.references.some(e=>(e.flag!==`read`||E7(e.identifier))&&(T7(e.identifier,t,n)||!Z7&&e.identifier.range[0]<Ze(t)))))},D7=e=>!!(u7&&wUt(e,Z7?e:u7)),TUt=(e,t)=>{let n=(e,r)=>{if(r>jUt)return!1;let i=D(e);if(T(i,`Identifier`)){if(Wm(i,`open`,t))return!0;let e=N7(i);return e&&n(e,r+1)?!0:xUt.some(e=>n9(i,e,t)===`open`)}return T(i,`MemberExpression`)&&C(i)===`open`&&xUt.some(e=>Wm(i.object,e,t))};return n(e,0)},O7=e=>e!=null&&T(e,`Literal`)&&typeof e.value==`string`,k7=[`mailto:`,`tel:`,`sms:`,`file:`],EUt=/^https?:\/\/[^/?#]+[/?#]/i,DUt=[`./`,`../`,`?`,`#`],OUt=/^[\w.~%-]+[/?#]/,kUt=e=>e.startsWith(`/`)?e[1]!==`/`&&e[1]!==`\\`:DUt.some(t=>e.startsWith(t))?!0:OUt.test(e),AUt=e=>e!==`/`&&kUt(e),A7=e=>{let t=e.trimStart();if(t.length===0)return!1;let n=t.toLowerCase();return k7.some(e=>n.startsWith(e))?!0:kUt(t)},j7=e=>{if(O7(e))return Z7?A7(e.value):!0;if(e==null||!T(e,`TemplateLiteral`))return!1;if((e.expressions?.length??0)===0)return Z7?A7(e.quasis?.[0]?.value?.raw??``):!0;let t=(e.quasis?.[0]?.value?.raw??``).trimStart();if(t.length===0)return!1;let n=t.toLowerCase();return k7.some(e=>n.startsWith(e))||!Z7&&EUt.test(t)?!0:AUt(t)},jUt=8,MUt=(e,t=new Set)=>{if(c7&&Wm(e,`location`,c7))return!0;if(T(e,`CallExpression`)){let n=e.callee;if(!T(n,`Identifier`))return!1;let r=K7(n);if(!r||t.has(r))return!1;let i=new Set(t);i.add(r);let a=G7(r);return!!(a&&a.length>0&&a.every(e=>MUt(D(e),i)))}return!1},NUt=e=>!!(c7&&Wm(e,`window`,c7)),PUt=e=>!T(e,`MemberExpression`)||e.computed||!T(e.property,`Identifier`)?!1:e.property.name===`origin`&&NUt(e.object)?!0:e.property.name!==`origin`&&e.property.name!==`href`?!1:MUt(e.object),M7=e=>e==null?!0:T(e,`Literal`)?e.value===null:T(e,`UnaryExpression`)?e.operator===`void`:T(e,`Identifier`)&&e.name===`undefined`&&(!c7||c7.isGlobalReference(e)),N7=e=>{let t=E(e,e.name);if(t?.initializer==null)return null;let n=t.bindingIdentifier.parent;if(!n||!T(n,`VariableDeclarator`)||n.init!==t.initializer)return null;let r=n.parent;return!r||!T(r,`VariableDeclaration`)||r.kind!==`const`?null:t.initializer},FUt=(e,t,n)=>{if(!T(e,`ObjectExpression`))return!1;let r;for(let i of e.properties??[]){if(T(i,`SpreadElement`)){r=null;continue}if(!T(i,`Property`)){r=null;continue}let e=S(i,{allowComputedString:!0});e===t?r=f9(i.value,n+1):e===null&&i.computed&&(r=null)}return r===!0},P7=(e,t,n)=>{let r=e.elements??[];return r.length>0&&r.every(e=>e!=null&&FUt(D(e),t,n))},IUt=e=>{let t=e.parent;if(!t||!T(t,`CallExpression`)||!T(t.callee,`MemberExpression`)||t.arguments?.[0]!==e)return null;let n=C(t.callee);if(n!==`map`&&n!==`forEach`)return null;let r=D(t.callee.object);if(T(r,`ArrayExpression`))return r;if(T(r,`Identifier`)){let e=N7(r);if(e&&T(e,`ArrayExpression`))return e}return null},F7=e=>{let t=e.parent;if(!t||!T(t,`CallExpression`)||!(t.arguments??[]).includes(e)||!T(t.callee,`MemberExpression`))return!1;let n=C(t.callee);return n===`map`||n===`forEach`},I7=e=>{let t=W7(e),n=c7,r=t?n?.symbolFor(t):null;if(!n||!r)return null;let i=[];for(let e of KD(r,n))for(let t of e.references){let e=v(t.identifier),r=e.parent;if(!(r&&T(r,`VariableDeclarator`)&&r.init===e&&T(r.id,`Identifier`)&&n.symbolFor(r.id)?.kind===`const`)){if(!r||!T(r,`CallExpression`)||r.callee!==e)return[];i.push(r)}}return i.length>0?i:null},LUt=(e,t)=>{if(t>8)return{functions:[e],immediateReferences:null,references:null};let n=v(e),r=n.parent,i,a=!!(r&&T(r,`CallExpression`)&&(r.arguments??[]).includes(n)&&F7(e)&&UWt(r));if(i=r&&T(r,`CallExpression`)&&(r.callee===n||a)?[r]:I7(e),!i||i.length===0)return{functions:[e],immediateReferences:null,references:null};let o=[e],s=[];for(let e of i){let n=b(e);if(!n){s.push(e);continue}let r=LUt(n,t+1);if(o.push(...r.functions),!r.references)return{functions:o,immediateReferences:a?null:i,references:null};s.push(...r.references)}return{functions:o,immediateReferences:a?null:i,references:s}},L7=(e,t,n=!1,r=new Set)=>{let i=b(t),a=b(e);if(i&&a!==i&&W7(i)){if(r.has(i))return!0;let t=I7(i);if(!t||t.length===0)return!0;let a=new Set(r);return a.add(i),t.some(t=>L7(e,t,n,a))}return e.range==null||t.range==null||e.range[0]<Ze(t)?!0:!!(!n&&i&&a===i&&F7(i))},R7=(e,t)=>{let n=b(t),r=n?I7(n):null,i=b(p7??r?.[0]??t);if(!i||!F7(i))return!1;let a=T(i,`FunctionDeclaration`)||T(i,`FunctionExpression`)||T(i,`ArrowFunctionExpression`)?i.params?.[1]:null,o=D(e);return!!(a&&T(a,`Identifier`)&&T(o,`Identifier`)&&c7?.symbolFor(a)===c7?.symbolFor(o))},z7=e=>{let t=v(e),n=t.parent;return!!(n&&(T(n,`AssignmentExpression`)&&n.left===t||T(n,`UpdateExpression`)&&n.argument===t||T(n,`UnaryExpression`)&&n.operator===`delete`&&n.argument===t))},B7=(e,t,n)=>{if(T(e,`Identifier`)){let r=t.symbolFor(e);r?.kind===`const`&&n.add(r);return}if(T(e,`AssignmentPattern`)){B7(e.left,t,n);return}if(T(e,`ArrayPattern`))for(let r of e.elements??[])r&&B7(r,t,n)},RUt=(e,t,n,r,i)=>{let a=v(e),o=a.parent;return o&&T(o,`MemberExpression`)&&o.object===a&&C(o)===t&&z7(o)&&L7(o,n,i)?!0:!!(o&&T(o,`CallExpression`)&&o.arguments?.[0]===a&&TWt(o,t,r)&&L7(o,n,i))},zUt=(e,t,n,r,i)=>KD(e,r).some(e=>e.references.some(e=>RUt(e.identifier,t,n,r,i))),V7=(e,t,n)=>{let r=c7,i=r?.symbolFor(e);if(!r||!i)return!1;let a=new Map,o=new Set(KD(i,r));for(let e of o)for(let i of e.references){let e=v(i.identifier),s=e.parent;if(s&&T(s,`VariableDeclarator`)&&s.init===e&&T(s.id,`ArrayPattern`))for(let e of s.id.elements??[]){if(!e)continue;if(T(e,`RestElement`)){let t=e.argument;if(T(t,`Identifier`)){let e=r.symbolFor(t);if(e?.kind===`const`)for(let t of KD(e,r))o.add(t)}continue}let t=new Set;B7(e,r,t);for(let e of t)a.set(e,!1)}let c=e.parent;if(!c||!T(c,`MemberExpression`)||c.object!==e||!c.computed)continue;let l=v(c),u=R7(c.property,n),d=l.parent;if(d&&T(d,`VariableDeclarator`)&&d.init===l&&T(d.id,`Identifier`)){let e=r.symbolFor(d.id);e?.kind===`const`&&a.set(e,u)}if(z7(c)&&L7(c,n,u)||RUt(c,t,n,r,u))return!0}return[...a].some(([e,i])=>zUt(e,t,n,r,i))},H7=(e,t)=>{let n=c7,r=n?.symbolFor(e);return!n||!r?!1:KD(r,n).some(e=>e.references.some(e=>{let n=v(e.identifier),r=n.parent;if(!r||!T(r,`MemberExpression`)||r.object!==n)return!1;let i=v(r),a=i.parent,o=!!(r.computed&&R7(r.property,t));if(!a||!L7(a,t,o))return!1;let s=C(r);return s&&dr.has(s)&&T(a,`CallExpression`)&&a.callee===i?!0:z7(r)}))},BUt=(e,t,n)=>{let r=c7,i=r?.symbolFor(e);return!r||!i?!0:KD(i,r).some(e=>e.references.some(e=>{let r=v(e.identifier),i=r.parent;return!!(i&&T(i,`MemberExpression`)&&i.object===r&&C(i)===t&&z7(i)&&L7(i,n))}))},VUt=(e,t)=>{if(!T(e.property,`Identifier`))return!1;let n=e.property.name,r=D(e.object);if(!T(r,`Identifier`)||!D7(r))return!1;let i=N7(r),a=c7,o=a?w(r,a):null,s=o?.initializer?D(o.initializer):null;if(a&&s&&T(s,`MemberExpression`)&&s.computed&&T(s.object,`Identifier`)&&R7(s.property,e)){let r=w(s.object,a),i=r?.bindingIdentifier,o=r?.initializer?D(r.initializer):null;if(i&&T(i,`Identifier`)&&o&&T(o,`ArrayExpression`)&&D7(i)&&!V7(i,n,e)&&!H7(i,e))return P7(o,n,t)}if(H7(r,e)||a&&Nn(r,n,e,a))return!1;if(i&&T(i,`ObjectExpression`))return FUt(i,n,t);let c=E(r,r.name),l=c?.bindingIdentifier.parent;if(!l||!y(l)||!(l.params??[]).includes(c.bindingIdentifier))return!1;let u=IUt(l);if(!u)return!1;let d=l.parent,f=d&&T(d,`CallExpression`)?d.callee:null,p=f&&T(f,`MemberExpression`)?D(f.object):null;return p&&T(p,`Identifier`)&&(V7(p,n,e)||H7(p,e))?!1:P7(u,n,t)},HUt=(e,t)=>{if(!D7(e))return null;let n=E(e,e.name);if(!n)return null;let r=n.bindingIdentifier.parent;if(r&&T(r,`AssignmentPattern`)&&(r=r.parent),!r||!T(r,`Property`)||r.computed||!T(r.key,`Identifier`))return null;let i=r.key.name,a=r.parent;if(!a||!T(a,`ObjectPattern`))return null;let o=a.parent;if(!o||!y(o)||!(o.params??[]).includes(a))return null;let s=IUt(o);if(!s)return null;let c=o.parent,l=c&&T(c,`CallExpression`)?c.callee:null,u=l&&T(l,`MemberExpression`)?D(l.object):null;return u&&T(u,`Identifier`)&&(V7(u,i,e)||H7(u,e))?!1:P7(s,i,t)},UUt=(e,t)=>{let n=E(e,e.name);if(!n)return!1;let r=n.bindingIdentifier.parent;if(!r||!T(r,`VariableDeclarator`)||r.init&&!f9(r.init,t+1))return!1;let i=c7,a=i?.symbolFor(n.bindingIdentifier);if(!i||!a||e.range==null)return!1;if(!Z7){let e=!1;for(let n of a.references){let r=n.identifier,i=r.parent,a=!1;for(;i;){if(T(i,`AssignmentExpression`)){a=i.left===r&&r!==n.identifier;break}if((T(i,`ForInStatement`)||T(i,`ForOfStatement`))&&i.left===r){a=!0;break}if(y(i))break;r=i,i=i.parent}if(a)return!1;let o=v(n.identifier),s=o.parent;if(s&&T(s,`AssignmentExpression`)&&s.operator===`=`&&s.left===o){if(e=!0,!f9(s.right,t+1))return!1;continue}if(n.flag!==`read`)return!1}return e}let o=r.init!=null;for(let n of a.references){if(n.identifier.range==null)return!1;let r=n.identifier,a=r.parent,s=!1;for(;a;){if(T(a,`AssignmentExpression`)){s=a.left===r&&r!==n.identifier;break}if((T(a,`ForInStatement`)||T(a,`ForOfStatement`))&&a.left===r){s=!0;break}if(y(a))break;r=a,a=a.parent}if(s){if(T7(n.identifier,e,i))return!1;continue}let c=v(n.identifier),l=c.parent;if(l&&T(l,`AssignmentExpression`)&&l.operator===`=`&&l.left===c){if(!T7(n.identifier,e,i))continue;if(o=!0,!f9(l.right,t+1))return!1;continue}if(n.flag!==`read`&&T7(n.identifier,e,i))return!1}return o},WUt=(e,t)=>{if(!D7(e))return!1;let n=E(e,e.name);if(!n)return!1;let r=n.bindingIdentifier.parent;if(r&&T(r,`AssignmentPattern`)&&(r=r.parent),!r||!T(r,`Property`)||r.computed||!T(r.key,`Identifier`))return!1;let i=r.key.name,a=r.parent;if(!a||!T(a,`ObjectPattern`))return!1;let o=a.parent;if(!o||!y(o)||!(o.params??[]).includes(a))return!1;let s=null,c=null;if(T(o,`FunctionDeclaration`)&&o.id)s=o.id,c=o.parent??null;else{let e=o.parent;if(e&&T(e,`VariableDeclarator`)&&T(e.id,`Identifier`)){let t=e.parent;t&&T(t,`VariableDeclaration`)&&(s=e.id,c=t.parent??null)}}if(!s||!/^[A-Z]/.test(s.name)||c!=null&&(T(c,`ExportNamedDeclaration`)||T(c,`ExportDefaultDeclaration`)))return!1;let l=d(e);if(!l)return!1;let u=s.name,f=0,p=!1,m=!1;return A(l,e=>{if(p||m)return!1;if(T(e,`Identifier`)&&e.name===u&&e!==s)return m=!0,!1;if(!T(e,`JSXOpeningElement`))return;let n=e.name;if(!n||n.type!==`JSXIdentifier`||n.name!==u)return;f+=1;let r=null,a=!1;for(let t of e.attributes??[]){if(!T(t,`JSXAttribute`))return p=!0,!1;let e=t.name;e&&e.type===`JSXIdentifier`&&e.name===i&&(a=!0,r=t.value??null)}if(a&&(r==null||!p9(T(r,`JSXExpressionContainer`)?r.expression:r,t+1)))return p=!0,!1}),f>0&&!p&&!m},U7=e=>{let t=E(e,e.name);if(!t)return null;let n=t.bindingIdentifier.parent;if(!n||!y(n))return null;let r=(n.params??[]).indexOf(t.bindingIdentifier);return r<0?null:{functionNode:n,parameterIndex:r}},W7=e=>{if(T(e,`FunctionDeclaration`)){let t=e.parent;return t&&(T(t,`ExportNamedDeclaration`)||T(t,`ExportDefaultDeclaration`))?null:e.id&&T(e.id,`Identifier`)?e.id:null}let t=e.parent;if(t&&T(t,`CallExpression`)&&(t.arguments??[])[0]===e&&e9(t.callee)===`useCallback`&&(t=t.parent),!t||!T(t,`VariableDeclarator`)||!T(t.id,`Identifier`))return null;let n=t.parent;if(!n||!T(n,`VariableDeclaration`)||n.kind!==`const`)return null;let r=n.parent;return r&&(T(r,`ExportNamedDeclaration`)||T(r,`ExportDefaultDeclaration`))?null:t.id},GUt=(e,t)=>{let n=x7.get(e);if(n||(n=new Map,x7.set(e,n)),n.has(t))return n.get(t)??null;let r=W7(e);if(!r)return n.set(t,null),null;let i=d(e);if(!i)return n.set(t,null),null;let a=[],o=!1;return A(i,e=>{if(o)return!1;if(!T(e,`Identifier`)||e.name!==r.name||e===r||E(e,e.name)?.bindingIdentifier!==r)return;let n=e.parent;if(n&&T(n,`CallExpression`)&&n.callee===e){a.push((n.arguments??[])[t]??null);return}return o=!0,!1}),o||a.length===0?(n.set(t,null),null):(n.set(t,a),a)},KUt=(e,t)=>{if(!D7(e))return!1;let n=U7(e);if(!n)return!1;let r=GUt(n.functionNode,n.parameterIndex);return r?r.every(e=>p9(e,t+1)):!1},qUt=/^on[A-Z]/,JUt=e=>{let t=e.name;return t&&t.type===`JSXIdentifier`?t.name??null:null},YUt=e=>{let t=e.parent;if(!t||!T(t,`JSXAttribute`))return null;let n=JUt(t);if(!n||!qUt.test(n))return null;let r=t.parent;return r&&T(r,`JSXOpeningElement`)?r:null},XUt=(e,t)=>{let n=e.name;if(!n||n.type!==`JSXIdentifier`||n.name!==`a`)return!1;let r=R(e.attributes??[],`href`);if(!r)return!1;let i=r.value;return i==null?!1:T(i,`JSXExpressionContainer`)?f9(i.expression,t+1):j7(i)},ZUt=(e,t)=>{let n=e.parent;if(n&&T(n,`JSXExpressionContainer`)){let e=YUt(n);return e!=null&&XUt(e,t)}let r=W7(e);if(!r)return!1;let i=d(e);if(!i)return!1;let a=0,o=!1;return A(i,e=>{if(o)return!1;if(!T(e,`Identifier`)||e.name!==r.name||e===r||E(e,e.name)?.bindingIdentifier!==r)return;let n=e.parent,i=n&&T(n,`JSXExpressionContainer`)?YUt(n):null;if(!i||!XUt(i,t))return o=!0,!1;a+=1}),a>0&&!o},QUt=(e,t)=>{if(!T(e.property,`Identifier`)||e.property.name!==`href`)return!1;let n=D(e.object);if(!T(n,`Identifier`)||!D7(n)||c7&&Nn(n,`href`,e,c7))return!1;let r=U7(n);if(!r)return!1;let i=GUt(r.functionNode,r.parameterIndex);return i?i.every(e=>{if(e==null)return!1;let n=D(e);if(!T(n,`MemberExpression`)||n.computed||!T(n.property,`Identifier`)||n.property.name!==`currentTarget`)return!1;let r=D(n.object);if(!T(r,`Identifier`))return!1;let i=U7(r);return i?ZUt(i.functionNode,t):!1}):!1},$Ut=(e,t)=>{let n=E(e,e.name);if(!n)return!1;let r=n.bindingIdentifier.parent;if(!r||!T(r,`ArrayPattern`))return!1;let i=r.elements??[];if(i[0]!==n.bindingIdentifier)return!1;let a=i[1];if(!a||!T(a,`Identifier`))return!1;let o=r.parent;if(!o||!T(o,`VariableDeclarator`)||o.id!==r)return!1;let s=o.parent;if(!s||!T(s,`VariableDeclaration`)||s.kind!==`const`)return!1;let c=o.init;if(!c||!T(c,`CallExpression`)||e9(c.callee)!==`useState`||!p9((c.arguments??[])[0]??null,t+1))return!1;let l=!1,u=c7?.symbolFor(a);return A(n.scopeOwner,e=>{if(l)return!1;if(!T(e,`Identifier`)||e.name!==a.name||e===a||u&&c7?.symbolFor(e)!==u)return;let n=e.parent;if(n&&T(n,`CallExpression`)&&n.callee===e){let e=(n.arguments??[])[0]??null;return e!=null&&y(e)||!p9(e,t+1)?(l=!0,!1):void 0}return l=!0,!1}),!l},G7=e=>{if(!y(e))return null;let t=e.body;if(!t)return null;if(!T(t,`BlockStatement`))return[t];let n=[],r=!1;return A(t,e=>{if(e!==t&&y(e))return!1;T(e,`ReturnStatement`)&&(e.argument==null?r=!0:n.push(e.argument))}),r?null:n},K7=e=>{if(!D7(e))return null;let t=E(e,e.name);if(!t?.initializer||!y(t.initializer))return null;if(T(t.initializer,`FunctionDeclaration`))return t.initializer;let n=t.bindingIdentifier.parent;if(!n||!T(n,`VariableDeclarator`)||n.init!==t.initializer)return null;let r=n.parent;return!r||!T(r,`VariableDeclaration`)||r.kind!==`const`?null:t.initializer},eWt=(e,t)=>{let n=e.property;if(!T(n,`Literal`)||typeof n.value!=`number`)return!1;let r=n.value,i=D(e.object);if(!T(i,`Identifier`)||!D7(i)||H7(i,e))return!1;let a=N7(i);if(a==null)return!1;let o=e=>{if(!T(e,`ArrayExpression`))return!1;let n=(e.elements??[])[r];return n!=null&&f9(D(n),t+1)};if(T(a,`ArrayExpression`))return o(a);if(T(a,`CallExpression`)&&T(a.callee,`Identifier`)){let e=K7(a.callee);if(!e)return!1;let t=G7(e);return!t||t.length===0?!1:t.every(e=>o(D(e)))}return!1},tWt=new Set([`next/router`,`next/navigation`]),nWt=e=>{let t=$7(e);if(t?.moduleSpecifier===`next/router`&&t.exportedName===`default`)return!0;let n=N7(e);if(!n||!T(n,`CallExpression`))return!1;let r=D(n.callee);if(!T(r,`Identifier`))return!1;let i=$7(r);return!!(i&&i.exportedName===`useRouter`&&tWt.has(i.moduleSpecifier))},rWt=(e,t)=>{if(!T(t,`IfStatement`)&&!T(t,`ConditionalExpression`))return null;let n=e;for(;n?.parent&&n.parent!==t;)n=n.parent;return!n||n.parent!==t?null:t.consequent===n?`consequent`:t.alternate===n?`alternate`:null},iWt=(e,t)=>{let n=e.parent;for(;n;){if(T(n,`IfStatement`)||T(n,`ConditionalExpression`)){let r=rWt(e,n),i=rWt(t,n);if(r&&i&&r!==i)return!0}if(y(n))return!1;n=n.parent??null}return!1},aWt=e=>{let t=e.parent;for(;t;){if(T(t,`JSXOpeningElement`))return t;t=t.parent??null}return null},oWt=e=>{let t=c7,n=l7;if(!u7||!t||!n)return!1;let r=aWt(u7),i=t.symbolFor(e);if(!r||!i)return!1;let a=[],o=[];return A(r,e=>{if(!T(e,`CallExpression`))return;let r=e.arguments?.[0],s=r?D(r):null;if(!s||!T(s,`Identifier`)||t.symbolFor(s)!==i)return;if(TUt(e.callee,t)){o.push(e);return}let c=D(e.callee);if(!T(c,`MemberExpression`))return;let l=C(c),u=D(c.object);(l===`push`||l===`replace`)&&T(u,`Identifier`)&&nWt(u)&&V(e,n)&&a.push(e)}),o.some(e=>a.some(t=>iWt(e,t)))},sWt=e=>{if(!u7||!D7(e))return!1;let t=u7,n=e.parent;for(;n&&!y(n);)n=n.parent??null;if(!n)return!1;let r=n,i=c7?.symbolFor(e),a=S7.get(r);return a||(a=[],A(r,e=>{if(e!==r&&y(e))return!1;if(!T(e,`CallExpression`)||!l7||!V(e,l7))return;let t=e.callee;if(!T(t,`MemberExpression`)||t.computed||!T(t.property,`Identifier`)||t.property.name!==`push`&&t.property.name!==`replace`)return;let n=D(t.object);!T(n,`Identifier`)||!nWt(n)||a?.push(e)}),S7.set(r,a)),a.some(n=>{if(!iWt(t,n))return!1;let r=n.callee;if(!T(r,`MemberExpression`))return!1;let a=(n.arguments??[])[0],o=a?D(a):null;return!!(o&&T(o,`Identifier`)&&o.name===e.name&&(!i||c7?.symbolFor(o)===i))})||oWt(e)},cWt=e=>{let t=e;for(;T(t,`BinaryExpression`)&&t.operator===`+`;)t=D(t.left);return t},q7=(e,t=[])=>{let n=D(e);return T(n,`BinaryExpression`)&&n.operator===`+`?(q7(n.left,t),q7(n.right,t)):t.push(n),t},lWt=e=>{let t=e.trimStart();if(t.length===0)return!1;let n=t.toLowerCase();return k7.some(e=>n.startsWith(e))||!Z7&&EUt.test(t)?!0:AUt(t)},uWt=(e,t=0)=>{if(t>8)return!1;let n=D(e);if(O7(n))return lWt(n.value);if(T(n,`TemplateLiteral`))return(n.expressions?.length??0)>0?j7(n):lWt(n.quasis?.[0]?.value?.raw??``);if(!T(n,`Identifier`)||!D7(n))return!1;let r=N7(n);return!!(r&&uWt(r,t+1))};let J7,Y7=0;const X7=new Map;let Z7=!1,Q7=!1;const $7=e=>{let t=E(e,e.name)?.bindingIdentifier.parent;if(!t||!T(t,`ImportSpecifier`)&&!T(t,`ImportDefaultSpecifier`))return null;let n=Nt(t);if(!n)return null;let r=t.parent;if(!r||!T(r,`ImportDeclaration`))return null;let i=r.source;return!i||!T(i,`Literal`)||typeof i.value!=`string`?null:{moduleSpecifier:i.value,exportedName:n}},dWt=e=>{if(Z7||J7==null)return null;let t=$7(e);if(!t)return null;let n=`${t.moduleSpecifier}\u0000${t.exportedName}`,r=X7.get(n);if(r!==void 0)return r;if(Y7<=0)return null;--Y7;let i=tt(J7,t.moduleSpecifier,t.exportedName);return X7.set(n,i),i},fWt=({foreignExpression:e,isDeferred:t})=>{let n=c7,r=u7,i=d(e);c7=i?Se(i):void 0,u7=e,Z7=!0,Q7=t;try{return f9(D(e),0)}finally{Z7=!1,Q7=!1,c7=n,u7=r}},pWt=e=>{let t=dWt(e);return!t||t.kind!==`initializer`?null:fWt({foreignExpression:t.node,isDeferred:!1})},mWt=/^(?:get|create|build)[A-Za-z0-9]*(?:Url|URL)$/,hWt=e=>{if(!mWt.test(e.name))return null;let t=dWt(e);if(!t||t.kind!==`function`)return null;let n=G7(t.node);return!n||n.length===0?!1:n.every(e=>fWt({foreignExpression:e,isDeferred:!0}))},gWt=/^(?:get|create)[A-Za-z0-9]*(?:Url|URL)$/,_Wt=new Set([`toString`,`trim`,`trimEnd`,`trimStart`]),e9=e=>T(e,`Identifier`)?e.name:T(e,`MemberExpression`)&&!e.computed&&T(e.property,`Identifier`)?e.property.name:null,t9=(e,t,n)=>{if(!y(t)||!D7(e))return null;let r=c7?.symbolFor(e),i=(t.params??[]).findIndex(e=>T(e,`Identifier`)&&c7?.symbolFor(e)===r);return i>=0?n.arguments?.[i]??null:null},vWt=(e,t,n,r)=>{let i=D(e);if(T(i,`Identifier`)){let e=t9(i,t,n);if(e)return p9(e,r+1)}if(T(i,`BinaryExpression`)&&i.operator===`+`){let e=q7(i),a=e[0];if(a&&T(a,`Identifier`)){let i=t9(a,t,n),o=``,s=1;for(;s<e.length;){let t=CWt(e[s]);if(t==null)break;o+=t,s+=1}if(i&&c9(o,s<e.length)&&(!o.startsWith(`/`)||u9(i,r+1)))return f9(i,r+1)}}if(T(i,`TemplateLiteral`)){let e=i.quasis?.[0]?.value?.raw??``,a=i.expressions?.[0];if(e.length===0&&a&&T(a,`Identifier`)){let e=t9(a,t,n),o=i.quasis?.[1]?.value?.raw??``;if(e&&c9(o,(i.expressions?.length??0)>1)&&(!o.startsWith(`/`)||u9(e,r+1)))return f9(e,r+1)}}return p9(i,r)},yWt=(e,t)=>{let n=D(e.callee);if(!T(n,`Identifier`))return!1;let r=K7(n),i=r?G7(r):null;if(!r||!i||i.length===0)return!1;let a=p7,o=m7,s=h7,c=g7;p7??=e,m7??=e,h7=e,g7=r;try{return i.every(n=>vWt(n,r,e,t))}finally{p7=a,m7=o,h7=s,g7=c}},bWt=new Set([`assign`,`defineProperties`,`defineProperty`,`setPrototypeOf`]),xWt=new Set([`defineProperty`,`set`,`setPrototypeOf`]),n9=(e,t,n)=>{let r=E(e,e.name)?.bindingIdentifier.parent;if(r&&T(r,`AssignmentPattern`)&&(r=r.parent),!r||!T(r,`Property`))return null;let i=r.parent;if(!i||!T(i,`ObjectPattern`))return null;let a=i.parent;if(!a||!T(a,`VariableDeclarator`))return null;let o=a.parent;return!o||!T(o,`VariableDeclaration`)||o.kind!==`const`||!a.init||!Wm(a.init,t,n)?null:S(r,{allowComputedString:!0})},r9=(e,t,n,r,i)=>{if(i>8)return!1;let a=D(e);if(T(a,`MemberExpression`)){let e=C(a);return!!(e&&n.has(e)&&Wm(a.object,t,r))}if(!T(a,`Identifier`))return!1;let o=N7(a);if(o)return r9(o,t,n,r,i+1);let s=n9(a,t,r);return!!(s&&n.has(s))},SWt=(e,t)=>r9(e.callee,`Object`,bWt,t,0)||r9(e.callee,`Reflect`,xWt,t,0),CWt=e=>{if(!e)return null;let t=D(e);return O7(t)?t.value:T(t,`TemplateLiteral`)&&(t.expressions?.length??0)===0?t.quasis?.[0]?.value?.cooked??null:null},wWt=(e,t)=>{if(!e)return!0;let n=D(e);return T(n,`ObjectExpression`)?(n.properties??[]).some(e=>{if(!T(e,`Property`))return!0;let n=S(e,{allowComputedString:!0});return n===null||n===t}):!0},TWt=(e,t,n)=>{let r=t=>r9(e.callee,`Object`,new Set([t]),n,0),i=t=>r9(e.callee,`Reflect`,new Set([t]),n,0);if(r(`assign`))return(e.arguments??[]).slice(1).some(e=>wWt(e,t));if(r(`defineProperties`))return wWt(e.arguments?.[1],t);if(r(`defineProperty`)||i(`defineProperty`)||i(`set`)){let n=CWt(e.arguments?.[1]);return n===null||n===t}return r(`setPrototypeOf`)||i(`setPrototypeOf`)},i9=(e,t,n=t)=>{let r=c7,i=d(t);if(!r||!i)return!1;let a=e=>{if(e.range==null||t.range==null)return!0;if(!Z7){let r=b(n),i=r&&b(e)===r?n:t;return e.range[0]<Ze(i)}return rn(e,t,r)||Q7&&rn(e,i,r)},o=C7.get(r);o||(o=new Map,C7.set(r,o));let s=o.get(e);if(s)return s.length===0?!0:t.range==null?!1:!s.some(a);let c=[],l=(t,n=0)=>{if(n>8)return!1;let i=D(t);if(Wm(i,e,r))return!0;if(T(i,`MemberExpression`))return l(i.object,n+1);if(!T(i,`Identifier`))return!1;let a=N7(i);return a&&l(a,n+1)?!0:n9(i,e,r)===`prototype`};return A(i,e=>{let t=null;T(e,`AssignmentExpression`)&&(t=e.left),T(e,`UpdateExpression`)&&(t=e.argument),T(e,`UnaryExpression`)&&e.operator===`delete`&&(t=e.argument),T(e,`CallExpression`)&&SWt(e,r)&&(t=e.arguments?.[0]??null),t&&l(t)&&c.push(e)}),o.set(e,c),c.length===0?!0:t.range==null?!1:!c.some(a)},EWt=e=>T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)&&C(e.callee)===`createObjectURL`&&!!(c7&&i9(`URL`,e)&&SD(e.callee.object,`URL`,c7,`createObjectURL`)),DWt=e=>{if(!T(e,`CallExpression`))return!1;let t=D(e.callee);if(!T(t,`MemberExpression`)||C(t)!==`getURL`)return!1;let n=D(t.object);return!T(n,`MemberExpression`)||C(n)!==`runtime`?!1:!!(c7&&Wm(n.object,`chrome`,c7)&&i9(`chrome`,e))},OWt=[`href`,`host`,`hostname`,`password`,`port`,`protocol`,`toJSON`,`toString`,`username`],a9=(e,t)=>{let n=c7;if(!n)return!1;if(OWt.some(r=>Nn(e,r,t,n)))return!0;let r=n.symbolFor(e);if(!r)return!1;let i=w7.get(r);if(!i){i=[];let t=d(e),a=(e,t)=>{if(t>8)return!1;let i=D(e);if(!T(i,`Identifier`))return!1;if(n.symbolFor(i)===r)return!0;let o=N7(i);return!!(o&&a(o,t+1))};t&&A(t,e=>{if(!T(e,`CallExpression`)||!SWt(e,n))return;let t=e.arguments?.[0];t&&a(t,0)&&i?.push(e)}),w7.set(r,i)}return i.some(e=>T7(e,t,n))},kWt=e=>{let t=D(e);return!!(c7&&T(t,`NewExpression`)&&Wm(t.callee,`URL`,c7))},AWt=e=>{let t=D(e);if(kWt(t))return!0;if(!T(t,`Identifier`))return!1;let n=N7(t);return!!(n&&kWt(n))},o9=(e,t,n)=>{let r=d7,i=f7;d7=e,f7=t;try{return n()}finally{d7=r,f7=i}},s9=e=>{let t=b(e),n=u7?b(u7):null;return(t&&(t===n||t===g7||v7.includes(t))?m7??_7:void 0)??(Q7?d7:void 0)??e},jWt=(e,t)=>{if(e.computed||C(e)!==`href`)return!1;let n=D(e.object);if(!T(n,`Identifier`))return!1;let r=N7(n);if(!r||!T(D(r),`NewExpression`))return!1;let i=s9(e);return!i9(`URL`,i,e)||a9(n,i)||h7&&a9(n,h7)?!1:o9(i,e,()=>f9(r,t+1))},c9=(e,t=!1)=>e.length===0?!t:e.startsWith(`?`)||e.startsWith(`#`)?!0:e.startsWith(`/`)&&e[1]!==`/`&&e[1]!==`\\`,MWt=/^(?:https?|ftp|wss?):\/*$/iu,NWt=e=>{let t=0;for(;t<e.length&&e.charAt(t)<=` `;)t+=1;let n=e.length;for(;n>t&&e.charAt(n-1)<=` `;)--n;return e.slice(t,n)},l9=e=>{let t=D(e);return M7(t)?!1:T(t,`Literal`)?typeof t.value==`boolean`?t.value:typeof t.value==`string`?t.value.length>0:typeof t.value==`number`?t.value!==0&&!Number.isNaN(t.value):typeof t.value==`bigint`?t.value!==0n:null:null},u9=(e,t)=>{if(t>8)return!1;let n=D(e);if(T(n,`Literal`)){if(typeof n.value!=`string`)return l9(n)!==null;let e=NWt(n.value.replaceAll(/[\t\n\r]/gu,``)).replaceAll(`\\`,`/`);return e.length>0&&!/^\/+$/u.test(e)&&!MWt.test(e)}if(PUt(n))return!0;if(T(n,`ConditionalExpression`)){let e=l9(n.test);return e===null?u9(n.consequent,t+1)&&u9(n.alternate,t+1):u9(e?n.consequent:n.alternate,t+1)}if(T(n,`LogicalExpression`)){let e=l9(n.left);if(n.operator===`&&`)return e===!1||u9(n.right,t+1);if(n.operator===`??`){if(M7(n.left))return u9(n.right,t+1);if(e!==null)return u9(n.left,t+1)}return n.operator===`||`&&e!==null?u9(e?n.left:n.right,t+1):u9(n.left,t+1)&&u9(n.right,t+1)}if(T(n,`Identifier`)){let e=c7?w(n,c7):null,r=e?.kind===`const`?e.initializer:null;return!!(r&&u9(r,t+1))}if(T(n,`CallExpression`)&&T(n.callee,`Identifier`)){let e=K7(n.callee),r=e?G7(e):null;return!!(r&&r.length>0&&r.every(e=>u9(e,t+1)))}return!1},d9=(e,t)=>{let n=D(e);if(T(n,`Literal`)&&typeof n.value!=`string`)return l9(n)!==null;if(T(n,`ConditionalExpression`)){let e=l9(n.test);return e===null?d9(n.consequent,t+1)&&d9(n.alternate,t+1):d9(e?n.consequent:n.alternate,t+1)}if(T(n,`LogicalExpression`)){let e=l9(n.left);return n.operator===`&&`?e===!1||d9(n.right,t+1):n.operator===`??`&&M7(n.left)?d9(n.right,t+1):e===null?d9(n.left,t+1)&&d9(n.right,t+1):d9(n.operator===`||`&&!e?n.right:n.left,t+1)}return f9(n,t+1)},f9=(e,t)=>{if(j7(e))return!0;if(e==null||t>8)return!1;if(T(e,`ConditionalExpression`))return p9(e.consequent,t+1)&&p9(e.alternate,t+1);if(T(e,`LogicalExpression`))return e.operator===`&&`?M7(e.left)||p9(e.right,t+1):FWt(e.left,t+1)?!0:p9(e.left,t+1)&&p9(e.right,t+1);if(e.type===`TSAsExpression`||e.type===`TSSatisfiesExpression`||e.type===`TSNonNullExpression`)return f9(e.expression??null,t+1);if(T(e,`BinaryExpression`)&&e.operator===`+`)return uWt(cWt(e));if(EWt(e)||DWt(e))return!0;if(T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)&&!e.callee.computed&&T(e.callee.property,`Identifier`)&&(e.callee.property.name===`toString`||e.callee.property.name===`toJSON`)){let n=e.callee.object,r=s9(e);return AWt(n)&&!i9(`URL`,r,e)?!1:o9(r,e,()=>f9(D(n),t+1))}if(T(e,`NewExpression`)){let n=d7??e,r=d(e),i=d(n);if(!c7||!r||r!==i||!Wm(e.callee,`URL`,c7)||!i9(`URL`,e)||!i9(`URL`,n,f7??e)||!f9(e.arguments?.[0]??null,t+1))return!1;let a=e.arguments?.[1];return a===void 0?!0:f9(a,t+1)}if(T(e,`MemberExpression`)&&(!e.computed&&jWt(e,t+1)||!e.computed&&VUt(e,t+1)||!e.computed&&QUt(e,t+1)||e.computed&&eWt(e,t+1)))return!0;if(T(e,`Identifier`)){let n=pWt(e);if(n!=null)return n;let r=N7(e);if(r!=null){let n=f7??e,i=d7??e;return T(D(r),`NewExpression`)&&(a9(e,i)||h7&&a9(e,h7)||!i9(`URL`,i,n))?!1:p9(r,t+1)}return UUt(e,t+1)||WUt(e,t+1)||$Ut(e,t+1)?!0:HUt(e,t+1)??(KUt(e,t+1)?!0:sWt(e))}if(T(e,`ChainExpression`))return f9(e.expression,t+1);if(T(e,`TemplateLiteral`)){let n=(e.quasis?.[0]?.value?.raw??``).trimStart(),r=e.expressions?.[0];if(n.length===0&&r){let n=r,i=c7&&T(D(n),`Identifier`)?w(D(n),c7):null,a=i?.kind===`const`&&i.initializer?i.initializer:n,o=e.quasis?.[1]?.value?.raw??``;return o9(s9(e),e,()=>!!(c9(o,(e.expressions?.length??0)>1)&&(!o.startsWith(`/`)||u9(a,t+1))&&d9(a,t+1)))}return!1}if(PUt(e))return!0;if(T(e,`CallExpression`)){if(yWt(e,t+1))return!0;let n=e9(e.callee);if(n!=null&&T(e.callee,`Identifier`)&&gWt.test(n)){let t=hWt(e.callee);return t===null?!1:t}if(T(e.callee,`Identifier`)){let t=hWt(e.callee);if(t!==null)return t}let r=e.callee;if(T(r,`MemberExpression`)){let e=C(r);return e!==null&&_Wt.has(e)&&f9(r.object,t+1)}return!1}return!1},p9=(e,t)=>M7(e)||f9(e,t),PWt=e=>{if(e==null)return!0;let t=D(e),n=t,r=y7.get(n);if(r!==void 0)return r;let i=o9(t,t,()=>p9(e,0));return y7.set(n,i),i},FWt=(e,t)=>{if(e==null||t>8)return!1;if(O7(e))return e.value.length>0&&j7(e);if(T(e,`TemplateLiteral`))return(e.quasis?.some(e=>(e.value?.raw??``).length>0)??!1)&&j7(e);if(T(e,`Identifier`)){let n=N7(e);return n!=null&&FWt(n,t+1)}return!1},m9=(e,t)=>{if(e==null||t>8)return null;if(O7(e))return e.value;if(T(e,`TemplateLiteral`)){let n=e.quasis?.map(e=>e.value?.raw??``)??[],r=e.expressions?.map(e=>m9(e,t+1)??`\0`)??[];return n.map((e,t)=>e+(r[t]??``)).join(``)}if(T(e,`Identifier`)){let n=N7(e);return n==null?null:m9(n,t+1)}return null},IWt=e=>e!=null&&e.length>0&&[...e].every(e=>e===`\0`),LWt=e=>{let[t,n]=e.toLowerCase().split(`=`),r=n===void 0||CUt.has(n)||IWt(n);return(SUt.has(t)||IWt(t))&&r},RWt=e=>e.split(/[\s,]+/).some(LWt),zWt=/^on[A-Z]/,BWt=new Set([`queueMicrotask`,`requestAnimationFrame`,`setInterval`,`setTimeout`]),VWt=e=>{let t=e.typeAnnotation;if(!t||!T(t,`TSTypeAnnotation`))return!1;let n=t.typeAnnotation;return T(n,`TSArrayType`)||T(n,`TSTupleType`)?!0:!!(T(n,`TSTypeReference`)&&T(n.typeName,`Identifier`)&&(n.typeName.name===`Array`||n.typeName.name===`ReadonlyArray`))},HWt=(e,t,n)=>{if(!wUt(e,t)||BUt(e,`forEach`,t))return!1;let r=n.symbolFor(e)?.bindingIdentifier;if(r&&T(r,`Identifier`)&&VWt(r))return!0;let i=N7(e);if(!i)return!1;let a=D(i);return!!(T(a,`ArrayExpression`)||T(a,`NewExpression`)&&Wm(a.callee,`Array`,n)&&i9(`Array`,t)||T(a,`CallExpression`)&&T(a.callee,`MemberExpression`)&&(C(a.callee)===`from`||C(a.callee)===`of`)&&SD(a.callee.object,`Array`,n,C(a.callee)??``)&&i9(`Array`,t))},UWt=e=>{let t=c7;if(!t)return!1;let n=D(e.callee);if(T(n,`Identifier`))return(BWt.has(n.name)||n.name===`addEventListener`)&&Wm(n,n.name,t);if(!T(n,`MemberExpression`))return!1;let r=C(n);if(r===`addEventListener`&&Wm(n.object,`window`,t))return!0;if(r!==`forEach`)return!1;let i=D(n.object);return T(i,`ArrayExpression`)?!0:T(i,`Identifier`)?HWt(i,e,t):!1},WWt=e=>{let t=e.parent;if(!t)return!1;if(T(t,`JSXExpressionContainer`)){let e=t.parent,n=e?.parent,r=n&&T(n,`JSXOpeningElement`)?n.name:null;return!!(e&&T(e,`JSXAttribute`)&&zWt.test(JUt(e)??``)&&r&&r.type===`JSXIdentifier`&&/^[a-z]/.test(r.name))}if(T(t,`ExpressionStatement`))return!0;if(T(t,`CallExpression`))return t.callee===e?(p7=t,h9(t)):t.arguments?.some(t=>t===e)??!1?UWt(t):!1;if(T(t,`Property`)&&t.value===e&&!t.computed){let e=S(t),n=t.parent,r=n?.parent,i=r&&T(r,`CallExpression`)?D(r.callee):null,a=r&&T(r,`CallExpression`)?r.arguments?.[0]:null,o=!!(r&&T(r,`CallExpression`)&&a&&T(a,`Literal`)&&typeof a.value==`string`&&c7&&(k(r,`createElement`,c7)||i&&T(i,`MemberExpression`)&&C(i)===`createElement`&&Wm(i.object,`React`,c7)));return!!(e&&zWt.test(e)&&n&&T(n,`ObjectExpression`)&&r&&T(r,`CallExpression`)&&r.arguments?.[1]===n&&o)}let n=I7(e);return n?.length===0?!0:n?.every(e=>h9(e))?(p7=n.length===1?n[0]:void 0,!0):!1},GWt=e=>{let t=e.parent??null;for(;t&&!y(t);)t=t.parent??null;return t!==null&&WWt(t)},h9=e=>{let t=v(e),n=t.parent;return n?T(n,`ExpressionStatement`)||T(n,`UnaryExpression`)&&n.operator===`void`?!0:T(n,`AwaitExpression`)?h9(n):T(n,`ReturnStatement`)&&n.argument===t?GWt(n):T(n,`LogicalExpression`)&&n.right===t||T(n,`ConditionalExpression`)&&(n.consequent===t||n.alternate===t)?h9(n):T(n,`SequenceExpression`)?n.expressions?.[n.expressions.length-1]!==t||h9(n):T(n,`ArrowFunctionExpression`)&&n.body===t?WWt(n):!1:!1},KWt=x({id:`window-open-without-noopener`,title:`window.open without noopener`,severity:`warn`,recommendation:"Pass `'noopener'` in the third features argument of `window.open` so the opened page can't control your tab through `window.opener`. Add `'noreferrer'` too when the destination must not receive the referrer.",create:e=>(l7=e,u7=void 0,d7=void 0,f7=void 0,p7=void 0,m7=void 0,g7=void 0,_7=void 0,v7=[],y7=new WeakMap,b7=new WeakMap,x7=new WeakMap,S7=new WeakMap,C7=new WeakMap,w7=new WeakMap,J7=typeof e.filename==`string`&&Vn.isAbsolute(e.filename)?e.filename:void 0,Y7=3,X7.clear(),Z7=!1,Q7=!1,{CallExpression(t){if(c7=e.scopes,!TUt(t.callee,e.scopes))return;let n=u7,r=d7,i=f7,a=p7,o=m7,s=g7,c=_7,l=v7;u7=void 0,d7=void 0,f7=void 0,p7=void 0,m7=void 0,g7=void 0,_7=void 0,v7=[];try{if(!h9(t))return;let n=b(t),r=n?LUt(n,0):null;v7=r?.functions??[],p7=r?.immediateReferences?.length?r.immediateReferences.reduce((e,t)=>t.range[0]>e.range[0]?t:e):void 0,m7=r?.references?.length?r.references.reduce((e,t)=>t.range[0]>e.range[0]?t:e):void 0,_7=!m7&&n?d(t)??void 0:void 0,u7=t;let i=t.arguments?.[0];if(!(O7(i)&&i.value.trim().length>0&&!A7(i.value))&&PWt(i))return;let a=t.arguments?.[1];if(O7(a)&&bUt.has(a.value))return;let o=t.arguments?.[2];if(o!=null&&!M7(o)){let e=m9(o,0);if(e==null||RWt(e))return}e.report({node:t,message:"This `window.open` call leaves the opened page able to redirect your tab via `window.opener`, so pass `'noopener'` in the features argument."})}finally{u7=n,d7=r,f7=i,p7=a,m7=o,g7=s,_7=c,v7=l}}})}),g9=[`zod`,`zod/v4`],_9=new WeakMap,qWt=e=>{if(_9.has(e))return _9.get(e)??null;let t=JWt(e);return _9.set(e,t),t},JWt=e=>{let t=E(e,e.name)?.initializer;if(!t)return null;let n=t.parent;if(!n||!T(n,`ImportDeclaration`))return null;let r=n.source?.value;if(typeof r!=`string`||!g9.includes(r))return null;if(T(t,`ImportNamespaceSpecifier`))return{imported:null,isDefault:!1,isNamespace:!0};if(T(t,`ImportDefaultSpecifier`))return{imported:null,isDefault:!0,isNamespace:!1};if(T(t,`ImportSpecifier`)){let e=t.imported;if(T(e,`Identifier`))return{imported:e.name,isDefault:!1,isNamespace:!1};if(T(e,`Literal`)&&typeof e.value==`string`)return{imported:e.value,isDefault:!1,isNamespace:!1}}return null},v9=e=>{let t=D(e);if(!T(t,`Identifier`))return!1;let n=qWt(t);return!!(n&&(n.isNamespace||n.isDefault||n.imported===`z`))},y9=e=>{let t=D(e);if(!T(t,`Identifier`))return null;let n=qWt(t);return!n||n.isNamespace||n.isDefault?null:n.imported},YWt=e=>{let t=D(e);return!T(t,`MemberExpression`)||!v9(t.object)?null:C(t)},b9=(e,t)=>{let n=XWt(e);return n!==null&&t.has(n)},XWt=e=>{let t=D(e.callee);if(T(t,`Identifier`))return y9(t);if(!T(t,`MemberExpression`))return null;let n=C(t);return n===null||!v9(t.object)?null:n},x9=e=>{let t=D(e.callee);if(!T(t,`MemberExpression`))return null;let n=C(t);return n?{methodName:n,receiver:t.object}:null},S9=(e,t,n)=>{let r=x9(e);if(!r||!n.has(r.methodName))return!1;let i=D(r.receiver);return T(i,`CallExpression`)&&b9(i,t)},ZWt=(e,t)=>{if(!e)return!1;let n=D(e);return T(n,`ObjectExpression`)?n.properties.some(e=>{if(!T(e,`Property`))return!1;let n=e.key;return T(n,`Identifier`)?t.has(n.name):T(n,`Literal`)&&typeof n.value==`string`&&t.has(n.value)}):!1},QWt=new Set([`addIssue`,`addIssues`,`errors`,`flatten`,`formErrors`,`format`]),$Wt=`This ZodError API was removed in Zod 4, so error handling can break during the upgrade.`,C9=e=>{let t=D(e);return T(t,`Identifier`)?y9(t)===`ZodError`:T(t,`MemberExpression`)?YWt(t)===`ZodError`:!1},eGt=e=>{let t=D(e);if(T(t,`NewExpression`))return C9(t.callee);if(!T(t,`CallExpression`))return!1;let n=x9(t);return n?.methodName===`create`&&C9(n.receiver)},w9=e=>{if(!T(e,`MemberExpression`))return!1;let t=e,n=C(t);return n!==null&&QWt.has(n)&&eGt(t.object)},tGt=e=>{let t=x9(e);return t?.methodName===`create`&&C9(t.receiver)},nGt=e=>{let t=e.parent;return!t||!T(t,`MemberExpression`)||D(t.object)!==e?!1:w9(t)},rGt=x({id:`zod-v4-no-deprecated-error-apis`,title:`Zod 3 error API breaks in Zod 4`,requires:[`zod:4`],tags:[`migration-hint`],severity:`warn`,recommendation:"Use the Zod 4 helpers instead: `z.treeifyError()`, `z.flattenError()`, `z.prettifyError()`, or read `error.issues` directly.",create:e=>{let t=!1;return{Program(e){t=ye(e,g9)},CallExpression(n){t&&(tGt(n)&&nGt(n)||!tGt(n)&&!w9(n.callee)||e.report({node:n,message:$Wt}))},MemberExpression(n){if(!t)return;let r=n.parent;r&&T(r,`CallExpression`)&&D(r.callee)===n||w9(n)&&e.report({node:n,message:$Wt})}}}}),iGt=new Set([`any`,`array`,`bigint`,`boolean`,`date`,`enum`,`literal`,`map`,`nativeEnum`,`never`,`null`,`number`,`object`,`record`,`set`,`string`,`tuple`,`undefined`,`union`,`unknown`,`void`]),aGt=new Set([`errorMap`,`invalid_type_error`,`required_error`]),oGt=new Set([`bigint`,`boolean`,`date`,`number`,`string`]),sGt=new Set([`errorMap`]),cGt=new Set([`parse`,`safeParse`,`parseAsync`,`safeParseAsync`]),lGt=e=>{let t=e.arguments[0],n=t?D(t):null;return!!(n&&T(n,`Literal`)&&typeof n.value==`string`)},uGt=e=>{let t=XWt(e);return t===null||!iGt.has(t)?!1:oGt.has(t)&&lGt(e)||e.arguments.some(e=>ZWt(e,aGt))},dGt=e=>{let t=x9(e);if(!t||!cGt.has(t.methodName))return!1;let n=D(t.receiver);return!T(n,`CallExpression`)||!b9(n,iGt)?!1:ZWt(e.arguments[1],sGt)},fGt=x({id:`zod-v4-no-deprecated-error-customization`,title:`Zod 3 error customization breaks in Zod 4`,requires:[`zod:4`],tags:[`migration-hint`],severity:`warn`,recommendation:"In Zod 4, use the single `{ error }` option instead of message strings, `invalid_type_error`, `required_error`, or `errorMap`.",create:e=>({CallExpression(t){!uGt(t)&&!dGt(t)||e.report({node:t,message:`This Zod 3 error-customization form is not compatible with Zod 4, so custom messages can stop applying during the upgrade.`})}})}),pGt=new Set([`object`]),mGt=new Set([`deepPartial`,`merge`,`nonstrict`,`passthrough`,`strict`,`strip`]),hGt=new Set([`number`]),gGt=new Set([`safe`]),_Gt=new Set([`function`]),vGt=new Set([`args`,`returns`]),yGt=new Set([`nativeEnum`,`ostring`,`onumber`,`oboolean`,`oarray`,`promise`]),T9=new Set([`any`,`array`,`bigint`,`boolean`,`date`,`enum`,`function`,`literal`,`map`,`nativeEnum`,`never`,`null`,`number`,`object`,`optional`,`promise`,`record`,`set`,`string`,`tuple`,`undefined`,`union`,`unknown`,`void`]),bGt=new Set([`Enum`,`Values`]),xGt=new Set([`enum`]),SGt=new Set([`record`]),CGt=new Set([`literal`]),wGt=(e,t)=>{e.report({node:t,message:`This Zod 3 schema API changed in Zod 4, so this schema can fail after the upgrade.`})},TGt=e=>b9(e,yGt),EGt=e=>{let t=x9(e);if(!t||t.methodName!==`create`)return!1;let n=D(t.receiver),r=YWt(n);if(r!==null)return T9.has(r);if(!T(n,`Identifier`))return!1;let i=y9(n);return i!==null&&T9.has(i)},DGt=e=>e.arguments.length===1&&b9(e,SGt),OGt=e=>S9(e,_Gt,vGt),kGt=e=>{if(!e)return!1;let t=D(e);if(T(t,`CallExpression`)){let e=D(t.callee);return T(e,`Identifier`)&&e.name===`Symbol`}if(!T(t,`MemberExpression`))return!1;let n=D(t.object);return T(n,`Identifier`)&&n.name===`Symbol`},AGt=e=>e.arguments.length>0&&b9(e,CGt)&&kGt(e.arguments[0]),jGt=e=>{let t=C(e);if(t===null||!bGt.has(t))return!1;let n=D(e.object);return T(n,`CallExpression`)&&b9(n,xGt)},MGt=e=>{let t=x9(e);if(!t||t.methodName!==`refine`)return!1;let n=D(t.receiver);if(!T(n,`CallExpression`)||!b9(n,T9))return!1;let r=e.arguments[1];return T(r,`FunctionExpression`)||T(r,`ArrowFunctionExpression`)},NGt=e=>{if(C(e)!==`create`)return!1;let t=D(e.object);if(!T(t,`MemberExpression`))return!1;let n=C(t);return n!==null&&T9.has(n)&&v9(t.object)},PGt=x({id:`zod-v4-no-deprecated-schema-apis`,title:`Zod 3 schema API breaks in Zod 4`,requires:[`zod:4`],tags:[`migration-hint`],severity:`warn`,recommendation:"Switch to the Zod 4 versions: top-level factories like `z.enum()`, object helpers like `z.strictObject()`, the new `z.function({ input, output })` form, and explicit key/value schemas for `z.record()`.",create:e=>{let t=!1;return{Program(e){t=ye(e,g9)},CallExpression(n){t&&(TGt(n)||EGt(n)||DGt(n)||AGt(n)||OGt(n)||S9(n,pGt,mGt)||S9(n,hGt,gGt)||MGt(n))&&wGt(e,n)},MemberExpression(n){if(!t)return;let r=n.parent;r&&T(r,`CallExpression`)&&D(r.callee)===n||(jGt(n)||NGt(n))&&wGt(e,n)}}}}),FGt=new Set([`string`]),IGt=new Set([`base64`,`base64url`,`cidr`,`cidrv4`,`cidrv6`,`cuid`,`cuid2`,`date`,`datetime`,`duration`,`email`,`emoji`,`ip`,`ipv4`,`ipv6`,`jwt`,`nanoid`,`time`,`ulid`,`url`,`uuid`]),LGt=x({id:`zod-v4-prefer-top-level-string-formats`,title:`Format method on z.string()`,requires:[`zod:4`],tags:[`migration-hint`],severity:`warn`,recommendation:"Use the Zod 4 top-level format checks like `z.email()`, `z.uuid()`, or `z.ipv4()` instead of `z.string().<format>()`.",create:ve(e=>{let t=!1;return{Program(e){t=ye(e,g9)},CallExpression(n){t&&S9(n,FGt,IGt)&&e.report({node:n,message:"This `z.string().<format>()` check is deprecated in Zod 4, so it can break during the upgrade."})}}})}),RGt=(e,t,n)=>{let r=D(e);if(!T(r,`Identifier`))return r;let i=t.symbolFor(r);return i?.kind!==`const`||!i.initializer||n.has(i.id)||i.references.some(e=>e.flag!==`read`)?r:(n.add(i.id),RGt(i.initializer,t,n))},zGt=(e,t,n,r=new Set)=>{let i=RGt(e,n,r),[a,...o]=t;if(!a)return i;if(!T(i,`ObjectExpression`))return null;for(let e of i.properties)if(T(e,`Property`)&&S(e)===a)return zGt(e.value,o,n,r);return null},BGt=(e,t,n)=>{let r=D(e);return T(r,`Identifier`)&&t.has(r.name)&&n.isGlobalReference(r)},VGt=(e,t,n)=>{let r=D(e);return t===`array`&&T(r,`ArrayExpression`)?!0:T(r,`NewExpression`)?BGt(r.callee,t===`array`?new Set([`Array`]):new Set([`Map`,`Set`]),n):!1},E9=({collectionKind:e,functionNode:t,propertyPath:n,scopes:r})=>{if(!y(t))return!1;let i=T(t.body,`BlockStatement`)?Wt(t).flatMap(e=>e.argument?[e.argument]:[]):[t.body];return i.length>0&&i.every(t=>{let i=zGt(t,n,r);return!!(i&&VGt(i,e,r))})},HGt=new Map([[`zustand`,new Set([`create`,`createStore`,`useStore`])],[`zustand/vanilla`,new Set([`createStore`])],[`zustand/react`,new Set([`useStore`])],[`zustand/traditional`,new Set([`createWithEqualityFn`,`useStoreWithEqualityFn`])],[`zustand/shallow`,new Set([`shallow`,`useShallow`])],[`zustand/react/shallow`,new Set([`useShallow`])],[`zustand/middleware`,new Set([`combine`,`createJSONStorage`,`devtools`,`persist`,`redux`,`subscribeWithSelector`])],[`zustand/middleware/immer`,new Set([`immer`])]]),UGt=new Map([[`combine`,1],[`devtools`,0],[`immer`,0],[`persist`,0],[`subscribeWithSelector`,0]]),WGt=e=>{switch(e){case`combine`:case`create`:case`createJSONStorage`:case`createStore`:case`createWithEqualityFn`:case`devtools`:case`immer`:case`persist`:case`redux`:case`shallow`:case`subscribeWithSelector`:case`useShallow`:case`useStore`:case`useStoreWithEqualityFn`:return e;default:return null}},GGt=e=>{let t=Ue(e);return!t||cn(t)||T(e.declarationNode,`ImportSpecifier`)&&e.declarationNode.importKind===`type`?null:typeof t.source.value==`string`?t.source.value:null},KGt=e=>{let t=GGt(e),n=t?HGt.get(t):null;if(!t||!n)return null;if(t===`zustand`&&T(e.declarationNode,`ImportDefaultSpecifier`))return{apiName:`create`,moduleSource:t};let r=kt(e.declarationNode),i=r?WGt(r):null;return i&&n.has(i)?{apiName:i,moduleSource:t}:null},qGt=(e,t)=>{if(!T(e,`Identifier`))return null;let n=w(e,t);return!n||!T(n.declarationNode,`ImportNamespaceSpecifier`)?null:GGt(n)},D9=(e,t)=>{let n=D(e);if(T(n,`Identifier`)){let e=w(n,t);return e?e.kind===`import`?KGt(e):e.kind!==`const`||!e.initializer?null:D9(e.initializer,t):null}if(!T(n,`MemberExpression`))return null;let r=C(n),i=qGt(D(n.object),t),a=i?HGt.get(i):null,o=r?WGt(r):null;return o&&i&&a?.has(o)?{apiName:o,moduleSource:i}:null},JGt=(e,t,n,r=new Set)=>{let i=D(e);if(r.has(i))return null;r.add(i);let a=M(e,t);if(y(a))return a;if(!T(i,`CallExpression`))return null;let o=D9(i.callee,t),s=o?UGt.get(o.apiName):null;if(!o||s==null)return null;let c=i.arguments[s];return!c||T(c,`SpreadElement`)?null:(n.add(o.apiName),JGt(c,t,n,r))},O9=e=>e?.apiName===`create`||e?.apiName===`createStore`||e?.apiName===`createWithEqualityFn`,YGt=(e,t)=>{let n=D(e);if(T(n,`Identifier`)){let e=w(n,t);return e?.kind!==`const`||!e.initializer?null:YGt(e.initializer,t)}if(!T(n,`CallExpression`)||n.arguments.length>0)return null;let r=D9(n.callee,t);return O9(r)?r:null},k9=(e,t)=>{let n=A9(e,t);if(!n)return null;let r=new Set,i=JGt(n.creatorArgument,t,r);return i?{creatorFunction:i,factoryApiName:n.factoryApiName,middlewareNames:r}:null},A9=(e,t)=>{let n=D9(e.callee,t);if(!O9(n)&&(n=YGt(e.callee,t),!O9(n)))return null;let r=e.arguments[0];return!r||T(r,`SpreadElement`)?null:{callExpression:e,creatorArgument:r,factoryApiName:n.apiName}},XGt=new Set([`filter`,`flat`,`flatMap`,`map`,`toReversed`,`toSorted`,`toSpliced`,`with`]),ZGt=new Set([`reverse`,`sort`]),QGt=new Map([[`Array`,new Map([[`from`,`array`],[`of`,`array`]])],[`Object`,new Map([[`create`,`object`],[`entries`,`array`],[`fromEntries`,`object`],[`keys`,`array`],[`values`,`array`]])]]),$Gt=(e,t)=>{let n=D(e);return T(n,`Identifier`)&&n.name===`undefined`&&t.isGlobalReference(n)||T(n,`Literal`)&&n.value===null||T(n,`UnaryExpression`)&&n.operator===`void`},j9=(e,t,n)=>{let r=e[t];return r?T(r,`SpreadElement`)?!0:!$Gt(r,n):!1},eKt=(e,t)=>{let n=D(e);if(!T(n,`CallExpression`))return null;let r=A9(n,t);return!r||r.factoryApiName!==`create`&&r.factoryApiName!==`createWithEqualityFn`?null:{creatorFunction:k9(n,t)?.creatorFunction??null,hasDefaultEquality:r.factoryApiName===`createWithEqualityFn`&&j9(n.arguments,1,t),supportsEqualityArgument:r.factoryApiName===`createWithEqualityFn`}},tKt=(e,t,n=new Set)=>{let r=D(e);if(!T(r,`Identifier`))return null;let i=t.symbolFor(r);return i?.kind!==`const`||!i.initializer||n.has(i.id)||i.references.some(e=>e.flag!==`read`)?null:(n.add(i.id),eKt(i.initializer,t)??tKt(i.initializer,t,n))},nKt=(e,t)=>{let n=D9(e.callee,t);if(n?.apiName===`useStore`||n?.apiName===`useStoreWithEqualityFn`){let r=e.arguments[1];return!r||T(r,`SpreadElement`)||n.apiName===`useStoreWithEqualityFn`&&j9(e.arguments,2,t)?null:{selector:r,storeCreatorFunction:null}}let r=tKt(e.callee,t),i=e.arguments[0];return!r||!i||T(i,`SpreadElement`)||r.hasDefaultEquality||r.supportsEqualityArgument&&j9(e.arguments,1,t)?null:{selector:i,storeCreatorFunction:r.creatorFunction}},rKt=(e,t)=>D9(e.callee,t)?.apiName===`useShallow`,M9=(e,t,n=new Set)=>{let r=D(e);if(y(r))return r;if(T(r,`CallExpression`)){if(rKt(r,t)||!k(r,`useCallback`,t,{allowGlobalReactNamespace:!0,resolveNamedAliases:!0}))return null;let e=r.arguments[0];return!e||T(e,`SpreadElement`)?null:M9(e,t,n)}if(!T(r,`Identifier`))return null;let i=t.symbolFor(r);return!i||n.has(i.id)||i.references.some(e=>e.flag!==`read`)?null:i.kind===`function`&&y(i.declarationNode)?i.declarationNode:i.kind!==`const`||!i.initializer?null:(n.add(i.id),M9(i.initializer,t,n))},N9=(e,t,n=new Set)=>{let r=D(e);if(T(r,`Identifier`)){let e=t.scopes.symbolFor(r),i=y(t.selectorFunction)?t.selectorFunction.params[0]:null;return i&&T(i,`Identifier`)&&e?.id===t.scopes.symbolFor(i)?.id?[]:e?.kind!==`const`||!e.initializer||n.has(e.id)||e.references.some(e=>e.flag!==`read`)?null:(n.add(e.id),N9(e.initializer,t,n))}if(!T(r,`MemberExpression`))return null;let i=C(r),a=N9(r.object,t,n);return i&&a?[...a,i]:null},iKt=(e,t,n)=>{let r=D(e.callee);if(!T(r,`MemberExpression`))return null;let i=C(r);if(!i)return null;let a=D(r.object);if(T(a,`Identifier`)&&t.scopes.isGlobalReference(a)){let r=QGt.get(a.name)?.get(i);if(r)return{kind:r,node:e};if(a.name===`Object`&&i===`assign`){let r=e.arguments[0];if(!r||T(r,`SpreadElement`))return null;let i=P9(r,t,new Set(n));return i?{kind:i.kind,node:e}:null}}if(XGt.has(i)){if(P9(a,t,new Set(n))?.kind===`array`)return{kind:`array`,node:e};let r=N9(a,t);return r&&t.storeCreatorFunction&&E9({collectionKind:`array`,functionNode:t.storeCreatorFunction,propertyPath:r,scopes:t.scopes})?{kind:`array`,node:e}:null}return ZGt.has(i)&&P9(a,t,new Set(n))?{kind:`array`,node:e}:null},P9=(e,t,n=new Set)=>{let r=bp(e,t.scopes);if(r?.kind===`array`||r?.kind===`function`||r?.kind===`instance`||r?.kind===`object`)return{kind:r.kind,node:e};let i=D(e);if(T(i,`CallExpression`))return iKt(i,t,n);if(T(i,`ConditionalExpression`))return P9(i.consequent,t,new Set(n))??P9(i.alternate,t,new Set(n));if(T(i,`LogicalExpression`))return i.operator===`&&`?P9(i.right,t,n):P9(i.left,t,new Set(n))??P9(i.right,t,new Set(n));if(T(i,`SequenceExpression`)){let e=i.expressions[i.expressions.length-1];return e?P9(e,t,n):null}if(!T(i,`Identifier`))return null;let a=t.scopes.symbolFor(i);return a?.kind!==`const`||a.scope.kind===`module`||!a.initializer||n.has(a.id)||a.references.some(e=>e.flag!==`read`)?null:(n.add(a.id),P9(a.initializer,t,n))},aKt=(e,t,n)=>{if(!y(e)||!e.body)return null;let r={scopes:t,selectorFunction:e,storeCreatorFunction:n};if(!T(e.body,`BlockStatement`))return P9(e.body,r);let i=null;return A(e.body,t=>{if(i||t!==e.body&&y(t))return!1;if(!(!T(t,`ReturnStatement`)||!t.argument))return i=P9(t.argument,r),i?!1:void 0}),i},oKt=x({id:`zustand-no-fresh-selector-result`,title:`Zustand selector returns a fresh value`,severity:`error`,category:`Performance`,requires:[`zustand`,`zustand:5`],recommendation:"Select a stable store field, split the selector, or wrap a collection selector with `useShallow`.",create:e=>({CallExpression(t){let n=nKt(t,e.scopes);if(!n)return;let r=M9(n.selector,e.scopes);if(!r)return;let i=aKt(r,e.scopes,n.storeCreatorFunction);i&&e.report({node:i.node,message:"This Zustand selector creates a new reference whenever the store is read, so Object.is never sees a stable snapshot and Zustand v5 can repeatedly render or hit maximum update depth. Select a stable field or use `useShallow`."})}})}),sKt=e=>e?T(e,`Identifier`)?e:T(e,`AssignmentPattern`)&&T(e.left,`Identifier`)?e.left:null:null,cKt=(e,t,n)=>{let r=D(e.callee);return T(r,`Identifier`)?w(r,n.scopes)?.id===t.id:!1},lKt=(e,t,n)=>{let r=new Set,i=e=>{!y(e)||e.generator||r.has(e)||(r.add(e),A(e,r=>{if(r!==e&&y(r))return!1;if(!T(r,`CallExpression`))return;if(cKt(r,t,n)){if(!k3(r,e,n))return;n.report({node:r,message:"`get()` runs before Zustand installs the initial state, so it returns `undefined` here."});return}if(!k3(r,e,n))return;let a=M(r.callee,n.scopes);!a||a===e||i(a)}))};i(e)},uKt=x({id:`zustand-no-get-during-initialization`,title:`Zustand get() called during store initialization`,severity:`error`,category:`Correctness`,recommendation:"Move the read into a deferred store action or derive the initial value without calling `get()`.",requires:[`zustand`,`zustand:1`],create:e=>{let t=new Set;return{CallExpression(n){let r=k9(n,e.scopes);r&&t.add(r.creatorFunction)},"Program:exit"(){for(let n of t){if(n.generator)continue;let t=sKt(n.params[1]),r=t?e.scopes.symbolFor(t):null;r&&lKt(n,r,e)}}}}}),dKt=`This Zustand state reference is mutated and reused, so subscribers can miss the update.`,fKt=new Set([`concat`,`filter`,`flat`,`flatMap`,`map`,`slice`,`toReversed`,`toSorted`,`toSpliced`,`with`]),pKt=new Set([`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`IfStatement`,`LabeledStatement`,`BlockStatement`,`SwitchStatement`,`TryStatement`,`WhileStatement`,`WithStatement`]),mKt=new Set([`ConditionalExpression`,`LogicalExpression`]),F9=e=>e?T(e,`Identifier`)?e:T(e,`AssignmentPattern`)&&T(e.left,`Identifier`)?e.left:null:null,hKt=(e,t,n)=>{let r=F9(e.params[t]);return r?n.scopes.symbolFor(r)??null:null},I9=(e,t,n)=>{let r=D(e.callee);if(!T(r,`Identifier`))return!1;let i=w(r,n.scopes);return!!(i&&t.has(i.id))},gKt=e=>{let t=D(e);for(;T(t,`MemberExpression`);)t=D(t.object);return T(t,`CallExpression`)?t:null},_Kt=(e,t,n)=>{let r=D(e.callee);if(!T(r,`MemberExpression`)||C(r)!==t)return null;let i=D(r.object);return T(i,`Identifier`)?w(i,n.scopes)?.id??null:null},vKt=(e,t,n,r)=>{let i=_Kt(e,t,r);return i!==null&&n.has(i)},yKt=(e,t,n,r)=>{if(!e)return!1;let i=gKt(e);return!!(i&&(I9(i,t,r)||vKt(i,`getState`,n,r)))},L9=(e,t,n)=>{let r=B(e,n);return!!(r&&(r===t||t.startsWith(`${r}.`)))},R9=(e,t,n,r)=>{if(!e)return!1;let i=D(e);return i===n?!0:T(i,`Identifier`)||T(i,`MemberExpression`)?L9(i,t,r):T(i,`ObjectExpression`)?i.properties.some(e=>{if(T(e,`SpreadElement`)){let n=B(e.argument,r);return!!(n&&n!==t&&t.startsWith(`${n}.`))}return T(e,`Property`)&&R9(e.value,t,n,r)}):T(i,`ArrayExpression`)?i.elements.some(e=>!!e&&!T(e,`SpreadElement`)&&R9(e,t,n,r)):T(i,`ConditionalExpression`)?R9(i.consequent,t,n,r)||R9(i.alternate,t,n,r):T(i,`LogicalExpression`)?R9(i.left,t,n,r)||R9(i.right,t,n,r):T(i,`SequenceExpression`)?R9(i.expressions[i.expressions.length-1],t,n,r):!1},bKt=(e,t,n)=>{if(!e)return!1;let r=!1;return A(e,e=>{let i=D(e);if(y(i))return!1;if(T(i,`SpreadElement`))return B(i.argument,n)===t&&(r=!0),!1;if(T(i,`NewExpression`)){let e=D(i.callee),a=i.arguments[0];T(e,`Identifier`)&&(e.name===`Map`||e.name===`Set`)&&a&&!T(a,`SpreadElement`)&&B(a,n)===t&&(r=!0);return}if(!T(i,`CallExpression`))return;let a=D(i.callee);if(!T(a,`MemberExpression`))return;let o=C(a);o&&fKt.has(o)&&B(a.object,n)===t&&(r=!0)}),r},xKt=(e,t)=>{let n=D(e);return T(n,`UnaryExpression`)&&n.operator===`void`||T(n,`Identifier`)&&n.name===`undefined`&&t.scopes.isGlobalReference(n)},z9=e=>{if(!y(e))return[];if(!T(e.body,`BlockStatement`))return[e.body];let t=[];for(let n of e.body.body)T(n,`ReturnStatement`)&&n.argument&&t.push(n.argument);return t},SKt=e=>e.some(e=>pKt.has(e.type)),CKt=e=>{let t=!1;return A(e,n=>{if(n!==e&&y(n))return!1;if(T(n,`ReturnStatement`)||T(n,`ThrowStatement`))return t=!0,!1}),t},wKt=e=>{if(!T(e,`IfStatement`))return pKt.has(e.type);if(CKt(e))return!0;let t=[];for(let n of[e.consequent,e.alternate])n&&t.push(...T(n,`BlockStatement`)?n.body:[n]);return t.some(wKt)},TKt=e=>{if(e.some(wKt))return!0;let t=!1;for(let n of e)A(n,e=>{if(e!==n&&y(e))return!1;if(mKt.has(e.type))return t=!0,!1});return t},EKt=(e,t,n,r,i,a)=>{if(!y(e)||e.async||e.generator)return;let o=F9(e.params[0]);if(!o)return;let s={mutableStateSourceNames:new Set([o.name])},c=z9(e),l=[],u={isProvenMutatingMethodCall:e=>H9(e,r,i)};if(T(e.body,`BlockStatement`)){if(SKt(e.body.body))return;for(let t of e.body.body){if(l.push(...ez(t,s,u)),T(t,`VariableDeclaration`))QR(t,s);else if(T(t,`ExpressionStatement`)){let e=D(t.expression);T(e,`AssignmentExpression`)&&$R(e,s)}if(T(t,`ReturnStatement`))break}}else l.push(...ez(e.body,s,u));for(let e of l){let r=V9(e.receiver,i),o=c.some(e=>xKt(e,i)),s=c.some(a=>K9(a,e,i)===!1||yKt(a,t,n,i)&&r!==null&&W9(V9(a,i),r));c.length>0&&!s&&!o||a.has(e.node)||(a.add(e.node),i.report({node:e.node,message:dKt}))}},B9=(e,t,n,r)=>{let i=[];return A(e,e=>{if(y(e))return!1;T(e,`CallExpression`)&&(I9(e,t,r)||vKt(e,`setState`,n,r))&&i.push(e)}),i},V9=(e,t,n=new Set,r=!1)=>{let i=D(e);if(T(i,`Identifier`)){let e=t.scopes.symbolFor(i);if(!e||n.has(e.id))return[];n.add(e.id);let a=e.bindingIdentifier.parent,o=a?.parent,s=o?.parent;if(T(a,`Property`)&&T(o,`ObjectPattern`)&&T(s,`VariableDeclarator`)){let e=S(a),i=s.init?V9(s.init,t,n,r):null;return e&&i?[...i,e]:null}return!r&&e.kind!==`const`||!e.initializer?[]:V9(e.initializer,t,n,r)}if(T(i,`MemberExpression`)){let e=C(i),a=V9(i.object,t,n,r);return e&&a?[...a,e]:null}return T(i,`CallExpression`)?[]:null},H9=(e,t,n)=>{let r=D(e.callee);if(!T(r,`MemberExpression`))return!1;let i=C(r),a=V9(r.object,n,new Set,!0);return!i||!a?!1:dr.has(i)&&E9({collectionKind:`array`,functionNode:t,propertyPath:a,scopes:n.scopes})?!0:fr.has(i)&&E9({collectionKind:`map-or-set`,functionNode:t,propertyPath:a,scopes:n.scopes})},U9=(e,t,n)=>{let r=D(e);return T(r,`ObjectExpression`)||T(r,`ArrayExpression`)||T(r,`NewExpression`)||T(r,`Literal`)||T(r,`TemplateLiteral`)||bKt(r,t,n)},DKt=(e,t,n,r,i,a,o,s=[])=>{let c=t[0];if(!c)return!0;let l=!a;for(let a of e.properties){if(T(a,`SpreadElement`)){let e=B(a.argument,o),t=V9(a.argument,o);l=e===r||W9(t,s)?!1:null;continue}if(!T(a,`Property`)||S(a)!==c)continue;if(t.length===1){l=R9(a.value,n,i,o)?!1:U9(a.value,n,o)?!0:null;continue}let e=D(a.value);l=T(e,`ObjectExpression`)?DKt(e,t.slice(1),n,`${r}.${c}`,i,!1,o,[...s,c]):L9(e,n,o)?!1:U9(e,n,o)?!0:null}return l},W9=(e,t)=>!!(e&&e.length<=t.length&&e.every((e,n)=>e===t[n])),OKt=(e,t,n,r,i=[])=>{let a=t[0];if(!a)return!0;let o=!n;for(let n of e.properties){if(T(n,`SpreadElement`)){o=null;continue}if(!T(n,`Property`)||S(n)!==a)continue;let e=D(n.value);if(t.length>1&&T(e,`ObjectExpression`)){o=OKt(e,t.slice(1),!1,r,[...i,a]);continue}if(W9(V9(e,r),[...i,...t])){o=!1;continue}o=U9(e,``,r)?!0:null}return o},kKt=(e,t,n,r)=>{let i=t[0];if(!i)return!1;for(let a of e.properties){if(!T(a,`Property`)||S(a)!==i)continue;let e=D(a.value);return t.length>1?T(e,`ObjectExpression`)&&kKt(e,t.slice(1),n,r):T(e,`Identifier`)&&r.scopes.symbolFor(e)?.id===n}return!1},G9=(e,t)=>{let n=e,r=b(t.node);for(;n.parent&&n.parent!==r;){let e=n.parent;if(T(e,`IfStatement`)&&(e.consequent===n||e.alternate===n)){if(z(t.node,n)){n=e;continue}let r=e.consequent===n?e.alternate:e.consequent;return r&&z(t.node,r)?!1:null}n=e}return!0},AKt=(e,t)=>T(e.parent,`ExpressionStatement`)?G9(e.parent,t):null,jKt=(e,t,n,r,i)=>{let a=Gn(t.receiver);if(!a)return;let o=i.scopes.symbolFor(a);if(!o||o.kind===`const`)return;let s=D(e);if(!(n.length===0?T(s,`Identifier`)&&i.scopes.symbolFor(s)?.id===o.id:T(s,`ObjectExpression`)&&kKt(s,n,o.id,i)))return;let c=O(t.node),l=O(e),u=b(t.node);if(c===null||l===null)return;let d=null,f=null,p=null;for(let e of o.references){if(e.flag===`read`)continue;let n=e.identifier.parent;if(!T(n,`AssignmentExpression`)||n.operator!==`=`||n.left!==e.identifier||b(n)!==u)continue;let r=O(n);if(r===null||r<=c||r>=l)continue;let i=AKt(n,t);if(i!==!1){if(i===null){(p===null||r>p)&&(p=r);continue}f!==null&&r<=f||(d=n,f=r)}}if(p!==null&&(f===null||p>f))return null;if(d)return L9(d.right,r,i)?!1:U9(d.right,r,i)?!0:null},K9=(e,t,n)=>{let r=B(t.receiver,n),i=V9(t.receiver,n,new Set,!0);if(!i)return null;let a=D(e);if(!r)return i.length===0?null:T(a,`ObjectExpression`)?OKt(a,i,!0,n):W9(V9(a,n),i)?!1:null;if(i.length===0){if(R9(a,r,t.node,n)){let e=jKt(a,t,i,r,n);return e===void 0?!1:e}return U9(a,r,n)?!0:null}if(!T(a,`ObjectExpression`))return R9(a,r,t.node,n)?!1:null;let o=`.${i.join(`.`)}`,s=DKt(a,i,r,r.endsWith(o)?r.slice(0,-o.length):r,t.node,!0,n);if(s!==!1)return s;let c=jKt(a,t,i,r,n);return c===void 0?!1:c},MKt=(e,t,n)=>{let r=e.arguments[0];if(!r)return!1;if(T(r,`SpreadElement`))return null;let i=M(r,n.scopes),a=(i?z9(i):[r]).map(e=>K9(e,t,n));return a.some(e=>e===!0)?!0:a.some(e=>e===null)?null:!1},NKt=(e,t)=>e===!0||t===!0?!0:e===null||t===null?null:!1,q9=(e,t,n,r,i)=>{if(T(e,`BlockStatement`))return e.body.reduce((e,a)=>NKt(e,q9(a,t,n,r,i)),!1);if(T(e,`IfStatement`)){let a=q9(e.consequent,t,n,r,i),o=e.alternate?q9(e.alternate,t,n,r,i):!1;return a===!1||o===!1?!1:a===!0&&o===!0?!0:null}return B9(e,n,r,i).reduce((e,n)=>NKt(e,MKt(n,t,i)),!1)},PKt=(e,t)=>{let n=[];return A(e,e=>{if(y(e))return!1;T(e,`IfStatement`)&&n.push({statement:e,statementIndex:t})}),n},FKt=(e,t)=>{if(T(e,`VariableDeclaration`)){QR(e,t);return}if(!T(e,`ExpressionStatement`))return;let n=D(e.expression);T(n,`AssignmentExpression`)&&$R(n,t)},J9=(e,t,n,r)=>{let i={mutableStateSourceNames:new Set(t.mutableStateSourceNames)};t.isAdditionalMutableStateSource&&(i.isAdditionalMutableStateSource=t.isAdditionalMutableStateSource);let a=T(e,`BlockStatement`)?e.body:[e],o=[],s={isProvenMutatingMethodCall:e=>H9(e,n,r)};for(let e of a){if(T(e,`IfStatement`)){o.push(...J9(e.consequent,i,n,r)),e.alternate&&o.push(...J9(e.alternate,i,n,r));continue}o.push(...ez(e,i,s)),FKt(e,i)}return o},IKt=(e,t,n,r,i,a,o,s,c=[])=>{if(TKt(e))return;let l={isAdditionalMutableStateSource:e=>yKt(e,t,r,o),mutableStateSourceNames:new Set},u=[],d=[],f=[],p={isProvenMutatingMethodCall:e=>H9(e,a,o)};for(let t=0;t<e.length;t+=1){let r=e[t];if(T(r,`IfStatement`))for(let e of[r.consequent,r.alternate]){if(!e)continue;for(let n of J9(e,l,a,o))u.push({branchRoot:e,mutation:n,statementIndex:t});let r=B9(e,n,i,o);for(let n of r)d.push({branchRoot:e,callExpression:n,statementIndex:t})}else{for(let e of ez(r,l,p))u.push({branchRoot:null,mutation:e,statementIndex:t});for(let e of B9(r,n,i,o))d.push({branchRoot:null,callExpression:e,statementIndex:t})}if(f.push(...PKt(r,t)),FKt(r,l),T(r,`ReturnStatement`))break}for(let{branchRoot:e,mutation:t,statementIndex:r}of u){let a=[...d.filter(n=>{if(!n.branchRoot){if(n.statementIndex!==r)return n.statementIndex>r;let e=O(t.node),i=O(n.callExpression);return z(t.node,n.callExpression)||e!==null&&i!==null&&i>=e}if(n.statementIndex!==r||n.branchRoot!==e||G9(n.callExpression,t)!==!0)return!1;let i=O(t.node),a=O(n.callExpression);return z(t.node,n.callExpression)||i!==null&&a!==null&&a>=i}).map(e=>MKt(e.callExpression,t,o)),...c.map(e=>K9(e,t,o))];for(let e of f){if(e.statementIndex<r)continue;let s=O(t.node),c=O(e.statement);s===null||c===null||c<=s||G9(e.statement,t)!==!0||a.push(q9(e.statement,t,n,i,o))}a.some(e=>e!==!1)||s.has(t.node)||(s.add(t.node),o.report({node:t.node,message:dKt}))}},LKt=x({id:`zustand-no-mutating-state`,title:`Zustand state mutated in place`,severity:`error`,category:`Correctness`,recommendation:`Create a new object, array, Map, or Set before passing the updated value to Zustand.`,requires:[`zustand`,`zustand:1`],create:e=>{let t=new Map,n=new Set,r=new Set,i=new Map,a=(e,t)=>{let n=i.get(e);n?n.add(t):i.set(e,new Set([t]))},o=new WeakSet,s=null;return{Program(e){s=e},CallExpression(n){let r=k9(n,e.scopes);if(!r)return;let i=!r.middlewareNames.has(`immer`),a=t.get(r.creatorFunction);a?i&&(a.hasNonImmerUsage=!0):(a={creatorFunction:r.creatorFunction,getSymbol:hKt(r.creatorFunction,1,e),hasNonImmerUsage:i,nonImmerStoreSymbolIds:new Set,setSymbol:hKt(r.creatorFunction,0,e),storeSymbolIds:new Set},t.set(r.creatorFunction,a));let o=n.parent;if(T(o,`VariableDeclarator`)&&T(o.id,`Identifier`)){let t=e.scopes.symbolFor(o.id);t&&(a.storeSymbolIds.add(t.id),i&&a.nonImmerStoreSymbolIds.add(t.id))}},ArrowFunctionExpression(e){r.add(e)},FunctionDeclaration(e){r.add(e)},FunctionExpression(e){r.add(e)},"Program:exit"(){for(let r of t.values()){if(r.hasNonImmerUsage&&r.setSymbol){let t=r.setSymbol.id,n=new Set([t]);A(r.creatorFunction.body,i=>{if(!T(i,`CallExpression`)||!I9(i,n,e))return;let s=i.arguments[0];if(!s||T(s,`SpreadElement`))return;let c=M(s,e.scopes);c&&(a(c,t),EKt(c,r.getSymbol?new Set([r.getSymbol.id]):new Set,r.storeSymbolIds,r.creatorFunction,e,o))})}!s||r.storeSymbolIds.size===0||A(s,t=>{if(!T(t,`CallExpression`))return;let i=_Kt(t,`setState`,e);if(i===null||!r.storeSymbolIds.has(i))return;n.add(r);let s=t.arguments[0];if(!s||T(s,`SpreadElement`))return;let c=M(s,e.scopes);c&&(a(c,i),r.nonImmerStoreSymbolIds.has(i)&&EKt(c,new Set,new Set([i]),r.creatorFunction,e,o))})}let c=(t,n,a,c,l)=>{s&&IKt(s.body,t,n,a,c,l,e,o);for(let s of r){if(!y(s)||!T(s.body,`BlockStatement`))continue;let r=i.get(s),u=!!(r&&Array.from(r).some(e=>n.has(e)||c.has(e)));IKt(s.body.body,t,n,a,c,l,e,o,u?z9(s):[])}};for(let e of t.values()){let t=new Set,r=new Set;e.getSymbol&&e.setSymbol&&(e.setSymbol.references.length>0||n.has(e))&&t.add(e.getSymbol.id),e.setSymbol&&r.add(e.setSymbol.id),c(t,r,new Set,e.storeSymbolIds,e.creatorFunction);for(let t of e.storeSymbolIds){let n=new Set([t]);c(new Set,new Set,n,n,e.creatorFunction)}}}}}}),RKt=new Set([`create`,`createWithEqualityFn`]),zKt=new Set([`createStore`]),BKt=(e,t,n)=>{let r=D(e);if(!T(r,`CallExpression`))return!1;let i=A9(r,n);return!!(i&&t.has(i.factoryApiName))},VKt=(e,t,n)=>{let r=D(e);if(BKt(r,t,n))return!0;if(!T(r,`Identifier`))return!1;let i=w(r,n);return!!(i?.kind===`const`&&i.initializer&&BKt(i.initializer,t,n))},HKt=(e,t)=>{let n=D(e.callee);return T(n,`Identifier`)&&VKt(n,RKt,t)},UKt=(e,t)=>{if(e.arguments.length!==1)return!1;let n=D9(e.callee,t);return n?.apiName!==`useStore`&&n?.apiName!==`useStoreWithEqualityFn`?!1:VKt(e.arguments[0],zKt,t)},WKt=(e,t)=>{let n=X(e,t.scopes);if(!n||b(e)!==n)return!1;let r=Js(n);return!!(r&&(Gs(r)||gF(n,t.scopes,t.cfg)))},GKt=x({id:`zustand-no-whole-store-destructure`,title:`Whole Zustand store subscribed during render`,severity:`warn`,requires:[`zustand:1`],recommendation:`Pass a selector to the Zustand hook so this component rerenders only when the state it reads changes.`,create:e=>({CallExpression(t){WKt(t,e)&&(!(t.arguments.length===0&&HKt(t,e.scopes))&&!UKt(t,e.scopes)||e.report({node:t,message:`This hook subscribes to the whole Zustand store, so every store update rerenders this component. Pass a selector for the state it reads.`}))}})}),Y9=[{key:`react-doctor/active-static-asset`,id:`active-static-asset`,source:`react-doctor`,originallyExternal:!1,rule:{...p,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...p.tags??[]])]}},{key:`react-doctor/activity-wraps-effect-heavy-subtree`,id:`activity-wraps-effect-heavy-subtree`,source:`react-doctor`,originallyExternal:!1,rule:{...hne,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...hne.requires??[]])]}},{key:`react-doctor/advanced-event-handler-refs`,id:`advanced-event-handler-refs`,source:`react-doctor`,originallyExternal:!1,rule:{...Cne,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Cne.requires??[]])]}},{key:`react-doctor/agent-tool-capability-risk`,id:`agent-tool-capability-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Rn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Rn.tags??[]])]}},{key:`react-doctor/alt-text`,id:`alt-text`,source:`react-doctor`,originallyExternal:!0,rule:{...jr,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...jr.requires??[]])]}},{key:`react-doctor/anchor-ambiguous-text`,id:`anchor-ambiguous-text`,source:`react-doctor`,originallyExternal:!0,rule:{...Nr,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Nr.requires??[]])]}},{key:`react-doctor/anchor-has-content`,id:`anchor-has-content`,source:`react-doctor`,originallyExternal:!0,rule:{...Lr,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Lr.requires??[]])]}},{key:`react-doctor/anchor-is-valid`,id:`anchor-is-valid`,source:`react-doctor`,originallyExternal:!0,rule:{...Vr,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Vr.requires??[]])]}},{key:`react-doctor/anchor-target-exists`,id:`anchor-target-exists`,source:`react-doctor`,originallyExternal:!1,rule:{...Yr,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Yr.requires??[]])]}},{key:`react-doctor/aria-activedescendant-has-tabindex`,id:`aria-activedescendant-has-tabindex`,source:`react-doctor`,originallyExternal:!0,rule:{...li,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...li.requires??[]])]}},{key:`react-doctor/aria-braille-equivalent`,id:`aria-braille-equivalent`,source:`react-doctor`,originallyExternal:!0,rule:{...di,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...di.requires??[]])]}},{key:`react-doctor/aria-props`,id:`aria-props`,source:`react-doctor`,originallyExternal:!0,rule:{...pi,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...pi.requires??[]])]}},{key:`react-doctor/aria-proptypes`,id:`aria-proptypes`,source:`react-doctor`,originallyExternal:!0,rule:{...Ure,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Ure.requires??[]])]}},{key:`react-doctor/aria-role`,id:`aria-role`,source:`react-doctor`,originallyExternal:!0,rule:{...Gre,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Gre.requires??[]])]}},{key:`react-doctor/aria-unsupported-elements`,id:`aria-unsupported-elements`,source:`react-doctor`,originallyExternal:!0,rule:{...qre,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...qre.requires??[]])]}},{key:`react-doctor/artifact-baas-authority-surface`,id:`artifact-baas-authority-surface`,source:`react-doctor`,originallyExternal:!1,rule:{...qe,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...qe.tags??[]])]}},{key:`react-doctor/artifact-env-leak`,id:`artifact-env-leak`,source:`react-doctor`,originallyExternal:!1,rule:{...en,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...en.tags??[]])]}},{key:`react-doctor/artifact-secret-leak`,id:`artifact-secret-leak`,source:`react-doctor`,originallyExternal:!1,rule:{..._t,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,..._t.tags??[]])]}},{key:`react-doctor/async-await-in-loop`,id:`async-await-in-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...Xie,framework:`global`,category:`Performance`}},{key:`react-doctor/async-defer-await`,id:`async-defer-await`,source:`react-doctor`,originallyExternal:!1,rule:{...Xi,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Xi.requires??[]])]}},{key:`react-doctor/async-parallel`,id:`async-parallel`,source:`react-doctor`,originallyExternal:!1,rule:{...Sae,framework:`global`,category:`Performance`}},{key:`react-doctor/auth-token-in-web-storage`,id:`auth-token-in-web-storage`,source:`react-doctor`,originallyExternal:!1,rule:{...Aae,framework:`global`,category:`Security`}},{key:`react-doctor/autocomplete-valid`,id:`autocomplete-valid`,source:`react-doctor`,originallyExternal:!0,rule:{...da,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...da.requires??[]])]}},{key:`react-doctor/build-pipeline-secret-boundary`,id:`build-pipeline-secret-boundary`,source:`react-doctor`,originallyExternal:!1,rule:{...Ut,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Ut.tags??[]])]}},{key:`react-doctor/button-has-type`,id:`button-has-type`,source:`react-doctor`,originallyExternal:!0,rule:{...wa,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...wa.requires??[]])]}},{key:`react-doctor/checked-requires-onchange-or-readonly`,id:`checked-requires-onchange-or-readonly`,source:`react-doctor`,originallyExternal:!0,rule:{...Da,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Da.requires??[]])]}},{key:`react-doctor/class-component-missing-component-will-unmount-teardown`,id:`class-component-missing-component-will-unmount-teardown`,source:`react-doctor`,originallyExternal:!1,rule:{...Do,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Do.requires??[]])]}},{key:`react-doctor/click-events-have-key-events`,id:`click-events-have-key-events`,source:`react-doctor`,originallyExternal:!0,rule:{...os,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...os.requires??[]])]}},{key:`react-doctor/clickjacking-redirect-risk`,id:`clickjacking-redirect-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...ln,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...ln.tags??[]])]}},{key:`react-doctor/client-localstorage-no-version`,id:`client-localstorage-no-version`,source:`react-doctor`,originallyExternal:!1,rule:{...ds,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...ds.requires??[]])]}},{key:`react-doctor/client-passive-event-listeners`,id:`client-passive-event-listeners`,source:`react-doctor`,originallyExternal:!1,rule:{...Yse,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Yse.requires??[]])]}},{key:`react-doctor/command-execution-input-risk`,id:`command-execution-input-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...jte,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...jte.tags??[]])]}},{key:`react-doctor/context-provider-value-from-unmemoized-local-literal`,id:`context-provider-value-from-unmemoized-local-literal`,source:`react-doctor`,originallyExternal:!1,rule:{...Tce,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Tce.requires??[]])]}},{key:`react-doctor/control-has-associated-label`,id:`control-has-associated-label`,source:`react-doctor`,originallyExternal:!0,rule:{...ale,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...ale.requires??[]])]}},{key:`react-doctor/cors-cookie-trust-risk`,id:`cors-cookie-trust-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...hn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...hn.tags??[]])]}},{key:`react-doctor/dangerous-html-sink`,id:`dangerous-html-sink`,source:`react-doctor`,originallyExternal:!1,rule:{...he,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...he.tags??[]])]}},{key:`react-doctor/data-table-requires-accessible-name`,id:`data-table-requires-accessible-name`,source:`react-doctor`,originallyExternal:!1,rule:{...hle,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...hle.requires??[]])]}},{key:`react-doctor/debounce-no-cleanup`,id:`debounce-no-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...jc,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...jc.requires??[]])]}},{key:`react-doctor/design-no-em-dash-in-jsx-text`,id:`design-no-em-dash-in-jsx-text`,source:`react-doctor`,originallyExternal:!1,rule:{...$c,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...$c.requires??[]])]}},{key:`react-doctor/design-no-redundant-padding-axes`,id:`design-no-redundant-padding-axes`,source:`react-doctor`,originallyExternal:!1,rule:{...nl,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...nl.requires??[]])]}},{key:`react-doctor/design-no-redundant-size-axes`,id:`design-no-redundant-size-axes`,source:`react-doctor`,originallyExternal:!1,rule:{...rl,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...rl.requires??[]])]}},{key:`react-doctor/design-no-space-on-flex-children`,id:`design-no-space-on-flex-children`,source:`react-doctor`,originallyExternal:!1,rule:{...il,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...il.requires??[]])]}},{key:`react-doctor/design-no-three-period-ellipsis`,id:`design-no-three-period-ellipsis`,source:`react-doctor`,originallyExternal:!1,rule:{...ol,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...ol.requires??[]])]}},{key:`react-doctor/design-no-vague-button-label`,id:`design-no-vague-button-label`,source:`react-doctor`,originallyExternal:!1,rule:{...dl,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...dl.requires??[]])]}},{key:`react-doctor/details-requires-summary`,id:`details-requires-summary`,source:`react-doctor`,originallyExternal:!1,rule:{...fl,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...fl.requires??[]])]}},{key:`react-doctor/dialog-has-accessible-name`,id:`dialog-has-accessible-name`,source:`react-doctor`,originallyExternal:!1,rule:{...pl,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...pl.requires??[]])]}},{key:`react-doctor/display-name`,id:`display-name`,source:`react-doctor`,originallyExternal:!0,rule:{...Al,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Al.requires??[]])]}},{key:`react-doctor/effect-listener-cleanup-mismatch`,id:`effect-listener-cleanup-mismatch`,source:`react-doctor`,originallyExternal:!1,rule:{...Yl,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Yl.requires??[]])]}},{key:`react-doctor/effect-listener-cleanup-reference-mismatch`,id:`effect-listener-cleanup-reference-mismatch`,source:`react-doctor`,originallyExternal:!1,rule:{...eu,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...eu.requires??[]])]}},{key:`react-doctor/effect-needs-cleanup`,id:`effect-needs-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...Nf,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Nf.requires??[]])]}},{key:`react-doctor/effect-observer-needs-disconnect`,id:`effect-observer-needs-disconnect`,source:`react-doctor`,originallyExternal:!1,rule:{...Rf,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Rf.requires??[]])]}},{key:`react-doctor/effect-raf-loop-needs-cancel`,id:`effect-raf-loop-needs-cancel`,source:`react-doctor`,originallyExternal:!1,rule:{...ip,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...ip.requires??[]])]}},{key:`react-doctor/effect-remove-listener-inline-handler`,id:`effect-remove-listener-inline-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...op,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...op.requires??[]])]}},{key:`react-doctor/empty-table-header`,id:`empty-table-header`,source:`react-doctor`,originallyExternal:!0,rule:{...sp,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...sp.requires??[]])]}},{key:`react-doctor/exhaustive-deps`,id:`exhaustive-deps`,source:`react-doctor`,originallyExternal:!0,rule:{...lhe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...lhe.requires??[]])]}},{key:`react-doctor/expo-no-non-inlined-env`,id:`expo-no-non-inlined-env`,source:`react-doctor`,originallyExternal:!1,rule:{...phe,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...phe.tags??[]])]}},{key:`react-doctor/fieldset-requires-legend`,id:`fieldset-requires-legend`,source:`react-doctor`,originallyExternal:!1,rule:{...hhe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...hhe.requires??[]])]}},{key:`react-doctor/firebase-client-owned-authz-field`,id:`firebase-client-owned-authz-field`,source:`react-doctor`,originallyExternal:!1,rule:{...ot,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...ot.tags??[]])]}},{key:`react-doctor/firebase-permissive-rules`,id:`firebase-permissive-rules`,source:`react-doctor`,originallyExternal:!1,rule:{...et,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...et.tags??[]])]}},{key:`react-doctor/firebase-query-filter-as-auth`,id:`firebase-query-filter-as-auth`,source:`react-doctor`,originallyExternal:!1,rule:{...iee,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...iee.tags??[]])]}},{key:`react-doctor/forbid-component-props`,id:`forbid-component-props`,source:`react-doctor`,originallyExternal:!0,rule:{...Che,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Che.requires??[]])]}},{key:`react-doctor/forbid-dom-props`,id:`forbid-dom-props`,source:`react-doctor`,originallyExternal:!0,rule:{...Ehe,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Ehe.requires??[]])]}},{key:`react-doctor/forbid-elements`,id:`forbid-elements`,source:`react-doctor`,originallyExternal:!0,rule:{...Ahe,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Ahe.requires??[]])]}},{key:`react-doctor/form-control-requires-name`,id:`form-control-requires-name`,source:`react-doctor`,originallyExternal:!1,rule:{...$he,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...$he.requires??[]])]}},{key:`react-doctor/forward-ref-uses-ref`,id:`forward-ref-uses-ref`,source:`react-doctor`,originallyExternal:!0,rule:{...ege,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...ege.requires??[]])]}},{key:`react-doctor/git-provider-url-injection-risk`,id:`git-provider-url-injection-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...it,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...it.tags??[]])]}},{key:`react-doctor/heading-has-content`,id:`heading-has-content`,source:`react-doctor`,originallyExternal:!0,rule:{...rge,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...rge.requires??[]])]}},{key:`react-doctor/hook-import-rename-loses-use-prefix`,id:`hook-import-rename-loses-use-prefix`,source:`react-doctor`,originallyExternal:!1,rule:{...uge,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...uge.requires??[]])]}},{key:`react-doctor/hook-use-state`,id:`hook-use-state`,source:`react-doctor`,originallyExternal:!0,rule:{...gge,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...gge.requires??[]])]}},{key:`react-doctor/hooks-no-nan-in-deps`,id:`hooks-no-nan-in-deps`,source:`react-doctor`,originallyExternal:!1,rule:{...yge,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...yge.requires??[]])]}},{key:`react-doctor/html-has-lang`,id:`html-has-lang`,source:`react-doctor`,originallyExternal:!0,rule:{...Cge,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Cge.requires??[]])]}},{key:`react-doctor/html-label-has-single-control`,id:`html-label-has-single-control`,source:`react-doctor`,originallyExternal:!1,rule:{...Tge,framework:`global`,category:`Bugs`}},{key:`react-doctor/html-no-invalid-paragraph-child`,id:`html-no-invalid-paragraph-child`,source:`react-doctor`,originallyExternal:!1,rule:{...Age,framework:`global`,category:`Bugs`}},{key:`react-doctor/html-no-invalid-table-nesting`,id:`html-no-invalid-table-nesting`,source:`react-doctor`,originallyExternal:!1,rule:{...zge,framework:`global`,category:`Bugs`}},{key:`react-doctor/html-no-nested-form`,id:`html-no-nested-form`,source:`react-doctor`,originallyExternal:!1,rule:{...Hge,framework:`global`,category:`Bugs`}},{key:`react-doctor/html-no-nested-interactive`,id:`html-no-nested-interactive`,source:`react-doctor`,originallyExternal:!1,rule:{...e_e,framework:`global`,category:`Accessibility`}},{key:`react-doctor/html-xml-lang-mismatch`,id:`html-xml-lang-mismatch`,source:`react-doctor`,originallyExternal:!0,rule:{...n_e,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...n_e.requires??[]])]}},{key:`react-doctor/iframe-has-title`,id:`iframe-has-title`,source:`react-doctor`,originallyExternal:!0,rule:{...l_e,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...l_e.requires??[]])]}},{key:`react-doctor/iframe-missing-sandbox`,id:`iframe-missing-sandbox`,source:`react-doctor`,originallyExternal:!0,rule:{...h_e,framework:`global`,category:`Security`,requires:[...new Set([`react`,...h_e.requires??[]])]}},{key:`react-doctor/iframe-title-unique`,id:`iframe-title-unique`,source:`react-doctor`,originallyExternal:!0,rule:{...v_e,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...v_e.requires??[]])]}},{key:`react-doctor/img-redundant-alt`,id:`img-redundant-alt`,source:`react-doctor`,originallyExternal:!0,rule:{...w_e,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...w_e.requires??[]])]}},{key:`react-doctor/import-metadata-execution-risk`,id:`import-metadata-execution-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...l,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...l.tags??[]])]}},{key:`react-doctor/ink-ctrl-c-handler-requires-exit-option`,id:`ink-ctrl-c-handler-requires-exit-option`,source:`react-doctor`,originallyExternal:!1,rule:{...j_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...j_e.tags??[]])]}},{key:`react-doctor/ink-newline-inside-text`,id:`ink-newline-inside-text`,source:`react-doctor`,originallyExternal:!1,rule:{...M_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...M_e.tags??[]])]}},{key:`react-doctor/ink-no-bare-process-exit`,id:`ink-no-bare-process-exit`,source:`react-doctor`,originallyExternal:!1,rule:{...F_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...F_e.tags??[]])]}},{key:`react-doctor/ink-no-direct-raw-mode`,id:`ink-no-direct-raw-mode`,source:`react-doctor`,originallyExternal:!1,rule:{...L_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...L_e.tags??[]])]}},{key:`react-doctor/ink-no-dom-host-elements`,id:`ink-no-dom-host-elements`,source:`react-doctor`,originallyExternal:!1,rule:{...B_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...B_e.tags??[]])]}},{key:`react-doctor/ink-no-dom-router`,id:`ink-no-dom-router`,source:`react-doctor`,originallyExternal:!1,rule:{...G_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...G_e.tags??[]])]}},{key:`react-doctor/ink-no-focus-in-render`,id:`ink-no-focus-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...J_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...J_e.tags??[]])]}},{key:`react-doctor/ink-no-layout-inside-text`,id:`ink-no-layout-inside-text`,source:`react-doctor`,originallyExternal:!1,rule:{...Z_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Z_e.tags??[]])]}},{key:`react-doctor/ink-no-live-hooks-in-render-to-string`,id:`ink-no-live-hooks-in-render-to-string`,source:`react-doctor`,originallyExternal:!1,rule:{...eve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...eve.tags??[]])]}},{key:`react-doctor/ink-no-measure-element-in-render`,id:`ink-no-measure-element-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...tve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...tve.tags??[]])]}},{key:`react-doctor/ink-no-multiple-static`,id:`ink-no-multiple-static`,source:`react-doctor`,originallyExternal:!1,rule:{...nve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...nve.tags??[]])]}},{key:`react-doctor/ink-no-raw-text`,id:`ink-no-raw-text`,source:`react-doctor`,originallyExternal:!1,rule:{...Tve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Tve.tags??[]])]}},{key:`react-doctor/ink-no-repeated-render`,id:`ink-no-repeated-render`,source:`react-doctor`,originallyExternal:!1,rule:{...Fve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Fve.tags??[]])]}},{key:`react-doctor/ink-prefer-use-animation`,id:`ink-prefer-use-animation`,source:`react-doctor`,originallyExternal:!1,rule:{...zve,framework:`global`,category:`Performance`,tags:[...new Set([`ink`,...zve.tags??[]])]}},{key:`react-doctor/ink-prefer-use-paste`,id:`ink-prefer-use-paste`,source:`react-doctor`,originallyExternal:!1,rule:{...Vve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Vve.tags??[]])]}},{key:`react-doctor/ink-static-is-append-only`,id:`ink-static-is-append-only`,source:`react-doctor`,originallyExternal:!1,rule:{...Uve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Uve.tags??[]])]}},{key:`react-doctor/ink-static-requires-key`,id:`ink-static-requires-key`,source:`react-doctor`,originallyExternal:!1,rule:{...Gve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Gve.tags??[]])]}},{key:`react-doctor/ink-suspense-requires-concurrent`,id:`ink-suspense-requires-concurrent`,source:`react-doctor`,originallyExternal:!1,rule:{...Kve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Kve.tags??[]])]}},{key:`react-doctor/ink-use-reactive-window-size`,id:`ink-use-reactive-window-size`,source:`react-doctor`,originallyExternal:!1,rule:{...tye,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...tye.tags??[]])]}},{key:`react-doctor/ink-use-string-width-for-cursor`,id:`ink-use-string-width-for-cursor`,source:`react-doctor`,originallyExternal:!1,rule:{...iye,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...iye.tags??[]])]}},{key:`react-doctor/ink-use-suspend-terminal`,id:`ink-use-suspend-terminal`,source:`react-doctor`,originallyExternal:!1,rule:{...fye,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...fye.tags??[]])]}},{key:`react-doctor/ink-valid-aria-semantics`,id:`ink-valid-aria-semantics`,source:`react-doctor`,originallyExternal:!1,rule:{...hye,framework:`global`,category:`Accessibility`,tags:[...new Set([`ink`,...hye.tags??[]])]}},{key:`react-doctor/insecure-crypto-risk`,id:`insecure-crypto-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Fn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Fn.tags??[]])]}},{key:`react-doctor/insecure-session-cookie`,id:`insecure-session-cookie`,source:`react-doctor`,originallyExternal:!1,rule:{...Cee,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Cee.tags??[]])]}},{key:`react-doctor/interactive-supports-focus`,id:`interactive-supports-focus`,source:`react-doctor`,originallyExternal:!0,rule:{...Dye,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Dye.requires??[]])]}},{key:`react-doctor/jotai-derived-atom-returns-fresh-object`,id:`jotai-derived-atom-returns-fresh-object`,source:`react-doctor`,originallyExternal:!1,rule:{...zye,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...zye.requires??[]])]}},{key:`react-doctor/jotai-select-atom-in-render-body`,id:`jotai-select-atom-in-render-body`,source:`react-doctor`,originallyExternal:!1,rule:{..._h,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,..._h.requires??[]])]}},{key:`react-doctor/jotai-tq-use-raw-query-atom`,id:`jotai-tq-use-raw-query-atom`,source:`react-doctor`,originallyExternal:!1,rule:{...Sh,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Sh.requires??[]])]}},{key:`react-doctor/js-async-reduce-without-awaited-acc`,id:`js-async-reduce-without-awaited-acc`,source:`react-doctor`,originallyExternal:!1,rule:{...Qye,framework:`global`,category:`Performance`}},{key:`react-doctor/js-batch-dom-css`,id:`js-batch-dom-css`,source:`react-doctor`,originallyExternal:!1,rule:{...fbe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-cache-property-access`,id:`js-cache-property-access`,source:`react-doctor`,originallyExternal:!1,rule:{...hbe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-cache-storage`,id:`js-cache-storage`,source:`react-doctor`,originallyExternal:!1,rule:{..._be,framework:`global`,category:`Performance`}},{key:`react-doctor/js-combine-iterations`,id:`js-combine-iterations`,source:`react-doctor`,originallyExternal:!1,rule:{...Ebe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-early-exit`,id:`js-early-exit`,source:`react-doctor`,originallyExternal:!1,rule:{...Dbe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-flatmap-filter`,id:`js-flatmap-filter`,source:`react-doctor`,originallyExternal:!1,rule:{...Abe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-hoist-intl`,id:`js-hoist-intl`,source:`react-doctor`,originallyExternal:!1,rule:{...Gbe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-hoist-regexp`,id:`js-hoist-regexp`,source:`react-doctor`,originallyExternal:!1,rule:{...sxe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-index-maps`,id:`js-index-maps`,source:`react-doctor`,originallyExternal:!1,rule:{...mxe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-length-check-first`,id:`js-length-check-first`,source:`react-doctor`,originallyExternal:!1,rule:{...Dxe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-min-max-loop`,id:`js-min-max-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...Rxe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-set-map-lookups`,id:`js-set-map-lookups`,source:`react-doctor`,originallyExternal:!1,rule:{...kSe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-tosorted-immutable`,id:`js-tosorted-immutable`,source:`react-doctor`,originallyExternal:!1,rule:{...FSe,framework:`global`,category:`Performance`}},{key:`react-doctor/jsx-boolean-value`,id:`jsx-boolean-value`,source:`react-doctor`,originallyExternal:!0,rule:{...n_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...n_.requires??[]])]}},{key:`react-doctor/jsx-curly-brace-presence`,id:`jsx-curly-brace-presence`,source:`react-doctor`,originallyExternal:!0,rule:{...l_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...l_.requires??[]])]}},{key:`react-doctor/jsx-filename-extension`,id:`jsx-filename-extension`,source:`react-doctor`,originallyExternal:!0,rule:{...d_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...d_.requires??[]])]}},{key:`react-doctor/jsx-fragments`,id:`jsx-fragments`,source:`react-doctor`,originallyExternal:!0,rule:{...f_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...f_.requires??[]])]}},{key:`react-doctor/jsx-handler-names`,id:`jsx-handler-names`,source:`react-doctor`,originallyExternal:!0,rule:{...h_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...h_.requires??[]])]}},{key:`react-doctor/jsx-key`,id:`jsx-key`,source:`react-doctor`,originallyExternal:!0,rule:{...D_,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...D_.requires??[]])]}},{key:`react-doctor/jsx-max-depth`,id:`jsx-max-depth`,source:`react-doctor`,originallyExternal:!0,rule:{...A_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...A_.requires??[]])]}},{key:`react-doctor/jsx-no-comment-textnodes`,id:`jsx-no-comment-textnodes`,source:`react-doctor`,originallyExternal:!0,rule:{...j_,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...j_.requires??[]])]}},{key:`react-doctor/jsx-no-constructed-context-values`,id:`jsx-no-constructed-context-values`,source:`react-doctor`,originallyExternal:!0,rule:{...P_,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...P_.requires??[]])]}},{key:`react-doctor/jsx-no-duplicate-props`,id:`jsx-no-duplicate-props`,source:`react-doctor`,originallyExternal:!0,rule:{...F_,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...F_.requires??[]])]}},{key:`react-doctor/jsx-no-jsx-as-prop`,id:`jsx-no-jsx-as-prop`,source:`react-doctor`,originallyExternal:!0,rule:{...Y_,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Y_.requires??[]])]}},{key:`react-doctor/jsx-no-new-array-as-prop`,id:`jsx-no-new-array-as-prop`,source:`react-doctor`,originallyExternal:!0,rule:{...$_,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...$_.requires??[]])]}},{key:`react-doctor/jsx-no-new-function-as-prop`,id:`jsx-no-new-function-as-prop`,source:`react-doctor`,originallyExternal:!0,rule:{...cv,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...cv.requires??[]])]}},{key:`react-doctor/jsx-no-new-object-as-prop`,id:`jsx-no-new-object-as-prop`,source:`react-doctor`,originallyExternal:!0,rule:{...fv,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...fv.requires??[]])]}},{key:`react-doctor/jsx-no-script-url`,id:`jsx-no-script-url`,source:`react-doctor`,originallyExternal:!0,rule:{...pv,framework:`global`,category:`Security`,requires:[...new Set([`react`,...pv.requires??[]])]}},{key:`react-doctor/jsx-no-target-blank`,id:`jsx-no-target-blank`,source:`react-doctor`,originallyExternal:!0,rule:{...Tv,framework:`global`,category:`Security`,requires:[...new Set([`react`,...Tv.requires??[]])]}},{key:`react-doctor/jsx-no-undef`,id:`jsx-no-undef`,source:`react-doctor`,originallyExternal:!0,rule:{...Ov,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Ov.requires??[]])]}},{key:`react-doctor/jsx-no-useless-fragment`,id:`jsx-no-useless-fragment`,source:`react-doctor`,originallyExternal:!0,rule:{...Mv,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Mv.requires??[]])]}},{key:`react-doctor/jsx-numeric-and-leaked-render`,id:`jsx-numeric-and-leaked-render`,source:`react-doctor`,originallyExternal:!1,rule:{...dTe,framework:`global`,category:`Bugs`}},{key:`react-doctor/jsx-pascal-case`,id:`jsx-pascal-case`,source:`react-doctor`,originallyExternal:!0,rule:{...Jv,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Jv.requires??[]])]}},{key:`react-doctor/jsx-props-no-spread-multi`,id:`jsx-props-no-spread-multi`,source:`react-doctor`,originallyExternal:!0,rule:{...Xv,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Xv.requires??[]])]}},{key:`react-doctor/jsx-props-no-spreading`,id:`jsx-props-no-spreading`,source:`react-doctor`,originallyExternal:!0,rule:{...Zv,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Zv.requires??[]])]}},{key:`react-doctor/jwt-insecure-verification`,id:`jwt-insecure-verification`,source:`react-doctor`,originallyExternal:!1,rule:{...uee,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...uee.tags??[]])]}},{key:`react-doctor/key-lifecycle-risk`,id:`key-lifecycle-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...oee,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...oee.tags??[]])]}},{key:`react-doctor/label-has-associated-control`,id:`label-has-associated-control`,source:`react-doctor`,originallyExternal:!0,rule:{...ay,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...ay.requires??[]])]}},{key:`react-doctor/lang`,id:`lang`,source:`react-doctor`,originallyExternal:!0,rule:{...sy,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...sy.requires??[]])]}},{key:`react-doctor/loading-action-preserves-trigger`,id:`loading-action-preserves-trigger`,source:`react-doctor`,originallyExternal:!1,rule:{...dy,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...dy.requires??[]])]}},{key:`react-doctor/local-rpc-native-bridge-risk`,id:`local-rpc-native-bridge-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...de,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...de.tags??[]])]}},{key:`react-doctor/mcp-tool-capability-risk`,id:`mcp-tool-capability-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Ve,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Ve.tags??[]])]}},{key:`react-doctor/mdx-ssr-execution-risk`,id:`mdx-ssr-execution-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Fe,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Fe.tags??[]])]}},{key:`react-doctor/media-has-caption`,id:`media-has-caption`,source:`react-doctor`,originallyExternal:!0,rule:{...py,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...py.requires??[]])]}},{key:`react-doctor/mobx-no-make-auto-observable-in-inheritance`,id:`mobx-no-make-auto-observable-in-inheritance`,source:`react-doctor`,originallyExternal:!1,rule:{...pEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/mobx-no-observer-wrapped-memo`,id:`mobx-no-observer-wrapped-memo`,source:`react-doctor`,originallyExternal:!1,rule:{...hEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/mobx-reaction-disposer-discarded`,id:`mobx-reaction-disposer-discarded`,source:`react-doctor`,originallyExternal:!1,rule:{...zEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-animate-presence-must-outlive-child`,id:`motion-animate-presence-must-outlive-child`,source:`react-doctor`,originallyExternal:!1,rule:{...qEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-animate-presence-requires-key`,id:`motion-animate-presence-requires-key`,source:`react-doctor`,originallyExternal:!1,rule:{...JEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-animate-presence-wait-single-child`,id:`motion-animate-presence-wait-single-child`,source:`react-doctor`,originallyExternal:!1,rule:{...YEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-create-in-render`,id:`motion-create-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...QEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-drag-axis-constraint-mismatch`,id:`motion-drag-axis-constraint-mismatch`,source:`react-doctor`,originallyExternal:!1,rule:{...rDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-imperative-animation-in-render`,id:`motion-imperative-animation-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...sDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-keyframe-times-mismatch`,id:`motion-keyframe-times-mismatch`,source:`react-doctor`,originallyExternal:!1,rule:{...uDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-layout-on-inline-element`,id:`motion-layout-on-inline-element`,source:`react-doctor`,originallyExternal:!1,rule:{...pDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-unstable-layout-id-in-iteration`,id:`motion-unstable-layout-id-in-iteration`,source:`react-doctor`,originallyExternal:!1,rule:{...vDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-use-transform-range-length`,id:`motion-use-transform-range-length`,source:`react-doctor`,originallyExternal:!1,rule:{...yDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-value-constructor-in-render`,id:`motion-value-constructor-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...eb,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...eb.requires??[]])]}},{key:`react-doctor/motion-value-subscription-in-render`,id:`motion-value-subscription-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...xDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/mouse-events-have-key-events`,id:`mouse-events-have-key-events`,source:`react-doctor`,originallyExternal:!0,rule:{...ob,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...ob.requires??[]])]}},{key:`react-doctor/nextjs-async-client-component`,id:`nextjs-async-client-component`,source:`react-doctor`,originallyExternal:!1,rule:{...CDe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-async-dynamic-api-not-awaited`,id:`nextjs-async-dynamic-api-not-awaited`,source:`react-doctor`,originallyExternal:!1,rule:{...lOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-error-boundary-missing-use-client`,id:`nextjs-error-boundary-missing-use-client`,source:`react-doctor`,originallyExternal:!1,rule:{...uOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-global-error-missing-html-body`,id:`nextjs-global-error-missing-html-body`,source:`react-doctor`,originallyExternal:!1,rule:{...fOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-image-missing-sizes`,id:`nextjs-image-missing-sizes`,source:`react-doctor`,originallyExternal:!1,rule:{...mOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-inline-script-missing-id`,id:`nextjs-inline-script-missing-id`,source:`react-doctor`,originallyExternal:!1,rule:{...hOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-metadata-url-consistency`,id:`nextjs-metadata-url-consistency`,source:`react-doctor`,originallyExternal:!1,rule:{..._Oe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-missing-metadata`,id:`nextjs-missing-metadata`,source:`react-doctor`,originallyExternal:!1,rule:{...bOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-a-element`,id:`nextjs-no-a-element`,source:`react-doctor`,originallyExternal:!1,rule:{...xOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-client-fetch-for-server-data`,id:`nextjs-no-client-fetch-for-server-data`,source:`react-doctor`,originallyExternal:!1,rule:{...wOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-client-side-redirect`,id:`nextjs-no-client-side-redirect`,source:`react-doctor`,originallyExternal:!1,rule:{...POe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-css-link`,id:`nextjs-no-css-link`,source:`react-doctor`,originallyExternal:!1,rule:{...IOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-default-export-in-route-handler`,id:`nextjs-no-default-export-in-route-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...LOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-edge-og-runtime`,id:`nextjs-no-edge-og-runtime`,source:`react-doctor`,originallyExternal:!1,rule:{...ROe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-font-link`,id:`nextjs-no-font-link`,source:`react-doctor`,originallyExternal:!1,rule:{...zOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-google-analytics-script`,id:`nextjs-no-google-analytics-script`,source:`react-doctor`,originallyExternal:!1,rule:{...BOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-head-import`,id:`nextjs-no-head-import`,source:`react-doctor`,originallyExternal:!1,rule:{...VOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-img-element`,id:`nextjs-no-img-element`,source:`react-doctor`,originallyExternal:!1,rule:{...uke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-native-script`,id:`nextjs-no-native-script`,source:`react-doctor`,originallyExternal:!1,rule:{...pke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-polyfill-script`,id:`nextjs-no-polyfill-script`,source:`react-doctor`,originallyExternal:!1,rule:{...hke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-redirect-in-try-catch`,id:`nextjs-no-redirect-in-try-catch`,source:`react-doctor`,originallyExternal:!1,rule:{..._ke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-script-in-head`,id:`nextjs-no-script-in-head`,source:`react-doctor`,originallyExternal:!1,rule:{...bke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-side-effect-in-get-handler`,id:`nextjs-no-side-effect-in-get-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...Vke,framework:`nextjs`,category:`Security`}},{key:`react-doctor/nextjs-no-use-search-params-without-suspense`,id:`nextjs-no-use-search-params-without-suspense`,source:`react-doctor`,originallyExternal:!1,rule:{...qke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-vercel-og-import`,id:`nextjs-no-vercel-og-import`,source:`react-doctor`,originallyExternal:!1,rule:{...Jke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/no-access-key`,id:`no-access-key`,source:`react-doctor`,originallyExternal:!0,rule:{...cS,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...cS.requires??[]])]}},{key:`react-doctor/no-adjust-state-on-prop-change`,id:`no-adjust-state-on-prop-change`,source:`react-doctor`,originallyExternal:!0,rule:{...Cw,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Cw.requires??[]])]}},{key:`react-doctor/no-all-caps-body-text`,id:`no-all-caps-body-text`,source:`react-doctor`,originallyExternal:!1,rule:{...Tw,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...Tw.tags??[]])]}},{key:`react-doctor/no-arbitrary-px-font-size`,id:`no-arbitrary-px-font-size`,source:`react-doctor`,originallyExternal:!1,rule:{...Dw,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...Dw.tags??[]])]}},{key:`react-doctor/no-aria-hidden-on-body`,id:`no-aria-hidden-on-body`,source:`react-doctor`,originallyExternal:!0,rule:{...Ow,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Ow.requires??[]])]}},{key:`react-doctor/no-aria-hidden-on-focusable`,id:`no-aria-hidden-on-focusable`,source:`react-doctor`,originallyExternal:!0,rule:{...kw,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...kw.requires??[]])]}},{key:`react-doctor/no-aria-invalid-without-description`,id:`no-aria-invalid-without-description`,source:`react-doctor`,originallyExternal:!1,rule:{...Aw,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Aw.requires??[]])]}},{key:`react-doctor/no-arithmetic-on-optional-chained-operand`,id:`no-arithmetic-on-optional-chained-operand`,source:`react-doctor`,originallyExternal:!1,rule:{...aMe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-array-find-result-member-access-without-guard`,id:`no-array-find-result-member-access-without-guard`,source:`react-doctor`,originallyExternal:!1,rule:{...vMe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-array-index-as-key`,id:`no-array-index-as-key`,source:`react-doctor`,originallyExternal:!1,rule:{...dNe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-array-index-deref-without-bounds-or-empty-guard`,id:`no-array-index-deref-without-bounds-or-empty-guard`,source:`react-doctor`,originallyExternal:!1,rule:{...MNe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-array-index-key`,id:`no-array-index-key`,source:`react-doctor`,originallyExternal:!0,rule:{...YT,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...YT.requires??[]])]}},{key:`react-doctor/no-assertive-status`,id:`no-assertive-status`,source:`react-doctor`,originallyExternal:!1,rule:{...XT,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...XT.requires??[]])]}},{key:`react-doctor/no-async-effect-callback`,id:`no-async-effect-callback`,source:`react-doctor`,originallyExternal:!1,rule:{...ZT,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...ZT.requires??[]])]}},{key:`react-doctor/no-async-event-handler-without-reentry-guard`,id:`no-async-event-handler-without-reentry-guard`,source:`react-doctor`,originallyExternal:!1,rule:{...fE,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...fE.requires??[]])]}},{key:`react-doctor/no-auto-scrolling-content`,id:`no-auto-scrolling-content`,source:`react-doctor`,originallyExternal:!1,rule:{..._E,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,..._E.tags??[]])]}},{key:`react-doctor/no-autofocus`,id:`no-autofocus`,source:`react-doctor`,originallyExternal:!0,rule:{...SPe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...SPe.requires??[]])]}},{key:`react-doctor/no-autoplay-without-muted`,id:`no-autoplay-without-muted`,source:`react-doctor`,originallyExternal:!1,rule:{...wPe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...wPe.requires??[]])]}},{key:`react-doctor/no-barrel-import`,id:`no-barrel-import`,source:`react-doctor`,originallyExternal:!1,rule:{...VPe,framework:`global`,category:`Performance`}},{key:`react-doctor/no-blocked-paste`,id:`no-blocked-paste`,source:`react-doctor`,originallyExternal:!1,rule:{...KPe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...KPe.requires??[]])]}},{key:`react-doctor/no-boolean-toggle-without-functional-update`,id:`no-boolean-toggle-without-functional-update`,source:`react-doctor`,originallyExternal:!1,rule:{...fFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...fFe.requires??[]])]}},{key:`react-doctor/no-broken-image-source`,id:`no-broken-image-source`,source:`react-doctor`,originallyExternal:!1,rule:{...mFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...mFe.requires??[]])]}},{key:`react-doctor/no-call-component-as-function`,id:`no-call-component-as-function`,source:`react-doctor`,originallyExternal:!1,rule:{...SFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...SFe.requires??[]])]}},{key:`react-doctor/no-cascading-set-state`,id:`no-cascading-set-state`,source:`react-doctor`,originallyExternal:!1,rule:{...CFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...CFe.requires??[]])]}},{key:`react-doctor/no-chain-state-updates`,id:`no-chain-state-updates`,source:`react-doctor`,originallyExternal:!0,rule:{...JFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...JFe.requires??[]])]}},{key:`react-doctor/no-children-prop`,id:`no-children-prop`,source:`react-doctor`,originallyExternal:!0,rule:{...XFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...XFe.requires??[]])]}},{key:`react-doctor/no-clipped-overlay`,id:`no-clipped-overlay`,source:`react-doctor`,originallyExternal:!1,rule:{...rIe,framework:`global`,category:`Bugs`,defaultEnabled:!1,tags:[...new Set([`design`,...rIe.tags??[]])]}},{key:`react-doctor/no-clone-element`,id:`no-clone-element`,source:`react-doctor`,originallyExternal:!0,rule:{...aIe,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...aIe.requires??[]])]}},{key:`react-doctor/no-collapse-request-error-to-empty-state`,id:`no-collapse-request-error-to-empty-state`,source:`react-doctor`,originallyExternal:!1,rule:{...MIe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...MIe.requires??[]])]}},{key:`react-doctor/no-collapsed-literal-or-chain-as-value`,id:`no-collapsed-literal-or-chain-as-value`,source:`react-doctor`,originallyExternal:!1,rule:{...HIe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-common-root-font`,id:`no-common-root-font`,source:`react-doctor`,originallyExternal:!1,rule:{...KIe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...KIe.tags??[]])]}},{key:`react-doctor/no-conflicting-spring-options`,id:`no-conflicting-spring-options`,source:`react-doctor`,originallyExternal:!1,rule:{...XIe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...XIe.requires??[]])]}},{key:`react-doctor/no-controlled-input-value-without-state-update`,id:`no-controlled-input-value-without-state-update`,source:`react-doctor`,originallyExternal:!1,rule:{...pLe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-controlled-selection-focus-effect`,id:`no-controlled-selection-focus-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...xLe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...xLe.requires??[]])]}},{key:`react-doctor/no-cramped-container-padding`,id:`no-cramped-container-padding`,source:`react-doctor`,originallyExternal:!1,rule:{...qLe,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...qLe.tags??[]])]}},{key:`react-doctor/no-create-context-in-render`,id:`no-create-context-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...JLe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...JLe.requires??[]])]}},{key:`react-doctor/no-create-object-url-in-render`,id:`no-create-object-url-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...XLe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...XLe.requires??[]])]}},{key:`react-doctor/no-create-object-url-without-revoke`,id:`no-create-object-url-without-revoke`,source:`react-doctor`,originallyExternal:!1,rule:{...HRe,framework:`global`,category:`Performance`}},{key:`react-doctor/no-create-ref-in-function-component`,id:`no-create-ref-in-function-component`,source:`react-doctor`,originallyExternal:!1,rule:{...vze,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...vze.requires??[]])]}},{key:`react-doctor/no-create-store-in-render`,id:`no-create-store-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...xze,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...xze.requires??[]])]}},{key:`react-doctor/no-crushed-letter-spacing`,id:`no-crushed-letter-spacing`,source:`react-doctor`,originallyExternal:!1,rule:{...Tze,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...Tze.tags??[]])]}},{key:`react-doctor/no-danger`,id:`no-danger`,source:`react-doctor`,originallyExternal:!0,rule:{...Dze,framework:`global`,category:`Security`,requires:[...new Set([`react`,...Dze.requires??[]])]}},{key:`react-doctor/no-danger-with-children`,id:`no-danger-with-children`,source:`react-doctor`,originallyExternal:!0,rule:{...Nze,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Nze.requires??[]])]}},{key:`react-doctor/no-dark-mode-glow`,id:`no-dark-mode-glow`,source:`react-doctor`,originallyExternal:!1,rule:{...Yze,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Yze.tags??[]])]}},{key:`react-doctor/no-decorative-blur-orb`,id:`no-decorative-blur-orb`,source:`react-doctor`,originallyExternal:!1,rule:{...tBe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...tBe.tags??[]])]}},{key:`react-doctor/no-decorative-grid-background`,id:`no-decorative-grid-background`,source:`react-doctor`,originallyExternal:!1,rule:{...gBe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...gBe.tags??[]])]}},{key:`react-doctor/no-decorative-pulse`,id:`no-decorative-pulse`,source:`react-doctor`,originallyExternal:!1,rule:{...VBe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...VBe.tags??[]])]}},{key:`react-doctor/no-decorative-radial-spotlight`,id:`no-decorative-radial-spotlight`,source:`react-doctor`,originallyExternal:!1,rule:{...uVe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...uVe.tags??[]])]}},{key:`react-doctor/no-default-props`,id:`no-default-props`,source:`react-doctor`,originallyExternal:!1,rule:{...pVe,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-default-purple-page-gradient`,id:`no-default-purple-page-gradient`,source:`react-doctor`,originallyExternal:!1,rule:{...vVe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...vVe.tags??[]])]}},{key:`react-doctor/no-default-warm-page-surface`,id:`no-default-warm-page-surface`,source:`react-doctor`,originallyExternal:!1,rule:{...xVe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...xVe.tags??[]])]}},{key:`react-doctor/no-deprecated-keyboard-event-keycode-which`,id:`no-deprecated-keyboard-event-keycode-which`,source:`react-doctor`,originallyExternal:!1,rule:{...GVe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-deprecated-tailwind-class`,id:`no-deprecated-tailwind-class`,source:`react-doctor`,originallyExternal:!1,rule:{...qVe,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...qVe.tags??[]])]}},{key:`react-doctor/no-derived-state`,id:`no-derived-state`,source:`react-doctor`,originallyExternal:!0,rule:{...pHe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...pHe.requires??[]])]}},{key:`react-doctor/no-derived-state-effect`,id:`no-derived-state-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...mHe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...mHe.requires??[]])]}},{key:`react-doctor/no-derived-useState`,id:`no-derived-useState`,source:`react-doctor`,originallyExternal:!1,rule:{...zHe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...zHe.requires??[]])]}},{key:`react-doctor/no-did-mount-set-state`,id:`no-did-mount-set-state`,source:`react-doctor`,originallyExternal:!0,rule:{...WUe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...WUe.requires??[]])]}},{key:`react-doctor/no-did-update-set-state`,id:`no-did-update-set-state`,source:`react-doctor`,originallyExternal:!0,rule:{..._Ue,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,..._Ue.requires??[]])]}},{key:`react-doctor/no-direct-mutation-state`,id:`no-direct-mutation-state`,source:`react-doctor`,originallyExternal:!0,rule:{...YUe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...YUe.requires??[]])]}},{key:`react-doctor/no-direct-state-mutation`,id:`no-direct-state-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...cWe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...cWe.requires??[]])]}},{key:`react-doctor/no-disabled-zoom`,id:`no-disabled-zoom`,source:`react-doctor`,originallyExternal:!1,rule:{...lWe,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...lWe.tags??[]])]}},{key:`react-doctor/no-distracting-elements`,id:`no-distracting-elements`,source:`react-doctor`,originallyExternal:!0,rule:{...pWe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...pWe.requires??[]])]}},{key:`react-doctor/no-document-start-view-transition`,id:`no-document-start-view-transition`,source:`react-doctor`,originallyExternal:!1,rule:{...gWe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...gWe.requires??[]])]}},{key:`react-doctor/no-document-write`,id:`no-document-write`,source:`react-doctor`,originallyExternal:!1,rule:{...yWe,framework:`global`,category:`Performance`}},{key:`react-doctor/no-duplicate-static-id-reference`,id:`no-duplicate-static-id-reference`,source:`react-doctor`,originallyExternal:!0,rule:{...xWe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...xWe.requires??[]])]}},{key:`react-doctor/no-dynamic-import-path`,id:`no-dynamic-import-path`,source:`react-doctor`,originallyExternal:!1,rule:{...KWe,framework:`global`,category:`Performance`}},{key:`react-doctor/no-dynamic-tailwind-class-fragment`,id:`no-dynamic-tailwind-class-fragment`,source:`react-doctor`,originallyExternal:!1,rule:{...ZWe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...ZWe.tags??[]])]}},{key:`react-doctor/no-eager-new-in-use-state-initializer`,id:`no-eager-new-in-use-state-initializer`,source:`react-doctor`,originallyExternal:!1,rule:{...sGe,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...sGe.requires??[]])]}},{key:`react-doctor/no-ease-in-motion`,id:`no-ease-in-motion`,source:`react-doctor`,originallyExternal:!1,rule:{...uGe,framework:`global`,category:`Performance`,defaultEnabled:!1,tags:[...new Set([`design`,...uGe.tags??[]])]}},{key:`react-doctor/no-effect-chain`,id:`no-effect-chain`,source:`react-doctor`,originallyExternal:!1,rule:{...LKe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...LKe.requires??[]])]}},{key:`react-doctor/no-effect-event-handler`,id:`no-effect-event-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...eqe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...eqe.requires??[]])]}},{key:`react-doctor/no-effect-event-in-deps`,id:`no-effect-event-in-deps`,source:`react-doctor`,originallyExternal:!1,rule:{...aqe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...aqe.requires??[]])]}},{key:`react-doctor/no-effect-with-fresh-deps`,id:`no-effect-with-fresh-deps`,source:`react-doctor`,originallyExternal:!1,rule:{...cqe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...cqe.requires??[]])]}},{key:`react-doctor/no-effect-wrapper-discards-callback-cleanup-return`,id:`no-effect-wrapper-discards-callback-cleanup-return`,source:`react-doctor`,originallyExternal:!1,rule:{...xqe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...xqe.requires??[]])]}},{key:`react-doctor/no-emoji-heading-decoration`,id:`no-emoji-heading-decoration`,source:`react-doctor`,originallyExternal:!1,rule:{...Eqe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Eqe.tags??[]])]}},{key:`react-doctor/no-empty-card-shell`,id:`no-empty-card-shell`,source:`react-doctor`,originallyExternal:!1,rule:{...jqe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...jqe.tags??[]])]}},{key:`react-doctor/no-enter-submit-without-ime-composition-guard`,id:`no-enter-submit-without-ime-composition-guard`,source:`react-doctor`,originallyExternal:!1,rule:{...lJe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-eval`,id:`no-eval`,source:`react-doctor`,originallyExternal:!1,rule:{...fJe,framework:`global`,category:`Security`}},{key:`react-doctor/no-event-handler`,id:`no-event-handler`,source:`react-doctor`,originallyExternal:!0,rule:{...kJe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...kJe.requires??[]])]}},{key:`react-doctor/no-event-trigger-state`,id:`no-event-trigger-state`,source:`react-doctor`,originallyExternal:!1,rule:{...TA,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...TA.requires??[]])]}},{key:`react-doctor/no-excessive-card-surfaces`,id:`no-excessive-card-surfaces`,source:`react-doctor`,originallyExternal:!1,rule:{...MA,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...MA.tags??[]])]}},{key:`react-doctor/no-excessive-centered-copy`,id:`no-excessive-centered-copy`,source:`react-doctor`,originallyExternal:!1,rule:{...NA,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...NA.tags??[]])]}},{key:`react-doctor/no-excessive-font-families`,id:`no-excessive-font-families`,source:`react-doctor`,originallyExternal:!1,rule:{...PA,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...PA.tags??[]])]}},{key:`react-doctor/no-excessive-motion-stagger`,id:`no-excessive-motion-stagger`,source:`react-doctor`,originallyExternal:!1,rule:{...FA,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...FA.requires??[]])]}},{key:`react-doctor/no-excessive-pill-treatment`,id:`no-excessive-pill-treatment`,source:`react-doctor`,originallyExternal:!1,rule:{...IA,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...IA.tags??[]])]}},{key:`react-doctor/no-fake-browser-chrome`,id:`no-fake-browser-chrome`,source:`react-doctor`,originallyExternal:!1,rule:{...zA,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...zA.tags??[]])]}},{key:`react-doctor/no-fetch-in-effect`,id:`no-fetch-in-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...KA,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...KA.requires??[]])]}},{key:`react-doctor/no-fetch-response-used-without-status-check`,id:`no-fetch-response-used-without-status-check`,source:`react-doctor`,originallyExternal:!1,rule:{...JYe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-fill-map-element-as-key`,id:`no-fill-map-element-as-key`,source:`react-doctor`,originallyExternal:!1,rule:{...aXe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-find-dom-node`,id:`no-find-dom-node`,source:`react-doctor`,originallyExternal:!0,rule:{...cj,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...cj.requires??[]])]}},{key:`react-doctor/no-fixed-inside-transformed-ancestor`,id:`no-fixed-inside-transformed-ancestor`,source:`react-doctor`,originallyExternal:!1,rule:{...dj,framework:`global`,category:`Bugs`,tags:[...new Set([`design`,...dj.tags??[]])]}},{key:`react-doctor/no-flat-page-type-scale`,id:`no-flat-page-type-scale`,source:`react-doctor`,originallyExternal:!1,rule:{...hj,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...hj.tags??[]])]}},{key:`react-doctor/no-floating-then-in-jsx-handler`,id:`no-floating-then-in-jsx-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...yXe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-flush-sync`,id:`no-flush-sync`,source:`react-doctor`,originallyExternal:!1,rule:{...Cj,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Cj.requires??[]])]}},{key:`react-doctor/no-focus-in-animation-completion-handler`,id:`no-focus-in-animation-completion-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...Nj,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...Nj.tags??[]])]}},{key:`react-doctor/no-focusable-content-in-aria-hidden`,id:`no-focusable-content-in-aria-hidden`,source:`react-doctor`,originallyExternal:!1,rule:{...Pj,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Pj.requires??[]])]}},{key:`react-doctor/no-focusable-content-in-role-text`,id:`no-focusable-content-in-role-text`,source:`react-doctor`,originallyExternal:!0,rule:{...Fj,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Fj.requires??[]])]}},{key:`react-doctor/no-full-lodash-import`,id:`no-full-lodash-import`,source:`react-doctor`,originallyExternal:!1,rule:{...rZe,framework:`global`,category:`Performance`}},{key:`react-doctor/no-full-viewport-centered-hero`,id:`no-full-viewport-centered-hero`,source:`react-doctor`,originallyExternal:!1,rule:{...Bj,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Bj.tags??[]])]}},{key:`react-doctor/no-full-viewport-width`,id:`no-full-viewport-width`,source:`react-doctor`,originallyExternal:!1,rule:{...Hj,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Hj.tags??[]])]}},{key:`react-doctor/no-generic-handler-names`,id:`no-generic-handler-names`,source:`react-doctor`,originallyExternal:!1,rule:{...uZe,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-generic-marketing-copy`,id:`no-generic-marketing-copy`,source:`react-doctor`,originallyExternal:!1,rule:{...Kj,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Kj.tags??[]])]}},{key:`react-doctor/no-generic-purple-blue-icon-gradient`,id:`no-generic-purple-blue-icon-gradient`,source:`react-doctor`,originallyExternal:!1,rule:{...Yj,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Yj.tags??[]])]}},{key:`react-doctor/no-giant-component`,id:`no-giant-component`,source:`react-doctor`,originallyExternal:!1,rule:{...SZe,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-global-css-variable-animation`,id:`no-global-css-variable-animation`,source:`react-doctor`,originallyExternal:!1,rule:{...Xj,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Xj.requires??[]])]}},{key:`react-doctor/no-gradient-text`,id:`no-gradient-text`,source:`react-doctor`,originallyExternal:!1,rule:{...$j,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...$j.tags??[]])]}},{key:`react-doctor/no-gray-on-colored-background`,id:`no-gray-on-colored-background`,source:`react-doctor`,originallyExternal:!1,rule:{...cM,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...cM.tags??[]])]}},{key:`react-doctor/no-hairline-border-wide-shadow`,id:`no-hairline-border-wide-shadow`,source:`react-doctor`,originallyExternal:!1,rule:{...lM,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...lM.tags??[]])]}},{key:`react-doctor/no-hero-eyebrow-chip`,id:`no-hero-eyebrow-chip`,source:`react-doctor`,originallyExternal:!1,rule:{...pM,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...pM.tags??[]])]}},{key:`react-doctor/no-hover-only-reveal`,id:`no-hover-only-reveal`,source:`react-doctor`,originallyExternal:!1,rule:{...CM,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...CM.tags??[]])]}},{key:`react-doctor/no-hydration-branch-on-browser-global`,id:`no-hydration-branch-on-browser-global`,source:`react-doctor`,originallyExternal:!1,rule:{...gN,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...gN.requires??[]])]}},{key:`react-doctor/no-icon-tile-heading-stack`,id:`no-icon-tile-heading-stack`,source:`react-doctor`,originallyExternal:!1,rule:{...vN,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...vN.tags??[]])]}},{key:`react-doctor/no-image-hover-transform`,id:`no-image-hover-transform`,source:`react-doctor`,originallyExternal:!1,rule:{...TN,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...TN.tags??[]])]}},{key:`react-doctor/no-img-lazy-with-high-fetchpriority`,id:`no-img-lazy-with-high-fetchpriority`,source:`react-doctor`,originallyExternal:!1,rule:{...EN,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...EN.requires??[]])]}},{key:`react-doctor/no-img-without-dimensions`,id:`no-img-without-dimensions`,source:`react-doctor`,originallyExternal:!1,rule:{...fP,framework:`global`,category:`Performance`,tags:[...new Set([`design`,...fP.tags??[]])]}},{key:`react-doctor/no-impure-call-at-module-scope`,id:`no-impure-call-at-module-scope`,source:`react-doctor`,originallyExternal:!1,rule:{...k$e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-impure-state-updater`,id:`no-impure-state-updater`,source:`react-doctor`,originallyExternal:!1,rule:{...bP,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...bP.requires??[]])]}},{key:`react-doctor/no-indeterminate-attribute`,id:`no-indeterminate-attribute`,source:`react-doctor`,originallyExternal:!1,rule:{...q$e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-inert-pointer-affordance`,id:`no-inert-pointer-affordance`,source:`react-doctor`,originallyExternal:!1,rule:{...TP,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...TP.tags??[]])]}},{key:`react-doctor/no-inert-sticky-position`,id:`no-inert-sticky-position`,source:`react-doctor`,originallyExternal:!1,rule:{...EP,framework:`global`,category:`Bugs`,tags:[...new Set([`design`,...EP.tags??[]])]}},{key:`react-doctor/no-initialize-state`,id:`no-initialize-state`,source:`react-doctor`,originallyExternal:!0,rule:{...OP,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...OP.requires??[]])]}},{key:`react-doctor/no-inline-bounce-easing`,id:`no-inline-bounce-easing`,source:`react-doctor`,originallyExternal:!1,rule:{...kP,framework:`global`,category:`Performance`,defaultEnabled:!1,tags:[...new Set([`design`,...kP.tags??[]])]}},{key:`react-doctor/no-inline-exhaustive-style`,id:`no-inline-exhaustive-style`,source:`react-doctor`,originallyExternal:!1,rule:{...AP,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...AP.tags??[]])]}},{key:`react-doctor/no-inline-hoc-on-component`,id:`no-inline-hoc-on-component`,source:`react-doctor`,originallyExternal:!1,rule:{...x1e,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-inline-prop-on-memo-component`,id:`no-inline-prop-on-memo-component`,source:`react-doctor`,originallyExternal:!1,rule:{...LP,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...LP.requires??[]])]}},{key:`react-doctor/no-interactive-element-to-noninteractive-role`,id:`no-interactive-element-to-noninteractive-role`,source:`react-doctor`,originallyExternal:!0,rule:{...zP,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...zP.requires??[]])]}},{key:`react-doctor/no-invalid-progress-range`,id:`no-invalid-progress-range`,source:`react-doctor`,originallyExternal:!1,rule:{...VP,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...VP.requires??[]])]}},{key:`react-doctor/no-invisible-focus-control`,id:`no-invisible-focus-control`,source:`react-doctor`,originallyExternal:!1,rule:{...KP,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...KP.tags??[]])]}},{key:`react-doctor/no-is-mounted`,id:`no-is-mounted`,source:`react-doctor`,originallyExternal:!0,rule:{...JP,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...JP.requires??[]])]}},{key:`react-doctor/no-italic-serif-display-heading`,id:`no-italic-serif-display-heading`,source:`react-doctor`,originallyExternal:!1,rule:{...YP,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...YP.tags??[]])]}},{key:`react-doctor/no-json-parse-stringify-clone`,id:`no-json-parse-stringify-clone`,source:`react-doctor`,originallyExternal:!1,rule:{...q1e,framework:`global`,category:`Performance`}},{key:`react-doctor/no-jsx-element-type`,id:`no-jsx-element-type`,source:`react-doctor`,originallyExternal:!1,rule:{...Z1e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-justified-text`,id:`no-justified-text`,source:`react-doctor`,originallyExternal:!1,rule:{...nF,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...nF.tags??[]])]}},{key:`react-doctor/no-large-animated-blur`,id:`no-large-animated-blur`,source:`react-doctor`,originallyExternal:!1,rule:{...aF,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...aF.requires??[]])]}},{key:`react-doctor/no-layout-property-animation`,id:`no-layout-property-animation`,source:`react-doctor`,originallyExternal:!1,rule:{...oF,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...oF.requires??[]])]}},{key:`react-doctor/no-layout-shifting-interaction-state`,id:`no-layout-shifting-interaction-state`,source:`react-doctor`,originallyExternal:!1,rule:{...dF,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...dF.tags??[]])]}},{key:`react-doctor/no-layout-transition-inline`,id:`no-layout-transition-inline`,source:`react-doctor`,originallyExternal:!1,rule:{...pF,framework:`global`,category:`Performance`,defaultEnabled:!1,tags:[...new Set([`design`,...pF.tags??[]])]}},{key:`react-doctor/no-legacy-class-lifecycles`,id:`no-legacy-class-lifecycles`,source:`react-doctor`,originallyExternal:!1,rule:{...p0e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-legacy-context-api`,id:`no-legacy-context-api`,source:`react-doctor`,originallyExternal:!1,rule:{...y0e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-loading-flag-reset-outside-finally`,id:`no-loading-flag-reset-outside-finally`,source:`react-doctor`,originallyExternal:!1,rule:{...DI,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...DI.requires??[]])]}},{key:`react-doctor/no-locale-format-in-render`,id:`no-locale-format-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...KI,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...KI.requires??[]])]}},{key:`react-doctor/no-long-transition-duration`,id:`no-long-transition-duration`,source:`react-doctor`,originallyExternal:!1,rule:{...qI,framework:`global`,category:`Performance`,defaultEnabled:!1,tags:[...new Set([`design`,...qI.tags??[]])]}},{key:`react-doctor/no-low-contrast-inline-style`,id:`no-low-contrast-inline-style`,source:`react-doctor`,originallyExternal:!1,rule:{...QI,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...QI.tags??[]])]}},{key:`react-doctor/no-manufactured-contrast-copy`,id:`no-manufactured-contrast-copy`,source:`react-doctor`,originallyExternal:!1,rule:{...tL,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...tL.tags??[]])]}},{key:`react-doctor/no-many-boolean-props`,id:`no-many-boolean-props`,source:`react-doctor`,originallyExternal:!1,rule:{...Q2e,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-match-media-in-state-initializer`,id:`no-match-media-in-state-initializer`,source:`react-doctor`,originallyExternal:!1,rule:{...aL,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...aL.requires??[]])]}},{key:`react-doctor/no-mirror-prop-effect`,id:`no-mirror-prop-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...oL,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...oL.requires??[]])]}},{key:`react-doctor/no-mixed-animation-owners`,id:`no-mixed-animation-owners`,source:`react-doctor`,originallyExternal:!1,rule:{...CL,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...CL.tags??[]])]}},{key:`react-doctor/no-mixed-icon-libraries`,id:`no-mixed-icon-libraries`,source:`react-doctor`,originallyExternal:!1,rule:{...AL,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...AL.tags??[]])]}},{key:`react-doctor/no-mixed-srcset-descriptors`,id:`no-mixed-srcset-descriptors`,source:`react-doctor`,originallyExternal:!1,rule:{...Y4e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-moment`,id:`no-moment`,source:`react-doctor`,originallyExternal:!1,rule:{...X4e,framework:`global`,category:`Performance`}},{key:`react-doctor/no-monotonous-page-spacing`,id:`no-monotonous-page-spacing`,source:`react-doctor`,originallyExternal:!1,rule:{...NL,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...NL.tags??[]])]}},{key:`react-doctor/no-multi-comp`,id:`no-multi-comp`,source:`react-doctor`,originallyExternal:!0,rule:{...tR,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...tR.requires??[]])]}},{key:`react-doctor/no-multiple-main-landmarks`,id:`no-multiple-main-landmarks`,source:`react-doctor`,originallyExternal:!1,rule:{...nR,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...nR.requires??[]])]}},{key:`react-doctor/no-multiple-unlabeled-navigation-landmarks`,id:`no-multiple-unlabeled-navigation-landmarks`,source:`react-doctor`,originallyExternal:!1,rule:{...oR,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...oR.requires??[]])]}},{key:`react-doctor/no-mutable-in-deps`,id:`no-mutable-in-deps`,source:`react-doctor`,originallyExternal:!1,rule:{...sR,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...sR.requires??[]])]}},{key:`react-doctor/no-mutate-queried-dom-node-in-component`,id:`no-mutate-queried-dom-node-in-component`,source:`react-doctor`,originallyExternal:!1,rule:{...M3e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-mutate-then-set-or-return-same-reference`,id:`no-mutate-then-set-or-return-same-reference`,source:`react-doctor`,originallyExternal:!1,rule:{...FR,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...FR.requires??[]])]}},{key:`react-doctor/no-mutating-array-method-on-prop-or-hook-result`,id:`no-mutating-array-method-on-prop-or-hook-result`,source:`react-doctor`,originallyExternal:!1,rule:{...f6e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-mutating-reducer-state`,id:`no-mutating-reducer-state`,source:`react-doctor`,originallyExternal:!1,rule:{...lz,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...lz.requires??[]])]}},{key:`react-doctor/no-namespace`,id:`no-namespace`,source:`react-doctor`,originallyExternal:!0,rule:{...dz,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...dz.requires??[]])]}},{key:`react-doctor/no-nested-card-surface`,id:`no-nested-card-surface`,source:`react-doctor`,originallyExternal:!1,rule:{...pz,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...pz.tags??[]])]}},{key:`react-doctor/no-nested-component-definition`,id:`no-nested-component-definition`,source:`react-doctor`,originallyExternal:!1,rule:{...k6e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-non-literal-selector-query-without-try-catch`,id:`no-non-literal-selector-query-without-try-catch`,source:`react-doctor`,originallyExternal:!1,rule:{...u8e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-non-null-assertion-on-maybe-undefined-result`,id:`no-non-null-assertion-on-maybe-undefined-result`,source:`react-doctor`,originallyExternal:!1,rule:{...R8e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-nondeterministic-id-value-in-render-body`,id:`no-nondeterministic-id-value-in-render-body`,source:`react-doctor`,originallyExternal:!1,rule:{...q8e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-noninteractive-element-interactions`,id:`no-noninteractive-element-interactions`,source:`react-doctor`,originallyExternal:!0,rule:{...dB,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...dB.requires??[]])]}},{key:`react-doctor/no-noninteractive-element-to-interactive-role`,id:`no-noninteractive-element-to-interactive-role`,source:`react-doctor`,originallyExternal:!0,rule:{...pB,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...pB.requires??[]])]}},{key:`react-doctor/no-noninteractive-tabindex`,id:`no-noninteractive-tabindex`,source:`react-doctor`,originallyExternal:!0,rule:{...vB,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...vB.requires??[]])]}},{key:`react-doctor/no-nonresizable-textarea`,id:`no-nonresizable-textarea`,source:`react-doctor`,originallyExternal:!1,rule:{...yB,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...yB.requires??[]])]}},{key:`react-doctor/no-nullish-coalescing-arithmetic-precedence`,id:`no-nullish-coalescing-arithmetic-precedence`,source:`react-doctor`,originallyExternal:!1,rule:{...v5e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-numbered-section-markers`,id:`no-numbered-section-markers`,source:`react-doctor`,originallyExternal:!1,rule:{...kB,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...kB.tags??[]])]}},{key:`react-doctor/no-object-keys-values-entries-on-maybe-undefined`,id:`no-object-keys-values-entries-on-maybe-undefined`,source:`react-doctor`,originallyExternal:!1,rule:{...e7e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-object-or-array-coerced-to-string-in-template-literal`,id:`no-object-or-array-coerced-to-string-in-template-literal`,source:`react-doctor`,originallyExternal:!1,rule:{...u7e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-outline-none`,id:`no-outline-none`,source:`react-doctor`,originallyExternal:!1,rule:{...GB,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...GB.tags??[]])]}},{key:`react-doctor/no-overloaded-hover-state`,id:`no-overloaded-hover-state`,source:`react-doctor`,originallyExternal:!1,rule:{...qB,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...qB.tags??[]])]}},{key:`react-doctor/no-oversized-long-heading`,id:`no-oversized-long-heading`,source:`react-doctor`,originallyExternal:!1,rule:{...JB,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...JB.tags??[]])]}},{key:`react-doctor/no-overwide-text-measure`,id:`no-overwide-text-measure`,source:`react-doctor`,originallyExternal:!1,rule:{...YB,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...YB.tags??[]])]}},{key:`react-doctor/no-pass-data-to-parent`,id:`no-pass-data-to-parent`,source:`react-doctor`,originallyExternal:!0,rule:{...UV,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...UV.requires??[]])]}},{key:`react-doctor/no-pass-live-state-to-parent`,id:`no-pass-live-state-to-parent`,source:`react-doctor`,originallyExternal:!0,rule:{...QV,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...QV.requires??[]])]}},{key:`react-doctor/no-passive-request-owner-ref`,id:`no-passive-request-owner-ref`,source:`react-doctor`,originallyExternal:!1,rule:{...tH,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...tH.requires??[]])]}},{key:`react-doctor/no-path-prefix-containment`,id:`no-path-prefix-containment`,source:`react-doctor`,originallyExternal:!1,rule:{..._9e,framework:`global`,category:`Security`}},{key:`react-doctor/no-permanent-will-change`,id:`no-permanent-will-change`,source:`react-doctor`,originallyExternal:!1,rule:{...sH,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...sH.requires??[]])]}},{key:`react-doctor/no-pill-navigation-count`,id:`no-pill-navigation-count`,source:`react-doctor`,originallyExternal:!1,rule:{...lH,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...lH.tags??[]])]}},{key:`react-doctor/no-placeholder-only-field`,id:`no-placeholder-only-field`,source:`react-doctor`,originallyExternal:!1,rule:{...pH,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...pH.requires??[]])]}},{key:`react-doctor/no-placeholder-persona-copy`,id:`no-placeholder-persona-copy`,source:`react-doctor`,originallyExternal:!1,rule:{...mH,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...mH.tags??[]])]}},{key:`react-doctor/no-pointer-disabled-enabled-control`,id:`no-pointer-disabled-enabled-control`,source:`react-doctor`,originallyExternal:!1,rule:{...hH,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...hH.tags??[]])]}},{key:`react-doctor/no-polymorphic-children`,id:`no-polymorphic-children`,source:`react-doctor`,originallyExternal:!1,rule:{...R9e,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-predicate-function-reference-in-boolean-position`,id:`no-predicate-function-reference-in-boolean-position`,source:`react-doctor`,originallyExternal:!1,rule:{...G9e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-presentation-role-conflict`,id:`no-presentation-role-conflict`,source:`react-doctor`,originallyExternal:!0,rule:{...EH,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...EH.requires??[]])]}},{key:`react-doctor/no-prevent-default`,id:`no-prevent-default`,source:`react-doctor`,originallyExternal:!1,rule:{...fet,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-promise-then-side-effect-in-effect-without-catch`,id:`no-promise-then-side-effect-in-effect-without-catch`,source:`react-doctor`,originallyExternal:!1,rule:{...RH,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...RH.requires??[]])]}},{key:`react-doctor/no-prop-callback-in-effect`,id:`no-prop-callback-in-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...BH,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...BH.requires??[]])]}},{key:`react-doctor/no-prop-callback-in-render`,id:`no-prop-callback-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...KH,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...KH.requires??[]])]}},{key:`react-doctor/no-prop-types`,id:`no-prop-types`,source:`react-doctor`,originallyExternal:!1,rule:{...Uet,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-pulsing-status-dot`,id:`no-pulsing-status-dot`,source:`react-doctor`,originallyExternal:!1,rule:{...ZH,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...ZH.tags??[]])]}},{key:`react-doctor/no-pure-black-background`,id:`no-pure-black-background`,source:`react-doctor`,originallyExternal:!1,rule:{...QH,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...QH.tags??[]])]}},{key:`react-doctor/no-pure-black-shadow`,id:`no-pure-black-shadow`,source:`react-doctor`,originallyExternal:!1,rule:{...eU,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...eU.tags??[]])]}},{key:`react-doctor/no-radial-halo`,id:`no-radial-halo`,source:`react-doctor`,originallyExternal:!1,rule:{...rU,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...rU.tags??[]])]}},{key:`react-doctor/no-random-key`,id:`no-random-key`,source:`react-doctor`,originallyExternal:!1,rule:{...Ttt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-react-children`,id:`no-react-children`,source:`react-doctor`,originallyExternal:!0,rule:{...oU,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...oU.requires??[]])]}},{key:`react-doctor/no-react-dom-deprecated-apis`,id:`no-react-dom-deprecated-apis`,source:`react-doctor`,originallyExternal:!1,rule:{...Mtt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-react19-deprecated-apis`,id:`no-react19-deprecated-apis`,source:`react-doctor`,originallyExternal:!1,rule:{...Ftt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-reduced-motion-content-removal`,id:`no-reduced-motion-content-removal`,source:`react-doctor`,originallyExternal:!1,rule:{...PU,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...PU.requires??[]])]}},{key:`react-doctor/no-redundant-display-class`,id:`no-redundant-display-class`,source:`react-doctor`,originallyExternal:!1,rule:{...FU,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...FU.tags??[]])]}},{key:`react-doctor/no-redundant-roles`,id:`no-redundant-roles`,source:`react-doctor`,originallyExternal:!0,rule:{...zU,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...zU.requires??[]])]}},{key:`react-doctor/no-redundant-should-component-update`,id:`no-redundant-should-component-update`,source:`react-doctor`,originallyExternal:!0,rule:{...BU,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...BU.requires??[]])]}},{key:`react-doctor/no-redundant-title-tooltip`,id:`no-redundant-title-tooltip`,source:`react-doctor`,originallyExternal:!1,rule:{...HU,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...HU.tags??[]])]}},{key:`react-doctor/no-ref-callback-cleanup-before-react-19`,id:`no-ref-callback-cleanup-before-react-19`,source:`react-doctor`,originallyExternal:!1,rule:{...vnt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-ref-current-in-render`,id:`no-ref-current-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...eW,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...eW.requires??[]])]}},{key:`react-doctor/no-render-in-render`,id:`no-render-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...Vnt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-render-prop-children`,id:`no-render-prop-children`,source:`react-doctor`,originallyExternal:!1,rule:{...qnt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-render-return-value`,id:`no-render-return-value`,source:`react-doctor`,originallyExternal:!0,rule:{...nW,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...nW.requires??[]])]}},{key:`react-doctor/no-repeated-container-text`,id:`no-repeated-container-text`,source:`react-doctor`,originallyExternal:!1,rule:{...uW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...uW.tags??[]])]}},{key:`react-doctor/no-repeated-emoji-tiles`,id:`no-repeated-emoji-tiles`,source:`react-doctor`,originallyExternal:!1,rule:{...dW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...dW.tags??[]])]}},{key:`react-doctor/no-repeated-glass-surfaces`,id:`no-repeated-glass-surfaces`,source:`react-doctor`,originallyExternal:!1,rule:{...fW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...fW.tags??[]])]}},{key:`react-doctor/no-repeated-hover-scale`,id:`no-repeated-hover-scale`,source:`react-doctor`,originallyExternal:!1,rule:{...pW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...pW.tags??[]])]}},{key:`react-doctor/no-repeated-kicker-labels`,id:`no-repeated-kicker-labels`,source:`react-doctor`,originallyExternal:!1,rule:{...mW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...mW.tags??[]])]}},{key:`react-doctor/no-repeated-placeholder-navigation`,id:`no-repeated-placeholder-navigation`,source:`react-doctor`,originallyExternal:!1,rule:{...hW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...hW.tags??[]])]}},{key:`react-doctor/no-repeated-section-shells`,id:`no-repeated-section-shells`,source:`react-doctor`,originallyExternal:!1,rule:{...gW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...gW.tags??[]])]}},{key:`react-doctor/no-repeating-gradient-decoration`,id:`no-repeating-gradient-decoration`,source:`react-doctor`,originallyExternal:!1,rule:{...vW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...vW.tags??[]])]}},{key:`react-doctor/no-reset-all-state-on-prop-change`,id:`no-reset-all-state-on-prop-change`,source:`react-doctor`,originallyExternal:!0,rule:{...HW,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...HW.requires??[]])]}},{key:`react-doctor/no-responsive-hidden-accessible-name`,id:`no-responsive-hidden-accessible-name`,source:`react-doctor`,originallyExternal:!1,rule:{...nG,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...nG.requires??[]])]}},{key:`react-doctor/no-scale-from-zero`,id:`no-scale-from-zero`,source:`react-doctor`,originallyExternal:!1,rule:{...vG,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...vG.requires??[]])]}},{key:`react-doctor/no-secrets-in-client-code`,id:`no-secrets-in-client-code`,source:`react-doctor`,originallyExternal:!1,rule:{...zit,framework:`global`,category:`Security`}},{key:`react-doctor/no-self-updating-effect`,id:`no-self-updating-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...aK,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...aK.requires??[]])]}},{key:`react-doctor/no-server-side-image-map`,id:`no-server-side-image-map`,source:`react-doctor`,originallyExternal:!0,rule:{...oK,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...oK.requires??[]])]}},{key:`react-doctor/no-set-state`,id:`no-set-state`,source:`react-doctor`,originallyExternal:!0,rule:{...sK,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...sK.requires??[]])]}},{key:`react-doctor/no-set-state-after-await-in-effect`,id:`no-set-state-after-await-in-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...DK,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...DK.requires??[]])]}},{key:`react-doctor/no-set-state-in-render`,id:`no-set-state-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...OK,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...OK.requires??[]])]}},{key:`react-doctor/no-shape-assembled-illustration`,id:`no-shape-assembled-illustration`,source:`react-doctor`,originallyExternal:!1,rule:{...IK,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...IK.tags??[]])]}},{key:`react-doctor/no-side-effect-in-state-updater-function`,id:`no-side-effect-in-state-updater-function`,source:`react-doctor`,originallyExternal:!1,rule:{...kq,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...kq.requires??[]])]}},{key:`react-doctor/no-side-tab-border`,id:`no-side-tab-border`,source:`react-doctor`,originallyExternal:!1,rule:{...$q,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...$q.tags??[]])]}},{key:`react-doctor/no-skipped-heading-level`,id:`no-skipped-heading-level`,source:`react-doctor`,originallyExternal:!1,rule:{...nJ,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...nJ.requires??[]])]}},{key:`react-doctor/no-small-form-control-text`,id:`no-small-form-control-text`,source:`react-doctor`,originallyExternal:!1,rule:{...rJ,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...rJ.tags??[]])]}},{key:`react-doctor/no-smooth-scroll-without-reduced-motion`,id:`no-smooth-scroll-without-reduced-motion`,source:`react-doctor`,originallyExternal:!1,rule:{...sJ,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...sJ.tags??[]])]}},{key:`react-doctor/no-spread-accumulator-in-reduce`,id:`no-spread-accumulator-in-reduce`,source:`react-doctor`,originallyExternal:!1,rule:{...fst,framework:`global`,category:`Performance`}},{key:`react-doctor/no-spread-props-over-defaults-clobbers-with-undefined`,id:`no-spread-props-over-defaults-clobbers-with-undefined`,source:`react-doctor`,originallyExternal:!1,rule:{...AJ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...AJ.requires??[]])]}},{key:`react-doctor/no-srcset-without-sizes`,id:`no-srcset-without-sizes`,source:`react-doctor`,originallyExternal:!1,rule:{...jJ,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...jJ.requires??[]])]}},{key:`react-doctor/no-stale-timer-ref`,id:`no-stale-timer-ref`,source:`react-doctor`,originallyExternal:!1,rule:{...BJ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...BJ.requires??[]])]}},{key:`react-doctor/no-static-element-interactions`,id:`no-static-element-interactions`,source:`react-doctor`,originallyExternal:!0,rule:{...qJ,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...qJ.requires??[]])]}},{key:`react-doctor/no-static-motion-config-never`,id:`no-static-motion-config-never`,source:`react-doctor`,originallyExternal:!1,rule:{...JJ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...JJ.requires??[]])]}},{key:`react-doctor/no-string-false-on-boolean-attribute`,id:`no-string-false-on-boolean-attribute`,source:`react-doctor`,originallyExternal:!1,rule:{...YJ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...YJ.requires??[]])]}},{key:`react-doctor/no-string-refs`,id:`no-string-refs`,source:`react-doctor`,originallyExternal:!0,rule:{...XJ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...XJ.requires??[]])]}},{key:`react-doctor/no-svg-currentcolor-with-fill-class`,id:`no-svg-currentcolor-with-fill-class`,source:`react-doctor`,originallyExternal:!1,rule:{...QJ,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...QJ.tags??[]])]}},{key:`react-doctor/no-symmetric-text-button-padding`,id:`no-symmetric-text-button-padding`,source:`react-doctor`,originallyExternal:!1,rule:{...$J,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...$J.tags??[]])]}},{key:`react-doctor/no-sync-xhr`,id:`no-sync-xhr`,source:`react-doctor`,originallyExternal:!1,rule:{...ect,framework:`global`,category:`Performance`}},{key:`react-doctor/no-tailwind-layout-transition`,id:`no-tailwind-layout-transition`,source:`react-doctor`,originallyExternal:!1,rule:{...eY,framework:`global`,category:`Performance`,defaultEnabled:!1,tags:[...new Set([`design`,...eY.tags??[]])]}},{key:`react-doctor/no-this-in-sfc`,id:`no-this-in-sfc`,source:`react-doctor`,originallyExternal:!0,rule:{...nY,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...nY.requires??[]])]}},{key:`react-doctor/no-tight-all-caps-heading`,id:`no-tight-all-caps-heading`,source:`react-doctor`,originallyExternal:!1,rule:{...rY,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...rY.tags??[]])]}},{key:`react-doctor/no-tight-body-leading`,id:`no-tight-body-leading`,source:`react-doctor`,originallyExternal:!1,rule:{...aY,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...aY.tags??[]])]}},{key:`react-doctor/no-tight-display-tracking`,id:`no-tight-display-tracking`,source:`react-doctor`,originallyExternal:!1,rule:{...oY,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...oY.tags??[]])]}},{key:`react-doctor/no-tiny-text`,id:`no-tiny-text`,source:`react-doctor`,originallyExternal:!1,rule:{...dY,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...dY.tags??[]])]}},{key:`react-doctor/no-tiny-uppercase-tracked-label`,id:`no-tiny-uppercase-tracked-label`,source:`react-doctor`,originallyExternal:!1,rule:{...mY,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...mY.tags??[]])]}},{key:`react-doctor/no-transition-all`,id:`no-transition-all`,source:`react-doctor`,originallyExternal:!1,rule:{...gY,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...gY.requires??[]])]}},{key:`react-doctor/no-transitioned-composite-widget-state`,id:`no-transitioned-composite-widget-state`,source:`react-doctor`,originallyExternal:!1,rule:{...AY,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...AY.tags??[]])]}},{key:`react-doctor/no-transitioned-focus-ring`,id:`no-transitioned-focus-ring`,source:`react-doctor`,originallyExternal:!1,rule:{...jY,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...jY.tags??[]])]}},{key:`react-doctor/no-unbounded-animation-frame-loop`,id:`no-unbounded-animation-frame-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...NY,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...NY.requires??[]])]}},{key:`react-doctor/no-uncontrolled-input`,id:`no-uncontrolled-input`,source:`react-doctor`,originallyExternal:!1,rule:{...Rlt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-undeferred-third-party`,id:`no-undeferred-third-party`,source:`react-doctor`,originallyExternal:!1,rule:{...Blt,framework:`global`,category:`Performance`}},{key:`react-doctor/no-undersized-icon-button`,id:`no-undersized-icon-button`,source:`react-doctor`,originallyExternal:!1,rule:{...zY,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...zY.tags??[]])]}},{key:`react-doctor/no-unescaped-dynamic-string-in-regexp`,id:`no-unescaped-dynamic-string-in-regexp`,source:`react-doctor`,originallyExternal:!1,rule:{...gut,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-unescaped-entities`,id:`no-unescaped-entities`,source:`react-doctor`,originallyExternal:!0,rule:{...aX,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...aX.requires??[]])]}},{key:`react-doctor/no-ungated-tailwind-animation`,id:`no-ungated-tailwind-animation`,source:`react-doctor`,originallyExternal:!1,rule:{...uX,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...uX.requires??[]])]}},{key:`react-doctor/no-unguarded-browser-global-at-module-scope`,id:`no-unguarded-browser-global-at-module-scope`,source:`react-doctor`,originallyExternal:!1,rule:{...Put,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-unguarded-browser-global-in-render-or-hook-init`,id:`no-unguarded-browser-global-in-render-or-hook-init`,source:`react-doctor`,originallyExternal:!1,rule:{...LX,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...LX.requires??[]])]}},{key:`react-doctor/no-unguarded-numeric-input-parse`,id:`no-unguarded-numeric-input-parse`,source:`react-doctor`,originallyExternal:!1,rule:{...fdt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-unguarded-throwing-parse-call`,id:`no-unguarded-throwing-parse-call`,source:`react-doctor`,originallyExternal:!1,rule:{...Ndt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-uniform-feature-card-grid`,id:`no-uniform-feature-card-grid`,source:`react-doctor`,originallyExternal:!1,rule:{...gZ,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...gZ.tags??[]])]}},{key:`react-doctor/no-uninformative-aria-label`,id:`no-uninformative-aria-label`,source:`react-doctor`,originallyExternal:!1,rule:{..._Z,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,..._Z.requires??[]])]}},{key:`react-doctor/no-unknown-property`,id:`no-unknown-property`,source:`react-doctor`,originallyExternal:!0,rule:{...SZ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...SZ.requires??[]])]}},{key:`react-doctor/no-unowned-async-error-clear`,id:`no-unowned-async-error-clear`,source:`react-doctor`,originallyExternal:!1,rule:{...PZ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...PZ.requires??[]])]}},{key:`react-doctor/no-unsafe`,id:`no-unsafe`,source:`react-doctor`,originallyExternal:!0,rule:{...LZ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...LZ.requires??[]])]}},{key:`react-doctor/no-unsafe-json-parse`,id:`no-unsafe-json-parse`,source:`react-doctor`,originallyExternal:!1,rule:{...Ift,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-unstable-nested-components`,id:`no-unstable-nested-components`,source:`react-doctor`,originallyExternal:!0,rule:{...$Z,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...$Z.requires??[]])]}},{key:`react-doctor/no-unthrottled-scroll-mutation`,id:`no-unthrottled-scroll-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...nQ,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...nQ.requires??[]])]}},{key:`react-doctor/no-uppercase-mono-label`,id:`no-uppercase-mono-label`,source:`react-doctor`,originallyExternal:!1,rule:{...rQ,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...rQ.tags??[]])]}},{key:`react-doctor/no-uppercase-tracked-navigation-label`,id:`no-uppercase-tracked-navigation-label`,source:`react-doctor`,originallyExternal:!1,rule:{...iQ,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...iQ.tags??[]])]}},{key:`react-doctor/no-usememo-simple-expression`,id:`no-usememo-simple-expression`,source:`react-doctor`,originallyExternal:!1,rule:{...sQ,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...sQ.requires??[]])]}},{key:`react-doctor/no-whole-object-default-losing-per-key-defaults`,id:`no-whole-object-default-losing-per-key-defaults`,source:`react-doctor`,originallyExternal:!1,rule:{...Spt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-whole-object-dep-with-member-reads`,id:`no-whole-object-dep-with-member-reads`,source:`react-doctor`,originallyExternal:!1,rule:{..._Q,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,..._Q.requires??[]])]}},{key:`react-doctor/no-wide-letter-spacing`,id:`no-wide-letter-spacing`,source:`react-doctor`,originallyExternal:!1,rule:{...vQ,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...vQ.tags??[]])]}},{key:`react-doctor/no-will-update-set-state`,id:`no-will-update-set-state`,source:`react-doctor`,originallyExternal:!0,rule:{...yQ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...yQ.requires??[]])]}},{key:`react-doctor/no-z-index-9999`,id:`no-z-index-9999`,source:`react-doctor`,originallyExternal:!1,rule:{...bQ,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...bQ.tags??[]])]}},{key:`react-doctor/nosql-injection-risk`,id:`nosql-injection-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Ne,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Ne.tags??[]])]}},{key:`react-doctor/only-export-components`,id:`only-export-components`,source:`react-doctor`,originallyExternal:!0,rule:{...a$,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...a$.requires??[]])]}},{key:`react-doctor/package-metadata-secret`,id:`package-metadata-secret`,source:`react-doctor`,originallyExternal:!1,rule:{...pte,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...pte.tags??[]])]}},{key:`react-doctor/path-traversal-risk`,id:`path-traversal-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...a,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...a.tags??[]])]}},{key:`react-doctor/plugin-update-trust-risk`,id:`plugin-update-trust-risk`,source:`react-doctor`,originallyExternal:!1,rule:{..._te,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,..._te.tags??[]])]}},{key:`react-doctor/pointer-capture-needs-cancel-handler`,id:`pointer-capture-needs-cancel-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...zmt,framework:`global`,category:`Bugs`}},{key:`react-doctor/postmessage-origin-risk`,id:`postmessage-origin-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Re,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Re.tags??[]])]}},{key:`react-doctor/preact-no-children-length`,id:`preact-no-children-length`,source:`react-doctor`,originallyExternal:!1,rule:{...Wmt,framework:`preact`,category:`Bugs`}},{key:`react-doctor/preact-no-react-hooks-import`,id:`preact-no-react-hooks-import`,source:`react-doctor`,originallyExternal:!1,rule:{...qmt,framework:`preact`,category:`Bugs`}},{key:`react-doctor/preact-no-render-arguments`,id:`preact-no-render-arguments`,source:`react-doctor`,originallyExternal:!1,rule:{...eht,framework:`preact`,category:`Bugs`}},{key:`react-doctor/preact-prefer-ondblclick`,id:`preact-prefer-ondblclick`,source:`react-doctor`,originallyExternal:!1,rule:{...tht,framework:`preact`,category:`Bugs`}},{key:`react-doctor/preact-prefer-oninput`,id:`preact-prefer-oninput`,source:`react-doctor`,originallyExternal:!1,rule:{...iht,framework:`preact`,category:`Bugs`}},{key:`react-doctor/prefer-dvh-over-vh`,id:`prefer-dvh-over-vh`,source:`react-doctor`,originallyExternal:!1,rule:{...d$,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...d$.tags??[]])]}},{key:`react-doctor/prefer-dynamic-import`,id:`prefer-dynamic-import`,source:`react-doctor`,originallyExternal:!1,rule:{...sht,framework:`global`,category:`Performance`}},{key:`react-doctor/prefer-es6-class`,id:`prefer-es6-class`,source:`react-doctor`,originallyExternal:!0,rule:{...p$,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...p$.requires??[]])]}},{key:`react-doctor/prefer-explicit-variants`,id:`prefer-explicit-variants`,source:`react-doctor`,originallyExternal:!1,rule:{...mht,framework:`global`,category:`Maintainability`}},{key:`react-doctor/prefer-function-component`,id:`prefer-function-component`,source:`react-doctor`,originallyExternal:!0,rule:{...g$,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...g$.requires??[]])]}},{key:`react-doctor/prefer-html-dialog`,id:`prefer-html-dialog`,source:`react-doctor`,originallyExternal:!1,rule:{...S$,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...S$.requires??[]])]}},{key:`react-doctor/prefer-module-scope-pure-function`,id:`prefer-module-scope-pure-function`,source:`react-doctor`,originallyExternal:!1,rule:{...Oht,framework:`global`,category:`Maintainability`}},{key:`react-doctor/prefer-module-scope-static-value`,id:`prefer-module-scope-static-value`,source:`react-doctor`,originallyExternal:!1,rule:{...Uht,framework:`global`,category:`Maintainability`}},{key:`react-doctor/prefer-motion-transform-property`,id:`prefer-motion-transform-property`,source:`react-doctor`,originallyExternal:!1,rule:{...E$,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...E$.requires??[]])]}},{key:`react-doctor/prefer-stable-empty-fallback`,id:`prefer-stable-empty-fallback`,source:`react-doctor`,originallyExternal:!1,rule:{...O$,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...O$.requires??[]])]}},{key:`react-doctor/prefer-tabular-numeric-data`,id:`prefer-tabular-numeric-data`,source:`react-doctor`,originallyExternal:!1,rule:{...k$,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...k$.tags??[]])]}},{key:`react-doctor/prefer-tag-over-role`,id:`prefer-tag-over-role`,source:`react-doctor`,originallyExternal:!0,rule:{...j$,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...j$.requires??[]])]}},{key:`react-doctor/prefer-truncate-shorthand`,id:`prefer-truncate-shorthand`,source:`react-doctor`,originallyExternal:!1,rule:{...M$,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...M$.tags??[]])]}},{key:`react-doctor/prefer-use-effect-event`,id:`prefer-use-effect-event`,source:`react-doctor`,originallyExternal:!1,rule:{...L$,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...L$.requires??[]])]}},{key:`react-doctor/prefer-use-sync-external-store`,id:`prefer-use-sync-external-store`,source:`react-doctor`,originallyExternal:!1,rule:{...V$,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...V$.requires??[]])]}},{key:`react-doctor/prefer-useReducer`,id:`prefer-useReducer`,source:`react-doctor`,originallyExternal:!1,rule:{...U$,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...U$.requires??[]])]}},{key:`react-doctor/public-debug-artifact`,id:`public-debug-artifact`,source:`react-doctor`,originallyExternal:!1,rule:{...ne,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...ne.tags??[]])]}},{key:`react-doctor/public-env-secret-name`,id:`public-env-secret-name`,source:`react-doctor`,originallyExternal:!1,rule:{...oe,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...oe.tags??[]])]}},{key:`react-doctor/query-destructure-result`,id:`query-destructure-result`,source:`react-doctor`,originallyExternal:!1,rule:{...Vgt,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-floating-mutate-async`,id:`query-floating-mutate-async`,source:`react-doctor`,originallyExternal:!1,rule:{...Ygt,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-mutation-missing-invalidation`,id:`query-mutation-missing-invalidation`,source:`react-doctor`,originallyExternal:!1,rule:{...p_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-no-mutation-in-effect-as-read`,id:`query-no-mutation-in-effect-as-read`,source:`react-doctor`,originallyExternal:!1,rule:{...F_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-no-query-in-effect`,id:`query-no-query-in-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...V_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-no-rest-destructuring`,id:`query-no-rest-destructuring`,source:`react-doctor`,originallyExternal:!1,rule:{...H_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-no-usequery-for-mutation`,id:`query-no-usequery-for-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...Y_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-no-void-query-fn`,id:`query-no-void-query-fn`,source:`react-doctor`,originallyExternal:!1,rule:{...X_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-stable-query-client`,id:`query-stable-query-client`,source:`react-doctor`,originallyExternal:!1,rule:{...$_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/r3f-cap-device-pixel-ratio`,id:`r3f-cap-device-pixel-ratio`,source:`react-doctor`,originallyExternal:!1,rule:{...f0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...f0.tags??[]])],requires:[...new Set([`react`,`r3f`,...f0.requires??[]])]}},{key:`react-doctor/r3f-limit-shadowed-point-lights`,id:`r3f-limit-shadowed-point-lights`,source:`react-doctor`,originallyExternal:!1,rule:{...m0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...m0.tags??[]])],requires:[...new Set([`react`,`r3f`,...m0.requires??[]])]}},{key:`react-doctor/r3f-no-advancing-clock-in-use-frame`,id:`r3f-no-advancing-clock-in-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...g0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...g0.tags??[]])],requires:[...new Set([`react`,`r3f`,...g0.requires??[]])]}},{key:`react-doctor/r3f-no-allocation-in-pointer-move`,id:`r3f-no-allocation-in-pointer-move`,source:`react-doctor`,originallyExternal:!1,rule:{...y0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...y0.tags??[]])],requires:[...new Set([`react`,`r3f`,...y0.requires??[]])]}},{key:`react-doctor/r3f-no-async-use-frame`,id:`r3f-no-async-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...b0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...b0.tags??[]])],requires:[...new Set([`react`,`r3f`,...b0.requires??[]])]}},{key:`react-doctor/r3f-no-clone-in-use-frame`,id:`r3f-no-clone-in-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...D0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...D0.tags??[]])],requires:[...new Set([`react`,`r3f`,...D0.requires??[]])]}},{key:`react-doctor/r3f-no-deep-use-three-selector`,id:`r3f-no-deep-use-three-selector`,source:`react-doctor`,originallyExternal:!1,rule:{...k0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...k0.tags??[]])],requires:[...new Set([`react`,`r3f`,...k0.requires??[]])]}},{key:`react-doctor/r3f-no-dispose-loader-cache`,id:`r3f-no-dispose-loader-cache`,source:`react-doctor`,originallyExternal:!1,rule:{...I0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...I0.tags??[]])],requires:[...new Set([`react`,`r3f`,...I0.requires??[]])]}},{key:`react-doctor/r3f-no-duplicate-primitive-object`,id:`r3f-no-duplicate-primitive-object`,source:`react-doctor`,originallyExternal:!1,rule:{...H0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...H0.tags??[]])],requires:[...new Set([`react`,`r3f`,...H0.requires??[]])]}},{key:`react-doctor/r3f-no-extend-in-render`,id:`r3f-no-extend-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...W0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...W0.tags??[]])],requires:[...new Set([`react`,`r3f`,...W0.requires??[]])]}},{key:`react-doctor/r3f-no-extend-three-namespace`,id:`r3f-no-extend-three-namespace`,source:`react-doctor`,originallyExternal:!1,rule:{...q0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...q0.tags??[]])],requires:[...new Set([`react`,`r3f`,...q0.requires??[]])]}},{key:`react-doctor/r3f-no-fresh-portal-container`,id:`r3f-no-fresh-portal-container`,source:`react-doctor`,originallyExternal:!1,rule:{...X0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...X0.tags??[]])],requires:[...new Set([`react`,`r3f`,...X0.requires??[]])]}},{key:`react-doctor/r3f-no-fresh-use-three-selector`,id:`r3f-no-fresh-use-three-selector`,source:`react-doctor`,originallyExternal:!1,rule:{...Z0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...Z0.tags??[]])],requires:[...new Set([`react`,`r3f`,...Z0.requires??[]])]}},{key:`react-doctor/r3f-no-imperative-attach-of-managed-ref`,id:`r3f-no-imperative-attach-of-managed-ref`,source:`react-doctor`,originallyExternal:!1,rule:{...e2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...e2.tags??[]])],requires:[...new Set([`react`,`r3f`,...e2.requires??[]])]}},{key:`react-doctor/r3f-no-inline-primitive-object`,id:`r3f-no-inline-primitive-object`,source:`react-doctor`,originallyExternal:!1,rule:{...t2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...t2.tags??[]])],requires:[...new Set([`react`,`r3f`,...t2.requires??[]])]}},{key:`react-doctor/r3f-no-inline-resource-prop`,id:`r3f-no-inline-resource-prop`,source:`react-doctor`,originallyExternal:!1,rule:{...o2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...o2.tags??[]])],requires:[...new Set([`react`,`r3f`,...o2.requires??[]])]}},{key:`react-doctor/r3f-no-internal-imports`,id:`r3f-no-internal-imports`,source:`react-doctor`,originallyExternal:!1,rule:{...s2,framework:`global`,category:`Maintainability`,tags:[...new Set([`r3f`,`webgl`,...s2.tags??[]])],requires:[...new Set([`react`,`r3f`,...s2.requires??[]])]}},{key:`react-doctor/r3f-no-manual-canvas-resize`,id:`r3f-no-manual-canvas-resize`,source:`react-doctor`,originallyExternal:!1,rule:{...l2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...l2.tags??[]])],requires:[...new Set([`react`,`r3f`,...l2.requires??[]])]}},{key:`react-doctor/r3f-no-mutate-loader-cache`,id:`r3f-no-mutate-loader-cache`,source:`react-doctor`,originallyExternal:!1,rule:{...u2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...u2.tags??[]])],requires:[...new Set([`react`,`r3f`,...u2.requires??[]])]}},{key:`react-doctor/r3f-no-mutating-pointer-event-data`,id:`r3f-no-mutating-pointer-event-data`,source:`react-doctor`,originallyExternal:!1,rule:{...f2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...f2.tags??[]])],requires:[...new Set([`react`,`r3f`,...f2.requires??[]])]}},{key:`react-doctor/r3f-no-new-in-use-frame`,id:`r3f-no-new-in-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...p2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...p2.tags??[]])],requires:[...new Set([`react`,`r3f`,...p2.requires??[]])]}},{key:`react-doctor/r3f-no-null-loader-input`,id:`r3f-no-null-loader-input`,source:`react-doctor`,originallyExternal:!1,rule:{...g2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...g2.tags??[]])],requires:[...new Set([`react`,`r3f`,...g2.requires??[]])]}},{key:`react-doctor/r3f-no-object-pointer-capture`,id:`r3f-no-object-pointer-capture`,source:`react-doctor`,originallyExternal:!1,rule:{...v2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...v2.tags??[]])],requires:[...new Set([`react`,`r3f`,...v2.requires??[]])]}},{key:`react-doctor/r3f-no-recursive-raf-with-use-frame`,id:`r3f-no-recursive-raf-with-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...x2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...x2.tags??[]])],requires:[...new Set([`react`,`r3f`,...x2.requires??[]])]}},{key:`react-doctor/r3f-no-state-in-pointer-move`,id:`r3f-no-state-in-pointer-move`,source:`react-doctor`,originallyExternal:!1,rule:{...F2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...F2.tags??[]])],requires:[...new Set([`react`,`r3f`,...F2.requires??[]])]}},{key:`react-doctor/r3f-no-state-in-use-frame`,id:`r3f-no-state-in-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...N2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...N2.tags??[]])],requires:[...new Set([`react`,`r3f`,...N2.requires??[]])]}},{key:`react-doctor/r3f-no-sync-readback-in-use-frame`,id:`r3f-no-sync-readback-in-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...L2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...L2.tags??[]])],requires:[...new Set([`react`,`r3f`,...L2.requires??[]])]}},{key:`react-doctor/r3f-no-unstable-args`,id:`r3f-no-unstable-args`,source:`react-doctor`,originallyExternal:!1,rule:{...z2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...z2.tags??[]])],requires:[...new Set([`react`,`r3f`,...z2.requires??[]])]}},{key:`react-doctor/r3f-no-use-frame-dependency-array`,id:`r3f-no-use-frame-dependency-array`,source:`react-doctor`,originallyExternal:!1,rule:{...B2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...B2.tags??[]])],requires:[...new Set([`react`,`r3f`,...B2.requires??[]])]}},{key:`react-doctor/r3f-prefer-instanced-mesh`,id:`r3f-prefer-instanced-mesh`,source:`react-doctor`,originallyExternal:!1,rule:{...U2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...U2.tags??[]])],requires:[...new Set([`react`,`r3f`,...U2.requires??[]])]}},{key:`react-doctor/r3f-prefer-use-loader`,id:`r3f-prefer-use-loader`,source:`react-doctor`,originallyExternal:!1,rule:{...W2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...W2.tags??[]])],requires:[...new Set([`react`,`r3f`,...W2.requires??[]])]}},{key:`react-doctor/r3f-require-frame-delta`,id:`r3f-require-frame-delta`,source:`react-doctor`,originallyExternal:!1,rule:{...Y2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...Y2.tags??[]])],requires:[...new Set([`react`,`r3f`,...Y2.requires??[]])]}},{key:`react-doctor/r3f-require-global-effect-cleanup`,id:`r3f-require-global-effect-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...X2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...X2.tags??[]])],requires:[...new Set([`react`,`r3f`,...X2.requires??[]])]}},{key:`react-doctor/r3f-require-instanced-buffer-update`,id:`r3f-require-instanced-buffer-update`,source:`react-doctor`,originallyExternal:!1,rule:{...t4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...t4.tags??[]])],requires:[...new Set([`react`,`r3f`,...t4.requires??[]])]}},{key:`react-doctor/r3f-require-owned-texture-cleanup`,id:`r3f-require-owned-texture-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...p4,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...p4.tags??[]])],requires:[...new Set([`react`,`r3f`,...p4.requires??[]])]}},{key:`react-doctor/r3f-require-projection-matrix-update`,id:`r3f-require-projection-matrix-update`,source:`react-doctor`,originallyExternal:!1,rule:{...g4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...g4.tags??[]])],requires:[...new Set([`react`,`r3f`,...g4.requires??[]])]}},{key:`react-doctor/r3f-require-render-with-positive-priority`,id:`r3f-require-render-with-positive-priority`,source:`react-doctor`,originallyExternal:!1,rule:{...v4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...v4.tags??[]])],requires:[...new Set([`react`,`r3f`,...v4.requires??[]])]}},{key:`react-doctor/r3f-require-root-unmount`,id:`r3f-require-root-unmount`,source:`react-doctor`,originallyExternal:!1,rule:{...y4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...y4.tags??[]])],requires:[...new Set([`react`,`r3f`,...y4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-canvas-prop-compatibility`,id:`r3f-webgpu-canvas-prop-compatibility`,source:`react-doctor`,originallyExternal:!1,rule:{...b4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...b4.tags??[]])],requires:[...new Set([`react`,`r3f`,...b4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-no-gl-state`,id:`r3f-webgpu-no-gl-state`,source:`react-doctor`,originallyExternal:!1,rule:{...w4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...w4.tags??[]])],requires:[...new Set([`react`,`r3f`,...w4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-no-js-uniform-branch`,id:`r3f-webgpu-no-js-uniform-branch`,source:`react-doctor`,originallyExternal:!1,rule:{...E4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...E4.tags??[]])],requires:[...new Set([`react`,`r3f`,...E4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-no-legacy-effect-composer`,id:`r3f-webgpu-no-legacy-effect-composer`,source:`react-doctor`,originallyExternal:!1,rule:{...O4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...O4.tags??[]])],requires:[...new Set([`react`,`r3f`,...O4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-no-legacy-material-api`,id:`r3f-webgpu-no-legacy-material-api`,source:`react-doctor`,originallyExternal:!1,rule:{...k4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...k4.tags??[]])],requires:[...new Set([`react`,`r3f`,...k4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-no-unregistered-pipeline-pass`,id:`r3f-webgpu-no-unregistered-pipeline-pass`,source:`react-doctor`,originallyExternal:!1,rule:{...A4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...A4.tags??[]])],requires:[...new Set([`react`,`r3f`,...A4.requires??[]])]}},{key:`react-doctor/radio-input-missing-name`,id:`radio-input-missing-name`,source:`react-doctor`,originallyExternal:!1,rule:{...ASt,framework:`global`,category:`Accessibility`}},{key:`react-doctor/raw-sql-injection-risk`,id:`raw-sql-injection-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Xe,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Xe.tags??[]])]}},{key:`react-doctor/react-compiler-no-manual-memoization`,id:`react-compiler-no-manual-memoization`,source:`react-doctor`,originallyExternal:!1,rule:{...RSt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/react-in-jsx-scope`,id:`react-in-jsx-scope`,source:`react-doctor`,originallyExternal:!0,rule:{...BSt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...BSt.requires??[]])]}},{key:`react-doctor/react-markdown-unsanitized-raw-html`,id:`react-markdown-unsanitized-raw-html`,source:`react-doctor`,originallyExternal:!1,rule:{...eCt,framework:`global`,category:`Security`}},{key:`react-doctor/react-router-csp-nonce-consistency`,id:`react-router-csp-nonce-consistency`,source:`react-doctor`,originallyExternal:!1,rule:{...oCt,framework:`global`,category:`Security`}},{key:`react-doctor/react-router-descendant-routes-require-splat`,id:`react-router-descendant-routes-require-splat`,source:`react-doctor`,originallyExternal:!1,rule:{...dCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-guard-aborted-handle-error`,id:`react-router-guard-aborted-handle-error`,source:`react-doctor`,originallyExternal:!1,rule:{...vCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-internal-route-anchor`,id:`react-router-internal-route-anchor`,source:`react-doctor`,originallyExternal:!1,rule:{...bCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-loader-fetch-forwards-signal`,id:`react-router-loader-fetch-forwards-signal`,source:`react-doctor`,originallyExternal:!1,rule:{...ECt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...ECt.requires??[]])]}},{key:`react-doctor/react-router-loader-parallel-fetch`,id:`react-router-loader-parallel-fetch`,source:`react-doctor`,originallyExternal:!1,rule:{...jCt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...jCt.requires??[]])]}},{key:`react-doctor/react-router-nested-route-requires-outlet`,id:`react-router-nested-route-requires-outlet`,source:`react-doctor`,originallyExternal:!1,rule:{...FCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-catch-middleware-next`,id:`react-router-no-catch-middleware-next`,source:`react-doctor`,originallyExternal:!1,rule:{...zCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-client-module-in-server-render`,id:`react-router-no-client-module-in-server-render`,source:`react-doctor`,originallyExternal:!1,rule:{...GCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-duplicate-route-id`,id:`react-router-no-duplicate-route-id`,source:`react-doctor`,originallyExternal:!1,rule:{...qCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-empty-leaf-route`,id:`react-router-no-empty-leaf-route`,source:`react-doctor`,originallyExternal:!1,rule:{...XCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-invalid-absolute-child-path`,id:`react-router-no-invalid-absolute-child-path`,source:`react-doctor`,originallyExternal:!1,rule:{...$Ct,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-invalid-lazy-route-properties`,id:`react-router-no-invalid-lazy-route-properties`,source:`react-doctor`,originallyExternal:!1,rule:{...twt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-invalid-splat-path`,id:`react-router-no-invalid-splat-path`,source:`react-doctor`,originallyExternal:!1,rule:{...nwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-loader-request-body`,id:`react-router-no-loader-request-body`,source:`react-doctor`,originallyExternal:!1,rule:{...iwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-middleware-response-body-consumption`,id:`react-router-no-middleware-response-body-consumption`,source:`react-doctor`,originallyExternal:!1,rule:{...awt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-multiple-blockers`,id:`react-router-no-multiple-blockers`,source:`react-doctor`,originallyExternal:!1,rule:{...owt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-multiple-middleware-next`,id:`react-router-no-multiple-middleware-next`,source:`react-doctor`,originallyExternal:!1,rule:{...cwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-multiple-set-search-params-in-tick`,id:`react-router-no-multiple-set-search-params-in-tick`,source:`react-doctor`,originallyExternal:!1,rule:{...dwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-navigate-in-render`,id:`react-router-no-navigate-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...pwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-nested-router`,id:`react-router-no-nested-router`,source:`react-doctor`,originallyExternal:!1,rule:{...hwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-redirect-in-try-catch`,id:`react-router-no-redirect-in-try-catch`,source:`react-doctor`,originallyExternal:!1,rule:{..._wt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-route-module-environment-suffix`,id:`react-router-no-route-module-environment-suffix`,source:`react-doctor`,originallyExternal:!1,rule:{...ywt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-router-in-render`,id:`react-router-no-router-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...bwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-session-mutation-in-loader`,id:`react-router-no-session-mutation-in-loader`,source:`react-doctor`,originallyExternal:!1,rule:{...xwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-static-cookie-expires`,id:`react-router-no-static-cookie-expires`,source:`react-doctor`,originallyExternal:!1,rule:{...Twt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-unsynchronized-search-params-mutation`,id:`react-router-no-unsynchronized-search-params-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...jwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-use-loader-data-in-error-ui`,id:`react-router-no-use-loader-data-in-error-ui`,source:`react-doctor`,originallyExternal:!1,rule:{...Nwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-prefer-route-lazy`,id:`react-router-prefer-route-lazy`,source:`react-doctor`,originallyExternal:!1,rule:{...Fwt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Fwt.requires??[]])]}},{key:`react-doctor/react-router-require-root-error-boundary`,id:`react-router-require-root-error-boundary`,source:`react-doctor`,originallyExternal:!1,rule:{...Iwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-resource-link-requires-reload`,id:`react-router-resource-link-requires-reload`,source:`react-doctor`,originallyExternal:!1,rule:{...zwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-return-navigation-promise-in-transition`,id:`react-router-return-navigation-promise-in-transition`,source:`react-doctor`,originallyExternal:!1,rule:{...Bwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-server-middleware-return-response`,id:`react-router-server-middleware-return-response`,source:`react-doctor`,originallyExternal:!1,rule:{...Uwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-session-mutation-requires-commit`,id:`react-router-session-mutation-requires-commit`,source:`react-doctor`,originallyExternal:!1,rule:{...Kwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-v8-no-meta-data-field`,id:`react-router-v8-no-meta-data-field`,source:`react-doctor`,originallyExternal:!1,rule:{...qwt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/react-router-v8-no-react-router-dom-import`,id:`react-router-v8-no-react-router-dom-import`,source:`react-doctor`,originallyExternal:!1,rule:{...Jwt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/react-router-v8-no-removed-future-flags`,id:`react-router-v8-no-removed-future-flags`,source:`react-doctor`,originallyExternal:!1,rule:{...Xwt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/react-router-valid-route-object`,id:`react-router-valid-route-object`,source:`react-doctor`,originallyExternal:!1,rule:{...Qwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/redux-useselector-inline-derivation`,id:`redux-useselector-inline-derivation`,source:`react-doctor`,originallyExternal:!1,rule:{...cTt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...cTt.requires??[]])]}},{key:`react-doctor/redux-useselector-returns-new-collection`,id:`redux-useselector-returns-new-collection`,source:`react-doctor`,originallyExternal:!1,rule:{...uTt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...uTt.requires??[]])]}},{key:`react-doctor/remotion-calculate-metadata-fetch-signal`,id:`remotion-calculate-metadata-fetch-signal`,source:`react-doctor`,originallyExternal:!1,rule:{...TTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-deterministic-randomness`,id:`remotion-deterministic-randomness`,source:`react-doctor`,originallyExternal:!1,rule:{...ATt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-css-animation`,id:`remotion-no-css-animation`,source:`react-doctor`,originallyExternal:!1,rule:{...NTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-css-transition`,id:`remotion-no-css-transition`,source:`react-doctor`,originallyExternal:!1,rule:{...FTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-css-url-assets`,id:`remotion-no-css-url-assets`,source:`react-doctor`,originallyExternal:!1,rule:{...HTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-module-scope-delay-render`,id:`remotion-no-module-scope-delay-render`,source:`react-doctor`,originallyExternal:!1,rule:{...UTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-native-media-elements`,id:`remotion-no-native-media-elements`,source:`react-doctor`,originallyExternal:!1,rule:{...GTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-next-image`,id:`remotion-no-next-image`,source:`react-doctor`,originallyExternal:!1,rule:{...KTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-stable-delay-render-handle`,id:`remotion-stable-delay-render-handle`,source:`react-doctor`,originallyExternal:!1,rule:{...JTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/rendering-animate-svg-wrapper`,id:`rendering-animate-svg-wrapper`,source:`react-doctor`,originallyExternal:!1,rule:{...YTt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...YTt.requires??[]])]}},{key:`react-doctor/rendering-conditional-render`,id:`rendering-conditional-render`,source:`react-doctor`,originallyExternal:!1,rule:{...eEt,framework:`global`,category:`Bugs`}},{key:`react-doctor/rendering-hoist-jsx`,id:`rendering-hoist-jsx`,source:`react-doctor`,originallyExternal:!1,rule:{...nEt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...nEt.requires??[]])]}},{key:`react-doctor/rendering-hydration-mismatch-time`,id:`rendering-hydration-mismatch-time`,source:`react-doctor`,originallyExternal:!1,rule:{...sEt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...sEt.requires??[]])]}},{key:`react-doctor/rendering-hydration-no-flicker`,id:`rendering-hydration-no-flicker`,source:`react-doctor`,originallyExternal:!1,rule:{...MEt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...MEt.requires??[]])]}},{key:`react-doctor/rendering-script-defer-async`,id:`rendering-script-defer-async`,source:`react-doctor`,originallyExternal:!1,rule:{...IEt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...IEt.requires??[]])]}},{key:`react-doctor/rendering-svg-precision`,id:`rendering-svg-precision`,source:`react-doctor`,originallyExternal:!1,rule:{...HEt,framework:`global`,category:`Performance`}},{key:`react-doctor/rendering-usetransition-loading`,id:`rendering-usetransition-loading`,source:`react-doctor`,originallyExternal:!1,rule:{...pDt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...pDt.requires??[]])]}},{key:`react-doctor/repository-secret-file`,id:`repository-secret-file`,source:`react-doctor`,originallyExternal:!1,rule:{...En,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...En.tags??[]])]}},{key:`react-doctor/request-body-mass-assignment`,id:`request-body-mass-assignment`,source:`react-doctor`,originallyExternal:!1,rule:{...m,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...m.tags??[]])]}},{key:`react-doctor/require-autoplay-video-poster`,id:`require-autoplay-video-poster`,source:`react-doctor`,originallyExternal:!1,rule:{..._Dt,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,..._Dt.tags??[]])]}},{key:`react-doctor/require-render-return`,id:`require-render-return`,source:`react-doctor`,originallyExternal:!0,rule:{...wDt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...wDt.requires??[]])]}},{key:`react-doctor/require-scale-reveal-transform-origin`,id:`require-scale-reveal-transform-origin`,source:`react-doctor`,originallyExternal:!1,rule:{...kDt,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...kDt.tags??[]])]}},{key:`react-doctor/rerender-defer-reads-hook`,id:`rerender-defer-reads-hook`,source:`react-doctor`,originallyExternal:!1,rule:{...FDt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...FDt.requires??[]])]}},{key:`react-doctor/rerender-dependencies`,id:`rerender-dependencies`,source:`react-doctor`,originallyExternal:!1,rule:{...IDt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...IDt.requires??[]])]}},{key:`react-doctor/rerender-derived-state-from-hook`,id:`rerender-derived-state-from-hook`,source:`react-doctor`,originallyExternal:!1,rule:{...VDt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...VDt.requires??[]])]}},{key:`react-doctor/rerender-functional-setstate`,id:`rerender-functional-setstate`,source:`react-doctor`,originallyExternal:!1,rule:{...XDt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...XDt.requires??[]])]}},{key:`react-doctor/rerender-lazy-ref-init`,id:`rerender-lazy-ref-init`,source:`react-doctor`,originallyExternal:!1,rule:{...QDt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...QDt.requires??[]])]}},{key:`react-doctor/rerender-lazy-state-init`,id:`rerender-lazy-state-init`,source:`react-doctor`,originallyExternal:!1,rule:{...eOt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...eOt.requires??[]])]}},{key:`react-doctor/rerender-memo-before-early-return`,id:`rerender-memo-before-early-return`,source:`react-doctor`,originallyExternal:!1,rule:{...cOt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...cOt.requires??[]])]}},{key:`react-doctor/rerender-memo-with-default-value`,id:`rerender-memo-with-default-value`,source:`react-doctor`,originallyExternal:!1,rule:{...NOt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...NOt.requires??[]])]}},{key:`react-doctor/rerender-state-only-in-handlers`,id:`rerender-state-only-in-handlers`,source:`react-doctor`,originallyExternal:!1,rule:{...Mkt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Mkt.requires??[]])]}},{key:`react-doctor/rerender-transitions-scroll`,id:`rerender-transitions-scroll`,source:`react-doctor`,originallyExternal:!1,rule:{...Vkt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Vkt.requires??[]])]}},{key:`react-doctor/rn-animate-layout-property`,id:`rn-animate-layout-property`,source:`react-doctor`,originallyExternal:!1,rule:{...Hkt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Hkt.tags??[]])]}},{key:`react-doctor/rn-animation-reaction-as-derived`,id:`rn-animation-reaction-as-derived`,source:`react-doctor`,originallyExternal:!1,rule:{...Ukt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Ukt.tags??[]])]}},{key:`react-doctor/rn-bottom-sheet-no-ignored-scroll-prop`,id:`rn-bottom-sheet-no-ignored-scroll-prop`,source:`react-doctor`,originallyExternal:!1,rule:{...Gkt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Gkt.tags??[]])]}},{key:`react-doctor/rn-bottom-sheet-no-state-in-on-animate`,id:`rn-bottom-sheet-no-state-in-on-animate`,source:`react-doctor`,originallyExternal:!1,rule:{...qkt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...qkt.tags??[]])]}},{key:`react-doctor/rn-bottom-sheet-prefer-native`,id:`rn-bottom-sheet-prefer-native`,source:`react-doctor`,originallyExternal:!1,rule:{...Ykt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Ykt.tags??[]])]}},{key:`react-doctor/rn-bottom-sheet-use-integrated-scrollable`,id:`rn-bottom-sheet-use-integrated-scrollable`,source:`react-doctor`,originallyExternal:!1,rule:{...Qkt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Qkt.tags??[]])]}},{key:`react-doctor/rn-detox-missing-await`,id:`rn-detox-missing-await`,source:`react-doctor`,originallyExternal:!1,rule:{...dAt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...dAt.tags??[]])]}},{key:`react-doctor/rn-list-callback-per-row`,id:`rn-list-callback-per-row`,source:`react-doctor`,originallyExternal:!1,rule:{...OAt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...OAt.tags??[]])]}},{key:`react-doctor/rn-list-data-mapped`,id:`rn-list-data-mapped`,source:`react-doctor`,originallyExternal:!1,rule:{...PAt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...PAt.tags??[]])]}},{key:`react-doctor/rn-list-missing-estimated-item-size`,id:`rn-list-missing-estimated-item-size`,source:`react-doctor`,originallyExternal:!1,rule:{...RAt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...RAt.tags??[]])]}},{key:`react-doctor/rn-list-recyclable-without-types`,id:`rn-list-recyclable-without-types`,source:`react-doctor`,originallyExternal:!1,rule:{...Sjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Sjt.tags??[]])]}},{key:`react-doctor/rn-no-deep-imports`,id:`rn-no-deep-imports`,source:`react-doctor`,originallyExternal:!1,rule:{...Djt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Djt.tags??[]])]}},{key:`react-doctor/rn-no-deprecated-modules`,id:`rn-no-deprecated-modules`,source:`react-doctor`,originallyExternal:!1,rule:{...Ojt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Ojt.tags??[]])]}},{key:`react-doctor/rn-no-dimensions-get`,id:`rn-no-dimensions-get`,source:`react-doctor`,originallyExternal:!1,rule:{...Pjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Pjt.tags??[]])]}},{key:`react-doctor/rn-no-falsy-and-render`,id:`rn-no-falsy-and-render`,source:`react-doctor`,originallyExternal:!1,rule:{...qjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...qjt.tags??[]])]}},{key:`react-doctor/rn-no-image-children`,id:`rn-no-image-children`,source:`react-doctor`,originallyExternal:!1,rule:{...Yjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Yjt.tags??[]])]}},{key:`react-doctor/rn-no-inline-flatlist-renderitem`,id:`rn-no-inline-flatlist-renderitem`,source:`react-doctor`,originallyExternal:!1,rule:{...Xjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Xjt.tags??[]])]}},{key:`react-doctor/rn-no-inline-object-in-list-item`,id:`rn-no-inline-object-in-list-item`,source:`react-doctor`,originallyExternal:!1,rule:{...Zjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Zjt.tags??[]])]}},{key:`react-doctor/rn-no-legacy-expo-packages`,id:`rn-no-legacy-expo-packages`,source:`react-doctor`,originallyExternal:!1,rule:{...Qjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Qjt.tags??[]])]}},{key:`react-doctor/rn-no-legacy-shadow-styles`,id:`rn-no-legacy-shadow-styles`,source:`react-doctor`,originallyExternal:!1,rule:{...$jt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...$jt.tags??[]])]}},{key:`react-doctor/rn-no-non-native-navigator`,id:`rn-no-non-native-navigator`,source:`react-doctor`,originallyExternal:!1,rule:{...rMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...rMt.tags??[]])]}},{key:`react-doctor/rn-no-panresponder`,id:`rn-no-panresponder`,source:`react-doctor`,originallyExternal:!1,rule:{...iMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...iMt.tags??[]])]}},{key:`react-doctor/rn-no-raw-text`,id:`rn-no-raw-text`,source:`react-doctor`,originallyExternal:!1,rule:{...yMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...yMt.tags??[]])]}},{key:`react-doctor/rn-no-renderitem-key`,id:`rn-no-renderitem-key`,source:`react-doctor`,originallyExternal:!1,rule:{...SMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...SMt.tags??[]])]}},{key:`react-doctor/rn-no-scroll-state`,id:`rn-no-scroll-state`,source:`react-doctor`,originallyExternal:!1,rule:{...AMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...AMt.tags??[]])]}},{key:`react-doctor/rn-no-scrollview-mapped-list`,id:`rn-no-scrollview-mapped-list`,source:`react-doctor`,originallyExternal:!1,rule:{...LMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...LMt.tags??[]])]}},{key:`react-doctor/rn-no-set-native-props`,id:`rn-no-set-native-props`,source:`react-doctor`,originallyExternal:!1,rule:{...zMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...zMt.tags??[]])]}},{key:`react-doctor/rn-no-single-element-style-array`,id:`rn-no-single-element-style-array`,source:`react-doctor`,originallyExternal:!1,rule:{...BMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...BMt.tags??[]])]}},{key:`react-doctor/rn-platform-shaking-use-direct-import`,id:`rn-platform-shaking-use-direct-import`,source:`react-doctor`,originallyExternal:!1,rule:{...VMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...VMt.tags??[]])]}},{key:`react-doctor/rn-prefer-content-inset-adjustment`,id:`rn-prefer-content-inset-adjustment`,source:`react-doctor`,originallyExternal:!1,rule:{...HMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...HMt.tags??[]])]}},{key:`react-doctor/rn-prefer-expo-image`,id:`rn-prefer-expo-image`,source:`react-doctor`,originallyExternal:!1,rule:{...qMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...qMt.tags??[]])]}},{key:`react-doctor/rn-prefer-pressable`,id:`rn-prefer-pressable`,source:`react-doctor`,originallyExternal:!1,rule:{...XMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...XMt.tags??[]])]}},{key:`react-doctor/rn-prefer-pressable-over-gesture-detector`,id:`rn-prefer-pressable-over-gesture-detector`,source:`react-doctor`,originallyExternal:!1,rule:{...eNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...eNt.tags??[]])]}},{key:`react-doctor/rn-prefer-reanimated`,id:`rn-prefer-reanimated`,source:`react-doctor`,originallyExternal:!1,rule:{...nNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...nNt.tags??[]])]}},{key:`react-doctor/rn-pressable-shared-value-mutation`,id:`rn-pressable-shared-value-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...oNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...oNt.tags??[]])]}},{key:`react-doctor/rn-reanimated-4-no-legacy-spring-thresholds`,id:`rn-reanimated-4-no-legacy-spring-thresholds`,source:`react-doctor`,originallyExternal:!1,rule:{...lNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...lNt.tags??[]])]}},{key:`react-doctor/rn-reanimated-4-no-removed-api`,id:`rn-reanimated-4-no-removed-api`,source:`react-doctor`,originallyExternal:!1,rule:{...fNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...fNt.tags??[]])]}},{key:`react-doctor/rn-reanimated-4-use-worklets-scheduler`,id:`rn-reanimated-4-use-worklets-scheduler`,source:`react-doctor`,originallyExternal:!1,rule:{...hNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...hNt.tags??[]])]}},{key:`react-doctor/rn-scrollview-dynamic-padding`,id:`rn-scrollview-dynamic-padding`,source:`react-doctor`,originallyExternal:!1,rule:{...xNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...xNt.tags??[]])]}},{key:`react-doctor/rn-scrollview-flex-in-content-container`,id:`rn-scrollview-flex-in-content-container`,source:`react-doctor`,originallyExternal:!1,rule:{...DNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...DNt.tags??[]])]}},{key:`react-doctor/rn-style-prefer-boxshadow`,id:`rn-style-prefer-boxshadow`,source:`react-doctor`,originallyExternal:!1,rule:{...INt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...INt.tags??[]])]}},{key:`react-doctor/role-button-requires-complete-keyboard-activation`,id:`role-button-requires-complete-keyboard-activation`,source:`react-doctor`,originallyExternal:!1,rule:{...YNt,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...YNt.requires??[]])]}},{key:`react-doctor/role-has-required-aria-props`,id:`role-has-required-aria-props`,source:`react-doctor`,originallyExternal:!0,rule:{...nPt,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...nPt.requires??[]])]}},{key:`react-doctor/role-supports-aria-props`,id:`role-supports-aria-props`,source:`react-doctor`,originallyExternal:!0,rule:{...lPt,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...lPt.requires??[]])]}},{key:`react-doctor/rules-of-hooks`,id:`rules-of-hooks`,source:`react-doctor`,originallyExternal:!0,rule:{...hFt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...hFt.requires??[]])]}},{key:`react-doctor/scope`,id:`scope`,source:`react-doctor`,originallyExternal:!0,rule:{...gFt,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...gFt.requires??[]])]}},{key:`react-doctor/secret-in-fallback`,id:`secret-in-fallback`,source:`react-doctor`,originallyExternal:!1,rule:{...Je,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Je.tags??[]])]}},{key:`react-doctor/self-closing-comp`,id:`self-closing-comp`,source:`react-doctor`,originallyExternal:!0,rule:{...yFt,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...yFt.requires??[]])]}},{key:`react-doctor/server-after-nonblocking`,id:`server-after-nonblocking`,source:`react-doctor`,originallyExternal:!1,rule:{...IFt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...IFt.tags??[]])]}},{key:`react-doctor/server-auth-actions`,id:`server-auth-actions`,source:`react-doctor`,originallyExternal:!1,rule:{...JIt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...JIt.tags??[]])]}},{key:`react-doctor/server-cache-with-object-literal`,id:`server-cache-with-object-literal`,source:`react-doctor`,originallyExternal:!1,rule:{...YIt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...YIt.tags??[]])]}},{key:`react-doctor/server-dedup-props`,id:`server-dedup-props`,source:`react-doctor`,originallyExternal:!1,rule:{...eLt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...eLt.tags??[]])]}},{key:`react-doctor/server-fetch-without-revalidate`,id:`server-fetch-without-revalidate`,source:`react-doctor`,originallyExternal:!1,rule:{...mLt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...mLt.tags??[]])]}},{key:`react-doctor/server-hoist-static-io`,id:`server-hoist-static-io`,source:`react-doctor`,originallyExternal:!1,rule:{...TLt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...TLt.tags??[]])]}},{key:`react-doctor/server-no-mutable-module-state`,id:`server-no-mutable-module-state`,source:`react-doctor`,originallyExternal:!1,rule:{...GLt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...GLt.tags??[]])]}},{key:`react-doctor/server-sequential-independent-await`,id:`server-sequential-independent-await`,source:`react-doctor`,originallyExternal:!1,rule:{...eRt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...eRt.tags??[]])]}},{key:`react-doctor/shadcn-tabs-trigger-requires-list`,id:`shadcn-tabs-trigger-requires-list`,source:`react-doctor`,originallyExternal:!1,rule:{...iRt,framework:`global`,category:`Bugs`}},{key:`react-doctor/state-in-constructor`,id:`state-in-constructor`,source:`react-doctor`,originallyExternal:!0,rule:{...cRt,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...cRt.requires??[]])]}},{key:`react-doctor/style-prop-object`,id:`style-prop-object`,source:`react-doctor`,originallyExternal:!0,rule:{...yRt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...yRt.requires??[]])]}},{key:`react-doctor/styled-components-duplicate-css-property-in-block`,id:`styled-components-duplicate-css-property-in-block`,source:`react-doctor`,originallyExternal:!1,rule:{...FRt,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...FRt.tags??[]])]}},{key:`react-doctor/styled-components-non-transient-custom-prop-on-intrinsic-element`,id:`styled-components-non-transient-custom-prop-on-intrinsic-element`,source:`react-doctor`,originallyExternal:!1,rule:{...JRt,framework:`global`,category:`Bugs`}},{key:`react-doctor/supabase-client-owned-authz-field`,id:`supabase-client-owned-authz-field`,source:`react-doctor`,originallyExternal:!1,rule:{...vt,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...vt.tags??[]])]}},{key:`react-doctor/supabase-rls-policy-risk`,id:`supabase-rls-policy-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...jn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...jn.tags??[]])]}},{key:`react-doctor/supabase-table-missing-rls`,id:`supabase-table-missing-rls`,source:`react-doctor`,originallyExternal:!1,rule:{...Sn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Sn.tags??[]])]}},{key:`react-doctor/svg-filter-clickjacking-risk`,id:`svg-filter-clickjacking-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...ft,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...ft.tags??[]])]}},{key:`react-doctor/tabindex-no-positive`,id:`tabindex-no-positive`,source:`react-doctor`,originallyExternal:!0,rule:{...YRt,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...YRt.requires??[]])]}},{key:`react-doctor/tanstack-start-get-mutation`,id:`tanstack-start-get-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...XRt,framework:`tanstack-start`,category:`Security`}},{key:`react-doctor/tanstack-start-loader-parallel-fetch`,id:`tanstack-start-loader-parallel-fetch`,source:`react-doctor`,originallyExternal:!1,rule:{...ZRt,framework:`tanstack-start`,category:`Performance`}},{key:`react-doctor/tanstack-start-missing-head-content`,id:`tanstack-start-missing-head-content`,source:`react-doctor`,originallyExternal:!1,rule:{...azt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-missing-scripts`,id:`tanstack-start-missing-scripts`,source:`react-doctor`,originallyExternal:!1,rule:{...hzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-anchor-element`,id:`tanstack-start-no-anchor-element`,source:`react-doctor`,originallyExternal:!1,rule:{..._zt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-direct-fetch-in-loader`,id:`tanstack-start-no-direct-fetch-in-loader`,source:`react-doctor`,originallyExternal:!1,rule:{...vzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-dynamic-server-fn-import`,id:`tanstack-start-no-dynamic-server-fn-import`,source:`react-doctor`,originallyExternal:!1,rule:{...yzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-navigate-in-render`,id:`tanstack-start-no-navigate-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...Szt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-secrets-in-loader`,id:`tanstack-start-no-secrets-in-loader`,source:`react-doctor`,originallyExternal:!1,rule:{...Dzt,framework:`tanstack-start`,category:`Security`}},{key:`react-doctor/tanstack-start-no-use-server-in-handler`,id:`tanstack-start-no-use-server-in-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...Ozt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-useeffect-fetch`,id:`tanstack-start-no-useeffect-fetch`,source:`react-doctor`,originallyExternal:!1,rule:{...kzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-redirect-in-try-catch`,id:`tanstack-start-redirect-in-try-catch`,source:`react-doctor`,originallyExternal:!1,rule:{...Azt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-route-property-order`,id:`tanstack-start-route-property-order`,source:`react-doctor`,originallyExternal:!1,rule:{...jzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-server-fn-method-order`,id:`tanstack-start-server-fn-method-order`,source:`react-doctor`,originallyExternal:!1,rule:{...Nzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-server-fn-validate-input`,id:`tanstack-start-server-fn-validate-input`,source:`react-doctor`,originallyExternal:!1,rule:{...Fzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tenant-static-proxy-risk`,id:`tenant-static-proxy-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...It,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...It.tags??[]])]}},{key:`react-doctor/three-cap-device-pixel-ratio`,id:`three-cap-device-pixel-ratio`,source:`react-doctor`,originallyExternal:!1,rule:{...W8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...W8.tags??[]])],requires:[...new Set([`three`,...W8.requires??[]])]}},{key:`react-doctor/three-limit-shadowed-point-lights`,id:`three-limit-shadowed-point-lights`,source:`react-doctor`,originallyExternal:!1,rule:{...G8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...G8.tags??[]])],requires:[...new Set([`three`,...G8.requires??[]])]}},{key:`react-doctor/three-no-allocation-in-pointer-move`,id:`three-no-allocation-in-pointer-move`,source:`react-doctor`,originallyExternal:!1,rule:{...q8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...q8.tags??[]])],requires:[...new Set([`three`,...q8.requires??[]])]}},{key:`react-doctor/three-no-async-animation-loop`,id:`three-no-async-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...Y8,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...Y8.tags??[]])],requires:[...new Set([`three`,...Y8.requires??[]])]}},{key:`react-doctor/three-no-clone-in-animation-loop`,id:`three-no-clone-in-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...X8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...X8.tags??[]])],requires:[...new Set([`three`,...X8.requires??[]])]}},{key:`react-doctor/three-no-material-recompile-in-animation-loop`,id:`three-no-material-recompile-in-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...Z8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...Z8.tags??[]])],requires:[...new Set([`three`,...Z8.requires??[]])]}},{key:`react-doctor/three-no-new-in-animation-loop`,id:`three-no-new-in-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...Q8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...Q8.tags??[]])],requires:[...new Set([`three`,...Q8.requires??[]])]}},{key:`react-doctor/three-no-object-construction-in-render`,id:`three-no-object-construction-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...$8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...$8.tags??[]])],requires:[...new Set([`react`,`three`,...$8.requires??[]])]}},{key:`react-doctor/three-no-redundant-uniforms-need-update`,id:`three-no-redundant-uniforms-need-update`,source:`react-doctor`,originallyExternal:!1,rule:{...e5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...e5.tags??[]])],requires:[...new Set([`three`,...e5.requires??[]])]}},{key:`react-doctor/three-no-state-in-animation-loop`,id:`three-no-state-in-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...t5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...t5.tags??[]])],requires:[...new Set([`react`,`three`,...t5.requires??[]])]}},{key:`react-doctor/three-no-state-in-pointer-move`,id:`three-no-state-in-pointer-move`,source:`react-doctor`,originallyExternal:!1,rule:{...n5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...n5.tags??[]])],requires:[...new Set([`react`,`three`,...n5.requires??[]])]}},{key:`react-doctor/three-on-before-compile-require-program-cache-key`,id:`three-on-before-compile-require-program-cache-key`,source:`react-doctor`,originallyExternal:!1,rule:{...a5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...a5.tags??[]])],requires:[...new Set([`three`,...a5.requires??[]])]}},{key:`react-doctor/three-prefer-instanced-mesh`,id:`three-prefer-instanced-mesh`,source:`react-doctor`,originallyExternal:!1,rule:{...o5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...o5.tags??[]])],requires:[...new Set([`three`,...o5.requires??[]])]}},{key:`react-doctor/three-raw-shader-require-fragment-float-precision`,id:`three-raw-shader-require-fragment-float-precision`,source:`react-doctor`,originallyExternal:!1,rule:{...d5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...d5.tags??[]])],requires:[...new Set([`three`,...d5.requires??[]])]}},{key:`react-doctor/three-raw-shader-require-glsl3-version`,id:`three-raw-shader-require-glsl3-version`,source:`react-doctor`,originallyExternal:!1,rule:{..._5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,..._5.tags??[]])],requires:[...new Set([`three`,..._5.requires??[]])]}},{key:`react-doctor/three-require-animation-mixer-cleanup`,id:`three-require-animation-mixer-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...v5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...v5.tags??[]])],requires:[...new Set([`react`,`three`,...v5.requires??[]])]}},{key:`react-doctor/three-require-controls-cleanup`,id:`three-require-controls-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...y5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...y5.tags??[]])],requires:[...new Set([`react`,`three`,...y5.requires??[]])]}},{key:`react-doctor/three-require-frame-delta`,id:`three-require-frame-delta`,source:`react-doctor`,originallyExternal:!1,rule:{...x5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...x5.tags??[]])],requires:[...new Set([`three`,...x5.requires??[]])]}},{key:`react-doctor/three-require-instanced-buffer-update`,id:`three-require-instanced-buffer-update`,source:`react-doctor`,originallyExternal:!1,rule:{...S5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...S5.tags??[]])],requires:[...new Set([`three`,...S5.requires??[]])]}},{key:`react-doctor/three-require-owned-geometry-cleanup`,id:`three-require-owned-geometry-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...C5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...C5.tags??[]])],requires:[...new Set([`react`,`three`,...C5.requires??[]])]}},{key:`react-doctor/three-require-owned-material-cleanup`,id:`three-require-owned-material-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...w5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...w5.tags??[]])],requires:[...new Set([`react`,`three`,...w5.requires??[]])]}},{key:`react-doctor/three-require-owned-texture-cleanup`,id:`three-require-owned-texture-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...T5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...T5.tags??[]])],requires:[...new Set([`react`,`three`,...T5.requires??[]])]}},{key:`react-doctor/three-require-postprocessing-cleanup`,id:`three-require-postprocessing-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...E5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...E5.tags??[]])],requires:[...new Set([`react`,`three`,...E5.requires??[]])]}},{key:`react-doctor/three-require-projection-matrix-update`,id:`three-require-projection-matrix-update`,source:`react-doctor`,originallyExternal:!1,rule:{...O5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...O5.tags??[]])],requires:[...new Set([`three`,...O5.requires??[]])]}},{key:`react-doctor/three-require-render-target-cleanup`,id:`three-require-render-target-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...k5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...k5.tags??[]])],requires:[...new Set([`react`,`three`,...k5.requires??[]])]}},{key:`react-doctor/three-require-renderer-cleanup`,id:`three-require-renderer-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...j5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...j5.tags??[]])],requires:[...new Set([`react`,`three`,...j5.requires??[]])]}},{key:`react-doctor/three-shader-no-constant-out-of-bounds-index`,id:`three-shader-no-constant-out-of-bounds-index`,source:`react-doctor`,originallyExternal:!1,rule:{...M5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...M5.tags??[]])],requires:[...new Set([`three`,...M5.requires??[]])]}},{key:`react-doctor/three-shader-no-derivatives-in-nonuniform-flow`,id:`three-shader-no-derivatives-in-nonuniform-flow`,source:`react-doctor`,originallyExternal:!1,rule:{...N5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...N5.tags??[]])],requires:[...new Set([`three`,...N5.requires??[]])]}},{key:`react-doctor/three-shader-no-invalid-clamp-bounds`,id:`three-shader-no-invalid-clamp-bounds`,source:`react-doctor`,originallyExternal:!1,rule:{...F5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...F5.tags??[]])],requires:[...new Set([`three`,...F5.requires??[]])]}},{key:`react-doctor/three-shader-no-invalid-constant-bit-operations`,id:`three-shader-no-invalid-constant-bit-operations`,source:`react-doctor`,originallyExternal:!1,rule:{...I5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...I5.tags??[]])],requires:[...new Set([`three`,...I5.requires??[]])]}},{key:`react-doctor/three-shader-no-invalid-constant-math`,id:`three-shader-no-invalid-constant-math`,source:`react-doctor`,originallyExternal:!1,rule:{...L5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...L5.tags??[]])],requires:[...new Set([`three`,...L5.requires??[]])]}},{key:`react-doctor/three-shader-no-invalid-smoothstep-edges`,id:`three-shader-no-invalid-smoothstep-edges`,source:`react-doctor`,originallyExternal:!1,rule:{...R5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...R5.tags??[]])],requires:[...new Set([`three`,...R5.requires??[]])]}},{key:`react-doctor/three-shader-no-inverse-of-uniform`,id:`three-shader-no-inverse-of-uniform`,source:`react-doctor`,originallyExternal:!1,rule:{...z5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...z5.tags??[]])],requires:[...new Set([`three`,...z5.requires??[]])]}},{key:`react-doctor/three-shader-no-redeclared-builtins`,id:`three-shader-no-redeclared-builtins`,source:`react-doctor`,originallyExternal:!1,rule:{...B5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...B5.tags??[]])],requires:[...new Set([`three`,...B5.requires??[]])]}},{key:`react-doctor/three-shader-no-redundant-frag-depth`,id:`three-shader-no-redundant-frag-depth`,source:`react-doctor`,originallyExternal:!1,rule:{...V5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...V5.tags??[]])],requires:[...new Set([`three`,...V5.requires??[]])]}},{key:`react-doctor/three-shader-no-version-directive`,id:`three-shader-no-version-directive`,source:`react-doctor`,originallyExternal:!1,rule:{...H5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...H5.tags??[]])],requires:[...new Set([`three`,...H5.requires??[]])]}},{key:`react-doctor/three-shader-prefer-small-integer-pow`,id:`three-shader-prefer-small-integer-pow`,source:`react-doctor`,originallyExternal:!1,rule:{...U5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...U5.tags??[]])],requires:[...new Set([`three`,...U5.requires??[]])]}},{key:`react-doctor/three-shader-prefer-squared-distance-comparison`,id:`three-shader-prefer-squared-distance-comparison`,source:`react-doctor`,originallyExternal:!1,rule:{...G5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...G5.tags??[]])],requires:[...new Set([`three`,...G5.requires??[]])]}},{key:`react-doctor/three-shader-require-matching-uniforms`,id:`three-shader-require-matching-uniforms`,source:`react-doctor`,originallyExternal:!1,rule:{...K5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...K5.tags??[]])],requires:[...new Set([`three`,...K5.requires??[]])]}},{key:`react-doctor/three-shader-require-matching-varyings`,id:`three-shader-require-matching-varyings`,source:`react-doctor`,originallyExternal:!1,rule:{...q5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...q5.tags??[]])],requires:[...new Set([`three`,...q5.requires??[]])]}},{key:`react-doctor/three-shader-require-position-on-all-paths`,id:`three-shader-require-position-on-all-paths`,source:`react-doctor`,originallyExternal:!1,rule:{...Z5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...Z5.tags??[]])],requires:[...new Set([`three`,...Z5.requires??[]])]}},{key:`react-doctor/three-shader-require-uniform-bindings`,id:`three-shader-require-uniform-bindings`,source:`react-doctor`,originallyExternal:!1,rule:{...Q5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...Q5.tags??[]])],requires:[...new Set([`three`,...Q5.requires??[]])]}},{key:`react-doctor/three-tsl-no-js-uniform-branch`,id:`three-tsl-no-js-uniform-branch`,source:`react-doctor`,originallyExternal:!1,rule:{...$5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...$5.tags??[]])],requires:[...new Set([`three`,...$5.requires??[]])]}},{key:`react-doctor/three-webgpu-no-legacy-effect-composer`,id:`three-webgpu-no-legacy-effect-composer`,source:`react-doctor`,originallyExternal:!1,rule:{...e7,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...e7.tags??[]])],requires:[...new Set([`three`,...e7.requires??[]])]}},{key:`react-doctor/three-webgpu-no-legacy-material-api`,id:`three-webgpu-no-legacy-material-api`,source:`react-doctor`,originallyExternal:!1,rule:{...t7,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...t7.tags??[]])],requires:[...new Set([`three`,...t7.requires??[]])]}},{key:`react-doctor/unsafe-json-in-html`,id:`unsafe-json-in-html`,source:`react-doctor`,originallyExternal:!1,rule:{...Bt,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Bt.tags??[]])]}},{key:`react-doctor/untrusted-redirect-following`,id:`untrusted-redirect-following`,source:`react-doctor`,originallyExternal:!1,rule:{...Tte,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Tte.tags??[]])]}},{key:`react-doctor/url-prefilled-privileged-action`,id:`url-prefilled-privileged-action`,source:`react-doctor`,originallyExternal:!1,rule:{...tn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...tn.tags??[]])]}},{key:`react-doctor/use-lazy-motion`,id:`use-lazy-motion`,source:`react-doctor`,originallyExternal:!1,rule:{...CHt,framework:`global`,category:`Performance`}},{key:`react-doctor/valtio-no-proxy-read-in-render`,id:`valtio-no-proxy-read-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...LHt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...LHt.requires??[]])]}},{key:`react-doctor/valtio-no-snapshot-in-callback`,id:`valtio-no-snapshot-in-callback`,source:`react-doctor`,originallyExternal:!1,rule:{...oUt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...oUt.requires??[]])]}},{key:`react-doctor/void-dom-elements-no-children`,id:`void-dom-elements-no-children`,source:`react-doctor`,originallyExternal:!0,rule:{...uUt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...uUt.requires??[]])]}},{key:`react-doctor/waapi-animation-in-render`,id:`waapi-animation-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...dUt,framework:`global`,category:`Bugs`}},{key:`react-doctor/web-animation-offsets-valid`,id:`web-animation-offsets-valid`,source:`react-doctor`,originallyExternal:!1,rule:{..._Ut,framework:`global`,category:`Bugs`}},{key:`react-doctor/webgl-no-sync-readback-in-animation-loop`,id:`webgl-no-sync-readback-in-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...yUt,framework:`global`,category:`Performance`,tags:[...new Set([`webgl`,...yUt.tags??[]])]}},{key:`react-doctor/webhook-signature-risk`,id:`webhook-signature-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...jt,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...jt.tags??[]])]}},{key:`react-doctor/window-open-without-noopener`,id:`window-open-without-noopener`,source:`react-doctor`,originallyExternal:!1,rule:{...KWt,framework:`global`,category:`Security`}},{key:`react-doctor/zod-v4-no-deprecated-error-apis`,id:`zod-v4-no-deprecated-error-apis`,source:`react-doctor`,originallyExternal:!1,rule:{...rGt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/zod-v4-no-deprecated-error-customization`,id:`zod-v4-no-deprecated-error-customization`,source:`react-doctor`,originallyExternal:!1,rule:{...fGt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/zod-v4-no-deprecated-schema-apis`,id:`zod-v4-no-deprecated-schema-apis`,source:`react-doctor`,originallyExternal:!1,rule:{...PGt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/zod-v4-prefer-top-level-string-formats`,id:`zod-v4-prefer-top-level-string-formats`,source:`react-doctor`,originallyExternal:!1,rule:{...LGt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/zustand-no-fresh-selector-result`,id:`zustand-no-fresh-selector-result`,source:`react-doctor`,originallyExternal:!1,rule:{...oKt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...oKt.requires??[]])]}},{key:`react-doctor/zustand-no-get-during-initialization`,id:`zustand-no-get-during-initialization`,source:`react-doctor`,originallyExternal:!1,rule:{...uKt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...uKt.requires??[]])]}},{key:`react-doctor/zustand-no-mutating-state`,id:`zustand-no-mutating-state`,source:`react-doctor`,originallyExternal:!1,rule:{...LKt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...LKt.requires??[]])]}},{key:`react-doctor/zustand-no-whole-store-destructure`,id:`zustand-no-whole-store-destructure`,source:`react-doctor`,originallyExternal:!1,rule:{...GKt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...GKt.requires??[]])]}}],KKt=Object.fromEntries(Y9.map(e=>[e.id,e.rule])),qKt=e=>{let t=e.create.bind(e);return{...e,create:n=>!e.minimumInkVersion||!Ite(n.filename,e.minimumInkVersion)?Te:t(n)}},JKt=e=>{let t=e.filename;if(!t)return!0;let n=ge(t),r=bt(n);if(!r||wn(r,`next`)||!mt(r))return!0;let i=Mn(n),a=Wr(e.settings,`rootDirectory`);return!(i!==null&&yE(i,a,!1))},YKt=e=>{let t=e.create.bind(e);return{...e,create:e=>JKt(e)?t(e):Te}},XKt=e=>{let t=e.create.bind(e);return{...e,create:e=>APe(e)?t(e):Te}},ZKt=()=>({rootScope:{id:0,kind:`module`,node:{},parent:null,children:[],symbols:[],references:[],symbolsByName:new Map},scopeFor:()=>({id:0}),ownScopeFor:()=>null,symbolFor:()=>null,referenceFor:()=>null,isGlobalReference:()=>!1}),QKt={cfgFor:()=>null,enclosingFunction:()=>null,isUnconditionalFromEntry:()=>!1},$Kt=new WeakMap,eqt=new WeakMap,tqt=e=>({...e,create:t=>{let n=t.sourceCode?.ast??null,r,i,a={report:t.report,get filename(){return t.filename??t.getFilename?.()},settings:t.settings,get scopes(){return n?(r||(r=$Kt.get(n),r||(r=Se(n),$Kt.set(n,r))),r):ZKt()},get cfg(){return n?(i||(i=eqt.get(n),i||(i=yp(n),eqt.set(n,i))),i):QKt}},o=e.create(a);if(o===Te||n)return o;let s=o.Program;return{...o,Program:(e=>{n=e,s&&s(e)})}}}),nqt=e=>e.minimumInkVersion?qKt(e):e.framework===`react-native`?XKt(e):e.framework===`nextjs`?YKt(e):e,rqt={meta:{name:`react-doctor`},rules:(e=>{let t={};for(let[n,r]of Object.entries(e))t[n]=tqt(nqt(r));return t})(KKt)},X9=e=>Object.fromEntries(e.map(e=>[e.key,e.severity])),Z9=e=>e.map(e=>({key:e.key,severity:e.rule.severity})),iqt=e=>e.rule.defaultEnabled!==!1,aqt=e=>e.rule.scan!==void 0,Q9=e=>Y9.filter(t=>t.rule.framework===e&&iqt(t)&&!aqt(t)),oqt=()=>{let e=new Set;for(let t of Y9)t.rule.framework!==`global`&&e.add(t.key);return e},$9=Y9,sqt=[...$9,...yt],cqt=X9(Z9(Q9(`global`))),lqt=X9(Z9(Q9(`nextjs`))),uqt=X9(Z9(Q9(`react-native`))),dqt=X9(Z9(Q9(`tanstack-start`))),fqt=X9(Z9(Q9(`tanstack-query`))),pqt=X9(Z9(Q9(`preact`))),mqt=X9(Z9($9.filter(e=>!aqt(e)))),hqt=new Set($9.map(e=>e.key)),gqt=oqt();var _qt=rqt;export{mqt as ALL_REACT_DOCTOR_RULES,hqt as ALL_REACT_DOCTOR_RULE_KEYS,zee as CROSS_FILE_DEPENDENCY_COLLECTORS,Ute as CROSS_FILE_RULE_IDS,yt as EXTERNAL_RULES,gqt as FRAMEWORK_SPECIFIC_RULE_KEYS,Hte as FRAMEWORK_TOKENS,$te as MOTION_LIBRARY_PACKAGES,lqt as NEXTJS_RULES,pqt as PREACT_RULES,Zte as REACT_COMPILER_RULES,$9 as REACT_DOCTOR_RULES,Jte as REACT_NATIVE_DEPENDENCY_NAMES,kee as REACT_NATIVE_DEPENDENCY_PREFIXES,uqt as REACT_NATIVE_RULES,cqt as RECOMMENDED_RULES,sqt as RULES,fqt as TANSTACK_QUERY_RULES,dqt as TANSTACK_START_RULES,Iee as UNBOUNDED_CROSS_FILE_RULE_IDS,Ote as classifySecurityScanFile,Vee as collectCrossFileDependencyProbes,_qt as default,se as isReactNativeDependencyName,lte as resetManifestCaches,Lte as shouldReadSecurityScanContent};
25
+ `||u===`\r`)&&(s=null);continue}if(a){r+=u,o?o=!1:u===`\\`?o=!0:u===a&&(a=null);continue}if(u===`/`&&d===`*`){s=`block`,e+=1;continue}if(u===`/`&&d===`/`&&r.trim().length===0){s=`line`,e+=1;continue}if(u===`"`||u===`'`){a=u,r+=u;continue}u===`(`?(c+=1,r+=u):u===`)`?(c=Math.max(0,c-1),r+=u):u===`{`&&c===0?(n===0&&A8(r,i,t),n+=1,l()):u===`}`&&c===0?(n=Math.max(0,n-1),l()):u===`;`&&c===0?(n===0&&A8(r,i,t),l()):r+=u}let p=e.expressions[d];if(p&&n===0&&!s)if(r.trim().length===0)l();else{r+=`\0`;let e=ORt(p);e&&i.push(e)}}),n===0&&A8(r,i,t),t},PRt=(e,t)=>{let n=Gn(e);if(!n)return!1;let r=D(e),i=w(n,t);if(i?.kind===`const`&&i.initializer&&r===n)return PRt(i.initializer,t);if(!i||i.kind!==`import`)return!1;let a=i.declarationNode.parent;return!a||!T(a,`ImportDeclaration`)||a.source.value!==`styled-components`?!1:T(i.declarationNode,`ImportSpecifier`)?kt(i.declarationNode)===`css`&&n===r:T(i.declarationNode,`ImportNamespaceSpecifier`)&&T(r,`MemberExpression`)&&D(r.object)===n&&C(r)===`css`},FRt=x({id:`styled-components-duplicate-css-property-in-block`,title:`Duplicate CSS property in styled block`,severity:`warn`,requires:[`styled-components`],recommendation:`Merge repeated declarations of the same CSS property in a styled block into one, so a later conditional value doesn't silently override an earlier one.`,create:e=>({TaggedTemplateExpression(t){if(!yF(t,e.scopes)&&!PRt(t.tag,e.scopes))return;let n=NRt(t.quasi),r=new Map;for(let e of n){let t=r.get(e.property);t?t.push(e):r.set(e.property,[e])}for(let[n,i]of r){let r=i.filter(e=>e.isConditional);if(r.length<2)continue;let a=r[0].ternaryTests;r.every(t=>t.ternaryTests.length===a.length&&t.ternaryTests.every((t,n)=>MRt(t,a[n],e.scopes)))||i.some((t,n)=>{if(!t.isConditional||!t.ternaryTests.every(e=>e.alwaysProducesCssValue))return!1;for(let r=n-1;r>=0;--r){let n=i[r];if(!n.isConditional||n.ternaryTests.every(e=>e.alwaysProducesCssValue)){if(!t.isImportant&&n.isImportant||!n.isConditional)return!1;if(n.ternaryTests.length!==t.ternaryTests.length||t.ternaryTests.some((t,r)=>!MRt(t,n.ternaryTests[r],e.scopes)))return!0}}return!1})&&e.report({node:t,message:`The CSS property \`${n}\` is declared ${i.length} times at the same level here, so a later conditional value can override an earlier one — merge them into a single declaration to make the precedence explicit.`})}}})}),IRt=new WeakMap,LRt=new Map([[`selected`,new Set([`option`])]]),RRt=new Set([`theme`,`as`,`forwardedAs`]),zRt=e=>{let t=e.arguments[0];return!t||!T(t,`ObjectExpression`)?!1:t.properties.every(e=>T(e,`Property`)&&S(e)!==null&&S(e)!==`shouldForwardProp`)},BRt=e=>{let t=e;for(;T(t,`CallExpression`)&&!(!T(t.callee,`MemberExpression`)||t.callee.computed||!T(t.callee.property,`Identifier`));){let e=t.callee.property.name;if(e!==`attrs`&&(e!==`withConfig`||!zRt(t)))break;t=t.callee.object}return t},VRt=(e,t)=>{let n=BRt(e);if(!T(n,`MemberExpression`)||n.computed||!T(n.object,`Identifier`))return null;let r=He(n,n.object.name);if(r!==`styled-components`&&!(r===null&&n.object.name===`styled`&&t.scopes.isGlobalReference(n.object))||!T(n.property,`Identifier`))return null;let i=n.property.name.charCodeAt(0);return i<97||i>122?null:{tagName:n.property.name}},j8=(e,t,n)=>{if(n>3)return null;if(T(e,`TSTypeLiteral`))return e.members;if(T(e,`TSIntersectionType`)){let r=e.types.map(e=>j8(e,t,n+1));return r.some(e=>e===null)?null:r.flatMap(e=>e??[])}if(T(e,`TSInterfaceDeclaration`)){if(e.typeParameters)return null;let r=[...e.body.body];for(let i of e.extends??[])if(!(i.typeArguments||!T(i.expression,`Identifier`)))for(let e of sT(t,i.expression.name)){let i=j8(e,t,n+1);i&&r.push(...i)}return r}if(T(e,`TSTypeAliasDeclaration`))return e.typeParameters?null:j8(e.typeAnnotation,t,n+1);if(T(e,`TSTypeReference`)&&T(e.typeName,`Identifier`)&&!e.typeArguments){let r=sT(t,e.typeName.name);if(r.length===0)return null;let i=r.map(e=>j8(e,t,n+1));return i.some(e=>e===null)?null:i.flatMap(e=>e??[])}return null},HRt=e=>!T(e,`TSPropertySignature`)||e.computed?null:T(e.key,`Identifier`)?e.key.name:T(e.key,`Literal`)&&typeof e.key.value==`string`?e.key.value:null,URt=e=>vZ.has(e)||yZ.has(e.toLowerCase())||xw.has(e)||LRt.has(e),WRt=e=>LRt.get(e)??xw.get(e)??null,GRt=(e,t)=>{if(e.startsWith(`$`)||e.startsWith(`data-`)||e.startsWith(`aria-`)||RRt.has(e))return!0;if(!URt(e))return!1;let n=WRt(e);return n===null||n.has(t)},KRt=(e,t,n)=>{if(!T(e,`Identifier`))return!1;let r=n.scopes.symbolFor(e);if(!r)return!1;let i=e;for(;i;){let e=[];(T(i,`ArrowFunctionExpression`)||T(i,`FunctionDeclaration`)||T(i,`FunctionExpression`))&&e.push(...i.params),T(i,`VariableDeclarator`)&&i.id&&e.push(i.id);for(let i of e){if(!T(i,`ObjectPattern`))continue;let e=!1,a=!1;for(let o of i.properties)T(o,`RestElement`)&&T(o.argument,`Identifier`)&&n.scopes.symbolFor(o.argument)?.id===r.id&&(e=!0),T(o,`Property`)&&!o.computed&&T(o.key,`Identifier`)&&o.key.name===t&&(a=!0);if(e)return a}i=i.parent??null}return!1},qRt=(e,t,n)=>{let r=e.parent;if(!T(r,`VariableDeclarator`)||!T(r.id,`Identifier`))return!1;let i=r.parent;if(!i||T(i.parent,`ExportNamedDeclaration`))return!1;let a=n.scopes.symbolFor(r.id);if(!a)return!1;if(a.references.length===0){let t=d(e);if(!t)return!1;let n=IRt.get(t);return n||(n=new Set,IRt.set(t,n),A(t,e=>{T(e,`JSXOpeningElement`)&&T(e.name,`JSXIdentifier`)&&n?.add(e.name.name)})),n.has(r.id.name)}let o=!1,s=!1,c=!1;for(let e of a.references){let r=e.identifier.parent;if(r&&T(r,`JSXOpeningElement`)&&r.name===e.identifier){o=!0;for(let e of r.attributes)T(e,`JSXAttribute`)&&T(e.name,`JSXIdentifier`)&&e.name.name===t&&(s=!0),T(e,`JSXSpreadAttribute`)&&!KRt(e.argument,t,n)&&(s=!0);continue}c=!0}return o&&!s&&!c},JRt=x({id:`styled-components-non-transient-custom-prop-on-intrinsic-element`,title:`Non-transient custom prop on styled intrinsic element`,severity:`warn`,requires:[`styled-components:6`],recommendation:"Prefix custom styled-components props with `$` (e.g. `$active`) so styled-components v6 keeps them off the DOM node instead of forwarding them as invalid attributes.",create:e=>({TaggedTemplateExpression(t){let n=VRt(t.tag,e);if(!n)return;let r=t.typeArguments;if(!r||r.params.length===0)return;let i=j8(r.params[0],t,0);if(i)for(let r of i){let i=HRt(r);!i||GRt(i,n.tagName)||qRt(t,i,e)||e.report({node:r,message:`styled-components v6 forwards the custom prop \`${i}\` to the <${n.tagName}> DOM node, producing a React unknown-prop warning — prefix it with \`$\` to make it transient.`})}}})}),YRt=x({id:`tabindex-no-positive`,title:`Positive tabindex value`,tags:[`react-jsx-only`],severity:`warn`,recommendation:"Use `tabIndex={0}` (focusable in source order) or `tabIndex={-1}` (focus only in code).",category:`Accessibility`,create:e=>({JSXOpeningElement(t){if(rt(e.filename))return;let n=F(t.attributes,`tabIndex`);if(!n)return;let r=P(n),i=null;if(r!==null){let e=Number(r);Number.isFinite(e)&&(i=e)}else n.value&&T(n.value,`JSXExpressionContainer`)&&(i=si(n.value));i!==null&&i>0&&e.report({node:n,message:"Keyboard users get jumped out of the normal order by a positive `tabIndex`, so use `0` or `-1`."})}})}),M8=e=>{let t={isServerFnChain:!1,specifiedMethod:null,hasInputValidation:!1};if(!T(e,`CallExpression`)||!T(e.callee,`MemberExpression`))return t;let n=D(e.callee.object);for(;T(n,`CallExpression`);){let e=Un(n);if(e&&OG.has(e)){t.isServerFnChain=!0;let e=n.arguments?.[0];if(T(e,`ObjectExpression`))for(let n of e.properties??[])T(n,`Property`)&&T(n.key,`Identifier`)&&n.key.name===`method`&&T(n.value,`Literal`)&&typeof n.value.value==`string`&&(t.specifiedMethod=n.value.value)}if(e&&kG.has(e)&&(t.hasInputValidation=!0),T(n.callee,`MemberExpression`))n=D(n.callee.object);else break}return t},XRt=x({id:`tanstack-start-get-mutation`,title:`Mutation in GET server function`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,category:`Security`,recommendation:"Use `createServerFn({ method: 'POST' })` for data changes. GET requests can be prefetched and are open to CSRF.",create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`)||!T(t.callee.property,`Identifier`)||t.callee.property.name!==`handler`)return;let n=M8(t);if(!n.isServerFnChain||n.specifiedMethod&&_e.has(n.specifiedMethod.toUpperCase()))return;let r=t.arguments?.[0];if(!r||!T(r,`ArrowFunctionExpression`)&&!T(r,`FunctionExpression`))return;let i=r.body;if(!i)return;let a=aS(i,{locallyScopedSafeBindings:tS(i),locallyScopedCookieBindings:Jx(i)});a&&e.report({node:t,message:`This GET server function's side effect (${a}) is vulnerable to CSRF attacks.`})}})}),N8=e=>{if(!T(e,`CallExpression`))return null;let t=e.callee;if(T(t,`CallExpression`)&&T(t.callee,`Identifier`)){if(!DG.has(t.callee.name))return null;let n=e.arguments?.[0];return T(n,`ObjectExpression`)?n:null}if(T(t,`Identifier`)){if(!DG.has(t.name))return null;let n=e.arguments?.[0];return T(n,`ObjectExpression`)?n:null}return null},P8=e=>!T(e,`Property`)&&!T(e,`MethodDefinition`)?null:T(e.key,`Identifier`)?e.key.name:T(e.key,`Literal`)?String(e.key.value):null,ZRt=x({id:`tanstack-start-loader-parallel-fetch`,title:`Sequential awaits in loader`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,category:`Performance`,recommendation:"Use `const [a, b] = await Promise.all([fetchA(), fetchB()])` to avoid request waterfalls in route loaders",create:e=>({CallExpression(t){let n=N8(t);if(!n)return;let r=n.properties??[];for(let t of r){if(P8(t)!==`loader`||!T(t,`Property`))continue;let n=t.value;if(!n||!T(n,`ArrowFunctionExpression`)&&!T(n,`FunctionExpression`))continue;let r=n.body;!r||!T(r,`BlockStatement`)||kCt(r,2)!==null&&e.report({node:t,message:`Sequential awaits in this loader create a request waterfall that slows the route.`})}}})}),F8=`HeadContent`,QRt=`head`,I8=e=>T(e.object,`JSXIdentifier`)?e.object.name:T(e.object,`JSXMemberExpression`)?I8(e.object):null,$Rt=e=>T(e.property,`JSXIdentifier`)?e.property.name:null,ezt=e=>T(e.object,`Identifier`)?e.object.name:T(e.object,`MemberExpression`)?ezt(e.object):null,tzt=e=>T(e.property,`Identifier`)?e.property.name:null,nzt=e=>T(e,`JSXElement`)&&T(e.openingElement.name,`JSXIdentifier`)&&e.openingElement.name.name===QRt,rzt=e=>{let t=e.parent;for(;t;){if(nzt(t))return!0;t=t.parent}return!1},izt=e=>{if(T(e,`JSXIdentifier`)){let t=e.name.charAt(0);return t.toUpperCase()===t&&t.toLowerCase()!==t}if(!T(e,`JSXMemberExpression`))return!1;let t=I8(e);if(!t)return!1;let n=t.charAt(0);return n.toUpperCase()===n&&n.toLowerCase()!==n},azt=x({id:`tanstack-start-missing-head-content`,title:`Root route missing HeadContent`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Add `<HeadContent />` inside `<head>` in your __root route. Without it, route `head()` meta tags are dropped.",create:e=>{if(!wG.test(e.filename??``))return Te;let t=!1,n=!1,r=!1,i=new Set([F8]),a=new Set,o=e=>{if(!T(e,`ImportDeclaration`))return;let t=e.source.value===`@tanstack/react-router`,n=e.specifiers??[];for(let e of n){if(t&&T(e,`ImportNamespaceSpecifier`)){a.add(e.local.name);continue}T(e,`ImportSpecifier`)&&(!T(e.imported,`Identifier`)||e.imported.name!==F8||i.add(e.local.name))}},s=e=>{if(!T(e,`VariableDeclarator`)||!T(e.id,`Identifier`))return;let t=e.init;if(!t)return;if(T(t,`Identifier`)){i.has(t.name)&&i.add(e.id.name),a.has(t.name)&&a.add(e.id.name);return}if(!T(t,`MemberExpression`))return;let n=ezt(t),r=tzt(t);n&&a.has(n)&&r===F8&&i.add(e.id.name)};return{Program(e){let t=e.body??[];for(let e of t)o(e);for(let e of t)if(T(e,`VariableDeclaration`))for(let t of e.declarations??[])s(t)},ImportDeclaration(e){o(e)},VariableDeclarator(e){s(e)},JSXOpeningElement(e){if(T(e.name,`JSXIdentifier`)){e.name.name===QRt&&(n=!0),i.has(e.name.name)&&(t=!0),rzt(e)&&izt(e.name)&&(r=!0);return}if(!T(e.name,`JSXMemberExpression`))return;let o=I8(e.name),s=$Rt(e.name);o&&a.has(o)&&s===F8&&(t=!0),rzt(e)&&izt(e.name)&&(r=!0)},"Program:exit"(i){n&&!t&&!r&&e.report({node:i,message:`Without <HeadContent /> in the __root route, your route head() meta tags never render.`})}}}}),L8=new Set([`createRootRoute`,`createRootRouteWithContext`]),R8=`Scripts`,ozt=`body`,szt=[`component`,`shellComponent`],czt=e=>T(e.object,`JSXIdentifier`)?e.object:T(e.object,`JSXMemberExpression`)?czt(e.object):null,lzt=e=>T(e.property,`JSXIdentifier`)?e.property.name:null,z8=e=>T(e.object,`Identifier`)?e.object:T(e.object,`MemberExpression`)?z8(e.object):null,uzt=e=>T(e.property,`Identifier`)?e.property.name:null,dzt=e=>T(e,`JSXElement`)&&T(e.openingElement.name,`JSXIdentifier`)&&e.openingElement.name.name===ozt,fzt=e=>{let t=e.parent;for(;t;){if(dzt(t))return t;t=t.parent}return null},pzt=(e,t)=>my(e,t.scopes)?.declarationNode??e,B8=(e,t)=>{let n=e.parent;for(;n;){if(T(n,`FunctionDeclaration`))return n;if(T(n,`ArrowFunctionExpression`)||T(n,`FunctionExpression`)){let e=v(n).parent;if(e&&(T(e,`MethodDefinition`)||T(e,`PropertyDefinition`))&&S(e,{allowComputedString:!0})===`render`){let n=kO(e);if(n)return pzt(n,t)}return e&&T(e,`VariableDeclarator`)&&T(e.id,`Identifier`)?t.scopes.symbolFor(e.id)?.declarationNode??null:n}n=n.parent}return null},mzt=e=>{let t=e.parent;for(;t;){if(T(t,`VariableDeclarator`)&&T(t.id,`Identifier`))return t;if(y(t))return null;t=t.parent}return null},V8=(e,t)=>t.scopes.symbolFor(e)?.declarationNode??null,hzt=x({id:`tanstack-start-missing-scripts`,title:`Root route missing Scripts`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Render `<Scripts />` near the end of `<body>` in your __root route so TanStack Start can load client-side JavaScript.",create:e=>{if(!wG.test(e.filename??``))return Te;let t=new Set,n=new Set,r=new Set,i=new Set,a=new Set,o=new Set,s=new Set,c=new Set,l=new Map,u=new Map,d=new Map,f=i=>{if(!T(i,`ImportDeclaration`))return;let a=i.source.value===`@tanstack/react-router`;for(let o of i.specifiers??[]){let i=V8(o.local,e);if(i){if(T(o,`ImportDefaultSpecifier`)&&o.local.name===R8){t.add(i);continue}if(a&&T(o,`ImportNamespaceSpecifier`)){n.add(i);continue}!T(o,`ImportSpecifier`)||!T(o.imported,`Identifier`)||(o.imported.name===R8&&t.add(i),a&&L8.has(o.imported.name)&&r.add(i))}}},p=i=>{if(!T(i,`VariableDeclarator`)||!T(i.id,`Identifier`)||!i.init)return!1;let a=V8(i.id,e);if(!a)return!1;if(T(i.init,`Identifier`)){let o=V8(i.init,e),s=!1;if(o&&t.has(o)){let e=t.size;t.add(a),s=t.size!==e}if(o&&n.has(o)){let e=n.size;n.add(a),s=n.size!==e||s}if(o&&r.has(o)){let e=r.size;r.add(a),s=r.size!==e||s}return s}if(!T(i.init,`MemberExpression`))return!1;let o=z8(i.init),s=o?V8(o,e):null,c=uzt(i.init);if(!s||!n.has(s))return!1;if(c===R8){let e=t.size;return t.add(a),t.size!==e}if(c&&L8.has(c)){let e=r.size;return r.add(a),r.size!==e}return!1},m=r=>{if(T(r,`JSXIdentifier`)){let n=V8(r,e);return n?t.has(n):r.name===R8}if(!T(r,`JSXMemberExpression`))return!1;let i=czt(r),a=i?V8(i,e):null;return!!(a&&n.has(a)&&lzt(r)===R8)},h=t=>{let i=D(t.callee);for(;T(i,`CallExpression`);)i=D(i.callee);if(T(i,`Identifier`)){let t=V8(i,e);return t?r.has(t):L8.has(i.name)}if(!T(i,`MemberExpression`))return!1;let a=z8(i),o=a?V8(a,e):null,s=uzt(i);return!!(o&&n.has(o)&&s&&L8.has(s))},g=t=>{let n=D(t);if(y(n)){i.add(n);return}if(T(n,`ClassExpression`)){i.add(pzt(n,e));return}if(!T(n,`Identifier`))return;let r=V8(n,e);r&&i.add(r)};return{Program(e){for(let t of e.body??[])f(t);let t=(e.body??[]).filter(e=>T(e,`VariableDeclaration`)).flatMap(e=>e.declarations??[]),n=!1;do{n=!1;for(let e of t)n=p(e)||n}while(n)},ImportDeclaration(e){f(e)},VariableDeclarator(e){p(e)},CallExpression(t){if(!h(t))return;let n=t.arguments[0];if(!n||T(n,`SpreadElement`))return;let r=Va(n,szt,e.scopes,t);if(r)for(let e of r.properties)!T(e,`Property`)||!szt.includes(S(e,{allowComputedString:!0})??``)||g(e.value)},JSXOpeningElement(t){let n=fzt(t);if(T(t.name,`JSXIdentifier`)&&t.name.name===ozt){n&&a.add(n);return}if(m(t.name)){let r=mzt(t);if(r&&s.add(r),n){o.add(n);return}let i=B8(t,e);i&&c.add(i);return}if(!T(t.name,`JSXIdentifier`))return;let r=V8(t.name,e);if(!r)return;if(n){let e=u.get(n)??new Set;e.add(r),u.set(n,e)}let i=B8(t,e);if(!i)return;let d=l.get(i)??new Set;d.add(r),l.set(i,d)},JSXExpressionContainer(t){let n=fzt(t);if(!n||!T(t.expression,`Identifier`))return;let r=V8(t.expression,e);if(!r)return;let i=d.get(n)??new Set;i.add(r),d.set(n,i)},"Program:exit"(t){let n=new Set(i);for(let e of n)for(let t of l.get(e)??[])n.add(t);for(let r of a){let i=B8(r,e);if(!i||!n.has(i)||o.has(r)||[...d.get(r)??[]].some(e=>s.has(e)))continue;let a=new Set(u.get(r)??[]),f=!1;for(let e of a){if(c.has(e)){f=!0;break}for(let t of l.get(e)??[])a.add(t)}if(!f){e.report({node:t,message:`Without <Scripts /> inside <body>, the __root route does not load TanStack Start's client-side JavaScript.`});return}}}}}}),gzt=e=>!e||!T(e,`JSXAttribute`)||!e.value?null:T(e.value,`Literal`)&&typeof e.value.value==`string`?e.value.value:T(e.value,`JSXExpressionContainer`)&&T(e.value.expression,`Literal`)&&typeof e.value.expression.value==`string`?e.value.expression.value:null,_zt=x({id:`tanstack-start-no-anchor-element`,title:`Plain anchor reloads TanStack Router navigation`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Use `Link` from `@tanstack/react-router` so internal navigation keeps client state, preloading, and typed routes.",create:e=>db(e,`routes`)?{JSXOpeningElement(t){if(j(t)!==`a`)return;let n=t.attributes??[],r=U(n,`href`);if(!r?.value)return;let i=null;if(T(r.value,`Literal`)?i=r.value.value:T(r.value,`JSXExpressionContainer`)&&T(r.value.expression,`Literal`)&&(i=r.value.expression.value),typeof i!=`string`||!i.startsWith(`/`)||i.startsWith(`//`))return;let a=i.split(/[?#]/)[0]??i;a.startsWith(`/api/`)||/\.[a-z0-9]{1,8}$/i.test(a)||U(n,`download`)||gzt(U(n,`target`))!==`_blank`&&e.report({node:t,message:`Plain <a> reloads the whole page for internal navigation, so TanStack Router loses client state and preloading.`})}}:Te}),vzt=x({id:`tanstack-start-no-direct-fetch-in-loader`,title:`Direct fetch in route loader`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Use `createServerFn()` from @tanstack/react-start for type-safe RPC, input validation, and proper server/client code splitting",create:e=>({CallExpression(t){let n=N8(t);if(!n)return;let r=n.properties??[];for(let t of r)P8(t)===`loader`&&A(T(t,`Property`)?t.value:t,t=>{T(t,`CallExpression`)&&T(t.callee,`Identifier`)&&t.callee.name===`fetch`&&e.report({node:t,message:`Direct fetch() in a route loader runs on the client too with no type safety.`})})}})}),yzt=x({id:`tanstack-start-no-dynamic-server-fn-import`,title:`Dynamic server function import`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`error`,recommendation:"Use `import { myFn } from '~/utils/my.functions'`. The bundler only swaps server code for RPC stubs on static imports.",create:e=>({ImportExpression(t){let n=t.source;if(!n)return;let r=null;T(n,`Literal`)&&typeof n.value==`string`?r=n.value:T(n,`TemplateLiteral`)&&n.quasis?.length===1&&(r=n.quasis[0].value?.raw??null),r&&kit.test(r)&&e.report({node:t,message:`Dynamically importing a server-functions file leaks server code into the client bundle.`})}})}),bzt=new Set([`then`,`catch`,`finally`]),xzt=new Set([`useState`,`useSyncExternalStore`]),Szt=x({id:`tanstack-start-no-navigate-in-render`,title:`navigate() called during render`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Use `throw redirect({ to: '/path' })` in `beforeLoad` or `loader`. navigate() during render causes hydration issues.",create:e=>{if(!db(e,`routes`))return Te;let t=0,n=0,r=e=>qn(e,Xt)||qn(e,`useCallback`)||qn(e,`useMemo`),i=e=>{let t=e.parent;return!T(t,`CallExpression`)||t.callee===e?!1:T(t.callee,`MemberExpression`)&&!t.callee.computed&&T(t.callee.property,`Identifier`)&&bzt.has(t.callee.property.name)?!0:T(t.callee,`Identifier`)&&an.test(t.callee.name)&&!xzt.has(t.callee.name)&&t.arguments?.[0]===e},a=e=>T(e,`JSXAttribute`)&&T(e.name,`JSXIdentifier`)&&Pn.test(e.name.name),o=e=>T(e,`Property`)&&(T(e.key,`Identifier`)&&typeof e.key.name==`string`&&Pn.test(e.key.name)||T(e.key,`Literal`)&&typeof e.key.value==`string`&&Pn.test(e.key.value)),s=e=>T(e,`Property`)&&y(e.value)&&o(e),c=e=>T(e,`VariableDeclarator`)&&T(e.id,`Identifier`)&&typeof e.id.name==`string`&&Ot.test(e.id.name)&&y(e.init),l=e=>T(e,`FunctionDeclaration`)&&T(e.id,`Identifier`)&&typeof e.id.name==`string`&&Ot.test(e.id.name),u=e=>{let t=e.parent;for(;t;){if(a(t)||o(t))return!0;t=t.parent??null}return!1},d=t=>{let n=Xs(t);if(!n)return!1;let r=e.scopes.symbolFor(n);return r?r.references.some(e=>u(e.identifier)):!1},f=e=>{let t=e.parent;if(T(t,`ReturnStatement`)){let e=b(t),n=e?Zs(e):null;return!!(n&&an.test(n))}if(T(t,`ArrowFunctionExpression`)&&t.body===e){let e=Zs(t);return!!(e&&an.test(e))}return!1},p=e=>{if(Xs(e))return!1;let t=e.parent;return T(t,`CallExpression`)?t.callee===e||(t.arguments??[]).some(t=>t===e):!1},m=e=>{let t=b(e);for(;t;){if(i(t)||d(t)||f(t))return!0;if(!p(t))return!1;t=b(t)}return!1};return{CallExpression(i){if(r(i)&&t++,!(t>0||n>0)&&T(i.callee,`Identifier`)&&i.callee.name===`navigate`&&(i.arguments?.length??0)>0){if(m(i))return;e.report({node:i,message:`navigate() runs during render here, so server and browser output can diverge during hydration.`})}},"CallExpression:exit"(e){r(e)&&(t=Math.max(0,t-1))},JSXAttribute(e){a(e)&&n++},"JSXAttribute:exit"(e){a(e)&&(n=Math.max(0,n-1))},Property(e){s(e)&&n++},"Property:exit"(e){s(e)&&(n=Math.max(0,n-1))},VariableDeclarator(e){c(e)&&n++},"VariableDeclarator:exit"(e){c(e)&&(n=Math.max(0,n-1))},FunctionDeclaration(e){l(e)&&n++},"FunctionDeclaration:exit"(e){l(e)&&(n=Math.max(0,n-1))}}}}),Czt=e=>T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)&&T(e.callee.property,`Identifier`)&&e.callee.property.name===`handler`&&M8(e).isServerFnChain,wzt=new Set([`NODE_ENV`,`MODE`,`DEV`,`PROD`]),Tzt=/(?:secret|token|api[_]?key|password|private)/i,Ezt=e=>wzt.has(e)?!1:Tzt.test(e),Dzt=x({id:`tanstack-start-no-secrets-in-loader`,title:`Secret exposed in a loader`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`error`,category:`Security`,recommendation:"Loaders are isomorphic (run on both server and client). Wrap secret access in `createServerFn()` so it stays server-only",create:e=>({CallExpression(t){let n=N8(t);if(!n)return;let r=n.properties??[];for(let t of r){let n=P8(t);n!==`loader`&&n!==`beforeLoad`||A(T(t,`Property`)?t.value:t,t=>{if(Czt(t))return!1;if(!T(t,`MemberExpression`))return;let r=T(t.object,`MemberExpression`)&&T(t.object.object,`Identifier`)&&t.object.object.name===`process`&&T(t.object.property,`Identifier`)&&t.object.property.name===`env`,i=T(t.object,`MemberExpression`)&&T(t.object.object,`MetaProperty`)&&T(t.object.property,`Identifier`)&&t.object.property.name===`env`;if(!r&&!i)return;let a=T(t.property,`Identifier`)?t.property.name:null;if(a&&Ezt(a)){let r=i?`import.meta.env`:`process.env`;e.report({node:t,message:`Reading ${r}.${a} in ${n} leaks this secret to the client, where anyone can read it.`})}})}}})}),Ozt=x({id:`tanstack-start-no-use-server-in-handler`,title:`Redundant use server in handler`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`error`,recommendation:`TanStack Start handles server boundaries automatically via the Vite plugin. "use server" inside createServerFn causes compile errors.`,create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`)||!T(t.callee.property,`Identifier`)||t.callee.property.name!==`handler`)return;let n=t.arguments?.[0];if(!n||!T(n,`ArrowFunctionExpression`)&&!T(n,`FunctionExpression`))return;let r=n.body;T(r,`BlockStatement`)&&r.body?.some(e=>T(e,`ExpressionStatement`)&&(e.directive===`use server`||T(e.expression,`Literal`)&&e.expression.value===`use server`))&&e.report({node:n,message:`"use server" inside a createServerFn handler duplicates TanStack Start's server boundary, so the route can fail to compile.`})}})}),kzt=x({id:`tanstack-start-no-useeffect-fetch`,title:`fetch inside useEffect in route`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Fetch data in the route `loader` instead. The router loads it before rendering and avoids waterfalls.",create:e=>db(e,`routes`)?{CallExpression(t){if(!qn(t,Xt))return;let n=t.arguments?.[0];if(!n)return;let r=!1,i=_u(n);A(n,e=>{if(r||e!==n&&y(e)&&!i.has(e))return!1;T(e,`CallExpression`)&&T(e.callee,`Identifier`)&&e.callee.name===`fetch`&&(r=!0)}),r&&e.report({node:t,message:`fetch() inside useEffect makes your users wait through a loading spinner after render.`})}}:Te}),Azt=x({id:`tanstack-start-redirect-in-try-catch`,title:`redirect() inside try-catch`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"TanStack Router's `redirect()` and `notFound()` throw special errors caught by the router. Move them outside the try block or re-throw in the catch",create:e=>({ThrowStatement(t){let n=t.argument;T(n,`CallExpression`)&&T(n.callee,`Identifier`)&&Oit.has(n.callee.name)&&Gx(t)&&e.report({node:t,message:`throw ${n.callee.name}() inside a try block gets swallowed, so the redirect silently fails.`})}})}),jzt=x({id:`tanstack-start-route-property-order`,title:`Route property order breaks type inference`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`error`,recommendation:`Follow the route property order because TanStack Router's type inference depends on earlier properties feeding later ones.`,create:e=>({CallExpression(t){let n=N8(t);if(!n)return;let r=n.properties??[],i=[];for(let e of r){let t=P8(e);t!==null&&i.push(t)}let a=i.filter(e=>EG.has(e)),o=-1;for(let t of a){let r=EG.get(t)??-1;if(r<o){let r=TG[o];e.report({node:n,message:`Ordering route property "${t}" after "${r}" breaks type inference.`});return}o=r}}})}),Mzt=e=>kG.has(e)?`validator`:e,Nzt=x({id:`tanstack-start-server-fn-method-order`,title:`Server function method order breaks type inference`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`error`,recommendation:`Chain methods in order: .middleware() → .validator() → .client() → .server() → .handler(). Types depend on this sequence.`,create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`))return;let n=[],r=t;for(;T(r,`CallExpression`)&&T(r.callee,`MemberExpression`);){let e=T(r.callee.property,`Identifier`)?r.callee.property.name:null;e&&n.unshift(e),r=D(r.callee.object)}if(T(r,`CallExpression`)&&T(r.callee,`Identifier`)){if(!OG.has(r.callee.name))return}else return;let i=T(t.callee.property,`Identifier`)?t.callee.property.name:null;if(n[n.length-1]!==i)return;let a=n.filter(e=>jG.has(Mzt(e))),o=-1;for(let n of a){let r=jG.get(Mzt(n))??-1;if(r<o){let r=AG[o];e.report({node:t,message:`Chaining .${n}() after .${r}() breaks type inference.`});return}o=r}}})}),Pzt=e=>!!e.properties?.some(e=>T(e,`Property`)&&T(e.key,`Identifier`)&&e.key.name===`data`),Fzt=x({id:`tanstack-start-server-fn-validate-input`,title:`Server function without input validation`,tags:[`test-noise`],requires:[`tanstack-start`],severity:`warn`,recommendation:"Add `.validator(schema)` before `.handler()`. This data crosses the network and must be validated at runtime.",create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`)||!T(t.callee.property,`Identifier`)||t.callee.property.name!==`handler`)return;let n=M8(t);if(!n.isServerFnChain)return;let r=t.arguments?.[0];if(!r||!T(r,`ArrowFunctionExpression`)&&!T(r,`FunctionExpression`))return;let i=r.params?.[0];if(!i)return;let a=!1;if(T(i,`ObjectPattern`))a=Pzt(i);else if(T(i,`Identifier`)){let e=i.name;A(r,t=>{T(t,`MemberExpression`)&&T(t.object,`Identifier`)&&t.object.name===e&&T(t.property,`Identifier`)&&t.property.name===`data`&&(a=!0),T(t,`VariableDeclarator`)&&T(t.init,`Identifier`)&&t.init.name===e&&T(t.id,`ObjectPattern`)&&Pzt(t.id)&&(a=!0)})}a&&!n.hasInputValidation&&e.report({node:t,message:`This server function reads network data with no validator(), so anyone can send unvalidated input.`})}})}),H8=(e,t,n=new Set)=>{let r=D(e);if(T(r,`NewExpression`)){let e=Y1(r.callee,t);return e&&Q0(e.moduleSource)?e.apiName:null}if(!T(r,`Identifier`))return null;let i=t.symbolFor(r);return i?.kind!==`const`||!i.initializer||n.has(i.id)||!T(i.declarationNode,`VariableDeclarator`)||i.declarationNode.id!==i.bindingIdentifier?null:(n.add(i.id),H8(i.initializer,t,n))},Izt=new Set([`WebGLRenderer`,`WebGPURenderer`]),U8=(e,t)=>Izt.has(H8(e,t)??``),W8=x({id:`three-cap-device-pixel-ratio`,title:`Unbounded Three.js device pixel ratio`,category:`Performance`,severity:`warn`,recommendation:`Cap renderer pixel ratio, commonly at 2, so high-density displays do not multiply GPU work without a bound`,create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`)||C(t.callee)!==`setPixelRatio`||!U8(t.callee.object,e.scopes))return;let n=t.arguments[0];if(!n||T(n,`SpreadElement`))return;let r=a0(n,e.scopes);r&&e.report({node:r,message:`This renderer uses the device's raw pixel ratio without a cap. Bound the ratio to limit the rendered pixel count on high-density displays`})}})}),Lzt=(e,t)=>b(e)??t,G8=x({id:`three-limit-shadowed-point-lights`,title:`Too many shadow-casting Three.js point lights`,category:`Performance`,severity:`warn`,recommendation:`Keep at most two shadow-casting point lights in one scene, or use cheaper directional, spot, baked, or fake shadows`,create:e=>{let t=[],n=[],r=null;return{Program(e){r=e},CallExpression(n){if(!r||!T(n.callee,`MemberExpression`)||C(n.callee)!==`add`||H8(n.callee.object,e.scopes)!==`Scene`)return;let i=Lzt(n,r);if(Em(n,i))return;let a=B(n.callee.object,e);if(a)for(let r of n.arguments){if(T(r,`SpreadElement`)||H8(r,e.scopes)!==`PointLight`)continue;let n=B(r,e);n&&t.push({lightKey:n,owner:i,sceneKey:a})}},AssignmentExpression(t){let i=D(t.right);if(!r||t.operator!==`=`||!T(t.left,`MemberExpression`)||C(t.left)!==`castShadow`||H8(t.left.object,e.scopes)!==`PointLight`||!T(i,`Literal`)||i.value!==!0)return;let a=Lzt(t,r);if(Em(t,a))return;let o=B(t.left.object,e);o&&n.push({lightKey:o,node:t,owner:a})},"Program:exit"(){let r=new Map,i=new Map;for(let a of n){let n=t.find(e=>e.owner===a.owner&&e.lightKey===a.lightKey);if(!n)continue;let o=r.get(a.owner)??new Map,s=i.get(a.owner)??new Map;r.set(a.owner,o),i.set(a.owner,s);let c=s.get(n.sceneKey)??new Set;if(s.set(n.sceneKey,c),c.has(a.lightKey))continue;c.add(a.lightKey);let l=(o.get(n.sceneKey)??0)+1;o.set(n.sceneKey,l),!(l<=2)&&e.report({node:a.node,message:`This is the third or later shadow-casting point light added to the same scene. Each point-light shadow renders six cube faces, multiplying shadow passes`})}}}}}),K8=(e,t)=>{let n=D(e);for(;T(n,`MemberExpression`);)n=D(n.object);return H8(n,t)!==null},Rzt=(e,t)=>{let n=!1;return l0(e,t.scopes,e=>{if(n)return;if(T(e,`NewExpression`)){let r=Y1(e.callee,t.scopes);n=!!(r&&Q0(r.moduleSource));return}if(T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)){n=K8(e.callee.object,t.scopes);return}let r=T(e,`AssignmentExpression`)?D(e.left):T(e,`UpdateExpression`)?D(e.argument):null;n=!!(r&&T(r,`MemberExpression`)&&K8(r.object,t.scopes))}),n},zzt=(e,t)=>{if(!T(e,`CallExpression`)||!T(e.callee,`MemberExpression`)||C(e.callee)!==`addEventListener`)return null;let n=e.arguments[0],r=e.arguments[1],i=D(e.callee.object);return!n||T(n,`SpreadElement`)||!T(n,`Literal`)||n.value!==`pointermove`||!r||T(r,`SpreadElement`)||!T(i,`MemberExpression`)||C(i)!==`domElement`||!U8(i.object,t.scopes)?null:i0(r,t.scopes)},Bzt=(e,t)=>{if(T(e,`CallExpression`))return zzt(e,t);if(!T(e,`JSXOpeningElement`)||j(e)!==`canvas`)return null;let n=R(e.attributes,`onPointerMove`);if(!n?.value||!T(n.value,`JSXExpressionContainer`)||T(n.value.expression,`JSXEmptyExpression`))return null;let r=i0(n.value.expression,t.scopes);return r&&Rzt(r,t)?r:null},q8=x({id:`three-no-allocation-in-pointer-move`,title:`Three.js allocation inside pointer-move handler`,severity:`warn`,recommendation:`Reuse vectors, raycasters, and other Three.js objects while handling continuous pointer movement`,create:e=>{let t=new Set,n=n=>{let r=Bzt(n,e);!r||t.has(r)||(t.add(r),l0(r,e.scopes,(t,n)=>{if(!n){if(T(t,`NewExpression`)){let n=Y1(t.callee,e.scopes);if(!n||!Q0(n.moduleSource))return;e.report({node:t,message:`This Three.js constructor allocates on every pointer movement. Reuse an object created outside the handler`});return}!T(t,`CallExpression`)||!T(t.callee,`MemberExpression`)||C(t.callee)!==`clone`||!K8(t.callee.object,e.scopes)||e.report({node:t,message:`This clone allocates a Three.js object on every pointer movement. Copy into a reusable object instead`})}}))};return{CallExpression(e){n(e)},JSXOpeningElement(e){n(e)}}}}),Vzt=(e,t)=>{let n=!1;return l0(e,t,e=>{!n&&T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)&&_4.has(C(e.callee)??``)&&U8(e.callee.object,t)&&(n=!0)}),n},J8=(e,t)=>{if(T(e.callee,`MemberExpression`)&&C(e.callee)===`setAnimationLoop`&&U8(e.callee.object,t)){let n=e.arguments[0];return n&&!T(n,`SpreadElement`)?i0(n,t):null}let n=b2(e,t);return n&&Vzt(n,t)?n:null},Y8=x({id:`three-no-async-animation-loop`,title:`Async Three.js animation callback`,category:`Correctness`,severity:`warn`,recommendation:`Keep animation callbacks synchronous; start asynchronous work outside the loop and consume completed state during frames`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes);!y(r)||!r.async||t.has(r)||(t.add(r),e.report({node:r,message:`The animation scheduler ignores this Promise, so rejected work can become unhandled and awaited work can overlap across frames. Keep the callback synchronous`}))}}}}),X8=x({id:`three-no-clone-in-animation-loop`,title:`Three.js clone inside animation loop`,severity:`warn`,recommendation:`Clone once before the animation loop or copy values into a reusable scratch object during frames`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes);!r||t.has(r)||(t.add(r),l0(r,e.scopes,(t,n)=>{n||!T(t,`CallExpression`)||!T(t.callee,`MemberExpression`)||C(t.callee)!==`clone`||!K8(t.callee.object,e.scopes)||e.report({node:t,message:`This clone allocates a new Three.js object every executed frame. Copy into a reusable object or clone once outside the animation loop`})}))}}}}),Hzt=(e,t,n,r,i)=>{let a=J8(e,t);!a||r.has(a)||(r.add(a),l0(a,t,(e,r)=>{if(r||!T(e,`AssignmentExpression`)||e.operator!==`=`||!T(e.left,`MemberExpression`)||!T(e.right,`Literal`)||e.right.value!==!0)return;let a=C(e.left);if(!a||!n.has(a))return;let o=H8(e.left.object,t);o&&i({constructorName:o,node:e,propertyName:a})}))},Uzt=new Set([`needsUpdate`]),Z8=x({id:`three-no-material-recompile-in-animation-loop`,title:`Material recompiled inside animation loop`,category:`Performance`,severity:`error`,recommendation:`Change material defines or features outside the animation loop and set needsUpdate only when the compiled program must change`,create:e=>{let t=new Set;return{CallExpression(n){Hzt(n,e.scopes,Uzt,t,({constructorName:t,node:n})=>{t.endsWith(`Material`)&&e.report({node:n,message:`Setting material.needsUpdate every frame forces Three.js to reconsider and often rebuild the GPU program. Set it only after a shader-affecting material change`})})}}}}),Q8=x({id:`three-no-new-in-animation-loop`,title:`Allocation inside Three.js animation loop`,severity:`warn`,recommendation:`Allocate reusable objects before the animation loop and mutate them in place during each frame`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes);!r||t.has(r)||(t.add(r),l0(r,e.scopes,(t,n)=>{t.type!==`NewExpression`||n||e.report({node:t,message:`This constructor allocates a new object every executed frame. Reuse an object allocated outside the Three.js animation loop`})}))}}}}),Wzt=(e,t)=>Qs(e,t).some(e=>e.references.some(e=>{let t=e.identifier,n=t.parent;return!!(T(t,`JSXIdentifier`)&&n&&T(n,`JSXOpeningElement`)&&n.name===t)})),$8=x({id:`three-no-object-construction-in-render`,title:`Three.js object constructed during React render`,severity:`warn`,recommendation:`Construct mutable Three.js objects in a stable initializer, effect, event, or module scope instead of recreating them during React render`,create:e=>({NewExpression(t){let n=Y1(t.callee,e.scopes),r=X(t,e.scopes);if(!n||!Q0(n.moduleSource)||!r||qy(t,e.scopes))return;let i=Js(r);!i||!Gs(i)&&!gF(r,e.scopes,e.cfg)&&!Wzt(r,e.scopes)||e.report({node:t,message:`new ${n.apiName}() creates a fresh mutable Three.js object during this render. Move it to useMemo, a lazy useState initializer, an initialized-once ref, or module scope`})}})}),Gzt=new Set([`uniformsNeedUpdate`]),e5=x({id:`three-no-redundant-uniforms-need-update`,title:`Redundant uniformsNeedUpdate inside animation loop`,category:`Performance`,severity:`warn`,recommendation:`Mutate ShaderMaterial uniform values directly; Three.js uploads custom uniforms during rendering`,create:e=>{let t=new Set;return{CallExpression(n){Hzt(n,e.scopes,Gzt,t,({constructorName:t,node:n})=>{t!==`ShaderMaterial`&&t!==`RawShaderMaterial`||e.report({node:n,message:`Shader material custom uniforms are refreshed during rendering, so setting uniformsNeedUpdate on every animation frame is redundant`})})}}}}),t5=x({id:`three-no-state-in-animation-loop`,title:`React state update inside Three.js animation loop`,severity:`warn`,recommendation:`Mutate Three.js objects or refs during frames; reserve React state for guarded, infrequent transitions`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes);!r||t.has(r)||(t.add(r),l0(r,e.scopes,t=>{!T(t,`CallExpression`)||!C2(t.callee,e.scopes)||M2(t,r,e.scopes)||e.report({node:t,message:`This React state update can schedule a component render every frame. Mutate a Three.js object or ref, or guard an infrequent state transition`})}))}}}}),n5=x({id:`three-no-state-in-pointer-move`,title:`React state update inside Three.js pointer-move handler`,severity:`warn`,recommendation:`Keep continuous pointer previews in Three.js objects or refs and publish React state when the interaction commits`,create:e=>{let t=new Set,n=n=>{let r=Bzt(n,e);!r||t.has(r)||(t.add(r),l0(r,e.scopes,t=>{!T(t,`CallExpression`)||!C2(t.callee,e.scopes)||M2(t,r,e.scopes)||e.report({node:t,message:`This React state update can render on every pointer movement. Mutate a Three.js object or ref and publish state on pointer-up`})}))};return{CallExpression(e){n(e)},JSXOpeningElement(e){n(e)}}}}),Kzt=new Set([`defines`,`fragmentShader`,`vertexShader`]),qzt=[`customProgramCacheKey`,`onBeforeCompile`],r5=(e,t)=>{let n=e;for(;n;){if(n===t)return!0;n=n.parent}return!1},Jzt=e=>{let t=e;for(;T(t,`MemberExpression`);)t=t.object;return T(t,`Identifier`)?t:null},Yzt=(e,t,n)=>{let r=Jzt(e);if(!r||n.scopes.symbolFor(r)?.id!==t.id)return null;let i=e,a=null;for(;T(i,`MemberExpression`)&&(a=C(i),!T(i.object,`Identifier`));)i=i.object;return a&&Kzt.has(a)?a:null},i5=(e,t,n)=>{let r=new Set,i=e=>{let a=!1;return A(e,o=>{if(a||o!==e&&y(o))return!1;if(T(o,`ThisExpression`))return a=!0,!1;if(T(o,`MemberExpression`)){let e=Jzt(o),r=e?n.scopes.symbolFor(e):null;if(r&&!r5(r.scope,t)&&r.kind!==`import`&&r.kind!==`function`&&r.kind!==`class`)return a=!0,!1}if(!T(o,`Identifier`))return;let s=n.scopes.symbolFor(o),c=s?.kind===`const`&&!!(s.initializer&&(T(s.initializer,`ArrayExpression`)||T(s.initializer,`ObjectExpression`)||T(s.initializer,`NewExpression`)));if(s&&!r5(s.scope,t)&&(s.kind===`let`||s.kind===`var`||s.kind===`parameter`||c))return a=!0,!1;if(!s||!r5(s.scope,t)||r.has(s.id))return;let l=Os(s);if(!(!l||y(l)||T(l,`ArrayExpression`)||T(l,`ObjectExpression`)||T(l,`NewExpression`))&&(r.add(s.id),i(l)))return a=!0,!1}),a};return i(e)},Xzt=(e,t)=>{let n=t.scopes.ownScopeFor(e);if(!n||!y(e))return!1;let r=e.params[0];if(!r||!T(r,`Identifier`))return!1;let i=t.scopes.symbolFor(r);if(!i)return!1;let a=e=>{let n=!1;return A(e,r=>{if(n||r!==e&&y(r))return!1;if(T(r,`AssignmentExpression`)&&T(r.left,`MemberExpression`)&&Yzt(r.left,i,t))return n=!0,!1}),n},o=!1;return A(e.body,r=>{if(o||r!==e.body&&y(r))return!1;if(T(r,`AssignmentExpression`)&&T(r.left,`MemberExpression`)&&Yzt(r.left,i,t)&&i5(r.right,n,t)||T(r,`IfStatement`)&&i5(r.test,n,t)&&(a(r.consequent)||r.alternate&&a(r.alternate))||T(r,`ConditionalExpression`)&&i5(r.test,n,t)&&(a(r.consequent)||a(r.alternate))||T(r,`LogicalExpression`)&&i5(r.left,n,t)&&a(r.right)||T(r,`SwitchStatement`)&&(i5(r.discriminant,n,t)||r.cases.some(e=>e.test&&i5(e.test,n,t)))&&r.cases.some(e=>e.consequent.some(a))||(T(r,`WhileStatement`)||T(r,`DoWhileStatement`))&&i5(r.test,n,t)&&a(r.body)||T(r,`ForStatement`)&&r.test&&i5(r.test,n,t)&&a(r.body)||(T(r,`ForInStatement`)||T(r,`ForOfStatement`))&&i5(r.right,n,t)&&a(r.body))return o=!0,!1}),o},Zzt=(e,t)=>{if(!T(e,`Identifier`))return null;let n=t.scopes.symbolFor(e),r=n?Os(n):null;return!n||!r||!H8(r,t.scopes)?.endsWith(`Material`)?null:n},Qzt=(e,t)=>{let n=e.parent;if(!T(n,`VariableDeclarator`)||n.init!==e||!T(n.id,`Identifier`))return null;let r=t.scopes.symbolFor(n.id);return r&&Os(r)===e?r:null},$zt=(e,t)=>{if(M(e,t.scopes))return!0;let n=D(e);if(T(n,`Identifier`)){if(n.name===`undefined`&&t.scopes.isGlobalReference(n))return!1;let e=w(n,t.scopes);if(e?.kind!==`const`||!e.initializer)return!0;n=D(e.initializer)}return!(T(n,`ArrayExpression`)||T(n,`ClassExpression`)||T(n,`Literal`)||T(n,`ObjectExpression`)||T(n,`TemplateLiteral`)||T(n,`UnaryExpression`))},a5=x({id:`three-on-before-compile-require-program-cache-key`,title:`onBeforeCompile variant lacks a program cache key`,category:`Correctness`,severity:`error`,recommendation:`Return every mutable shader-patch variant from customProgramCacheKey on the same material`,create:e=>{let t=[],n=new Set;return{NewExpression(r){if(!H8(r,e.scopes)?.endsWith(`Material`))return;let i=r.arguments[0];if(!i||T(i,`SpreadElement`))return;let a=Va(i,qzt,e.scopes,r);if(!a)return;let o=rD(a.properties);if(!o)return;let s=o.find(e=>S(e,{allowComputedString:!0})===`customProgramCacheKey`),c=o.find(e=>S(e,{allowComputedString:!0})===`onBeforeCompile`),l=Qzt(r,e),u=!!(s&&$zt(s.value,e));if(u&&l&&n.add(l.id),!c)return;let d=M(c.value,e.scopes);!d||!Xzt(d,e)||t.push({hasConstructorCacheKey:u,materialSymbolId:l?.id??null,node:c})},AssignmentExpression(r){if(!T(r.left,`MemberExpression`))return;let i=C(r.left);if(i!==`onBeforeCompile`&&i!==`customProgramCacheKey`)return;let a=Zzt(r.left.object,e);if(!a)return;if(i===`customProgramCacheKey`){$zt(r.right,e)?n.add(a.id):n.delete(a.id);return}let o=M(r.right,e.scopes);!o||!Xzt(o,e)||t.push({hasConstructorCacheKey:!1,materialSymbolId:a.id,node:r})},"Program:exit"(){for(let r of t)r.materialSymbolId===null&&r.hasConstructorCacheKey||r.materialSymbolId!==null&&n.has(r.materialSymbolId)||e.report({node:r.node,message:`This onBeforeCompile patch changes shader source from mutable captured state, but the material has no customProgramCacheKey for those program variants`})}}}}),eBt=new Set([`Group`,`Mesh`,`Object3D`,`Scene`]),tBt=(e,t)=>{if(!T(e,`CallExpression`)||!T(e.callee,`MemberExpression`)||C(e.callee)!==`add`)return!1;let n=H8(e.callee.object,t.scopes);return n!==null&&eBt.has(n)},nBt=(e,t,n)=>V2(e,n).some(e=>{let r=v(e),i=r.parent;return!!(i&&tBt(i,n)&&i.arguments.some(e=>e===r)&&!Em(r,t))}),rBt=(e,t,n)=>{let r=new Set(V2(e,n).flatMap(e=>{let t=B(e,n);return t?[t]:[]}));if(r.size===0)return!1;let i=new Set([...r].flatMap(e=>[`${e}.geometry`,`${e}.material`])),a=!1;return l0(t,n.scopes,e=>{if(!a){if(T(e,`AssignmentExpression`)){let t=B(e.left,n);if(t&&i.has(t)){a=!0;return}}if(T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)){let t=C(e.callee),i=B(e.callee.object,n);i&&r.has(i)&&(t===`add`||t===`attach`||t===`copy`)&&(a=!0)}}}),a},iBt=(e,t)=>V2(e,t).some(e=>{let n=v(e),r=n.parent,i=r?.parent;return!!(r&&T(r,`SpreadElement`)&&r.argument===n&&i&&tBt(i,t)&&i.arguments.some(e=>e===r))}),o5=x({id:`three-prefer-instanced-mesh`,title:`Repeated Three.js meshes use separate draw calls`,category:`Performance`,severity:`warn`,recommendation:`Replace repeated Mesh objects that share geometry and material with one InstancedMesh and per-instance transforms`,create:e=>({NewExpression(t){if(H8(t,e.scopes)!==`Mesh`)return;let n=b(t),r=t.arguments[0],i=t.arguments[1];if(!n||!r||!i)return;let a=R0(n,e),o=ce(n,e.scopes,e=>D(e)===t,e.cfg,`every`),s=nBt(t,n,e)||o&&a.some(t=>iBt(t,e));Em(t,n)||rBt(t,n,e)||!H2(r,n,e)||!H2(i,n,e)||a.length===0||!s||e.report({node:t,message:`This map adds multiple Mesh objects with the same geometry and material, creating a draw call for each item. Use one InstancedMesh and set each instance transform`})}})}),s5=e=>{let t=e.specifier;return t.type===`keyword`?t.token:t.type===`identifier`||t.type===`type_name`?t.identifier:null},aBt=/\/\*[\s\S]*?(?:\*\/|$)|\/\/[^\r\n]*/g,oBt=/[^\r\n]/g,c5=e=>e.replace(aBt,e=>e.replace(oBt,` `)),sBt=/^[ \t]*#[ \t]*(?:if|ifdef|ifndef|elif|else|endif)\b/m,cBt=/^[ \t]*#[ \t]*include[ \t]+<[^>\r\n]+>[^\r\n]*/gm,lBt=e=>e.replace(cBt,e=>e.replace(/[^\r\n]/g,` `)),uBt=(e,t)=>{let n=c5(e);if(sBt.test(n))return null;try{return one(lBt(n),{includeLocation:!0,quiet:!0,stage:t})}catch{return null}},dBt=(e,t)=>e.segments.map(e=>({endOffset:e.endOffset+t,node:e.node,startOffset:e.startOffset+t})),fBt=(e,t,n)=>{let r=``,i=[];return e.forEach((e,n)=>{n>0&&t&&(i.push(...dBt(t,r.length)),r+=t.text),i.push(...dBt(e,r.length)),r+=e.text}),{fallbackNode:n,segments:i,text:r}},l5=(e,t,n)=>{let r=D(e),i=Yn(r);if(i!==null)return{fallbackNode:r,segments:i.length===0?[]:[{endOffset:i.length,node:r,startOffset:0}],text:i};if(T(r,`Identifier`)){let e=t.symbolFor(r);if(e?.kind!==`const`||!e.initializer||n.has(e.id)||!T(e.declarationNode,`VariableDeclarator`)||e.declarationNode.id!==e.bindingIdentifier)return null;let i=new Set(n);return i.add(e.id),l5(e.initializer,t,i)}if(T(r,`BinaryExpression`)&&r.operator===`+`){let e=l5(r.left,t,new Set(n)),i=l5(r.right,t,new Set(n));return e&&i?fBt([e,i],null,r):null}if(!T(r,`CallExpression`)||!T(r.callee,`MemberExpression`)||C(r.callee)!==`join`)return null;let a=D(r.callee.object);if(!T(a,`ArrayExpression`)||r.arguments.length>1)return null;let o=r.arguments[0],s;if(s=o?T(o,`SpreadElement`)?null:l5(o,t,new Set(n)):{fallbackNode:r,segments:[],text:`,`},!s)return null;let c=[];for(let e of a.elements){if(!e||T(e,`SpreadElement`))return null;let r=l5(e,t,new Set(n));if(!r)return null;c.push(r)}return fBt(c,s,r)},pBt=(e,t)=>{let n=l5(e,t,new Set);return n?{getOriginNodeAtOffset:e=>n.segments.find(t=>e>=t.startOffset&&e<t.endOffset)?.node??n.fallbackNode,text:n.text}:null},mBt=new Set([`RawShaderMaterial`,`ShaderMaterial`]),hBt=[`clipping`,`fog`,`fragmentShader`,`glslVersion`,`lights`,`morphNormals`,`morphTargets`,`skinning`,`transmission`,`uniforms`,`vertexShader`],gBt=(e,t,n)=>{if(!e)return null;let r=pBt(e,n.scopes);if(!r)return null;let i=uBt(r.text,t);return i?{expression:e,program:i,source:r,stage:t}:null},u5=(e,t)=>{let n=Y1(e.callee,t.scopes);if(!n||!Q0(n.moduleSource)||!mBt.has(n.apiName))return null;let r=e.arguments[0];if(!r||T(r,`SpreadElement`))return null;let i=Va(r,hBt,t.scopes,e);if(!i)return null;let a=new Set(hBt),o=new Map;for(let e=i.properties.length-1;e>=0;--e){let t=i.properties[e];if(!t||T(t,`SpreadElement`))return null;if(!T(t,`Property`))continue;let n=S(t,{allowComputedString:!0});if(!n)return null;a.has(n)&&(a.delete(n),t.kind===`init`&&!t.method&&o.set(n,t.value))}let s=o.get(`fragmentShader`),c=o.get(`vertexShader`);return{constructorName:n.apiName,constructorNode:e,fragmentShader:gBt(s,`fragment`,t),optionsObject:i,properties:o,vertexShader:gBt(c,`vertex`,t)}},_Bt=/^(?:float|vec[234]|mat[234](?:x[234])?)$/,vBt=new Set([`highp`,`lowp`,`mediump`]),yBt=e=>!!e?.some(e=>e.type===`keyword`&&vBt.has(e.token)),d5=x({id:`three-raw-shader-require-fragment-float-precision`,title:`Raw fragment shader lacks float precision`,category:`Correctness`,severity:`error`,recommendation:`Declare a default fragment float precision or qualify every floating-point declaration`,create:e=>({NewExpression(t){let n=u5(t,e);if(n?.constructorName!==`RawShaderMaterial`||!n.fragmentShader)return;let r=!1,i=[];Hn(n.fragmentShader.program,{precision:{enter:({node:e})=>{s5(e.specifier)===`float`&&(r=!0)}},fully_specified_type:{enter:({node:e})=>{let t=s5(e.specifier);i.length===0&&!r&&t&&_Bt.test(t)&&!yBt(e.qualifiers)&&i.push(e)}},parameter_declaration:{enter:({node:e})=>{let t=s5(e.specifier);i.length===0&&!r&&t&&_Bt.test(t)&&!yBt(e.qualifier)&&i.push(e)}}});let a=i[0];a&&e.report({node:n.fragmentShader.source.getOriginNodeAtOffset(a.location?.start.offset??0),message:`RawShaderMaterial does not receive Three.js precision declarations, and fragment GLSL has no default float precision for this unqualified declaration`})}})}),f5=e=>{let t=null;if(e.type===`float_constant`)t=Number(e.token.replace(/(?:lf|LF|f|F)$/,``));else if(e.type===`double_constant`)t=Number(e.token.replace(/(?:lf|LF)$/,``));else if(e.type===`uint_constant`)t=Number(e.token.replace(/[uU]$/,``));else if(e.type===`int_constant`)t=Number(e.token);else if(e.type===`group`)t=f5(e.expression);else if(e.type===`unary`&&(e.operator.literal===`+`||e.operator.literal===`-`)){let n=f5(e.expression);n!==null&&(t=e.operator.literal===`-`?-n:n)}return t!==null&&Number.isFinite(t)?t:null},bBt=new Set([`centroid`,`flat`,`noperspective`,`sample`,`smooth`]),xBt=new Set([`flat`,`noperspective`,`smooth`]),SBt=(e,t)=>{let n=[...Array.isArray(t)?t:[],...Array.isArray(e.quantifier)?e.quantifier:[]];if(n.length===0)return null;if(n.length===1)return f5(n[0].expression)??void 0},CBt=e=>e.type===`keyword`?e.token:null,wBt=e=>{let t=[...e].filter(e=>bBt.has(e));return t.some(e=>xBt.has(e))||t.push(`smooth`),t.sort().join(` `)},p5=e=>{let t=[],n=e.scopes[0]?.bindings;for(let r of e.program){if(r.type!==`declaration_statement`||r.declaration.type!==`declarator_list`)continue;let e=r.declaration,i=s5(e.specified_type.specifier);if(!i)continue;let a=e.specified_type.qualifiers??[],o=new Set,s=!1;for(let e of a){if(e.type===`layout_qualifier`){s=!0;continue}let t=CBt(e);t&&o.add(t)}for(let r of e.declarations){let a=r.identifier.identifier,c=n?.[a];t.push({arraySize:SBt(r,e.specified_type.specifier.quantifier),hasLayoutQualifier:s,interpolation:wBt(o),isStaticallyUsed:!!c?.references.some(e=>e!==c.declaration),name:a,node:r,qualifiers:o,typeName:i})}}return t},m5=e=>{if(e.identifier.type===`identifier`)return e.identifier.identifier;if(e.identifier.type!==`type_specifier`)return null;let t=e.identifier.specifier;return t.type===`keyword`?t.token:t.type===`identifier`||t.type===`type_name`?t.identifier:null},h5=(e,t)=>{let n=e.scopes[0]?.functions[t];return!!(n&&Object.values(n).some(e=>!!e.declaration))},g5=(e,t)=>RegExp(`^[ \\t]*#[ \\t]*define[ \\t]+${t}(?:[ \\t]|\\()`,`m`).test(c5(e)),TBt=new Set(`acosh.asinh.atanh.bitCount.bitfieldExtract.bitfieldInsert.bitfieldReverse.cosh.determinant.findLSB.findMSB.floatBitsToInt.floatBitsToUint.frexp.imulExtended.intBitsToFloat.interpolateAtCentroid.interpolateAtOffset.interpolateAtSample.inverse.isinf.isnan.ldexp.modf.outerProduct.packHalf2x16.packSnorm2x16.packUnorm2x16.round.roundEven.sinh.tanh.texelFetch.texelFetchOffset.texture.textureGrad.textureGradOffset.textureLod.textureLodOffset.textureOffset.textureProj.textureProjGrad.textureProjGradOffset.textureProjLod.textureProjLodOffset.textureProjOffset.textureSize.transpose.trunc.uaddCarry.uintBitsToFloat.umulExtended.unpackHalf2x16.unpackSnorm2x16.unpackUnorm2x16.usubBorrow`.split(`.`)),EBt=/^(?:uint|uvec[234]|mat[234]x[234]|sampler3D|sampler2DArray|[iu]sampler(?:2D|3D|Cube|2DArray))$/,DBt=/^(?:uint|uvec[234]|mat[234]x[234])$/,OBt=e=>{if(p5(e.program).some(e=>e.hasLayoutQualifier||e.qualifiers.has(`in`)||e.qualifiers.has(`out`)||EBt.test(e.typeName)))return!0;let t=!1;return Hn(e.program,{binary:{enter:({node:e})=>{(e.operator.literal===`<<`||e.operator.literal===`>>`||e.operator.literal===`&`||e.operator.literal===`|`||e.operator.literal===`^`)&&(t=!0)}},assignment:{enter:({node:e})=>{let n=String(e.operator.literal);(n===`<<=`||n===`>>=`||n===`&=`||n===`|=`||n===`^=`)&&(t=!0)}},function_call:{enter:({node:n})=>{let r=m5(n);r&&(TBt.has(r)||DBt.test(r))&&!g5(e.source.text,r)&&!h5(e.program,r)&&(t=!0)}},switch_statement:{enter:()=>{t=!0}}}),t},kBt=(e,t)=>{if(!e)return!1;if(T(e,`Literal`))return e.value===`300 es`;let n=Y1(e,t.scopes);return!n||!Q0(n.moduleSource)?null:n.apiName===`GLSL3`},_5=x({id:`three-raw-shader-require-glsl3-version`,title:`Raw shader uses GLSL 3 syntax without GLSL3`,category:`Correctness`,severity:`error`,recommendation:`Set glslVersion to THREE.GLSL3 when RawShaderMaterial uses GLSL 3 syntax`,create:e=>({NewExpression(t){let n=u5(t,e);if(n?.constructorName!==`RawShaderMaterial`||kBt(n.properties.get(`glslVersion`),e)!==!1)return;let r=[n.vertexShader,n.fragmentShader].find(e=>!!(e&&OBt(e)));r&&e.report({node:r.expression,message:`This RawShaderMaterial uses GLSL 3-only syntax but does not set glslVersion to THREE.GLSL3, so Three.js compiles it as GLSL 1`})}})}),ABt=new Set,jBt=[`uncacheAction`,`uncacheClip`],MBt=(e,t,n)=>u4(e,`clipAction`,n.scopes,e=>{let r=e.arguments[1];return r?T(r,`SpreadElement`)?!0:B(r,n)!==t:!1}),NBt=(e,t,n,r)=>{let i=[],a=[];return l0(e,r.scopes,(e,o)=>{if(o||!T(e,`CallExpression`)||!T(e.callee,`MemberExpression`)||!a4(e.callee.object,t,r.scopes))return;let s=C(e.callee);if(s===`stopAllAction`){i.push(e);return}let c=e.arguments[0];s===`uncacheRoot`&&c&&!T(c,`SpreadElement`)&&B(c,r)===n&&a.push(e)}),i.some(e=>a.some(t=>{let n=b(e),r=b(t);if(!n||!r||n!==r)return!1;let i=At(e),a=At(t);return i<0||a<0||i<a}))},v5=x({id:`three-require-animation-mixer-cleanup`,title:`Unreleased Three.js animation mixer actions`,category:`Correctness`,severity:`warn`,recommendation:`Stop component-owned AnimationMixer actions and uncache their owned root in React cleanup`,create:e=>({NewExpression(t){let n=Y1(t.callee,e.scopes),r=t.arguments[0];if(n?.moduleSource!==`three`||n.apiName!==`AnimationMixer`||!r||T(r,`SpreadElement`))return;let i=B(r,e);if(!i)return;let a=s4(t,e,{borrowedArgumentMethodNames:ABt});if(!a||a.hasUnknownOwnershipTransfer||!u4(a,`clipAction`,e.scopes)||MBt(a,i,e)||jBt.some(t=>u4(a,t,e.scopes)))return;let o=c4(a,e,t=>NBt(t,a,i,e));o.isProven||o.isUnknown||e.report({node:t,message:`This component-owned AnimationMixer caches actions but has no cleanup that stops all actions before uncaching its owned root`})}})}),PBt=new Set([`ArcballControls`,`DragControls`,`FirstPersonControls`,`FlyControls`,`MapControls`,`OrbitControls`,`PointerLockControls`,`TrackballControls`,`TransformControls`]),FBt=new Set,IBt=new Set([`DragControls`,`FirstPersonControls`,`FlyControls`,`MapControls`,`OrbitControls`,`PointerLockControls`,`TrackballControls`]),LBt=e=>e===`three-stdlib`||e.startsWith(`three/addons/controls/`)||e.startsWith(`three/examples/jsm/controls/`),y5=x({id:`three-require-controls-cleanup`,title:`Undisposed imperative Three.js controls`,category:`Correctness`,severity:`warn`,recommendation:`Dispose component-owned Three.js controls in a React cleanup so their DOM listeners are removed`,create:e=>({NewExpression(t){let n=Y1(t.callee,e.scopes);if(!n||!PBt.has(n.apiName)||!LBt(n.moduleSource))return;let r=s4(t,e,{borrowedArgumentMethodNames:FBt,retainsOwnershipInJsx:!0});if(!r||r.hasUnknownOwnershipTransfer)return;let i=IBt.has(n.apiName)?[`disconnect`,`dispose`]:[`dispose`],a=c4(r,e,t=>i.some(n=>l4(t,r,n,e.scopes)));if(!(a.isProven||a.isUnknown)){if(IBt.has(n.apiName)){let t=Ixt(r,e,`connect`,t=>i.some(n=>l4(t,r,n,e.scopes)));if(t.isProven||t.isUnknown)return}e.report({node:t,message:`These component-owned controls register DOM listeners but have no provable React cleanup. Dispose them when their owner changes or unmounts`})}}})}),RBt=new Set([`position`,`quaternion`,`rotation`,`scale`]),zBt=(e,t)=>{let n=D(e),r=!1;for(;T(n,`MemberExpression`);)RBt.has(C(n)??``)&&(r=!0),n=D(n.object);return r&&K8(e,t.scopes)},b5=(e,t,n=new Set)=>{let r=!1;return A(e,e=>{if(T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)&&C(e.callee)===`getDelta`&&H8(e.callee.object,t.scopes)===`Clock`)return r=!0,!1;if(!T(e,`Identifier`))return;let i=t.scopes.symbolFor(e);if(!(i?.kind!==`const`||!i.initializer||n.has(i.id)||i.references.some(e=>e.flag!==`read`))&&(n.add(i.id),b5(i.initializer,t,n)))return r=!0,!1}),r},BBt=(e,t)=>{if(!T(e.callee,`MemberExpression`))return null;let n=C(e.callee),r;if(n===`lerp`&&Z1(e.callee.object,`MathUtils`,t.scopes)===`three`?r=2:n&&K8(e.callee.object,t.scopes)&&(r=avt.get(n)),r===void 0)return null;let i=e.arguments[r];if(!i||T(i,`SpreadElement`))return null;let a=G2(i,t.scopes);return a!==null&&a>0&&a<1?i:null},x5=x({id:`three-require-frame-delta`,title:`Frame-rate-dependent Three.js animation`,category:`Correctness`,severity:`warn`,recommendation:`Scale incremental transforms and interpolation by Clock.getDelta(), use delta-aware damping, or assign from absolute animation time`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes);!r||t.has(r)||(t.add(r),l0(r,e.scopes,(t,n)=>{if(n)return;if(T(t,`UpdateExpression`)&&zBt(t.argument,e)){e.report({node:t,message:`This transform changes by a fixed amount per frame, so animation speed depends on refresh rate. Use a Three.js Clock delta instead of an update operator`});return}if(T(t,`AssignmentExpression`)&&(t.operator===`+=`||t.operator===`-=`)&&zBt(t.left,e)&&!b5(t.right,e)){e.report({node:t,message:`This transform changes by a fixed amount per frame, so animation speed depends on refresh rate. Multiply the increment by Clock.getDelta()`});return}if(!T(t,`CallExpression`))return;let r=BBt(t,e);!r||b5(r,e)||e.report({node:r,message:`This fixed interpolation factor converges once per frame, so its speed changes with refresh rate. Derive the factor from Clock.getDelta() or use delta-aware damping`})}))}}}}),VBt=(e,t)=>{let n=D(e.callee);if(!T(n,`MemberExpression`))return null;let r=C(n);if(r!==`setMatrixAt`&&r!==`setColorAt`||H8(n.object,t.scopes)!==`InstancedMesh`)return null;let i=B(n.object,t);return i?{bufferPropertyName:r===`setMatrixAt`?`instanceMatrix`:`instanceColor`,methodName:r,node:e,receiverKey:i}:null},HBt=(e,t)=>{let n=D(e.right),r=D(e.left);if(e.operator!==`=`||!T(n,`Literal`)||n.value!==!0||!T(r,`MemberExpression`)||C(r)!==`needsUpdate`)return null;let i=D(r.object);if(!T(i,`MemberExpression`))return null;let a=C(i);if(a!==`instanceMatrix`&&a!==`instanceColor`||H8(i.object,t.scopes)!==`InstancedMesh`)return null;let o=B(i.object,t);return o?{bufferPropertyName:a,node:e,receiverKey:o}:null},UBt=(e,t)=>{if(!Z2(e,t.scopes))return[];let n=[];for(let r of e.arguments){if(T(r,`SpreadElement`))continue;let i=D(r);if(T(i,`MemberExpression`)){let r=C(i);if((r===`instanceMatrix`||r===`instanceColor`)&&H8(i.object,t.scopes)===`InstancedMesh`){let a=B(i.object,t);a&&n.push({bufferPropertyName:r,node:e,receiverKey:a});continue}}if(H8(i,t.scopes)!==`InstancedMesh`)continue;let a=B(i,t);a&&(n.push({bufferPropertyName:`instanceMatrix`,node:e,receiverKey:a}),n.push({bufferPropertyName:`instanceColor`,node:e,receiverKey:a}))}return n},WBt=(e,t,n,r)=>{let i=r.cfg.enclosingFunction(e.node),a=t.filter(t=>t.receiverKey===e.receiverKey&&t.bufferPropertyName===e.bufferPropertyName&&r.cfg.enclosingFunction(t.node)===i);if(i)return Aa(e.node,a.map(e=>e.node),r);let o=O(e.node);return a.some(e=>{let t=O(e.node);return o!==null&&t!==null&&t>o&&!Em(e.node,n)})},S5=x({id:`three-require-instanced-buffer-update`,title:`Three.js instanced mesh buffer is not marked for upload`,category:`Correctness`,severity:`error`,recommendation:`After setMatrixAt or setColorAt, set the matching instance buffer's needsUpdate flag to true`,create:e=>{let t=[],n=[],r=null;return{Program(e){r=e},AssignmentExpression(t){let r=HBt(t,e);r&&n.push(r)},CallExpression(r){let i=VBt(r,e);if(i){t.push(i);return}n.push(...UBt(r,e))},"Program:exit"(){if(r)for(let i of t)WBt(i,n,r,e)||e.report({node:i.node,message:`After ${i.methodName}, set ${i.bufferPropertyName}.needsUpdate to true so Three.js uploads the changed instance data`})}}}}),C5=x({id:`three-require-owned-geometry-cleanup`,title:`Locally owned Three.js geometry is not disposed`,category:`Performance`,severity:`warn`,recommendation:`Dispose locally constructed geometries when their React owner releases them`,create:e=>d4({constructorNameSuffix:`Geometry`,context:e,message:`This locally constructed Three.js geometry owns GPU buffers but has no provable React cleanup. Dispose it when the owning component or hook releases it`})}),w5=x({id:`three-require-owned-material-cleanup`,title:`Locally owned Three.js material is not disposed`,category:`Performance`,severity:`warn`,recommendation:`Dispose locally constructed materials when their React owner releases them`,create:e=>d4({constructorNameSuffix:`Material`,context:e,message:`This locally constructed Three.js material owns a GPU shader program but has no provable React cleanup. Dispose it when the owning component or hook releases it`})}),T5=x({id:`three-require-owned-texture-cleanup`,title:`Locally owned Three.js texture is not disposed`,category:`Performance`,severity:`warn`,disabledWhen:[`r3f`],recommendation:`Dispose locally constructed textures when their React owner releases them`,create:p4.create}),GBt=new Set,KBt=new Set([`addPass`,`insertPass`]),qBt=[`three/addons/postprocessing/`,`three/examples/jsm/postprocessing/`],JBt=new Set([`three/addons`,`three/addons/Addons`,`three/addons/Addons.js`,`three/examples/jsm/Addons`,`three/examples/jsm/Addons.js`]),YBt=new Set(`AdaptiveToneMappingPass.AfterimagePass.BloomPass.BokehPass.CubeTexturePass.DotScreenPass.FilmPass.FXAAPass.GTAOPass.GlitchPass.HalftonePass.LUTPass.OutlinePass.OutputPass.RenderPixelatedPass.RenderTransitionPass.SAOPass.SMAAPass.SSAARenderPass.SSAOPass.SSRPass.SavePass.ShaderPass.TAARenderPass.TexturePass.UnrealBloomPass`.split(`.`)),XBt=new Set([`AdaptiveToneMappingPass`,`OutlinePass`,`SSAARenderPass`,`SSAOPass`,`SSRPass`,`UnrealBloomPass`]),ZBt=(e,t)=>JBt.has(t)||qBt.some(n=>t===`${n}${e}`||t===`${n}${e}.js`),QBt=(e,t)=>{let n=svt.get(e)??(e!==`EffectComposer`&&XBt.has(e)?145:146),r=JBt.has(t)?158:n;return Math.max(n,r)},$Bt=(e,t,n)=>qr(n.settings,`three:${QBt(e,t)}`),eVt=(e,t)=>e===`EffectComposer`&&ZBt(e,t),tVt=(e,t)=>e===`EffectComposer`&&t===`postprocessing`,nVt=(e,t)=>YBt.has(e)&&ZBt(e,t),rVt=(e,t,n)=>{let r=D(e.callee);return!T(r,`MemberExpression`)||!KBt.has(C(r)??``)?!1:t.some(e=>!e.hasUnknownOwnershipTransfer&&a4(r.object,e,n.scopes))},iVt=(e,t,n)=>{if(t.hasUnknownOwnershipTransfer)return;let r=c4(t,n,e=>l4(e,t,`dispose`,n.scopes));r.isProven||r.isUnknown||n.report({node:e,message:`This component-owned postprocessing resource has no provable React cleanup, so its GPU resources can survive dependency changes or unmount`})},E5=x({id:`three-require-postprocessing-cleanup`,title:`Undisposed Three.js postprocessing resource`,category:`Correctness`,severity:`warn`,recommendation:`Dispose component-owned postprocessing composers and resource-owning passes`,create:e=>({Program(t){let n=[],r=[];A(t,t=>{if(!T(t,`NewExpression`))return;let i=Y1(t.callee,e.scopes);if(i){if(eVt(i.apiName,i.moduleSource)&&$Bt(i.apiName,i.moduleSource,e)||tVt(i.apiName,i.moduleSource)){n.push(t);return}nVt(i.apiName,i.moduleSource)&&$Bt(i.apiName,i.moduleSource,e)&&r.push(t)}});let i=new Map;for(let t of n){let n=s4(t,e,{borrowedArgumentMethodNames:GBt,retainsOwnershipInJsx:!0});n&&i.set(t,n)}let a=[...i.values()].filter(t=>{let n=t.allocation;if(!T(n,`NewExpression`))return!1;let r=Y1(n.callee,e.scopes);return!!(r&&eVt(r.apiName,r.moduleSource))});for(let t of n){let n=i.get(t);n&&iVt(t,n,e)}for(let t of r){let n=s4(t,e,{borrowedArgumentMethodNames:GBt,isBorrowedArgument:t=>rVt(t,a,e),retainsOwnershipInJsx:!0});n&&iVt(t,n,e)}}})}),D5=new Set([`OrthographicCamera`,`PerspectiveCamera`]),aVt=new Set([`aspect`,`bottom`,`far`,`filmGauge`,`filmOffset`,`fov`,`left`,`near`,`right`,`top`,`zoom`]),oVt=(e,t)=>{let n=T(e,`AssignmentExpression`)?D(e.left):T(e,`UpdateExpression`)?D(e.argument):null;if(!n||!T(n,`MemberExpression`)||!aVt.has(C(n)??``)||!D5.has(H8(n.object,t.scopes)??``))return null;let r=B(n.object,t);return r?{node:e,receiverKey:r}:null},sVt=(e,t)=>{let n=D(e.callee);if(!T(n,`MemberExpression`)||C(n)!==`updateProjectionMatrix`||!D5.has(H8(n.object,t.scopes)??``))return null;let r=B(n.object,t);return r?{node:e,receiverKey:r}:null},cVt=(e,t)=>{if(!Z2(e,t.scopes))return[];let n=[];for(let r of e.arguments){if(T(r,`SpreadElement`)||!D5.has(H8(r,t.scopes)??``))continue;let i=B(r,t);i&&n.push({node:e,receiverKey:i})}return n},lVt=(e,t,n)=>{let r=O(e.node),i=O(t.node);if(r===null||i===null||i<=r)return!1;if(!Em(t.node,n))return!0;let a=Tm(e.node,n);return[...Tm(t.node,n)].every(e=>a.has(e))},uVt=(e,t,n,r)=>{let i=r.cfg.enclosingFunction(e.node),a=t.filter(t=>t.receiverKey===e.receiverKey&&r.cfg.enclosingFunction(t.node)===i);return i?Aa(e.node,a.map(e=>e.node),r):a.some(t=>lVt(e,t,n))},O5=x({id:`three-require-projection-matrix-update`,title:`Missing Three.js camera projection-matrix update`,category:`Correctness`,severity:`error`,recommendation:`Call camera.updateProjectionMatrix() after changing projection properties so Three.js renders the new frustum`,create:e=>{let t=[],n=[],r=null;return{Program(e){r=e},AssignmentExpression(n){let r=oVt(n,e);r&&t.push(r)},UpdateExpression(n){let r=oVt(n,e);r&&t.push(r)},CallExpression(t){let r=sVt(t,e);if(r){n.push(r);return}n.push(...cVt(t,e))},"Program:exit"(){if(r)for(let i of t)uVt(i,n,r,e)||e.report({node:i.node,message:`This camera projection property changes without a later updateProjectionMatrix() call on every path, so Three.js can keep rendering a stale projection matrix`})}}}}),dVt=new Set([`RenderTarget`,`WebGLCubeRenderTarget`,`WebGLRenderTarget`]),fVt=new Set([`readRenderTargetPixels`,`readRenderTargetPixelsAsync`,`setRenderTarget`,`setRenderTargetTextures`]),k5=x({id:`three-require-render-target-cleanup`,title:`Undisposed Three.js render target`,category:`Correctness`,severity:`warn`,recommendation:`Dispose component-owned render targets in a React cleanup that follows the render target binding`,create:e=>({NewExpression(t){let n=Y1(t.callee,e.scopes);if(!n||!dVt.has(n.apiName)||!Q0(n.moduleSource))return;let r=s4(t,e,{borrowedArgumentMethodNames:fVt});if(!r||r.hasUnknownOwnershipTransfer)return;let i=b(t);if(i&&u4(r,`dispose`,e.scopes,e=>e.range[0]>t.range[1]&&b(e)===i&&!Em(e,i)))return;let a=c4(r,e,t=>l4(t,r,`dispose`,e.scopes));a.isProven||a.isUnknown||e.report({node:t,message:`This component-owned render target is not disposed by a matching React cleanup, so its GPU framebuffer and textures can survive dependency changes or unmount`})}})}),pVt=new Set([`WebGLRenderer`,`WebGPURenderer`]),mVt=e=>{let t=e.arguments[0];return!!(T(t,`Literal`)&&t.value===null)},hVt=(e,t)=>{let n=v(e),r=n.parent;if(!T(r,`AssignmentExpression`)||r.operator!==`=`||r.right!==n)return!1;let i=D(r.left),a=ku(i,t),o=b(e),s=a?b(a.declarationNode):null;return!!(a&&T(i,`MemberExpression`)&&a.references.every(e=>{let t=v(e.identifier),n=t.parent;return T(n,`MemberExpression`)&&n.object===t&&C(n)===`current`})&&o&&(o===s||b(o)===s))},gVt=(e,t)=>{let n=v(e),r=n.parent;if(T(r,`VariableDeclarator`)&&r.init===n&&T(r.id,`Identifier`)){let e=t.symbolFor(r.id);return e?{symbol:e,refSymbol:null}:null}if(!T(r,`AssignmentExpression`)||r.operator!==`=`||r.right!==n)return null;let i=D(r.left);if(T(i,`Identifier`)){let e=t.symbolFor(i);return e?{symbol:e,refSymbol:null}:null}let a=ku(i,t);return a?{symbol:null,refSymbol:a}:null},A5=(e,t,n)=>{let r=D(e);return t.symbol?T(r,`Identifier`)&&n.symbolFor(r)?.id===t.symbol.id:!!(t.refSymbol&&ku(r,n)?.id===t.refSymbol.id)},_Vt=(e,t,n)=>{let r=e.handle;if(!r)return!1;let i=v(e.call),a=!1;return A(t,e=>{if(a)return!1;if(T(e,`AssignmentExpression`)&&A5(e.left,r,n)&&e.right!==i||T(e,`UpdateExpression`)&&A5(e.argument,r,n))return a=!0,!1}),!a},vVt=(e,t)=>{let n=new Set;return A(e.ownerFunction,r=>{if(!T(r,`CallExpression`)||!T(r.callee,`MemberExpression`)||!_4.has(C(r.callee)??``)||!a4(r.callee.object,e,t))return;let i=b(r);i&&n.add(i)}),n},yVt=(e,t)=>{let n=vVt(e,t);if(n.size===0)return[];let r=[];return A(e.ownerFunction,e=>{let i=b(e);!T(e,`CallExpression`)||!y2(e,`requestAnimationFrame`,t)||!i||!n.has(i)||r.push({call:e,handle:gVt(e,t)})}),r},bVt=(e,t,n)=>{let r=!1;return l0(e,n,e=>{if(r||!T(e,`CallExpression`)||!y2(e,`cancelAnimationFrame`,n))return;let i=e.arguments[0];i&&!T(i,`SpreadElement`)&&A5(i,t,n)&&(r=!0)}),r},xVt=(e,t)=>{let n=n=>a4(n,e,t.scopes),r=!1;return A(e.ownerFunction,e=>{if(r||!T(e,`JSXAttribute`))return;let i=e.parent;if(!T(e.name,`JSXIdentifier`)||!T(i,`JSXOpeningElement`)||!e.value||!T(e.value,`JSXExpressionContainer`)||T(e.value.expression,`JSXEmptyExpression`))return;let a=Z1(i.name,`Canvas`,t.scopes);if(!a||e.name.name!==`gl`&&!(e.name.name===`renderer`&&x4.has(a))||!K1.has(a))return;let o=e.value.expression;if(n(o)){r=!0;return}let s=M(o,t.scopes);s&&ce(s,t.scopes,n,t.cfg,`every`)&&(r=!0)}),r},j5=x({id:`three-require-renderer-cleanup`,title:`Undisposed Three.js renderer`,category:`Correctness`,severity:`warn`,recommendation:`Dispose component-owned renderers and stop their animation loop or animation frame in matching React cleanup`,create:e=>({NewExpression(t){let n=Y1(t.callee,e.scopes);if(!n||!pVt.has(n.apiName)||!Q0(n.moduleSource))return;let r=s4(t,e,{isBorrowedReference:t=>hVt(t,e.scopes)});if(!r||r.hasUnknownOwnershipTransfer||xVt(r,e))return;let i=c4(r,e,t=>l4(t,r,`dispose`,e.scopes)),a=u4(r,`setAnimationLoop`,e.scopes,e=>!mVt(e))?c4(r,e,t=>l4(t,r,`setAnimationLoop`,e.scopes,mVt)):{isProven:!0,isUnknown:!1},o=yVt(r,e.scopes).every(t=>{let n=t.handle;if(!n||!_Vt(t,r.ownerFunction,e.scopes))return!1;let i=c4(r,e,t=>bVt(t,n,e.scopes));return i.isProven||i.isUnknown});(i.isProven||i.isUnknown)&&(a.isProven||a.isUnknown)&&o||e.report({node:t,message:`This component-owned renderer is not fully released. Dispose it and stop its setAnimationLoop or requestAnimationFrame work in matching React cleanup`})}})}),SVt=e=>{let t=/^[biud]?vec([234])$/.exec(e);if(t)return[Number(t[1])];let n=/^mat([234])(?:x([234]))?$/.exec(e);return n?[Number(n[1]),Number(n[2]??n[1])]:[]},CVt=e=>{let t=SVt(e.typeName);return e.arraySize===null?t:[typeof e.arraySize==`number`?e.arraySize:null,...t]},wVt=e=>{let t=[],n=e;for(;n.type===`postfix`;){if(n.expression.type!==`quantifier`)return t.length>0?t:null;t.push(n.expression),n=n.postfix}return n.type===`quantifier`&&t.push(n),t.length>0?t:null},TVt=(e,t)=>{let n=new Map(p5(e.program).map(e=>[e.name,e])),r=e.program.scopes[0]?.bindings;Hn(e.program,{postfix:{enter:({node:i})=>{if(i.expression.type!==`identifier`)return;let a=wVt(i.postfix);if(!a)return;let o=n.get(i.expression.identifier),s=r?.[i.expression.identifier];if(!o||!s?.references.includes(i.expression))return;let c=CVt(o);for(let[n,r]of a.entries()){let i=c[n],a=f5(r.expression);i==null||a===null||!Number.isInteger(a)||a>=0&&a<i||t.report({node:e.source.getOriginNodeAtOffset(r.location?.start.offset??0),message:`The constant index ${a} is outside ${o.name}'s valid range 0–${i-1}, which is a GLSL compile error or undefined access`})}}}})},M5=x({id:`three-shader-no-constant-out-of-bounds-index`,title:`Shader uses a constant out-of-bounds index`,category:`Correctness`,severity:`error`,recommendation:`Keep constant array, vector, and matrix indices within their declared bounds`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&TVt(n.fragmentShader,e),n.vertexShader&&TVt(n.vertexShader,e))}})}),EVt=new Set([`gl_FragCoord`,`gl_FrontFacing`,`gl_HelperInvocation`,`gl_Layer`,`gl_PointCoord`,`gl_PrimitiveID`,`gl_SampleID`,`gl_SampleMaskIn`,`gl_SamplePosition`,`gl_ViewportIndex`]),DVt=(e,t)=>{let n=!1;return Hn(e,{identifier:{enter:e=>{n||e.parent?.type===`field_selection`||e.parent?.type===`function_call`&&e.key===`identifier`||e.parent?.type===`type_specifier`||(n=t.has(e.node)||EVt.has(e.node.identifier))}}}),n},OVt=new Set([`dFdx`,`dFdy`,`fwidth`]),kVt=new Set([`texture`,`texture2D`,`texture2DProj`,`texture3D`,`texture3DProj`,`textureCube`,`textureOffset`,`textureProj`,`textureProjOffset`]),AVt=e=>{let t=[],n=e;for(;n?.parentPath;){let e=n.parentPath,r=e.node;if(r.type===`function`)break;let i=r.type===`if_statement`?Reflect.get(r,`else`):null,a=n.key===`else`||Array.isArray(i)&&i.includes(n.node);r.type===`if_statement`&&(n.key===`body`||a)&&t.push(r.condition),r.type===`while_statement`&&n.key===`body`&&t.push(r.condition),r.type===`do_statement`&&n.key===`body`&&t.push(r.expression),r.type===`for_statement`&&n.key===`body`&&r.condition&&t.push(...[r.init,r.condition,r.operation].filter(Boolean)),r.type===`ternary`&&(n.key===`left`||n.key===`right`)&&t.push(r.expression),r.type===`binary`&&n.key===`right`&&(r.operator.literal===`&&`||r.operator.literal===`||`)&&t.push(r.left),r.type===`switch_statement`&&n.key===`cases`&&t.push(r.expression),n=e}return t},jVt=(e,t)=>{let n=e.program.scopes[0]?.bindings,r=new Set;for(let t of p5(e.program)){if(!t.qualifiers.has(`in`)&&!t.qualifiers.has(`varying`))continue;let e=n?.[t.name];if(e)for(let t of e.references)t!==e.declaration&&r.add(t)}Hn(e.program,{function_call:{enter:n=>{let i=m5(n.node);!i||!OVt.has(i)&&!kVt.has(i)||g5(e.source.text,i)||h5(e.program,i)||AVt(n).some(e=>DVt(e,r))&&t.report({node:e.source.getOriginNodeAtOffset(n.node.location?.start.offset??0),message:`${i} executes only on fragment-input-dependent lanes, so implicit derivatives are undefined. Move it before the divergent branch or use explicit gradients`})}}})},N5=x({id:`three-shader-no-derivatives-in-nonuniform-flow`,title:`Shader derivative runs in non-uniform control flow`,category:`Correctness`,severity:`error`,recommendation:`Evaluate derivatives and implicit-LOD texture samples before fragment-input-dependent branches`,create:e=>({NewExpression(t){let n=u5(t,e);n?.fragmentShader&&jVt(n.fragmentShader,e)}})}),P5=e=>e.args.filter(e=>e.type!==`literal`||e.literal!==`,`),MVt=(e,t)=>{g5(e.source.text,`clamp`)||h5(e.program,`clamp`)||Hn(e.program,{function_call:{enter:({node:n})=>{if(m5(n)!==`clamp`)return;let r=P5(n);if(r.length!==3)return;let i=f5(r[1]),a=f5(r[2]);i===null||a===null||i<=a||t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:`GLSL clamp requires minVal not to exceed maxVal, but this call uses ${i} and ${a}, so its result is undefined`})}}})},F5=x({id:`three-shader-no-invalid-clamp-bounds`,title:`Shader uses invalid clamp bounds`,category:`Correctness`,severity:`error`,recommendation:`Keep clamp minVal less than or equal to maxVal`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&MVt(n.fragmentShader,e),n.vertexShader&&MVt(n.vertexShader,e))}})}),NVt=(e,t)=>{let n=m5(e);if(n!==`bitfieldExtract`&&n!==`bitfieldInsert`||g5(t.source.text,n)||h5(t.program,n))return null;let r=P5(e),i=n===`bitfieldExtract`?1:2,a=i+1,o=r[i]?f5(r[i]):null,s=r[a]?f5(r[a]):null;return o===null||s===null||o>=0&&s>=0&&o+s<=32?null:`GLSL ${n} uses offset ${o} and width ${s}, outside a 32-bit integer`},PVt=(e,t,n,r)=>{let i=f5(e);i===null||i>=0&&i<32||r.report({node:n.source.getOriginNodeAtOffset(t??0),message:`GLSL shift count ${i} is outside the valid range 0–31`})},FVt=(e,t)=>{Hn(e.program,{binary:{enter:({node:n})=>{n.operator.literal!==`<<`&&n.operator.literal!==`>>`||PVt(n.right,n.location?.start.offset,e,t)}},assignment:{enter:({node:n})=>{let r=String(n.operator.literal);r!==`<<=`&&r!==`>>=`||PVt(n.right,n.location?.start.offset,e,t)}},function_call:{enter:({node:n})=>{let r=NVt(n,e);r&&t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:r})}}})},I5=x({id:`three-shader-no-invalid-constant-bit-operations`,title:`Shader uses invalid constant bit operations`,category:`Correctness`,severity:`error`,recommendation:`Keep shift counts and bitfield ranges within the integer bit width`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&FVt(n.fragmentShader,e),n.vertexShader&&FVt(n.vertexShader,e))}})}),IVt=new Set([`inversesqrt`,`log`,`log2`]),LVt=(e,t)=>{let n=m5(e);if(!n||g5(t.source.text,n)||h5(t.program,n))return null;let r=P5(e),i=r[0];if(!i)return null;let a=f5(i);if(n===`asin`||n===`acos`)return a!==null&&Math.abs(a)>1?`GLSL ${n} is undefined outside the range -1 to 1, but received ${a}`:null;if(n===`atan`&&r.length===2){let e=f5(r[1]);return a===0&&e===0?`GLSL atan is undefined when both arguments are zero`:null}if(n===`acosh`)return a!==null&&a<1?`GLSL acosh is undefined below 1, but received ${a}`:null;if(n===`atanh`)return a!==null&&Math.abs(a)>=1?`GLSL atanh is undefined outside the range -1 to 1, but received ${a}`:null;if(n===`ldexp`&&r.length===2){let e=f5(r[1]);return e!==null&&e>128?`GLSL ldexp is undefined above exponent 128, but received ${e}`:null}if(n===`pow`){if(a!==null&&a<0)return`GLSL pow is undefined for the negative base ${a}`;let e=r[1]?f5(r[1]):null;return a===0&&e!==null&&e<=0?`GLSL pow is undefined for a zero base and the nonpositive exponent ${e}`:null}return n===`sqrt`?a!==null&&a<0?`GLSL sqrt is undefined for the negative argument ${a}`:null:IVt.has(n)?a!==null&&a<=0?`GLSL ${n} is undefined for the nonpositive argument ${a}`:null:n!==`mod`||r.length!==2?null:f5(r[1])===0?`GLSL mod is undefined with a zero divisor`:null},RVt=(e,t,n,r,i)=>{f5(t)===0&&i.report({node:r.source.getOriginNodeAtOffset(n??0),message:`GLSL ${e.startsWith(`/`)?`division`:`remainder`} by a constant zero has undefined results`})},zVt=(e,t)=>{Hn(e.program,{binary:{enter:({node:n})=>{n.operator.literal!==`/`&&n.operator.literal!==`%`||RVt(n.operator.literal,n.right,n.location?.start.offset,e,t)}},assignment:{enter:({node:n})=>{n.operator.literal!==`/=`&&n.operator.literal!==`%=`||RVt(n.operator.literal,n.right,n.location?.start.offset,e,t)}},function_call:{enter:({node:n})=>{let r=LVt(n,e);r&&t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:r})}}})},L5=x({id:`three-shader-no-invalid-constant-math`,title:`Shader uses invalid constant math`,category:`Correctness`,severity:`error`,recommendation:`Keep constant arguments within the defined GLSL builtin and operator domains`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&zVt(n.fragmentShader,e),n.vertexShader&&zVt(n.vertexShader,e))}})}),BVt=(e,t)=>{g5(e.source.text,`smoothstep`)||h5(e.program,`smoothstep`)||Hn(e.program,{function_call:{enter:({node:n})=>{if(m5(n)!==`smoothstep`)return;let r=P5(n);if(r.length!==3)return;let i=f5(r[0]),a=f5(r[1]);if(i===null||a===null||i<a)return;let o=n.location?.start.offset??0;t.report({node:e.source.getOriginNodeAtOffset(o),message:`GLSL smoothstep requires edge0 to be less than edge1, but this call uses ${i} and ${a}, so its result is undefined`})}}})},R5=x({id:`three-shader-no-invalid-smoothstep-edges`,title:`Shader uses invalid smoothstep edges`,category:`Correctness`,severity:`error`,recommendation:`Keep smoothstep edge0 below edge1 and invert the result when a descending transition is needed`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&BVt(n.fragmentShader,e),n.vertexShader&&BVt(n.vertexShader,e))}})}),VVt=(e,t)=>{if(g5(e.source.text,`inverse`)||h5(e.program,`inverse`))return;let n=e.program.scopes[0]?.bindings,r=new Set(p5(e.program).filter(e=>e.qualifiers.has(`uniform`)).flatMap(e=>n?.[e.name]?.references??[]));Hn(e.program,{function_call:{enter:({node:n})=>{if(m5(n)!==`inverse`)return;let i=P5(n),a=i[0];i.length!==1||a?.type!==`identifier`||!r.has(a)||t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:`The matrix ${a.identifier} is uniform across this draw, but inverse recomputes it for every shader invocation. Compute and bind the inverse matrix on the CPU`})}}})},z5=x({id:`three-shader-no-inverse-of-uniform`,title:`Shader inverts a uniform matrix per invocation`,category:`Performance`,severity:`warn`,recommendation:`Compute uniform matrix inverses once on the CPU and upload the result`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&VVt(n.fragmentShader,e),n.vertexShader&&VVt(n.vertexShader,e))}})}),HVt=(e,t,n)=>{for(let r of p5(e.program))t.has(r.name)&&n.report({node:e.source.getOriginNodeAtOffset(r.node.location?.start.offset??0),message:`ShaderMaterial already injects ${r.name} into the ${e.stage} shader, so this declaration collides with Three.js's generated prefix`})},B5=x({id:`three-shader-no-redeclared-builtins`,title:`ShaderMaterial redeclares a Three.js builtin`,category:`Correctness`,severity:`error`,recommendation:`Use ShaderMaterial built-in attributes and uniforms without redeclaring them`,create:e=>({NewExpression(t){let n=u5(t,e);n?.constructorName===`ShaderMaterial`&&(n.vertexShader&&HVt(n.vertexShader,uvt,e),n.fragmentShader&&HVt(n.fragmentShader,lvt,e))}})}),UVt=new Set([`gl_FragDepth`,`gl_FragDepthEXT`]),WVt=new Set([`do_statement`,`for_statement`,`if_statement`,`switch_statement`,`ternary`,`while_statement`]),GVt=e=>e.operator.literal!==`=`||e.left.type!==`identifier`||!UVt.has(e.left.identifier)||e.right.type!==`postfix`||e.right.expression.type!==`identifier`||e.right.expression.identifier!==`gl_FragCoord`||e.right.postfix.type!==`field_selection`?!1:Reflect.get(e.right.postfix.selection,`identifier`)===`z`,KVt=e=>{let t=e.parentPath;for(;t;){if(WVt.has(t.node.type))return!1;if(t.node.type===`binary`){let e=t.node.operator.literal;if(e===`&&`||e===`||`)return!1}if(t.node.type===`function`)return t.node.prototype.header.name.identifier===`main`;t=t.parentPath}return!1},qVt=(e,t)=>{let n=[];if(Hn(e.program,{assignment:{enter:e=>{e.node.left.type===`identifier`&&UVt.has(e.node.left.identifier)&&n.push(e)}}}),n.length!==1||!GVt(n[0].node)||!KVt(n[0]))return;let r=n[0].node;t.report({node:e.source.getOriginNodeAtOffset(r.location?.start.offset??0),message:`This shader unconditionally writes the fixed-function depth value back to gl_FragDepth. Remove the redundant write so early depth testing remains available`})},V5=x({id:`three-shader-no-redundant-frag-depth`,title:`Shader redundantly writes fragment depth`,category:`Performance`,severity:`warn`,recommendation:`Let fixed-function depth supply gl_FragCoord.z when depth is unchanged`,create:e=>({NewExpression(t){let n=u5(t,e);n?.fragmentShader&&qVt(n.fragmentShader,e)}})}),JVt=/^[ \t]*#[ \t]*version\b/m,YVt=(e,t)=>{let n=c5(e.source.text).search(JVt);n<0||t.report({node:e.source.getOriginNodeAtOffset(n),message:`Three.js prepends its own shader prefix before custom source, so an inline #version directive is not first and cannot compile. Set the material glslVersion property instead`})},H5=x({id:`three-shader-no-version-directive`,title:`Three shader source contains a version directive`,category:`Correctness`,severity:`error`,recommendation:`Set glslVersion on the material instead of writing #version in shader source`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&YVt(n.fragmentShader,e),n.vertexShader&&YVt(n.vertexShader,e))}})}),XVt=new Set([2,3,4]),ZVt=(e,t)=>{g5(e.source.text,`pow`)||h5(e.program,`pow`)||Hn(e.program,{function_call:{enter:({node:n})=>{if(m5(n)!==`pow`)return;let r=P5(n);if(r.length!==2)return;let i=f5(r[1]);i===null||!XVt.has(i)||t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:`This pow call has the small integer exponent ${i}. Explicit multiplication avoids a general exponentiation operation and makes the intended cost clear`})}}})},U5=x({id:`three-shader-prefer-small-integer-pow`,title:`Shader uses pow for a small integer exponent`,category:`Performance`,severity:`warn`,recommendation:`Use explicit multiplication for powers of two, three, or four`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&ZVt(n.fragmentShader,e),n.vertexShader&&ZVt(n.vertexShader,e))}})}),QVt=new Set([`distance`,`length`]),$Vt=new Set([`<`,`<=`,`>`,`>=`]),W5=e=>e.type===`group`?W5(e.expression):e.type===`function_call`&&QVt.has(m5(e)??``)?e:null,eHt=(e,t)=>{let n=W5(e),r=f5(t);if(n&&r!==null&&r>=0)return{functionCall:n,threshold:r};let i=W5(t),a=f5(e);return i&&a!==null&&a>=0?{functionCall:i,threshold:a}:null},tHt=(e,t)=>{Hn(e.program,{binary:{enter:({node:n})=>{if(!$Vt.has(n.operator.literal))return;let r=eHt(n.left,n.right);if(!r)return;let i=m5(r.functionCall);!i||g5(e.source.text,i)||h5(e.program,i)||t.report({node:e.source.getOriginNodeAtOffset(n.location?.start.offset??0),message:`Compare squared ${i===`length`?`length using dot(v, v)`:`distance using dot(a - b, a - b)`} against ${r.threshold*r.threshold} to avoid computing a square root`})}}})},G5=x({id:`three-shader-prefer-squared-distance-comparison`,title:`Shader compares a computed distance`,category:`Performance`,severity:`warn`,recommendation:`Compare squared vector distance against a squared nonnegative threshold`,create:e=>({NewExpression(t){let n=u5(t,e);n&&(n.fragmentShader&&tHt(n.fragmentShader,e),n.vertexShader&&tHt(n.vertexShader,e))}})}),nHt=(e,t)=>e===null!=(t===null)||typeof e==`number`&&typeof t==`number`&&e!==t,rHt=[`highp`,`mediump`,`lowp`],iHt=e=>rHt.find(t=>e.qualifiers.has(t))??null,aHt=(e,t)=>{if(e.typeName!==t.typeName)return`type ${e.typeName} in the vertex shader and ${t.typeName} in the fragment shader`;if(nHt(e.arraySize,t.arraySize))return`different array dimensions`;let n=iHt(e),r=iHt(t);return n===null||r===null||n===r?null:`precision ${n} in the vertex shader and ${r} in the fragment shader`},oHt=e=>new Map(e.filter(e=>e.qualifiers.has(`uniform`)&&e.isStaticallyUsed).map(e=>[e.name,e])),K5=x({id:`three-shader-require-matching-uniforms`,title:`Shader stages declare incompatible uniforms`,category:`Correctness`,severity:`error`,recommendation:`Use the same type, array dimensions, and precision for uniforms shared by both shader stages`,create:e=>({NewExpression(t){let n=u5(t,e);if(!n?.vertexShader||!n.fragmentShader)return;let r=oHt(p5(n.vertexShader.program)),i=oHt(p5(n.fragmentShader.program));for(let[t,a]of i){let i=r.get(t);if(!i)continue;let o=aHt(i,a);o&&e.report({node:n.fragmentShader.source.getOriginNodeAtOffset(a.node.location?.start.offset??0),message:`Uniform ${t} has ${o}, so the shader stages cannot link consistently`})}}})}),sHt=e=>e.qualifiers.has(`out`)||e.qualifiers.has(`varying`),cHt=e=>e.qualifiers.has(`in`)||e.qualifiers.has(`varying`),lHt=(e,t)=>e.typeName===t.typeName?nHt(e.arraySize,t.arraySize)?`different array dimensions`:e.interpolation===t.interpolation?null:`interpolation ${e.interpolation} in the vertex shader but ${t.interpolation} in the fragment shader`:`type ${e.typeName} in the vertex shader but ${t.typeName} in the fragment shader`,q5=x({id:`three-shader-require-matching-varyings`,title:`Shader stage interface does not match`,category:`Correctness`,severity:`error`,recommendation:`Declare every statically used fragment input as a compatible vertex output with the same name`,create:e=>({NewExpression(t){let n=u5(t,e);if(!n?.vertexShader||!n.fragmentShader)return;let r=new Map(p5(n.vertexShader.program).filter(sHt).map(e=>[e.name,e])),i=p5(n.fragmentShader.program).filter(e=>cHt(e)&&e.isStaticallyUsed&&!e.name.startsWith(`gl_`)&&!e.hasLayoutQualifier);for(let t of i){let i=r.get(t.name),a=i?lHt(i,t):`no matching vertex output`;a&&e.report({node:n.fragmentShader.source.getOriginNodeAtOffset(t.node.location?.start.offset??0),message:`Fragment input ${t.name} has ${a}, so the shader program cannot link with a defined value`})}}})}),uHt=e=>{let t=0;for(let n of e){let e=ovt.get(n);if(!e)return 0;t|=e}return t},J5=e=>{if(e.type===`assignment`&&e.operator.literal===`=`){if(e.left.type===`identifier`&&e.left.identifier===`gl_Position`)return 15;if(e.left.type===`postfix`&&e.left.expression.type===`identifier`&&e.left.expression.identifier===`gl_Position`&&e.left.postfix.type===`field_selection`){let t=Reflect.get(e.left.postfix.selection,`identifier`);return typeof t==`string`?uHt(t):0}}return e.type===`binary`&&e.operator.literal===`,`?J5(e.left)|J5(e.right):e.type===`group`?J5(e.expression):e.type===`ternary`?J5(e.left)&J5(e.right):0},Y5=e=>{let t=!1;return Hn(e,{assignment:{enter:({node:e})=>{J5(e)!==0&&(t=!0)}}}),t},dHt=e=>e.type===`bool_constant`?e.token===`true`:null,fHt=(e,t)=>{let n=t,r=!1;for(let t of e.statements){if(n.size===0)break;let e=X5(t,n);if(!e.isSupported)return e;n=e.activeStates,r||=e.hasUnwrittenReturn}return{activeStates:n,hasUnwrittenReturn:r,isSupported:!0}},X5=(e,t)=>{if(e.type===`compound_statement`)return fHt(e,t);if(e.type===`expression_statement`){let n=J5(e.expression);return n===0&&Y5(e.expression)?{activeStates:t,hasUnwrittenReturn:!1,isSupported:!1}:{activeStates:n===0?t:new Set([...t].map(e=>e|n)),hasUnwrittenReturn:!1,isSupported:!0}}if(e.type===`return_statement`)return{activeStates:new Set,hasUnwrittenReturn:[...t].some(e=>e!==15),isSupported:!0};if(e.type===`if_statement`){if(Y5(e.condition))return{activeStates:t,hasUnwrittenReturn:!1,isSupported:!1};let n=dHt(e.condition),r=X5(e.body,t);if(!r.isSupported)return r;let i=Reflect.get(e,`else`),a=Array.isArray(i)?i[i.length-1]:void 0,o=a?X5(a,t):{activeStates:t,hasUnwrittenReturn:!1,isSupported:!0};return o.isSupported?n===null?{activeStates:new Set([...r.activeStates,...o.activeStates]),hasUnwrittenReturn:r.hasUnwrittenReturn||o.hasUnwrittenReturn,isSupported:!0}:n?r:o:o}if(e.type===`for_statement`||e.type===`while_statement`){let n=e.type===`for_statement`?[Reflect.get(e,`init`),Reflect.get(e,`condition`),Reflect.get(e,`operation`)]:[e.condition];if(n.some(e=>!e)||n.some(Y5))return{activeStates:t,hasUnwrittenReturn:!1,isSupported:!1};let r=X5(e.body,t);return{activeStates:t,hasUnwrittenReturn:r.hasUnwrittenReturn,isSupported:r.isSupported}}return e.type===`declaration_statement`&&Y5(e.declaration)||e.type===`do_statement`||e.type===`switch_statement`||e.type===`break_statement`||e.type===`continue_statement`?{activeStates:t,hasUnwrittenReturn:!1,isSupported:!1}:{activeStates:t,hasUnwrittenReturn:!1,isSupported:!0}},pHt=(e,t)=>{let n=!1;return Hn(e.body,{function_call:{enter:({node:e})=>{let r=m5(e);r&&h5(t,r)&&(n=!0)}}}),n},mHt=(e,t)=>{let n=e.program.find(e=>e.type===`function`&&e.prototype.header.name.identifier===`main`)??null;if(!n||/^[ \t]*#[ \t]*define\b/m.test(c5(t))||pHt(n,e))return{mainFunction:n,writesPositionOnAllPaths:null};let r=fHt(n.body,new Set([0]));return r.isSupported?{mainFunction:n,writesPositionOnAllPaths:!r.hasUnwrittenReturn&&[...r.activeStates].every(e=>e===15)}:{mainFunction:n,writesPositionOnAllPaths:null}},Z5=x({id:`three-shader-require-position-on-all-paths`,title:`Vertex shader leaves gl_Position undefined`,category:`Correctness`,severity:`error`,recommendation:`Assign gl_Position before every return and on every path through main`,create:e=>({NewExpression(t){let n=u5(t,e);if(!n?.vertexShader)return;let r=mHt(n.vertexShader.program,n.vertexShader.source.text);!r.mainFunction||r.writesPositionOnAllPaths!==!1||e.report({node:n.vertexShader.source.getOriginNodeAtOffset(r.mainFunction.location?.start.offset??0),message:`At least one path through vertex main returns or falls through without assigning gl_Position, leaving the clip-space position undefined`})}})}),hHt=e=>{let t=new Set;for(let n=e.properties.length-1;n>=0;--n){let r=e.properties[n];if(!r||T(r,`SpreadElement`))return null;if(!T(r,`Property`))continue;let i=S(r,{allowComputedString:!0});if(!i)return null;t.add(i)}return t},gHt=new Map([[`ambientLightColor`,`lights`],[`bindMatrix`,`skinning`],[`bindMatrixInverse`,`skinning`],[`boneTexture`,`skinning`],[`boneTextureSize`,`skinning`],[`clippingPlanes`,`clipping`],[`directionalLights`,`lights`],[`directionalLightShadows`,`lights`],[`directionalShadowMap`,`lights`],[`directionalShadowMatrix`,`lights`],[`fogColor`,`fog`],[`fogDensity`,`fog`],[`fogFar`,`fog`],[`fogNear`,`fog`],[`hemisphereLights`,`lights`],[`lightProbe`,`lights`],[`ltc_1`,`lights`],[`ltc_2`,`lights`],[`morphTargetBaseInfluence`,`morphTargets`],[`morphTargetInfluences`,`morphTargets`],[`morphTargetsTexture`,`morphTargets`],[`morphTargetsTextureSize`,`morphTargets`],[`pointLights`,`lights`],[`pointLightShadows`,`lights`],[`pointShadowMap`,`lights`],[`pointShadowMatrix`,`lights`],[`probesMax`,`lights`],[`probesMin`,`lights`],[`probesResolution`,`lights`],[`probesSH`,`lights`],[`receiveShadow`,`lights`],[`rectAreaLights`,`lights`],[`spotLightMap`,`lights`],[`spotLightMatrix`,`lights`],[`spotLights`,`lights`],[`spotLightShadows`,`lights`],[`spotShadowMap`,`lights`],[`transmissionSamplerMap`,`transmission`],[`transmissionSamplerSize`,`transmission`]]),_Ht=(e,t)=>{if(t.constructorName!==`ShaderMaterial`||!cvt.has(e))return!1;let n=gHt.get(e);if(!n)return!0;let r=t.properties.get(n);return r!==void 0&&gn(r)!==!1},vHt=(e,t)=>e.qualifiers.has(`uniform`)&&e.isStaticallyUsed&&!e.name.startsWith(`gl_`)&&!_Ht(e.name,t),Q5=x({id:`three-shader-require-uniform-bindings`,title:`Shader uniform has no material binding`,category:`Correctness`,severity:`error`,recommendation:`Add every custom GLSL uniform to the ShaderMaterial uniforms object with a compatible value`,create:e=>({NewExpression(t){let n=u5(t,e);if(!n)return;let r=new Map;for(let e of[n.vertexShader,n.fragmentShader])if(e)for(let t of p5(e.program))vHt(t,n)&&!r.has(t.name)&&r.set(t.name,{declaration:t,shader:e});if(r.size===0)return;let i=[...r.keys()],a=n.properties.get(`uniforms`),o;if(!a)o=new Set;else{let t=Va(a,i,e.scopes,n.constructorNode);if(!t||!T(t,`ObjectExpression`))return;let r=hHt(t);if(!r)return;o=r}for(let[t,n]of r)o.has(t)||e.report({node:n.shader.source.getOriginNodeAtOffset(n.declaration.node.location?.start.offset??0),message:`GLSL uniform ${t} has no matching entry in this material's uniforms object, so it keeps its default value`})}})}),yHt=new Set([`three/tsl`,`three/webgpu`]),bHt=(e,t,n=new Set)=>{let r=!1;return A(e,e=>{if(r)return!1;if(T(e,`MemberExpression`)&&C(e)===`value`&&T4(e.object,t))return r=!0,!1;if(!T(e,`Identifier`))return;let i=t.symbolFor(e);if(!(i?.kind!==`const`||!i.initializer||n.has(i.id)||i.references.some(e=>e.flag!==`read`))&&(n.add(i.id),bHt(i.initializer,t,n)))return r=!0,!1}),r},$5=x({id:`three-tsl-no-js-uniform-branch`,title:`JavaScript branch reads a TSL uniform value`,category:`Correctness`,severity:`warn`,recommendation:`Express uniform-dependent shader control flow with TSL If, select, or Loop nodes so it runs on the GPU`,create:e=>({CallExpression(t){if(!Q1(t,`Fn`,yHt,e.scopes))return;let n=t.arguments[0];if(!n||T(n,`SpreadElement`))return;let r=M(n,e.scopes);if(!y(r))return;let i=new Set;l0(r,e.scopes,t=>{let n=dSt(t);if(!(!n||!bHt(n,e.scopes))){for(let e of i)if(z(n,e))return;i.add(n),e.report({node:n,message:`This JavaScript branch reads a TSL uniform while the shader graph is built, so later uniform changes cannot change the branch. Use TSL control flow`})}})}})}),xHt=(e,t)=>{let n=!1;return A(e,e=>{if(!n&&T(e,`NewExpression`)&&H8(e,t)===`WebGPURenderer`)return n=!0,!1}),n},e7=x({id:`three-webgpu-no-legacy-effect-composer`,title:`Legacy EffectComposer used with WebGPURenderer`,category:`Correctness`,severity:`error`,recommendation:`Use WebGPURenderer's node-based post-processing pipeline instead of the legacy WebGL EffectComposer`,create:e=>{let t=!1;return{Program(n){t=xHt(n,e.scopes)},NewExpression(n){!t||H8(n,e.scopes)!==`EffectComposer`||e.report({node:n,message:`Legacy EffectComposer does not support Three.js WebGPURenderer. Build post-processing with the renderer's node-based pipeline`})}}}}),SHt=new Set([`RawShaderMaterial`,`ShaderMaterial`]),t7=x({id:`three-webgpu-no-legacy-material-api`,title:`Legacy material API used with WebGPURenderer`,category:`Correctness`,severity:`error`,recommendation:`Use Three.js node materials and TSL for custom shaders rendered by WebGPURenderer`,create:e=>{let t=!1;return{Program(n){t=xHt(n,e.scopes)},NewExpression(n){let r=H8(n,e.scopes);!t||!r||SHt.has(r)&&e.report({node:n,message:`ShaderMaterial and RawShaderMaterial are not supported by Three.js WebGPURenderer. Build this shader with a node material and TSL`})},AssignmentExpression(n){!t||!T(n.left,`MemberExpression`)||C(n.left)!==`onBeforeCompile`||H8(n.left.object,e.scopes)?.endsWith(`Material`)&&e.report({node:n,message:`onBeforeCompile patches WebGL shader source and is not supported by Three.js WebGPURenderer. Use a node material and TSL`})}}}}),CHt=x({id:`use-lazy-motion`,title:`Full Framer Motion import`,tags:[`test-noise`],severity:`warn`,recommendation:'Use `import { LazyMotion, m } from "framer-motion"` with `domAnimation` features. Saves about 30kb.',create:e=>({ImportDeclaration(t){let n=t.source?.value;n!==`framer-motion`&&n!==`motion/react`||cn(t)||t.specifiers?.some(e=>!T(e,`ImportSpecifier`)||e.importKind===`type`?!1:kt(e)===`motion`)&&e.report({node:t,message:`Importing "motion" ships about 30 kb of extra code and slows page load. Use "m" with LazyMotion instead.`})}})}),wHt=new Set([`valtio`,`valtio/react`]),THt=[...wHt],EHt=new Set([`useCallback`,`useEffect`,`useInsertionEffect`,`useLayoutEffect`,`useMemo`]),DHt=e=>{if(e.kind!==`import`)return!1;let t=e.declarationNode.parent;return!!(t&&T(t,`ImportDeclaration`)&&typeof t.source.value==`string`&&wHt.has(t.source.value))},OHt=(e,t)=>{if(!T(e,`CallExpression`))return!1;let n=D(e.callee);if(T(n,`Identifier`)){let e=w(n,t);return!!(e&&DHt(e)&&kt(e.declarationNode)===`useSnapshot`)}if(!T(n,`MemberExpression`)||C(n)!==`useSnapshot`)return!1;let r=D(n.object);if(!T(r,`Identifier`))return!1;let i=w(r,t);return!!(i&&DHt(i)&&T(i.declarationNode,`ImportNamespaceSpecifier`))},n7=e=>T(e,`Identifier`)?[e]:T(e,`AssignmentPattern`)?n7(e.left):T(e,`RestElement`)?n7(e.argument):T(e,`ArrayPattern`)?e.elements.flatMap(e=>e?n7(e):[]):T(e,`ObjectPattern`)?e.properties.flatMap(e=>T(e,`Property`)?n7(e.value):T(e,`RestElement`)?n7(e.argument):[]):[],r7=e=>{let t=D(e);return T(t,`AssignmentPattern`)?r7(t.left):T(t,`RestElement`)?r7(t.argument):T(t,`ArrayPattern`)?t.elements.flatMap(e=>e?r7(e):[]):T(t,`ObjectPattern`)?t.properties.flatMap(e=>T(e,`Property`)?r7(e.value):r7(e.argument)):[t]},i7=(e,t)=>{if(e===t)return[];if(T(e,`AssignmentPattern`))return i7(e.left,t);if(T(e,`RestElement`))return null;if(T(e,`ArrayPattern`)){for(let[n,r]of e.elements.entries()){if(!r)continue;let e=i7(r,t);if(e)return[String(n),...e]}return null}if(!T(e,`ObjectPattern`))return null;for(let n of e.properties){if(!T(n,`Property`))continue;let e=i7(n.value,t);if(!e)continue;let r=S(n);return r===null?null:[r,...e]}return null},a7=(e,t,n=new Set,r=null,i=null)=>{let a=D(e);if(T(a,`MemberExpression`)){let e=a7(a.object,t,n,r,i);return e?{...e,properties:[...e.properties,C(a)]}:null}if(!T(a,`Identifier`))return null;let o=t.symbolFor(a);if(!o)return t.isGlobalReference(a)?{rootKey:`global:${a.name}`,properties:[]}:null;if(n.has(o.id))return null;if(o.kind===`const`&&o.initializer&&T(o.declarationNode,`VariableDeclarator`)){let e=o.declarationNode.id===o.bindingIdentifier,a=e?o.initializer:o.declarationNode.init;if(!a)return{rootKey:`symbol:${o.id}`,properties:[]};let s=D(a),c=e&&(T(s,`Identifier`)||T(s,`MemberExpression`)),l=e?null:i7(o.declarationNode.id,o.bindingIdentifier);if((c||l)&&(r===null||r.has(o.id))){let e=new Set(n);e.add(o.id);let a=a7(s,t,e,r,i);if(a){let e={...a,properties:[...a.properties,...l??[]]},t=o.declarationNode.range?.[1];return typeof t==`number`&&i?.set(o.id,{declarationEnd:t,path:e}),e}}}return{rootKey:`symbol:${o.id}`,properties:[]}},kHt=(e,t)=>{let n=e;for(;n;){if(n===t)return!0;n=n.parent}return!1},o7=(e,t)=>e.rootKey!==t.rootKey||e.properties.length>t.properties.length?!1:e.properties.every((e,n)=>e!==null&&e===t.properties[n]),AHt=e=>{let t=v(e);for(;;){let e=t.parent;if(!T(e,`MemberExpression`)||D(e.object)!==D(t))return t;t=v(e)}},jHt=e=>{let t=e,n=t.parent;for(;n;){if(T(n,`MemberExpression`)&&n.computed&&n.property===t||T(n,`Property`)&&n.computed&&n.key===t||T(n,`AssignmentPattern`)&&n.right===t)return!0;if(T(n,`AssignmentExpression`)||T(n,`UpdateExpression`)||T(n,`UnaryExpression`)&&n.operator===`delete`||T(n,`ForInStatement`)||T(n,`ForOfStatement`))return!1;t=n,n=t.parent}return!1},MHt=(e,t)=>{let n=v(e),r=n.parent;return!!(r&&T(r,`CallExpression`)&&OHt(r,t)&&r.arguments[0]===n)},NHt=(e,t,n,r)=>{if(t.properties.length!==n.path.properties.length||!o7(n.path,t))return!1;let i=v(e).parent;if(!T(i,`ArrayExpression`))return!1;let a=i.parent;return!!(T(a,`CallExpression`)&&a.arguments[1]===i&&k(a,EHt,r,{allowGlobalReactNamespace:!0}))},PHt=(e,t)=>{if(!OHt(e,t.scopes))return null;let n=e.arguments[0];if(!n||T(n,`SpreadElement`))return null;let r=a7(n,t.scopes);if(!r||r.properties.some(e=>e===null))return null;let i=v(e),a=i.parent;if(!T(a,`VariableDeclarator`)||a.init!==i||!T(a.parent,`VariableDeclaration`))return null;let o=X(e,t.scopes);if(!o)return null;let s=n7(a.id).flatMap(e=>{let n=t.scopes.symbolFor(e);return n?[n.scope]:[]}),c=a.range?.[1];return s.length===0||typeof c!=`number`?null:{declarationEnd:c,ownerFunction:o,path:r,snapshotBindingScopes:s}},FHt=(e,t,n,r,i)=>n.some(n=>{let a=v(n).parent,o=a?.range?.[0];if(!a||typeof o!=`number`||o<=e.declarationEnd||o>=t||X(a,i.scopes)!==e.ownerFunction)return!1;let s=a7(n,i.scopes,new Set,null);return!s||!o7(s,e.path)?!1:![...r.values()].some(e=>e.declarationEnd<o&&o7(s,e.path))}),IHt=e=>{let t=[],n=[],r=[];return{CallExpression(n){let r=PHt(n,e);r&&t.push(r)},Identifier(t){e.scopes.referenceFor(t)&&n.push(t)},AssignmentExpression(e){r.push(...r7(e.left))},UpdateExpression(e){r.push(e.argument)},"Program:exit"(){let i=new Set;for(let a of n){let n=AHt(a);if(i.has(n)||Ru(n)&&!jHt(n)||MHt(n,e.scopes))continue;let o=new Map,s=a7(n,e.scopes,new Set,null,o),c=n.range?.[0],l=X(n,e.scopes);if(!s||typeof c!=`number`||!l)continue;let u=e.scopes.scopeFor(n),d=t.find(t=>t.ownerFunction===l&&t.declarationEnd<c&&t.snapshotBindingScopes.some(e=>kHt(u,e))&&o7(t.path,s)&&(o.size===0||[...o.values()].some(e=>o7(e.path,t.path)||o7(t.path,e.path)&&s.properties.length>e.path.properties.length))&&!FHt(t,c,r,o,e));!d||NHt(n,s,d,e.scopes)||(i.add(n),e.report({node:n,message:`Read this Valtio value from the useSnapshot result during render. Keep proxy reads for callbacks so render uses the tracked, consistent snapshot.`}))}}}},LHt=x({id:`valtio-no-proxy-read-in-render`,title:`Valtio proxy read during render`,severity:`warn`,recommendation:`Read reactive render values from useSnapshot. Reserve the mutable proxy for event handlers, effects, and other callbacks that need the latest value.`,requires:[`valtio:1`],create:e=>sb({createVisitors:()=>IHt(e),shouldAnalyzeProgram:e=>ye(e,THt)})}),RHt=new Set([`valtio`,`valtio/react`]),zHt=new Set([`useEffect`,`useInsertionEffect`,`useLayoutEffect`]),BHt=new Set([`catch`,`finally`,`then`]),VHt=new Set([`IntersectionObserver`,`MutationObserver`,`PerformanceObserver`,`ResizeObserver`]),HHt=e=>{let t=Ue(e)?.source.value;return typeof t==`string`&&RHt.has(t)},UHt=(e,t,n)=>{let r=D(e);if(!T(r,`Identifier`))return!1;let i=t.symbolFor(r);if(!i||n.has(i.id))return!1;if(i.kind===`import`&&T(i.declarationNode,`ImportNamespaceSpecifier`)&&HHt(i))return!0;let a=Os(i);return a?(n.add(i.id),UHt(a,t,n)):!1},WHt=(e,t,n=new Set)=>{let r=D(e);if(T(r,`Identifier`)){let e=t.symbolFor(r);if(!e||n.has(e.id))return!1;if(e.kind===`import`&&HHt(e)&&kt(e.declarationNode)===`useSnapshot`)return!0;let i=Os(e);return i?(n.add(e.id),WHt(i,t,n)):!1}return!T(r,`MemberExpression`)||C(r)!==`useSnapshot`?!1:UHt(r.object,t,n)},GHt=(e,t,n=new Set)=>{let r=D(e);if(T(r,`CallExpression`))return WHt(r.callee,t.scopes)?r:null;if(!T(r,`Identifier`))return null;let i=t.scopes.symbolFor(r);if(!i||n.has(i.id))return null;let a=Os(i);return a?(n.add(i.id),GHt(a,t,n)):null},KHt=e=>{let t=e.parent;if(!T(t,`JSXExpressionContainer`))return!1;let n=t.parent;return!!(T(n,`JSXAttribute`)&&T(n.name,`JSXIdentifier`)&&Pn.test(n.name.name))},qHt=(e,t)=>{let n=D(e.callee);if(T(n,`Identifier`)&&be.has(n.name))return t.scopes.isGlobalReference(n);if(!T(n,`MemberExpression`))return!1;let r=C(n);if(!r||!be.has(r))return!1;let i=D(n.object);return!!(T(i,`Identifier`)&&(i.name===`globalThis`||i.name===`window`)&&t.scopes.isGlobalReference(i))},JHt=(e,t)=>{let n=e.parent;if(T(n,`NewExpression`)){let r=D(n.callee);return!!(n.arguments?.[0]===e&&T(r,`Identifier`)&&VHt.has(r.name)&&t.scopes.isGlobalReference(r))}if(!T(n,`CallExpression`)||!(n.arguments??[]).some(t=>t===e))return!1;if(n.arguments?.[0]===e&&k(n,zHt,t.scopes,{allowGlobalReactNamespace:!0,resolveNamedAliases:!0})||n.arguments?.[0]===e&&qHt(n,t))return!0;let r=D(n.callee);if(!T(r,`MemberExpression`))return!1;let i=C(r);return!!(i&&(Qe.has(i)||BHt.has(i)))},YHt=(e,t)=>{let n=v(e),r=n.parent;return!!(T(r,`CallExpression`)&&r.arguments?.[0]===n&&k(r,zHt,t.scopes,{allowGlobalReactNamespace:!0,resolveNamedAliases:!0}))},XHt=(e,t,n)=>n.has(e.id)?!1:(n.add(e.id),e.references.some(e=>{let r=v(e.identifier);if(YHt(r,t))return!0;let i=eUt(r,t);return!!(i&&XHt(i,t,n))})),ZHt=(e,t)=>{if(YHt(e,t))return!0;let n=Xs(e),r=n?t.scopes.symbolFor(n):null;return!!(r&&XHt(r,t,new Set))},QHt=(e,t)=>{let n=v(e),r=n.parent;if(T(r,`ArrowFunctionExpression`)&&r.body===n)return ZHt(r,t);if(!T(r,`ReturnStatement`)||r.argument!==n)return!1;let i=b(r);return!!(i&&ZHt(i,t))},$Ht=(e,t)=>KHt(e)||JHt(e,t)||QHt(e,t),eUt=(e,t)=>{let n=v(e),r=n.parent;if(!T(r,`VariableDeclarator`)||r.init!==n||!T(r.id,`Identifier`))return null;let i=t.scopes.symbolFor(r.id);return i?.kind===`const`?i:null},tUt=e=>{let t=e.parent;return T(t,`CallExpression`)&&t.callee===e?t:null},nUt=(e,t)=>{if(!Tu(e,t.scopes))return null;let n=e.parent;return T(n,`CallExpression`)||T(n,`NewExpression`)?n:null},s7=(e,t,n,r)=>{let i=b(e);return!i||i===t?!1:iUt(i,t,n,r)},rUt=(e,t,n,r)=>r.has(e.id)?!1:(r.add(e.id),e.references.some(e=>{let i=v(e.identifier);if($Ht(i,n))return!0;let a=eUt(i,n);if(a&&rUt(a,t,n,r))return!0;let o=tUt(i);if(o)return s7(o,t,n,r);let s=nUt(i,n);return!!(s&&s7(s,t,n,r))})),iUt=(e,t,n,r)=>{let i=v(e);if($Ht(i,n))return!0;let a=nUt(i,n);if(a)return s7(a,t,n,r);let o=Xs(e);if(!o)return!1;let s=n.scopes.symbolFor(o);return!!(s&&rUt(s,t,n,r))},aUt=e=>{let t=v(e),n=t.parent;return!!(T(n,`VariableDeclarator`)&&n.init===t&&T(n.id,`Identifier`))},oUt=x({id:`valtio-no-snapshot-in-callback`,title:`Valtio snapshot read in a callback`,severity:`warn`,requires:[`valtio`,`valtio:1`],recommendation:"Read from the original Valtio proxy inside callbacks. `useSnapshot()` results are for render reads; callback reads can become tracked render dependencies and cause extra re-renders.",create:e=>({Identifier(t){let n=e.scopes.referenceFor(t);if(!n||n.flag===`write`)return;let r=GHt(t,e);if(!r||aUt(t))return;let i=b(r);if(!i)return;let a=b(t);!a||a===i||iUt(a,i,e,new Set)&&e.report({node:t,message:`This callback reads a Valtio snapshot. Read the original proxy instead so callback-only fields do not become tracked render dependencies.`})}})}),sUt=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`keygen`,`link`,`menuitem`,`meta`,`param`,`source`,`track`,`wbr`]),cUt=e=>`React errors when \`<${e}>\` has children because it's a void element.`,lUt=e=>{for(let t of e)if(T(t,`JSXAttribute`)&&T(t.name,`JSXIdentifier`)&&(t.name.name===`children`||t.name.name===`dangerouslySetInnerHTML`))return!0;return!1},uUt=x({id:`void-dom-elements-no-children`,title:`Children on a void element`,severity:`warn`,recommendation:`Remove the children or use a non-void tag so React does not drop content the element cannot render.`,create:e=>({JSXElement(t){let n=t.openingElement,r=j(n);if(!sUt.has(r))return;let i=t.children.some(QD),a=lUt(n.attributes);(i||a)&&e.report({node:n.name,message:cUt(r)})},CallExpression(t){if(!fa(t))return;let n=t.arguments[0];if(!n||!T(n,`Literal`)||typeof n.value!=`string`)return;let r=n.value;if(!sUt.has(r))return;let i=t.arguments[1],a=t.arguments.slice(2).filter(e=>!ea(e)),o=!1;if(i&&T(i,`ObjectExpression`))for(let e of i.properties){if(!T(e,`Property`))continue;let t=e.key;if(T(t,`Identifier`)&&(t.name===`children`||t.name===`dangerouslySetInnerHTML`)||T(t,`Literal`)&&(t.value===`children`||t.value===`dangerouslySetInnerHTML`)){o=!0;break}}(a.length>0||o)&&e.report({node:n,message:cUt(r)})}})}),dUt=x({id:`waapi-animation-in-render`,title:`Web Animation starts during render`,severity:`error`,category:`Correctness`,recommendation:`Start element.animate() from an effect or interaction handler so React renders stay pure.`,create:e=>({CallExpression(t){T(t.callee,`MemberExpression`)&&C(t.callee)===`animate`&&(!zs(t.callee.object,`dom-event-target`,e.scopes)||!X(t,e.scopes)||e.report({node:t,message:`This Web Animation starts during render, so React retries and re-renders can replay it. Move element.animate() to an effect or interaction handler.`}))}})}),fUt=e=>T(e,`Literal`)&&typeof e.value==`number`?e.value:T(e,`UnaryExpression`)&&e.operator===`-`&&T(e.argument,`Literal`)&&typeof e.argument.value==`number`?-e.argument.value:null,pUt=e=>{let t=[];for(let n of e.elements){if(!n||!T(n,`ObjectExpression`)||n.properties.some(e=>!T(e,`Property`)))return null;let e=G(n.properties,`offset`);if(!e||T(e.value,`Literal`)&&e.value.value===null)continue;let r=fUt(e.value);if(r===null)return null;t.push({node:e.value,value:r})}return t},mUt=e=>{if(e.properties.some(e=>!T(e,`Property`)))return null;let t=G(e.properties,`offset`);if(!t||!T(t.value,`ArrayExpression`))return null;let n=[];for(let e of t.value.elements){if(!e||T(e,`Literal`)&&e.value===null)continue;let t=fUt(e);if(t===null)return null;n.push({node:e,value:t})}return n},hUt=e=>T(e,`ArrayExpression`)?pUt(e):T(e,`ObjectExpression`)?mUt(e):null,gUt=(e,t)=>{let n=null;for(let r of e){if(r.value<0||r.value>1){t.report({node:r.node,message:`This Web Animation offset is ${r.value}, but offsets must be between 0 and 1.`}),n=null;continue}n!==null&&r.value<n&&t.report({node:r.node,message:`This Web Animation offset moves backward from ${n} to ${r.value}. Keep offsets in nondecreasing order.`}),n=r.value}},_Ut=x({id:`web-animation-offsets-valid`,title:`Invalid Web Animation keyframe offsets`,severity:`error`,category:`Correctness`,recommendation:`Keep explicit Web Animation keyframe offsets between 0 and 1 and in nondecreasing order.`,create:e=>({CallExpression(t){if(!T(t.callee,`MemberExpression`)||C(t.callee)!==`animate`||!zs(t.callee.object,`dom-event-target`,e.scopes))return;let n=t.arguments[0];if(!n)return;let r=hUt(n);r&&gUt(r,e)}})}),vUt=(e,t)=>{if(!T(e.callee,`MemberExpression`))return null;let n=C(e.callee);if(n===`readRenderTargetPixels`&&U8(e.callee.object,t.scopes))return`three`;if(!I2(e.callee.object,t.scopes))return null;if(n===`finish`)return`finish`;let r=null;if(n===`readPixels`?r=6:n===`getBufferSubData`&&(r=2),r===null)return null;let i=e.arguments[r];return i&&!T(i,`SpreadElement`)&&LK(i,t.scopes)?`raw`:null},yUt=x({id:`webgl-no-sync-readback-in-animation-loop`,title:`Synchronous GPU readback inside animation loop`,severity:`warn`,recommendation:`Move GPU readback to a discrete or asynchronous path and reuse the latest completed result during frames`,create:e=>{let t=new Set;return{CallExpression(n){let r=J8(n,e.scopes)??b2(n,e.scopes);!r||t.has(r)||(t.add(r),l0(r,e.scopes,(t,n)=>{if(!T(t,`CallExpression`)||n)return;let r=vUt(t,e);r&&e.report({node:t,message:r===`finish`?`finish blocks the calling thread until queued GPU work completes. Synchronize outside the animation loop`:`Synchronous GPU readback can stall the frame until prior GPU work completes. Use an asynchronous or event-driven readback path`})}))}}}}),bUt=new Set([`_self`,`_top`,`_parent`]),xUt=[`frames`,`globalThis`,`parent`,`self`,`top`,`window`],SUt=new Set([`noopener`,`noreferrer`]),CUt=new Set([`1`,`true`,`yes`]);let c7,l7,u7,d7,f7,p7,m7,h7,g7,_7,v7=[],y7=new WeakMap,b7=new WeakMap,x7=new WeakMap,S7=new WeakMap,C7=new WeakMap,w7=new WeakMap;const T7=(e,t,n)=>{if(rn(e,t,n))return!0;let r=Q7?d(t):null;return!!(r&&rn(e,r,n))},E7=e=>{let t=e,n=t.parent,r=!1;for(;n;){if(T(n,`ArrayPattern`)||T(n,`ObjectPattern`))r=!0;else if(T(n,`AssignmentPattern`)){if(n.left!==t)return!1}else if(T(n,`Property`)){if(n.value!==t)return!1}else if(T(n,`RestElement`)){if(n.argument!==t)return!1}else if(T(n,`AssignmentExpression`))return r&&n.left===t;else if(T(n,`ForInStatement`)||T(n,`ForOfStatement`))return r&&n.left===t;else return!1;t=n,n=n.parent}return!1},wUt=(e,t)=>{let n=c7,r=n?.symbolFor(e),i=r?b7.get(r):void 0;return r&&i===void 0&&(i=r.references.some(e=>e.flag!==`read`||E7(e.identifier)),b7.set(r,i)),!!(n&&r&&(!i||t.range!=null&&!r.references.some(e=>(e.flag!==`read`||E7(e.identifier))&&e.identifier.range==null)&&!r.references.some(e=>(e.flag!==`read`||E7(e.identifier))&&(T7(e.identifier,t,n)||!Z7&&e.identifier.range[0]<Ze(t)))))},D7=e=>!!(u7&&wUt(e,Z7?e:u7)),TUt=(e,t)=>{let n=(e,r)=>{if(r>jUt)return!1;let i=D(e);if(T(i,`Identifier`)){if(Wm(i,`open`,t))return!0;let e=N7(i);return e&&n(e,r+1)?!0:xUt.some(e=>n9(i,e,t)===`open`)}return T(i,`MemberExpression`)&&C(i)===`open`&&xUt.some(e=>Wm(i.object,e,t))};return n(e,0)},O7=e=>e!=null&&T(e,`Literal`)&&typeof e.value==`string`,k7=[`mailto:`,`tel:`,`sms:`,`file:`],EUt=/^https?:\/\/[^/?#]+[/?#]/i,DUt=[`./`,`../`,`?`,`#`],OUt=/^[\w.~%-]+[/?#]/,kUt=e=>e.startsWith(`/`)?e[1]!==`/`&&e[1]!==`\\`:DUt.some(t=>e.startsWith(t))?!0:OUt.test(e),AUt=e=>e!==`/`&&kUt(e),A7=e=>{let t=e.trimStart();if(t.length===0)return!1;let n=t.toLowerCase();return k7.some(e=>n.startsWith(e))?!0:kUt(t)},j7=e=>{if(O7(e))return Z7?A7(e.value):!0;if(e==null||!T(e,`TemplateLiteral`))return!1;if((e.expressions?.length??0)===0)return Z7?A7(e.quasis?.[0]?.value?.raw??``):!0;let t=(e.quasis?.[0]?.value?.raw??``).trimStart();if(t.length===0)return!1;let n=t.toLowerCase();return k7.some(e=>n.startsWith(e))||!Z7&&EUt.test(t)?!0:AUt(t)},jUt=8,MUt=(e,t=new Set)=>{if(c7&&Wm(e,`location`,c7))return!0;if(T(e,`CallExpression`)){let n=e.callee;if(!T(n,`Identifier`))return!1;let r=K7(n);if(!r||t.has(r))return!1;let i=new Set(t);i.add(r);let a=G7(r);return!!(a&&a.length>0&&a.every(e=>MUt(D(e),i)))}return!1},NUt=e=>!!(c7&&Wm(e,`window`,c7)),PUt=e=>!T(e,`MemberExpression`)||e.computed||!T(e.property,`Identifier`)?!1:e.property.name===`origin`&&NUt(e.object)?!0:e.property.name!==`origin`&&e.property.name!==`href`?!1:MUt(e.object),M7=e=>e==null?!0:T(e,`Literal`)?e.value===null:T(e,`UnaryExpression`)?e.operator===`void`:T(e,`Identifier`)&&e.name===`undefined`&&(!c7||c7.isGlobalReference(e)),N7=e=>{let t=E(e,e.name);if(t?.initializer==null)return null;let n=t.bindingIdentifier.parent;if(!n||!T(n,`VariableDeclarator`)||n.init!==t.initializer)return null;let r=n.parent;return!r||!T(r,`VariableDeclaration`)||r.kind!==`const`?null:t.initializer},FUt=(e,t,n)=>{if(!T(e,`ObjectExpression`))return!1;let r;for(let i of e.properties??[]){if(T(i,`SpreadElement`)){r=null;continue}if(!T(i,`Property`)){r=null;continue}let e=S(i,{allowComputedString:!0});e===t?r=f9(i.value,n+1):e===null&&i.computed&&(r=null)}return r===!0},P7=(e,t,n)=>{let r=e.elements??[];return r.length>0&&r.every(e=>e!=null&&FUt(D(e),t,n))},IUt=e=>{let t=e.parent;if(!t||!T(t,`CallExpression`)||!T(t.callee,`MemberExpression`)||t.arguments?.[0]!==e)return null;let n=C(t.callee);if(n!==`map`&&n!==`forEach`)return null;let r=D(t.callee.object);if(T(r,`ArrayExpression`))return r;if(T(r,`Identifier`)){let e=N7(r);if(e&&T(e,`ArrayExpression`))return e}return null},F7=e=>{let t=e.parent;if(!t||!T(t,`CallExpression`)||!(t.arguments??[]).includes(e)||!T(t.callee,`MemberExpression`))return!1;let n=C(t.callee);return n===`map`||n===`forEach`},I7=e=>{let t=W7(e),n=c7,r=t?n?.symbolFor(t):null;if(!n||!r)return null;let i=[];for(let e of KD(r,n))for(let t of e.references){let e=v(t.identifier),r=e.parent;if(!(r&&T(r,`VariableDeclarator`)&&r.init===e&&T(r.id,`Identifier`)&&n.symbolFor(r.id)?.kind===`const`)){if(!r||!T(r,`CallExpression`)||r.callee!==e)return[];i.push(r)}}return i.length>0?i:null},LUt=(e,t)=>{if(t>8)return{functions:[e],immediateReferences:null,references:null};let n=v(e),r=n.parent,i,a=!!(r&&T(r,`CallExpression`)&&(r.arguments??[]).includes(n)&&F7(e)&&UWt(r));if(i=r&&T(r,`CallExpression`)&&(r.callee===n||a)?[r]:I7(e),!i||i.length===0)return{functions:[e],immediateReferences:null,references:null};let o=[e],s=[];for(let e of i){let n=b(e);if(!n){s.push(e);continue}let r=LUt(n,t+1);if(o.push(...r.functions),!r.references)return{functions:o,immediateReferences:a?null:i,references:null};s.push(...r.references)}return{functions:o,immediateReferences:a?null:i,references:s}},L7=(e,t,n=!1,r=new Set)=>{let i=b(t),a=b(e);if(i&&a!==i&&W7(i)){if(r.has(i))return!0;let t=I7(i);if(!t||t.length===0)return!0;let a=new Set(r);return a.add(i),t.some(t=>L7(e,t,n,a))}return e.range==null||t.range==null||e.range[0]<Ze(t)?!0:!!(!n&&i&&a===i&&F7(i))},R7=(e,t)=>{let n=b(t),r=n?I7(n):null,i=b(p7??r?.[0]??t);if(!i||!F7(i))return!1;let a=T(i,`FunctionDeclaration`)||T(i,`FunctionExpression`)||T(i,`ArrowFunctionExpression`)?i.params?.[1]:null,o=D(e);return!!(a&&T(a,`Identifier`)&&T(o,`Identifier`)&&c7?.symbolFor(a)===c7?.symbolFor(o))},z7=e=>{let t=v(e),n=t.parent;return!!(n&&(T(n,`AssignmentExpression`)&&n.left===t||T(n,`UpdateExpression`)&&n.argument===t||T(n,`UnaryExpression`)&&n.operator===`delete`&&n.argument===t))},B7=(e,t,n)=>{if(T(e,`Identifier`)){let r=t.symbolFor(e);r?.kind===`const`&&n.add(r);return}if(T(e,`AssignmentPattern`)){B7(e.left,t,n);return}if(T(e,`ArrayPattern`))for(let r of e.elements??[])r&&B7(r,t,n)},RUt=(e,t,n,r,i)=>{let a=v(e),o=a.parent;return o&&T(o,`MemberExpression`)&&o.object===a&&C(o)===t&&z7(o)&&L7(o,n,i)?!0:!!(o&&T(o,`CallExpression`)&&o.arguments?.[0]===a&&TWt(o,t,r)&&L7(o,n,i))},zUt=(e,t,n,r,i)=>KD(e,r).some(e=>e.references.some(e=>RUt(e.identifier,t,n,r,i))),V7=(e,t,n)=>{let r=c7,i=r?.symbolFor(e);if(!r||!i)return!1;let a=new Map,o=new Set(KD(i,r));for(let e of o)for(let i of e.references){let e=v(i.identifier),s=e.parent;if(s&&T(s,`VariableDeclarator`)&&s.init===e&&T(s.id,`ArrayPattern`))for(let e of s.id.elements??[]){if(!e)continue;if(T(e,`RestElement`)){let t=e.argument;if(T(t,`Identifier`)){let e=r.symbolFor(t);if(e?.kind===`const`)for(let t of KD(e,r))o.add(t)}continue}let t=new Set;B7(e,r,t);for(let e of t)a.set(e,!1)}let c=e.parent;if(!c||!T(c,`MemberExpression`)||c.object!==e||!c.computed)continue;let l=v(c),u=R7(c.property,n),d=l.parent;if(d&&T(d,`VariableDeclarator`)&&d.init===l&&T(d.id,`Identifier`)){let e=r.symbolFor(d.id);e?.kind===`const`&&a.set(e,u)}if(z7(c)&&L7(c,n,u)||RUt(c,t,n,r,u))return!0}return[...a].some(([e,i])=>zUt(e,t,n,r,i))},H7=(e,t)=>{let n=c7,r=n?.symbolFor(e);return!n||!r?!1:KD(r,n).some(e=>e.references.some(e=>{let n=v(e.identifier),r=n.parent;if(!r||!T(r,`MemberExpression`)||r.object!==n)return!1;let i=v(r),a=i.parent,o=!!(r.computed&&R7(r.property,t));if(!a||!L7(a,t,o))return!1;let s=C(r);return s&&dr.has(s)&&T(a,`CallExpression`)&&a.callee===i?!0:z7(r)}))},BUt=(e,t,n)=>{let r=c7,i=r?.symbolFor(e);return!r||!i?!0:KD(i,r).some(e=>e.references.some(e=>{let r=v(e.identifier),i=r.parent;return!!(i&&T(i,`MemberExpression`)&&i.object===r&&C(i)===t&&z7(i)&&L7(i,n))}))},VUt=(e,t)=>{if(!T(e.property,`Identifier`))return!1;let n=e.property.name,r=D(e.object);if(!T(r,`Identifier`)||!D7(r))return!1;let i=N7(r),a=c7,o=a?w(r,a):null,s=o?.initializer?D(o.initializer):null;if(a&&s&&T(s,`MemberExpression`)&&s.computed&&T(s.object,`Identifier`)&&R7(s.property,e)){let r=w(s.object,a),i=r?.bindingIdentifier,o=r?.initializer?D(r.initializer):null;if(i&&T(i,`Identifier`)&&o&&T(o,`ArrayExpression`)&&D7(i)&&!V7(i,n,e)&&!H7(i,e))return P7(o,n,t)}if(H7(r,e)||a&&Nn(r,n,e,a))return!1;if(i&&T(i,`ObjectExpression`))return FUt(i,n,t);let c=E(r,r.name),l=c?.bindingIdentifier.parent;if(!l||!y(l)||!(l.params??[]).includes(c.bindingIdentifier))return!1;let u=IUt(l);if(!u)return!1;let d=l.parent,f=d&&T(d,`CallExpression`)?d.callee:null,p=f&&T(f,`MemberExpression`)?D(f.object):null;return p&&T(p,`Identifier`)&&(V7(p,n,e)||H7(p,e))?!1:P7(u,n,t)},HUt=(e,t)=>{if(!D7(e))return null;let n=E(e,e.name);if(!n)return null;let r=n.bindingIdentifier.parent;if(r&&T(r,`AssignmentPattern`)&&(r=r.parent),!r||!T(r,`Property`)||r.computed||!T(r.key,`Identifier`))return null;let i=r.key.name,a=r.parent;if(!a||!T(a,`ObjectPattern`))return null;let o=a.parent;if(!o||!y(o)||!(o.params??[]).includes(a))return null;let s=IUt(o);if(!s)return null;let c=o.parent,l=c&&T(c,`CallExpression`)?c.callee:null,u=l&&T(l,`MemberExpression`)?D(l.object):null;return u&&T(u,`Identifier`)&&(V7(u,i,e)||H7(u,e))?!1:P7(s,i,t)},UUt=(e,t)=>{let n=E(e,e.name);if(!n)return!1;let r=n.bindingIdentifier.parent;if(!r||!T(r,`VariableDeclarator`)||r.init&&!f9(r.init,t+1))return!1;let i=c7,a=i?.symbolFor(n.bindingIdentifier);if(!i||!a||e.range==null)return!1;if(!Z7){let e=!1;for(let n of a.references){let r=n.identifier,i=r.parent,a=!1;for(;i;){if(T(i,`AssignmentExpression`)){a=i.left===r&&r!==n.identifier;break}if((T(i,`ForInStatement`)||T(i,`ForOfStatement`))&&i.left===r){a=!0;break}if(y(i))break;r=i,i=i.parent}if(a)return!1;let o=v(n.identifier),s=o.parent;if(s&&T(s,`AssignmentExpression`)&&s.operator===`=`&&s.left===o){if(e=!0,!f9(s.right,t+1))return!1;continue}if(n.flag!==`read`)return!1}return e}let o=r.init!=null;for(let n of a.references){if(n.identifier.range==null)return!1;let r=n.identifier,a=r.parent,s=!1;for(;a;){if(T(a,`AssignmentExpression`)){s=a.left===r&&r!==n.identifier;break}if((T(a,`ForInStatement`)||T(a,`ForOfStatement`))&&a.left===r){s=!0;break}if(y(a))break;r=a,a=a.parent}if(s){if(T7(n.identifier,e,i))return!1;continue}let c=v(n.identifier),l=c.parent;if(l&&T(l,`AssignmentExpression`)&&l.operator===`=`&&l.left===c){if(!T7(n.identifier,e,i))continue;if(o=!0,!f9(l.right,t+1))return!1;continue}if(n.flag!==`read`&&T7(n.identifier,e,i))return!1}return o},WUt=(e,t)=>{if(!D7(e))return!1;let n=E(e,e.name);if(!n)return!1;let r=n.bindingIdentifier.parent;if(r&&T(r,`AssignmentPattern`)&&(r=r.parent),!r||!T(r,`Property`)||r.computed||!T(r.key,`Identifier`))return!1;let i=r.key.name,a=r.parent;if(!a||!T(a,`ObjectPattern`))return!1;let o=a.parent;if(!o||!y(o)||!(o.params??[]).includes(a))return!1;let s=null,c=null;if(T(o,`FunctionDeclaration`)&&o.id)s=o.id,c=o.parent??null;else{let e=o.parent;if(e&&T(e,`VariableDeclarator`)&&T(e.id,`Identifier`)){let t=e.parent;t&&T(t,`VariableDeclaration`)&&(s=e.id,c=t.parent??null)}}if(!s||!/^[A-Z]/.test(s.name)||c!=null&&(T(c,`ExportNamedDeclaration`)||T(c,`ExportDefaultDeclaration`)))return!1;let l=d(e);if(!l)return!1;let u=s.name,f=0,p=!1,m=!1;return A(l,e=>{if(p||m)return!1;if(T(e,`Identifier`)&&e.name===u&&e!==s)return m=!0,!1;if(!T(e,`JSXOpeningElement`))return;let n=e.name;if(!n||n.type!==`JSXIdentifier`||n.name!==u)return;f+=1;let r=null,a=!1;for(let t of e.attributes??[]){if(!T(t,`JSXAttribute`))return p=!0,!1;let e=t.name;e&&e.type===`JSXIdentifier`&&e.name===i&&(a=!0,r=t.value??null)}if(a&&(r==null||!p9(T(r,`JSXExpressionContainer`)?r.expression:r,t+1)))return p=!0,!1}),f>0&&!p&&!m},U7=e=>{let t=E(e,e.name);if(!t)return null;let n=t.bindingIdentifier.parent;if(!n||!y(n))return null;let r=(n.params??[]).indexOf(t.bindingIdentifier);return r<0?null:{functionNode:n,parameterIndex:r}},W7=e=>{if(T(e,`FunctionDeclaration`)){let t=e.parent;return t&&(T(t,`ExportNamedDeclaration`)||T(t,`ExportDefaultDeclaration`))?null:e.id&&T(e.id,`Identifier`)?e.id:null}let t=e.parent;if(t&&T(t,`CallExpression`)&&(t.arguments??[])[0]===e&&e9(t.callee)===`useCallback`&&(t=t.parent),!t||!T(t,`VariableDeclarator`)||!T(t.id,`Identifier`))return null;let n=t.parent;if(!n||!T(n,`VariableDeclaration`)||n.kind!==`const`)return null;let r=n.parent;return r&&(T(r,`ExportNamedDeclaration`)||T(r,`ExportDefaultDeclaration`))?null:t.id},GUt=(e,t)=>{let n=x7.get(e);if(n||(n=new Map,x7.set(e,n)),n.has(t))return n.get(t)??null;let r=W7(e);if(!r)return n.set(t,null),null;let i=d(e);if(!i)return n.set(t,null),null;let a=[],o=!1;return A(i,e=>{if(o)return!1;if(!T(e,`Identifier`)||e.name!==r.name||e===r||E(e,e.name)?.bindingIdentifier!==r)return;let n=e.parent;if(n&&T(n,`CallExpression`)&&n.callee===e){a.push((n.arguments??[])[t]??null);return}return o=!0,!1}),o||a.length===0?(n.set(t,null),null):(n.set(t,a),a)},KUt=(e,t)=>{if(!D7(e))return!1;let n=U7(e);if(!n)return!1;let r=GUt(n.functionNode,n.parameterIndex);return r?r.every(e=>p9(e,t+1)):!1},qUt=/^on[A-Z]/,JUt=e=>{let t=e.name;return t&&t.type===`JSXIdentifier`?t.name??null:null},YUt=e=>{let t=e.parent;if(!t||!T(t,`JSXAttribute`))return null;let n=JUt(t);if(!n||!qUt.test(n))return null;let r=t.parent;return r&&T(r,`JSXOpeningElement`)?r:null},XUt=(e,t)=>{let n=e.name;if(!n||n.type!==`JSXIdentifier`||n.name!==`a`)return!1;let r=R(e.attributes??[],`href`);if(!r)return!1;let i=r.value;return i==null?!1:T(i,`JSXExpressionContainer`)?f9(i.expression,t+1):j7(i)},ZUt=(e,t)=>{let n=e.parent;if(n&&T(n,`JSXExpressionContainer`)){let e=YUt(n);return e!=null&&XUt(e,t)}let r=W7(e);if(!r)return!1;let i=d(e);if(!i)return!1;let a=0,o=!1;return A(i,e=>{if(o)return!1;if(!T(e,`Identifier`)||e.name!==r.name||e===r||E(e,e.name)?.bindingIdentifier!==r)return;let n=e.parent,i=n&&T(n,`JSXExpressionContainer`)?YUt(n):null;if(!i||!XUt(i,t))return o=!0,!1;a+=1}),a>0&&!o},QUt=(e,t)=>{if(!T(e.property,`Identifier`)||e.property.name!==`href`)return!1;let n=D(e.object);if(!T(n,`Identifier`)||!D7(n)||c7&&Nn(n,`href`,e,c7))return!1;let r=U7(n);if(!r)return!1;let i=GUt(r.functionNode,r.parameterIndex);return i?i.every(e=>{if(e==null)return!1;let n=D(e);if(!T(n,`MemberExpression`)||n.computed||!T(n.property,`Identifier`)||n.property.name!==`currentTarget`)return!1;let r=D(n.object);if(!T(r,`Identifier`))return!1;let i=U7(r);return i?ZUt(i.functionNode,t):!1}):!1},$Ut=(e,t)=>{let n=E(e,e.name);if(!n)return!1;let r=n.bindingIdentifier.parent;if(!r||!T(r,`ArrayPattern`))return!1;let i=r.elements??[];if(i[0]!==n.bindingIdentifier)return!1;let a=i[1];if(!a||!T(a,`Identifier`))return!1;let o=r.parent;if(!o||!T(o,`VariableDeclarator`)||o.id!==r)return!1;let s=o.parent;if(!s||!T(s,`VariableDeclaration`)||s.kind!==`const`)return!1;let c=o.init;if(!c||!T(c,`CallExpression`)||e9(c.callee)!==`useState`||!p9((c.arguments??[])[0]??null,t+1))return!1;let l=!1,u=c7?.symbolFor(a);return A(n.scopeOwner,e=>{if(l)return!1;if(!T(e,`Identifier`)||e.name!==a.name||e===a||u&&c7?.symbolFor(e)!==u)return;let n=e.parent;if(n&&T(n,`CallExpression`)&&n.callee===e){let e=(n.arguments??[])[0]??null;return e!=null&&y(e)||!p9(e,t+1)?(l=!0,!1):void 0}return l=!0,!1}),!l},G7=e=>{if(!y(e))return null;let t=e.body;if(!t)return null;if(!T(t,`BlockStatement`))return[t];let n=[],r=!1;return A(t,e=>{if(e!==t&&y(e))return!1;T(e,`ReturnStatement`)&&(e.argument==null?r=!0:n.push(e.argument))}),r?null:n},K7=e=>{if(!D7(e))return null;let t=E(e,e.name);if(!t?.initializer||!y(t.initializer))return null;if(T(t.initializer,`FunctionDeclaration`))return t.initializer;let n=t.bindingIdentifier.parent;if(!n||!T(n,`VariableDeclarator`)||n.init!==t.initializer)return null;let r=n.parent;return!r||!T(r,`VariableDeclaration`)||r.kind!==`const`?null:t.initializer},eWt=(e,t)=>{let n=e.property;if(!T(n,`Literal`)||typeof n.value!=`number`)return!1;let r=n.value,i=D(e.object);if(!T(i,`Identifier`)||!D7(i)||H7(i,e))return!1;let a=N7(i);if(a==null)return!1;let o=e=>{if(!T(e,`ArrayExpression`))return!1;let n=(e.elements??[])[r];return n!=null&&f9(D(n),t+1)};if(T(a,`ArrayExpression`))return o(a);if(T(a,`CallExpression`)&&T(a.callee,`Identifier`)){let e=K7(a.callee);if(!e)return!1;let t=G7(e);return!t||t.length===0?!1:t.every(e=>o(D(e)))}return!1},tWt=new Set([`next/router`,`next/navigation`]),nWt=e=>{let t=$7(e);if(t?.moduleSpecifier===`next/router`&&t.exportedName===`default`)return!0;let n=N7(e);if(!n||!T(n,`CallExpression`))return!1;let r=D(n.callee);if(!T(r,`Identifier`))return!1;let i=$7(r);return!!(i&&i.exportedName===`useRouter`&&tWt.has(i.moduleSpecifier))},rWt=(e,t)=>{if(!T(t,`IfStatement`)&&!T(t,`ConditionalExpression`))return null;let n=e;for(;n?.parent&&n.parent!==t;)n=n.parent;return!n||n.parent!==t?null:t.consequent===n?`consequent`:t.alternate===n?`alternate`:null},iWt=(e,t)=>{let n=e.parent;for(;n;){if(T(n,`IfStatement`)||T(n,`ConditionalExpression`)){let r=rWt(e,n),i=rWt(t,n);if(r&&i&&r!==i)return!0}if(y(n))return!1;n=n.parent??null}return!1},aWt=e=>{let t=e.parent;for(;t;){if(T(t,`JSXOpeningElement`))return t;t=t.parent??null}return null},oWt=e=>{let t=c7,n=l7;if(!u7||!t||!n)return!1;let r=aWt(u7),i=t.symbolFor(e);if(!r||!i)return!1;let a=[],o=[];return A(r,e=>{if(!T(e,`CallExpression`))return;let r=e.arguments?.[0],s=r?D(r):null;if(!s||!T(s,`Identifier`)||t.symbolFor(s)!==i)return;if(TUt(e.callee,t)){o.push(e);return}let c=D(e.callee);if(!T(c,`MemberExpression`))return;let l=C(c),u=D(c.object);(l===`push`||l===`replace`)&&T(u,`Identifier`)&&nWt(u)&&V(e,n)&&a.push(e)}),o.some(e=>a.some(t=>iWt(e,t)))},sWt=e=>{if(!u7||!D7(e))return!1;let t=u7,n=e.parent;for(;n&&!y(n);)n=n.parent??null;if(!n)return!1;let r=n,i=c7?.symbolFor(e),a=S7.get(r);return a||(a=[],A(r,e=>{if(e!==r&&y(e))return!1;if(!T(e,`CallExpression`)||!l7||!V(e,l7))return;let t=e.callee;if(!T(t,`MemberExpression`)||t.computed||!T(t.property,`Identifier`)||t.property.name!==`push`&&t.property.name!==`replace`)return;let n=D(t.object);!T(n,`Identifier`)||!nWt(n)||a?.push(e)}),S7.set(r,a)),a.some(n=>{if(!iWt(t,n))return!1;let r=n.callee;if(!T(r,`MemberExpression`))return!1;let a=(n.arguments??[])[0],o=a?D(a):null;return!!(o&&T(o,`Identifier`)&&o.name===e.name&&(!i||c7?.symbolFor(o)===i))})||oWt(e)},cWt=e=>{let t=e;for(;T(t,`BinaryExpression`)&&t.operator===`+`;)t=D(t.left);return t},q7=(e,t=[])=>{let n=D(e);return T(n,`BinaryExpression`)&&n.operator===`+`?(q7(n.left,t),q7(n.right,t)):t.push(n),t},lWt=e=>{let t=e.trimStart();if(t.length===0)return!1;let n=t.toLowerCase();return k7.some(e=>n.startsWith(e))||!Z7&&EUt.test(t)?!0:AUt(t)},uWt=(e,t=0)=>{if(t>8)return!1;let n=D(e);if(O7(n))return lWt(n.value);if(T(n,`TemplateLiteral`))return(n.expressions?.length??0)>0?j7(n):lWt(n.quasis?.[0]?.value?.raw??``);if(!T(n,`Identifier`)||!D7(n))return!1;let r=N7(n);return!!(r&&uWt(r,t+1))};let J7,Y7=0;const X7=new Map;let Z7=!1,Q7=!1;const $7=e=>{let t=E(e,e.name)?.bindingIdentifier.parent;if(!t||!T(t,`ImportSpecifier`)&&!T(t,`ImportDefaultSpecifier`))return null;let n=Nt(t);if(!n)return null;let r=t.parent;if(!r||!T(r,`ImportDeclaration`))return null;let i=r.source;return!i||!T(i,`Literal`)||typeof i.value!=`string`?null:{moduleSpecifier:i.value,exportedName:n}},dWt=e=>{if(Z7||J7==null)return null;let t=$7(e);if(!t)return null;let n=`${t.moduleSpecifier}\u0000${t.exportedName}`,r=X7.get(n);if(r!==void 0)return r;if(Y7<=0)return null;--Y7;let i=tt(J7,t.moduleSpecifier,t.exportedName);return X7.set(n,i),i},fWt=({foreignExpression:e,isDeferred:t})=>{let n=c7,r=u7,i=d(e);c7=i?Se(i):void 0,u7=e,Z7=!0,Q7=t;try{return f9(D(e),0)}finally{Z7=!1,Q7=!1,c7=n,u7=r}},pWt=e=>{let t=dWt(e);return!t||t.kind!==`initializer`?null:fWt({foreignExpression:t.node,isDeferred:!1})},mWt=/^(?:get|create|build)[A-Za-z0-9]*(?:Url|URL)$/,hWt=e=>{if(!mWt.test(e.name))return null;let t=dWt(e);if(!t||t.kind!==`function`)return null;let n=G7(t.node);return!n||n.length===0?!1:n.every(e=>fWt({foreignExpression:e,isDeferred:!0}))},gWt=/^(?:get|create)[A-Za-z0-9]*(?:Url|URL)$/,_Wt=new Set([`toString`,`trim`,`trimEnd`,`trimStart`]),e9=e=>T(e,`Identifier`)?e.name:T(e,`MemberExpression`)&&!e.computed&&T(e.property,`Identifier`)?e.property.name:null,t9=(e,t,n)=>{if(!y(t)||!D7(e))return null;let r=c7?.symbolFor(e),i=(t.params??[]).findIndex(e=>T(e,`Identifier`)&&c7?.symbolFor(e)===r);return i>=0?n.arguments?.[i]??null:null},vWt=(e,t,n,r)=>{let i=D(e);if(T(i,`Identifier`)){let e=t9(i,t,n);if(e)return p9(e,r+1)}if(T(i,`BinaryExpression`)&&i.operator===`+`){let e=q7(i),a=e[0];if(a&&T(a,`Identifier`)){let i=t9(a,t,n),o=``,s=1;for(;s<e.length;){let t=CWt(e[s]);if(t==null)break;o+=t,s+=1}if(i&&c9(o,s<e.length)&&(!o.startsWith(`/`)||u9(i,r+1)))return f9(i,r+1)}}if(T(i,`TemplateLiteral`)){let e=i.quasis?.[0]?.value?.raw??``,a=i.expressions?.[0];if(e.length===0&&a&&T(a,`Identifier`)){let e=t9(a,t,n),o=i.quasis?.[1]?.value?.raw??``;if(e&&c9(o,(i.expressions?.length??0)>1)&&(!o.startsWith(`/`)||u9(e,r+1)))return f9(e,r+1)}}return p9(i,r)},yWt=(e,t)=>{let n=D(e.callee);if(!T(n,`Identifier`))return!1;let r=K7(n),i=r?G7(r):null;if(!r||!i||i.length===0)return!1;let a=p7,o=m7,s=h7,c=g7;p7??=e,m7??=e,h7=e,g7=r;try{return i.every(n=>vWt(n,r,e,t))}finally{p7=a,m7=o,h7=s,g7=c}},bWt=new Set([`assign`,`defineProperties`,`defineProperty`,`setPrototypeOf`]),xWt=new Set([`defineProperty`,`set`,`setPrototypeOf`]),n9=(e,t,n)=>{let r=E(e,e.name)?.bindingIdentifier.parent;if(r&&T(r,`AssignmentPattern`)&&(r=r.parent),!r||!T(r,`Property`))return null;let i=r.parent;if(!i||!T(i,`ObjectPattern`))return null;let a=i.parent;if(!a||!T(a,`VariableDeclarator`))return null;let o=a.parent;return!o||!T(o,`VariableDeclaration`)||o.kind!==`const`||!a.init||!Wm(a.init,t,n)?null:S(r,{allowComputedString:!0})},r9=(e,t,n,r,i)=>{if(i>8)return!1;let a=D(e);if(T(a,`MemberExpression`)){let e=C(a);return!!(e&&n.has(e)&&Wm(a.object,t,r))}if(!T(a,`Identifier`))return!1;let o=N7(a);if(o)return r9(o,t,n,r,i+1);let s=n9(a,t,r);return!!(s&&n.has(s))},SWt=(e,t)=>r9(e.callee,`Object`,bWt,t,0)||r9(e.callee,`Reflect`,xWt,t,0),CWt=e=>{if(!e)return null;let t=D(e);return O7(t)?t.value:T(t,`TemplateLiteral`)&&(t.expressions?.length??0)===0?t.quasis?.[0]?.value?.cooked??null:null},wWt=(e,t)=>{if(!e)return!0;let n=D(e);return T(n,`ObjectExpression`)?(n.properties??[]).some(e=>{if(!T(e,`Property`))return!0;let n=S(e,{allowComputedString:!0});return n===null||n===t}):!0},TWt=(e,t,n)=>{let r=t=>r9(e.callee,`Object`,new Set([t]),n,0),i=t=>r9(e.callee,`Reflect`,new Set([t]),n,0);if(r(`assign`))return(e.arguments??[]).slice(1).some(e=>wWt(e,t));if(r(`defineProperties`))return wWt(e.arguments?.[1],t);if(r(`defineProperty`)||i(`defineProperty`)||i(`set`)){let n=CWt(e.arguments?.[1]);return n===null||n===t}return r(`setPrototypeOf`)||i(`setPrototypeOf`)},i9=(e,t,n=t)=>{let r=c7,i=d(t);if(!r||!i)return!1;let a=e=>{if(e.range==null||t.range==null)return!0;if(!Z7){let r=b(n),i=r&&b(e)===r?n:t;return e.range[0]<Ze(i)}return rn(e,t,r)||Q7&&rn(e,i,r)},o=C7.get(r);o||(o=new Map,C7.set(r,o));let s=o.get(e);if(s)return s.length===0?!0:t.range==null?!1:!s.some(a);let c=[],l=(t,n=0)=>{if(n>8)return!1;let i=D(t);if(Wm(i,e,r))return!0;if(T(i,`MemberExpression`))return l(i.object,n+1);if(!T(i,`Identifier`))return!1;let a=N7(i);return a&&l(a,n+1)?!0:n9(i,e,r)===`prototype`};return A(i,e=>{let t=null;T(e,`AssignmentExpression`)&&(t=e.left),T(e,`UpdateExpression`)&&(t=e.argument),T(e,`UnaryExpression`)&&e.operator===`delete`&&(t=e.argument),T(e,`CallExpression`)&&SWt(e,r)&&(t=e.arguments?.[0]??null),t&&l(t)&&c.push(e)}),o.set(e,c),c.length===0?!0:t.range==null?!1:!c.some(a)},EWt=e=>T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)&&C(e.callee)===`createObjectURL`&&!!(c7&&i9(`URL`,e)&&SD(e.callee.object,`URL`,c7,`createObjectURL`)),DWt=e=>{if(!T(e,`CallExpression`))return!1;let t=D(e.callee);if(!T(t,`MemberExpression`)||C(t)!==`getURL`)return!1;let n=D(t.object);return!T(n,`MemberExpression`)||C(n)!==`runtime`?!1:!!(c7&&Wm(n.object,`chrome`,c7)&&i9(`chrome`,e))},OWt=[`href`,`host`,`hostname`,`password`,`port`,`protocol`,`toJSON`,`toString`,`username`],a9=(e,t)=>{let n=c7;if(!n)return!1;if(OWt.some(r=>Nn(e,r,t,n)))return!0;let r=n.symbolFor(e);if(!r)return!1;let i=w7.get(r);if(!i){i=[];let t=d(e),a=(e,t)=>{if(t>8)return!1;let i=D(e);if(!T(i,`Identifier`))return!1;if(n.symbolFor(i)===r)return!0;let o=N7(i);return!!(o&&a(o,t+1))};t&&A(t,e=>{if(!T(e,`CallExpression`)||!SWt(e,n))return;let t=e.arguments?.[0];t&&a(t,0)&&i?.push(e)}),w7.set(r,i)}return i.some(e=>T7(e,t,n))},kWt=e=>{let t=D(e);return!!(c7&&T(t,`NewExpression`)&&Wm(t.callee,`URL`,c7))},AWt=e=>{let t=D(e);if(kWt(t))return!0;if(!T(t,`Identifier`))return!1;let n=N7(t);return!!(n&&kWt(n))},o9=(e,t,n)=>{let r=d7,i=f7;d7=e,f7=t;try{return n()}finally{d7=r,f7=i}},s9=e=>{let t=b(e),n=u7?b(u7):null;return(t&&(t===n||t===g7||v7.includes(t))?m7??_7:void 0)??(Q7?d7:void 0)??e},jWt=(e,t)=>{if(e.computed||C(e)!==`href`)return!1;let n=D(e.object);if(!T(n,`Identifier`))return!1;let r=N7(n);if(!r||!T(D(r),`NewExpression`))return!1;let i=s9(e);return!i9(`URL`,i,e)||a9(n,i)||h7&&a9(n,h7)?!1:o9(i,e,()=>f9(r,t+1))},c9=(e,t=!1)=>e.length===0?!t:e.startsWith(`?`)||e.startsWith(`#`)?!0:e.startsWith(`/`)&&e[1]!==`/`&&e[1]!==`\\`,MWt=/^(?:https?|ftp|wss?):\/*$/iu,NWt=e=>{let t=0;for(;t<e.length&&e.charAt(t)<=` `;)t+=1;let n=e.length;for(;n>t&&e.charAt(n-1)<=` `;)--n;return e.slice(t,n)},l9=e=>{let t=D(e);return M7(t)?!1:T(t,`Literal`)?typeof t.value==`boolean`?t.value:typeof t.value==`string`?t.value.length>0:typeof t.value==`number`?t.value!==0&&!Number.isNaN(t.value):typeof t.value==`bigint`?t.value!==0n:null:null},u9=(e,t)=>{if(t>8)return!1;let n=D(e);if(T(n,`Literal`)){if(typeof n.value!=`string`)return l9(n)!==null;let e=NWt(n.value.replaceAll(/[\t\n\r]/gu,``)).replaceAll(`\\`,`/`);return e.length>0&&!/^\/+$/u.test(e)&&!MWt.test(e)}if(PUt(n))return!0;if(T(n,`ConditionalExpression`)){let e=l9(n.test);return e===null?u9(n.consequent,t+1)&&u9(n.alternate,t+1):u9(e?n.consequent:n.alternate,t+1)}if(T(n,`LogicalExpression`)){let e=l9(n.left);if(n.operator===`&&`)return e===!1||u9(n.right,t+1);if(n.operator===`??`){if(M7(n.left))return u9(n.right,t+1);if(e!==null)return u9(n.left,t+1)}return n.operator===`||`&&e!==null?u9(e?n.left:n.right,t+1):u9(n.left,t+1)&&u9(n.right,t+1)}if(T(n,`Identifier`)){let e=c7?w(n,c7):null,r=e?.kind===`const`?e.initializer:null;return!!(r&&u9(r,t+1))}if(T(n,`CallExpression`)&&T(n.callee,`Identifier`)){let e=K7(n.callee),r=e?G7(e):null;return!!(r&&r.length>0&&r.every(e=>u9(e,t+1)))}return!1},d9=(e,t)=>{let n=D(e);if(T(n,`Literal`)&&typeof n.value!=`string`)return l9(n)!==null;if(T(n,`ConditionalExpression`)){let e=l9(n.test);return e===null?d9(n.consequent,t+1)&&d9(n.alternate,t+1):d9(e?n.consequent:n.alternate,t+1)}if(T(n,`LogicalExpression`)){let e=l9(n.left);return n.operator===`&&`?e===!1||d9(n.right,t+1):n.operator===`??`&&M7(n.left)?d9(n.right,t+1):e===null?d9(n.left,t+1)&&d9(n.right,t+1):d9(n.operator===`||`&&!e?n.right:n.left,t+1)}return f9(n,t+1)},f9=(e,t)=>{if(j7(e))return!0;if(e==null||t>8)return!1;if(T(e,`ConditionalExpression`))return p9(e.consequent,t+1)&&p9(e.alternate,t+1);if(T(e,`LogicalExpression`))return e.operator===`&&`?M7(e.left)||p9(e.right,t+1):FWt(e.left,t+1)?!0:p9(e.left,t+1)&&p9(e.right,t+1);if(e.type===`TSAsExpression`||e.type===`TSSatisfiesExpression`||e.type===`TSNonNullExpression`)return f9(e.expression??null,t+1);if(T(e,`BinaryExpression`)&&e.operator===`+`)return uWt(cWt(e));if(EWt(e)||DWt(e))return!0;if(T(e,`CallExpression`)&&T(e.callee,`MemberExpression`)&&!e.callee.computed&&T(e.callee.property,`Identifier`)&&(e.callee.property.name===`toString`||e.callee.property.name===`toJSON`)){let n=e.callee.object,r=s9(e);return AWt(n)&&!i9(`URL`,r,e)?!1:o9(r,e,()=>f9(D(n),t+1))}if(T(e,`NewExpression`)){let n=d7??e,r=d(e),i=d(n);if(!c7||!r||r!==i||!Wm(e.callee,`URL`,c7)||!i9(`URL`,e)||!i9(`URL`,n,f7??e)||!f9(e.arguments?.[0]??null,t+1))return!1;let a=e.arguments?.[1];return a===void 0?!0:f9(a,t+1)}if(T(e,`MemberExpression`)&&(!e.computed&&jWt(e,t+1)||!e.computed&&VUt(e,t+1)||!e.computed&&QUt(e,t+1)||e.computed&&eWt(e,t+1)))return!0;if(T(e,`Identifier`)){let n=pWt(e);if(n!=null)return n;let r=N7(e);if(r!=null){let n=f7??e,i=d7??e;return T(D(r),`NewExpression`)&&(a9(e,i)||h7&&a9(e,h7)||!i9(`URL`,i,n))?!1:p9(r,t+1)}return UUt(e,t+1)||WUt(e,t+1)||$Ut(e,t+1)?!0:HUt(e,t+1)??(KUt(e,t+1)?!0:sWt(e))}if(T(e,`ChainExpression`))return f9(e.expression,t+1);if(T(e,`TemplateLiteral`)){let n=(e.quasis?.[0]?.value?.raw??``).trimStart(),r=e.expressions?.[0];if(n.length===0&&r){let n=r,i=c7&&T(D(n),`Identifier`)?w(D(n),c7):null,a=i?.kind===`const`&&i.initializer?i.initializer:n,o=e.quasis?.[1]?.value?.raw??``;return o9(s9(e),e,()=>!!(c9(o,(e.expressions?.length??0)>1)&&(!o.startsWith(`/`)||u9(a,t+1))&&d9(a,t+1)))}return!1}if(PUt(e))return!0;if(T(e,`CallExpression`)){if(yWt(e,t+1))return!0;let n=e9(e.callee);if(n!=null&&T(e.callee,`Identifier`)&&gWt.test(n)){let t=hWt(e.callee);return t===null?!1:t}if(T(e.callee,`Identifier`)){let t=hWt(e.callee);if(t!==null)return t}let r=e.callee;if(T(r,`MemberExpression`)){let e=C(r);return e!==null&&_Wt.has(e)&&f9(r.object,t+1)}return!1}return!1},p9=(e,t)=>M7(e)||f9(e,t),PWt=e=>{if(e==null)return!0;let t=D(e),n=t,r=y7.get(n);if(r!==void 0)return r;let i=o9(t,t,()=>p9(e,0));return y7.set(n,i),i},FWt=(e,t)=>{if(e==null||t>8)return!1;if(O7(e))return e.value.length>0&&j7(e);if(T(e,`TemplateLiteral`))return(e.quasis?.some(e=>(e.value?.raw??``).length>0)??!1)&&j7(e);if(T(e,`Identifier`)){let n=N7(e);return n!=null&&FWt(n,t+1)}return!1},m9=(e,t)=>{if(e==null||t>8)return null;if(O7(e))return e.value;if(T(e,`TemplateLiteral`)){let n=e.quasis?.map(e=>e.value?.raw??``)??[],r=e.expressions?.map(e=>m9(e,t+1)??`\0`)??[];return n.map((e,t)=>e+(r[t]??``)).join(``)}if(T(e,`Identifier`)){let n=N7(e);return n==null?null:m9(n,t+1)}return null},IWt=e=>e!=null&&e.length>0&&[...e].every(e=>e===`\0`),LWt=e=>{let[t,n]=e.toLowerCase().split(`=`),r=n===void 0||CUt.has(n)||IWt(n);return(SUt.has(t)||IWt(t))&&r},RWt=e=>e.split(/[\s,]+/).some(LWt),zWt=/^on[A-Z]/,BWt=new Set([`queueMicrotask`,`requestAnimationFrame`,`setInterval`,`setTimeout`]),VWt=e=>{let t=e.typeAnnotation;if(!t||!T(t,`TSTypeAnnotation`))return!1;let n=t.typeAnnotation;return T(n,`TSArrayType`)||T(n,`TSTupleType`)?!0:!!(T(n,`TSTypeReference`)&&T(n.typeName,`Identifier`)&&(n.typeName.name===`Array`||n.typeName.name===`ReadonlyArray`))},HWt=(e,t,n)=>{if(!wUt(e,t)||BUt(e,`forEach`,t))return!1;let r=n.symbolFor(e)?.bindingIdentifier;if(r&&T(r,`Identifier`)&&VWt(r))return!0;let i=N7(e);if(!i)return!1;let a=D(i);return!!(T(a,`ArrayExpression`)||T(a,`NewExpression`)&&Wm(a.callee,`Array`,n)&&i9(`Array`,t)||T(a,`CallExpression`)&&T(a.callee,`MemberExpression`)&&(C(a.callee)===`from`||C(a.callee)===`of`)&&SD(a.callee.object,`Array`,n,C(a.callee)??``)&&i9(`Array`,t))},UWt=e=>{let t=c7;if(!t)return!1;let n=D(e.callee);if(T(n,`Identifier`))return(BWt.has(n.name)||n.name===`addEventListener`)&&Wm(n,n.name,t);if(!T(n,`MemberExpression`))return!1;let r=C(n);if(r===`addEventListener`&&Wm(n.object,`window`,t))return!0;if(r!==`forEach`)return!1;let i=D(n.object);return T(i,`ArrayExpression`)?!0:T(i,`Identifier`)?HWt(i,e,t):!1},WWt=e=>{let t=e.parent;if(!t)return!1;if(T(t,`JSXExpressionContainer`)){let e=t.parent,n=e?.parent,r=n&&T(n,`JSXOpeningElement`)?n.name:null;return!!(e&&T(e,`JSXAttribute`)&&zWt.test(JUt(e)??``)&&r&&r.type===`JSXIdentifier`&&/^[a-z]/.test(r.name))}if(T(t,`ExpressionStatement`))return!0;if(T(t,`CallExpression`))return t.callee===e?(p7=t,h9(t)):t.arguments?.some(t=>t===e)??!1?UWt(t):!1;if(T(t,`Property`)&&t.value===e&&!t.computed){let e=S(t),n=t.parent,r=n?.parent,i=r&&T(r,`CallExpression`)?D(r.callee):null,a=r&&T(r,`CallExpression`)?r.arguments?.[0]:null,o=!!(r&&T(r,`CallExpression`)&&a&&T(a,`Literal`)&&typeof a.value==`string`&&c7&&(k(r,`createElement`,c7)||i&&T(i,`MemberExpression`)&&C(i)===`createElement`&&Wm(i.object,`React`,c7)));return!!(e&&zWt.test(e)&&n&&T(n,`ObjectExpression`)&&r&&T(r,`CallExpression`)&&r.arguments?.[1]===n&&o)}let n=I7(e);return n?.length===0?!0:n?.every(e=>h9(e))?(p7=n.length===1?n[0]:void 0,!0):!1},GWt=e=>{let t=e.parent??null;for(;t&&!y(t);)t=t.parent??null;return t!==null&&WWt(t)},h9=e=>{let t=v(e),n=t.parent;return n?T(n,`ExpressionStatement`)||T(n,`UnaryExpression`)&&n.operator===`void`?!0:T(n,`AwaitExpression`)?h9(n):T(n,`ReturnStatement`)&&n.argument===t?GWt(n):T(n,`LogicalExpression`)&&n.right===t||T(n,`ConditionalExpression`)&&(n.consequent===t||n.alternate===t)?h9(n):T(n,`SequenceExpression`)?n.expressions?.[n.expressions.length-1]!==t||h9(n):T(n,`ArrowFunctionExpression`)&&n.body===t?WWt(n):!1:!1},KWt=x({id:`window-open-without-noopener`,title:`window.open without noopener`,severity:`warn`,recommendation:"Pass `'noopener'` in the third features argument of `window.open` so the opened page can't control your tab through `window.opener`. Add `'noreferrer'` too when the destination must not receive the referrer.",create:e=>(l7=e,u7=void 0,d7=void 0,f7=void 0,p7=void 0,m7=void 0,g7=void 0,_7=void 0,v7=[],y7=new WeakMap,b7=new WeakMap,x7=new WeakMap,S7=new WeakMap,C7=new WeakMap,w7=new WeakMap,J7=typeof e.filename==`string`&&Vn.isAbsolute(e.filename)?e.filename:void 0,Y7=3,X7.clear(),Z7=!1,Q7=!1,{CallExpression(t){if(c7=e.scopes,!TUt(t.callee,e.scopes))return;let n=u7,r=d7,i=f7,a=p7,o=m7,s=g7,c=_7,l=v7;u7=void 0,d7=void 0,f7=void 0,p7=void 0,m7=void 0,g7=void 0,_7=void 0,v7=[];try{if(!h9(t))return;let n=b(t),r=n?LUt(n,0):null;v7=r?.functions??[],p7=r?.immediateReferences?.length?r.immediateReferences.reduce((e,t)=>t.range[0]>e.range[0]?t:e):void 0,m7=r?.references?.length?r.references.reduce((e,t)=>t.range[0]>e.range[0]?t:e):void 0,_7=!m7&&n?d(t)??void 0:void 0,u7=t;let i=t.arguments?.[0];if(!(O7(i)&&i.value.trim().length>0&&!A7(i.value))&&PWt(i))return;let a=t.arguments?.[1];if(O7(a)&&bUt.has(a.value))return;let o=t.arguments?.[2];if(o!=null&&!M7(o)){let e=m9(o,0);if(e==null||RWt(e))return}e.report({node:t,message:"This `window.open` call leaves the opened page able to redirect your tab via `window.opener`, so pass `'noopener'` in the features argument."})}finally{u7=n,d7=r,f7=i,p7=a,m7=o,g7=s,_7=c,v7=l}}})}),g9=[`zod`,`zod/v4`],_9=new WeakMap,qWt=e=>{if(_9.has(e))return _9.get(e)??null;let t=JWt(e);return _9.set(e,t),t},JWt=e=>{let t=E(e,e.name)?.initializer;if(!t)return null;let n=t.parent;if(!n||!T(n,`ImportDeclaration`))return null;let r=n.source?.value;if(typeof r!=`string`||!g9.includes(r))return null;if(T(t,`ImportNamespaceSpecifier`))return{imported:null,isDefault:!1,isNamespace:!0};if(T(t,`ImportDefaultSpecifier`))return{imported:null,isDefault:!0,isNamespace:!1};if(T(t,`ImportSpecifier`)){let e=t.imported;if(T(e,`Identifier`))return{imported:e.name,isDefault:!1,isNamespace:!1};if(T(e,`Literal`)&&typeof e.value==`string`)return{imported:e.value,isDefault:!1,isNamespace:!1}}return null},v9=e=>{let t=D(e);if(!T(t,`Identifier`))return!1;let n=qWt(t);return!!(n&&(n.isNamespace||n.isDefault||n.imported===`z`))},y9=e=>{let t=D(e);if(!T(t,`Identifier`))return null;let n=qWt(t);return!n||n.isNamespace||n.isDefault?null:n.imported},YWt=e=>{let t=D(e);return!T(t,`MemberExpression`)||!v9(t.object)?null:C(t)},b9=(e,t)=>{let n=XWt(e);return n!==null&&t.has(n)},XWt=e=>{let t=D(e.callee);if(T(t,`Identifier`))return y9(t);if(!T(t,`MemberExpression`))return null;let n=C(t);return n===null||!v9(t.object)?null:n},x9=e=>{let t=D(e.callee);if(!T(t,`MemberExpression`))return null;let n=C(t);return n?{methodName:n,receiver:t.object}:null},S9=(e,t,n)=>{let r=x9(e);if(!r||!n.has(r.methodName))return!1;let i=D(r.receiver);return T(i,`CallExpression`)&&b9(i,t)},ZWt=(e,t)=>{if(!e)return!1;let n=D(e);return T(n,`ObjectExpression`)?n.properties.some(e=>{if(!T(e,`Property`))return!1;let n=e.key;return T(n,`Identifier`)?t.has(n.name):T(n,`Literal`)&&typeof n.value==`string`&&t.has(n.value)}):!1},QWt=new Set([`addIssue`,`addIssues`,`errors`,`flatten`,`formErrors`,`format`]),$Wt=`This ZodError API was removed in Zod 4, so error handling can break during the upgrade.`,C9=e=>{let t=D(e);return T(t,`Identifier`)?y9(t)===`ZodError`:T(t,`MemberExpression`)?YWt(t)===`ZodError`:!1},eGt=e=>{let t=D(e);if(T(t,`NewExpression`))return C9(t.callee);if(!T(t,`CallExpression`))return!1;let n=x9(t);return n?.methodName===`create`&&C9(n.receiver)},w9=e=>{if(!T(e,`MemberExpression`))return!1;let t=e,n=C(t);return n!==null&&QWt.has(n)&&eGt(t.object)},tGt=e=>{let t=x9(e);return t?.methodName===`create`&&C9(t.receiver)},nGt=e=>{let t=e.parent;return!t||!T(t,`MemberExpression`)||D(t.object)!==e?!1:w9(t)},rGt=x({id:`zod-v4-no-deprecated-error-apis`,title:`Zod 3 error API breaks in Zod 4`,requires:[`zod:4`],tags:[`migration-hint`],severity:`warn`,recommendation:"Use the Zod 4 helpers instead: `z.treeifyError()`, `z.flattenError()`, `z.prettifyError()`, or read `error.issues` directly.",create:e=>{let t=!1;return{Program(e){t=ye(e,g9)},CallExpression(n){t&&(tGt(n)&&nGt(n)||!tGt(n)&&!w9(n.callee)||e.report({node:n,message:$Wt}))},MemberExpression(n){if(!t)return;let r=n.parent;r&&T(r,`CallExpression`)&&D(r.callee)===n||w9(n)&&e.report({node:n,message:$Wt})}}}}),iGt=new Set([`any`,`array`,`bigint`,`boolean`,`date`,`enum`,`literal`,`map`,`nativeEnum`,`never`,`null`,`number`,`object`,`record`,`set`,`string`,`tuple`,`undefined`,`union`,`unknown`,`void`]),aGt=new Set([`errorMap`,`invalid_type_error`,`required_error`]),oGt=new Set([`bigint`,`boolean`,`date`,`number`,`string`]),sGt=new Set([`errorMap`]),cGt=new Set([`parse`,`safeParse`,`parseAsync`,`safeParseAsync`]),lGt=e=>{let t=e.arguments[0],n=t?D(t):null;return!!(n&&T(n,`Literal`)&&typeof n.value==`string`)},uGt=e=>{let t=XWt(e);return t===null||!iGt.has(t)?!1:oGt.has(t)&&lGt(e)||e.arguments.some(e=>ZWt(e,aGt))},dGt=e=>{let t=x9(e);if(!t||!cGt.has(t.methodName))return!1;let n=D(t.receiver);return!T(n,`CallExpression`)||!b9(n,iGt)?!1:ZWt(e.arguments[1],sGt)},fGt=x({id:`zod-v4-no-deprecated-error-customization`,title:`Zod 3 error customization breaks in Zod 4`,requires:[`zod:4`],tags:[`migration-hint`],severity:`warn`,recommendation:"In Zod 4, use the single `{ error }` option instead of message strings, `invalid_type_error`, `required_error`, or `errorMap`.",create:e=>({CallExpression(t){!uGt(t)&&!dGt(t)||e.report({node:t,message:`This Zod 3 error-customization form is not compatible with Zod 4, so custom messages can stop applying during the upgrade.`})}})}),pGt=new Set([`object`]),mGt=new Set([`deepPartial`,`merge`,`nonstrict`,`passthrough`,`strict`,`strip`]),hGt=new Set([`number`]),gGt=new Set([`safe`]),_Gt=new Set([`function`]),vGt=new Set([`args`,`returns`]),yGt=new Set([`nativeEnum`,`ostring`,`onumber`,`oboolean`,`oarray`,`promise`]),T9=new Set([`any`,`array`,`bigint`,`boolean`,`date`,`enum`,`function`,`literal`,`map`,`nativeEnum`,`never`,`null`,`number`,`object`,`optional`,`promise`,`record`,`set`,`string`,`tuple`,`undefined`,`union`,`unknown`,`void`]),bGt=new Set([`Enum`,`Values`]),xGt=new Set([`enum`]),SGt=new Set([`record`]),CGt=new Set([`literal`]),wGt=(e,t)=>{e.report({node:t,message:`This Zod 3 schema API changed in Zod 4, so this schema can fail after the upgrade.`})},TGt=e=>b9(e,yGt),EGt=e=>{let t=x9(e);if(!t||t.methodName!==`create`)return!1;let n=D(t.receiver),r=YWt(n);if(r!==null)return T9.has(r);if(!T(n,`Identifier`))return!1;let i=y9(n);return i!==null&&T9.has(i)},DGt=e=>e.arguments.length===1&&b9(e,SGt),OGt=e=>S9(e,_Gt,vGt),kGt=e=>{if(!e)return!1;let t=D(e);if(T(t,`CallExpression`)){let e=D(t.callee);return T(e,`Identifier`)&&e.name===`Symbol`}if(!T(t,`MemberExpression`))return!1;let n=D(t.object);return T(n,`Identifier`)&&n.name===`Symbol`},AGt=e=>e.arguments.length>0&&b9(e,CGt)&&kGt(e.arguments[0]),jGt=e=>{let t=C(e);if(t===null||!bGt.has(t))return!1;let n=D(e.object);return T(n,`CallExpression`)&&b9(n,xGt)},MGt=e=>{let t=x9(e);if(!t||t.methodName!==`refine`)return!1;let n=D(t.receiver);if(!T(n,`CallExpression`)||!b9(n,T9))return!1;let r=e.arguments[1];return T(r,`FunctionExpression`)||T(r,`ArrowFunctionExpression`)},NGt=e=>{if(C(e)!==`create`)return!1;let t=D(e.object);if(!T(t,`MemberExpression`))return!1;let n=C(t);return n!==null&&T9.has(n)&&v9(t.object)},PGt=x({id:`zod-v4-no-deprecated-schema-apis`,title:`Zod 3 schema API breaks in Zod 4`,requires:[`zod:4`],tags:[`migration-hint`],severity:`warn`,recommendation:"Switch to the Zod 4 versions: top-level factories like `z.enum()`, object helpers like `z.strictObject()`, the new `z.function({ input, output })` form, and explicit key/value schemas for `z.record()`.",create:e=>{let t=!1;return{Program(e){t=ye(e,g9)},CallExpression(n){t&&(TGt(n)||EGt(n)||DGt(n)||AGt(n)||OGt(n)||S9(n,pGt,mGt)||S9(n,hGt,gGt)||MGt(n))&&wGt(e,n)},MemberExpression(n){if(!t)return;let r=n.parent;r&&T(r,`CallExpression`)&&D(r.callee)===n||(jGt(n)||NGt(n))&&wGt(e,n)}}}}),FGt=new Set([`string`]),IGt=new Set([`base64`,`base64url`,`cidr`,`cidrv4`,`cidrv6`,`cuid`,`cuid2`,`date`,`datetime`,`duration`,`email`,`emoji`,`ip`,`ipv4`,`ipv6`,`jwt`,`nanoid`,`time`,`ulid`,`url`,`uuid`]),LGt=x({id:`zod-v4-prefer-top-level-string-formats`,title:`Format method on z.string()`,requires:[`zod:4`],tags:[`migration-hint`],severity:`warn`,recommendation:"Use the Zod 4 top-level format checks like `z.email()`, `z.uuid()`, or `z.ipv4()` instead of `z.string().<format>()`.",create:ve(e=>{let t=!1;return{Program(e){t=ye(e,g9)},CallExpression(n){t&&S9(n,FGt,IGt)&&e.report({node:n,message:"This `z.string().<format>()` check is deprecated in Zod 4, so it can break during the upgrade."})}}})}),RGt=(e,t,n)=>{let r=D(e);if(!T(r,`Identifier`))return r;let i=t.symbolFor(r);return i?.kind!==`const`||!i.initializer||n.has(i.id)||i.references.some(e=>e.flag!==`read`)?r:(n.add(i.id),RGt(i.initializer,t,n))},zGt=(e,t,n,r=new Set)=>{let i=RGt(e,n,r),[a,...o]=t;if(!a)return i;if(!T(i,`ObjectExpression`))return null;for(let e of i.properties)if(T(e,`Property`)&&S(e)===a)return zGt(e.value,o,n,r);return null},BGt=(e,t,n)=>{let r=D(e);return T(r,`Identifier`)&&t.has(r.name)&&n.isGlobalReference(r)},VGt=(e,t,n)=>{let r=D(e);return t===`array`&&T(r,`ArrayExpression`)?!0:T(r,`NewExpression`)?BGt(r.callee,t===`array`?new Set([`Array`]):new Set([`Map`,`Set`]),n):!1},E9=({collectionKind:e,functionNode:t,propertyPath:n,scopes:r})=>{if(!y(t))return!1;let i=T(t.body,`BlockStatement`)?Wt(t).flatMap(e=>e.argument?[e.argument]:[]):[t.body];return i.length>0&&i.every(t=>{let i=zGt(t,n,r);return!!(i&&VGt(i,e,r))})},HGt=new Map([[`zustand`,new Set([`create`,`createStore`,`useStore`])],[`zustand/vanilla`,new Set([`createStore`])],[`zustand/react`,new Set([`useStore`])],[`zustand/traditional`,new Set([`createWithEqualityFn`,`useStoreWithEqualityFn`])],[`zustand/shallow`,new Set([`shallow`,`useShallow`])],[`zustand/react/shallow`,new Set([`useShallow`])],[`zustand/middleware`,new Set([`combine`,`createJSONStorage`,`devtools`,`persist`,`redux`,`subscribeWithSelector`])],[`zustand/middleware/immer`,new Set([`immer`])]]),UGt=new Map([[`combine`,1],[`devtools`,0],[`immer`,0],[`persist`,0],[`subscribeWithSelector`,0]]),WGt=e=>{switch(e){case`combine`:case`create`:case`createJSONStorage`:case`createStore`:case`createWithEqualityFn`:case`devtools`:case`immer`:case`persist`:case`redux`:case`shallow`:case`subscribeWithSelector`:case`useShallow`:case`useStore`:case`useStoreWithEqualityFn`:return e;default:return null}},GGt=e=>{let t=Ue(e);return!t||cn(t)||T(e.declarationNode,`ImportSpecifier`)&&e.declarationNode.importKind===`type`?null:typeof t.source.value==`string`?t.source.value:null},KGt=e=>{let t=GGt(e),n=t?HGt.get(t):null;if(!t||!n)return null;if(t===`zustand`&&T(e.declarationNode,`ImportDefaultSpecifier`))return{apiName:`create`,moduleSource:t};let r=kt(e.declarationNode),i=r?WGt(r):null;return i&&n.has(i)?{apiName:i,moduleSource:t}:null},qGt=(e,t)=>{if(!T(e,`Identifier`))return null;let n=w(e,t);return!n||!T(n.declarationNode,`ImportNamespaceSpecifier`)?null:GGt(n)},D9=(e,t)=>{let n=D(e);if(T(n,`Identifier`)){let e=w(n,t);return e?e.kind===`import`?KGt(e):e.kind!==`const`||!e.initializer?null:D9(e.initializer,t):null}if(!T(n,`MemberExpression`))return null;let r=C(n),i=qGt(D(n.object),t),a=i?HGt.get(i):null,o=r?WGt(r):null;return o&&i&&a?.has(o)?{apiName:o,moduleSource:i}:null},JGt=(e,t,n,r=new Set)=>{let i=D(e);if(r.has(i))return null;r.add(i);let a=M(e,t);if(y(a))return a;if(!T(i,`CallExpression`))return null;let o=D9(i.callee,t),s=o?UGt.get(o.apiName):null;if(!o||s==null)return null;let c=i.arguments[s];return!c||T(c,`SpreadElement`)?null:(n.add(o.apiName),JGt(c,t,n,r))},O9=e=>e?.apiName===`create`||e?.apiName===`createStore`||e?.apiName===`createWithEqualityFn`,YGt=(e,t)=>{let n=D(e);if(T(n,`Identifier`)){let e=w(n,t);return e?.kind!==`const`||!e.initializer?null:YGt(e.initializer,t)}if(!T(n,`CallExpression`)||n.arguments.length>0)return null;let r=D9(n.callee,t);return O9(r)?r:null},k9=(e,t)=>{let n=A9(e,t);if(!n)return null;let r=new Set,i=JGt(n.creatorArgument,t,r);return i?{creatorFunction:i,factoryApiName:n.factoryApiName,middlewareNames:r}:null},A9=(e,t)=>{let n=D9(e.callee,t);if(!O9(n)&&(n=YGt(e.callee,t),!O9(n)))return null;let r=e.arguments[0];return!r||T(r,`SpreadElement`)?null:{callExpression:e,creatorArgument:r,factoryApiName:n.apiName}},XGt=new Set([`filter`,`flat`,`flatMap`,`map`,`toReversed`,`toSorted`,`toSpliced`,`with`]),ZGt=new Set([`reverse`,`sort`]),QGt=new Map([[`Array`,new Map([[`from`,`array`],[`of`,`array`]])],[`Object`,new Map([[`create`,`object`],[`entries`,`array`],[`fromEntries`,`object`],[`keys`,`array`],[`values`,`array`]])]]),$Gt=(e,t)=>{let n=D(e);return T(n,`Identifier`)&&n.name===`undefined`&&t.isGlobalReference(n)||T(n,`Literal`)&&n.value===null||T(n,`UnaryExpression`)&&n.operator===`void`},j9=(e,t,n)=>{let r=e[t];return r?T(r,`SpreadElement`)?!0:!$Gt(r,n):!1},eKt=(e,t)=>{let n=D(e);if(!T(n,`CallExpression`))return null;let r=A9(n,t);return!r||r.factoryApiName!==`create`&&r.factoryApiName!==`createWithEqualityFn`?null:{creatorFunction:k9(n,t)?.creatorFunction??null,hasDefaultEquality:r.factoryApiName===`createWithEqualityFn`&&j9(n.arguments,1,t),supportsEqualityArgument:r.factoryApiName===`createWithEqualityFn`}},tKt=new Set([`setState`,`getState`,`subscribe`,`getInitialState`]),nKt=(e,t,n=new Set)=>{let r=D(e);if(!T(r,`Identifier`))return null;let i=t.symbolFor(r);return i?.kind!==`const`||!i.initializer||n.has(i.id)||i.references.some(e=>e.flag!==`read`)||tKt.has(wi(i.bindingIdentifier)??``)?null:(n.add(i.id),eKt(i.initializer,t)??nKt(i.initializer,t,n))},rKt=(e,t)=>{let n=D9(e.callee,t);if(n?.apiName===`useStore`||n?.apiName===`useStoreWithEqualityFn`){let r=e.arguments[1];return!r||T(r,`SpreadElement`)||n.apiName===`useStoreWithEqualityFn`&&j9(e.arguments,2,t)?null:{selector:r,storeCreatorFunction:null}}let r=nKt(e.callee,t),i=e.arguments[0];return!r||!i||T(i,`SpreadElement`)||r.hasDefaultEquality||r.supportsEqualityArgument&&j9(e.arguments,1,t)?null:{selector:i,storeCreatorFunction:r.creatorFunction}},iKt=(e,t)=>D9(e.callee,t)?.apiName===`useShallow`,M9=(e,t,n=new Set)=>{let r=D(e);if(y(r))return r;if(T(r,`CallExpression`)){if(iKt(r,t)||!k(r,`useCallback`,t,{allowGlobalReactNamespace:!0,resolveNamedAliases:!0}))return null;let e=r.arguments[0];return!e||T(e,`SpreadElement`)?null:M9(e,t,n)}if(!T(r,`Identifier`))return null;let i=t.symbolFor(r);return!i||n.has(i.id)||i.references.some(e=>e.flag!==`read`)?null:i.kind===`function`&&y(i.declarationNode)?i.declarationNode:i.kind!==`const`||!i.initializer?null:(n.add(i.id),M9(i.initializer,t,n))},N9=(e,t,n=new Set)=>{let r=D(e);if(T(r,`Identifier`)){let e=t.scopes.symbolFor(r),i=y(t.selectorFunction)?t.selectorFunction.params[0]:null;return i&&T(i,`Identifier`)&&e?.id===t.scopes.symbolFor(i)?.id?[]:e?.kind!==`const`||!e.initializer||n.has(e.id)||e.references.some(e=>e.flag!==`read`)?null:(n.add(e.id),N9(e.initializer,t,n))}if(!T(r,`MemberExpression`))return null;let i=C(r),a=N9(r.object,t,n);return i&&a?[...a,i]:null},aKt=(e,t,n)=>{let r=D(e.callee);if(!T(r,`MemberExpression`))return null;let i=C(r);if(!i)return null;let a=D(r.object);if(T(a,`Identifier`)&&t.scopes.isGlobalReference(a)){let r=QGt.get(a.name)?.get(i);if(r)return{kind:r,node:e};if(a.name===`Object`&&i===`assign`){let r=e.arguments[0];if(!r||T(r,`SpreadElement`))return null;let i=P9(r,t,new Set(n));return i?{kind:i.kind,node:e}:null}}if(XGt.has(i)){if(P9(a,t,new Set(n))?.kind===`array`)return{kind:`array`,node:e};let r=N9(a,t);return r&&t.storeCreatorFunction&&E9({collectionKind:`array`,functionNode:t.storeCreatorFunction,propertyPath:r,scopes:t.scopes})?{kind:`array`,node:e}:null}return ZGt.has(i)&&P9(a,t,new Set(n))?{kind:`array`,node:e}:null},P9=(e,t,n=new Set)=>{let r=bp(e,t.scopes);if(r?.kind===`array`||r?.kind===`function`||r?.kind===`instance`||r?.kind===`object`)return{kind:r.kind,node:e};let i=D(e);if(T(i,`CallExpression`))return aKt(i,t,n);if(T(i,`ConditionalExpression`))return P9(i.consequent,t,new Set(n))??P9(i.alternate,t,new Set(n));if(T(i,`LogicalExpression`))return i.operator===`&&`?P9(i.right,t,n):P9(i.left,t,new Set(n))??P9(i.right,t,new Set(n));if(T(i,`SequenceExpression`)){let e=i.expressions[i.expressions.length-1];return e?P9(e,t,n):null}if(!T(i,`Identifier`))return null;let a=t.scopes.symbolFor(i);return a?.kind!==`const`||a.scope.kind===`module`||!a.initializer||n.has(a.id)||a.references.some(e=>e.flag!==`read`)?null:(n.add(a.id),P9(a.initializer,t,n))},oKt=(e,t,n)=>{if(!y(e)||!e.body)return null;let r={scopes:t,selectorFunction:e,storeCreatorFunction:n};if(!T(e.body,`BlockStatement`))return P9(e.body,r);let i=null;return A(e.body,t=>{if(i||t!==e.body&&y(t))return!1;if(!(!T(t,`ReturnStatement`)||!t.argument))return i=P9(t.argument,r),i?!1:void 0}),i},sKt=x({id:`zustand-no-fresh-selector-result`,title:`Zustand selector returns a fresh value`,severity:`error`,category:`Performance`,requires:[`zustand`,`zustand:5`],recommendation:"Select a stable store field, split the selector, or wrap a collection selector with `useShallow`.",create:e=>({CallExpression(t){let n=rKt(t,e.scopes);if(!n)return;let r=M9(n.selector,e.scopes);if(!r)return;let i=oKt(r,e.scopes,n.storeCreatorFunction);i&&e.report({node:i.node,message:"This Zustand selector creates a new reference whenever the store is read, so Object.is never sees a stable snapshot and Zustand v5 can repeatedly render or hit maximum update depth. Select a stable field or use `useShallow`."})}})}),cKt=e=>e?T(e,`Identifier`)?e:T(e,`AssignmentPattern`)&&T(e.left,`Identifier`)?e.left:null:null,lKt=(e,t,n)=>{let r=D(e.callee);return T(r,`Identifier`)?w(r,n.scopes)?.id===t.id:!1},uKt=(e,t,n)=>{let r=new Set,i=e=>{!y(e)||e.generator||r.has(e)||(r.add(e),A(e,r=>{if(r!==e&&y(r))return!1;if(!T(r,`CallExpression`))return;if(lKt(r,t,n)){if(!k3(r,e,n))return;n.report({node:r,message:"`get()` runs before Zustand installs the initial state, so it returns `undefined` here."});return}if(!k3(r,e,n))return;let a=M(r.callee,n.scopes);!a||a===e||i(a)}))};i(e)},dKt=x({id:`zustand-no-get-during-initialization`,title:`Zustand get() called during store initialization`,severity:`error`,category:`Correctness`,recommendation:"Move the read into a deferred store action or derive the initial value without calling `get()`.",requires:[`zustand`,`zustand:1`],create:e=>{let t=new Set;return{CallExpression(n){let r=k9(n,e.scopes);r&&t.add(r.creatorFunction)},"Program:exit"(){for(let n of t){if(n.generator)continue;let t=cKt(n.params[1]),r=t?e.scopes.symbolFor(t):null;r&&uKt(n,r,e)}}}}}),fKt=`This Zustand state reference is mutated and reused, so subscribers can miss the update.`,pKt=new Set([`concat`,`filter`,`flat`,`flatMap`,`map`,`slice`,`toReversed`,`toSorted`,`toSpliced`,`with`]),mKt=new Set([`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`IfStatement`,`LabeledStatement`,`BlockStatement`,`SwitchStatement`,`TryStatement`,`WhileStatement`,`WithStatement`]),hKt=new Set([`ConditionalExpression`,`LogicalExpression`]),F9=e=>e?T(e,`Identifier`)?e:T(e,`AssignmentPattern`)&&T(e.left,`Identifier`)?e.left:null:null,gKt=(e,t,n)=>{let r=F9(e.params[t]);return r?n.scopes.symbolFor(r)??null:null},I9=(e,t,n)=>{let r=D(e.callee);if(!T(r,`Identifier`))return!1;let i=w(r,n.scopes);return!!(i&&t.has(i.id))},_Kt=e=>{let t=D(e);for(;T(t,`MemberExpression`);)t=D(t.object);return T(t,`CallExpression`)?t:null},vKt=(e,t,n)=>{let r=D(e.callee);if(!T(r,`MemberExpression`)||C(r)!==t)return null;let i=D(r.object);return T(i,`Identifier`)?w(i,n.scopes)?.id??null:null},yKt=(e,t,n,r)=>{let i=vKt(e,t,r);return i!==null&&n.has(i)},bKt=(e,t,n,r)=>{if(!e)return!1;let i=_Kt(e);return!!(i&&(I9(i,t,r)||yKt(i,`getState`,n,r)))},L9=(e,t,n)=>{let r=B(e,n);return!!(r&&(r===t||t.startsWith(`${r}.`)))},R9=(e,t,n,r)=>{if(!e)return!1;let i=D(e);return i===n?!0:T(i,`Identifier`)||T(i,`MemberExpression`)?L9(i,t,r):T(i,`ObjectExpression`)?i.properties.some(e=>{if(T(e,`SpreadElement`)){let n=B(e.argument,r);return!!(n&&n!==t&&t.startsWith(`${n}.`))}return T(e,`Property`)&&R9(e.value,t,n,r)}):T(i,`ArrayExpression`)?i.elements.some(e=>!!e&&!T(e,`SpreadElement`)&&R9(e,t,n,r)):T(i,`ConditionalExpression`)?R9(i.consequent,t,n,r)||R9(i.alternate,t,n,r):T(i,`LogicalExpression`)?R9(i.left,t,n,r)||R9(i.right,t,n,r):T(i,`SequenceExpression`)?R9(i.expressions[i.expressions.length-1],t,n,r):!1},xKt=(e,t,n)=>{if(!e)return!1;let r=!1;return A(e,e=>{let i=D(e);if(y(i))return!1;if(T(i,`SpreadElement`))return B(i.argument,n)===t&&(r=!0),!1;if(T(i,`NewExpression`)){let e=D(i.callee),a=i.arguments[0];T(e,`Identifier`)&&(e.name===`Map`||e.name===`Set`)&&a&&!T(a,`SpreadElement`)&&B(a,n)===t&&(r=!0);return}if(!T(i,`CallExpression`))return;let a=D(i.callee);if(!T(a,`MemberExpression`))return;let o=C(a);o&&pKt.has(o)&&B(a.object,n)===t&&(r=!0)}),r},SKt=(e,t)=>{let n=D(e);return T(n,`UnaryExpression`)&&n.operator===`void`||T(n,`Identifier`)&&n.name===`undefined`&&t.scopes.isGlobalReference(n)},z9=e=>{if(!y(e))return[];if(!T(e.body,`BlockStatement`))return[e.body];let t=[];for(let n of e.body.body)T(n,`ReturnStatement`)&&n.argument&&t.push(n.argument);return t},CKt=e=>e.some(e=>mKt.has(e.type)),wKt=e=>{let t=!1;return A(e,n=>{if(n!==e&&y(n))return!1;if(T(n,`ReturnStatement`)||T(n,`ThrowStatement`))return t=!0,!1}),t},TKt=e=>{if(!T(e,`IfStatement`))return mKt.has(e.type);if(wKt(e))return!0;let t=[];for(let n of[e.consequent,e.alternate])n&&t.push(...T(n,`BlockStatement`)?n.body:[n]);return t.some(TKt)},EKt=e=>{if(e.some(TKt))return!0;let t=!1;for(let n of e)A(n,e=>{if(e!==n&&y(e))return!1;if(hKt.has(e.type))return t=!0,!1});return t},DKt=(e,t,n,r,i,a)=>{if(!y(e)||e.async||e.generator)return;let o=F9(e.params[0]);if(!o)return;let s={mutableStateSourceNames:new Set([o.name])},c=z9(e),l=[],u={isProvenMutatingMethodCall:e=>H9(e,r,i)};if(T(e.body,`BlockStatement`)){if(CKt(e.body.body))return;for(let t of e.body.body){if(l.push(...ez(t,s,u)),T(t,`VariableDeclaration`))QR(t,s);else if(T(t,`ExpressionStatement`)){let e=D(t.expression);T(e,`AssignmentExpression`)&&$R(e,s)}if(T(t,`ReturnStatement`))break}}else l.push(...ez(e.body,s,u));for(let e of l){let r=V9(e.receiver,i),o=c.some(e=>SKt(e,i)),s=c.some(a=>K9(a,e,i)===!1||bKt(a,t,n,i)&&r!==null&&W9(V9(a,i),r));c.length>0&&!s&&!o||a.has(e.node)||(a.add(e.node),i.report({node:e.node,message:fKt}))}},B9=(e,t,n,r)=>{let i=[];return A(e,e=>{if(y(e))return!1;T(e,`CallExpression`)&&(I9(e,t,r)||yKt(e,`setState`,n,r))&&i.push(e)}),i},V9=(e,t,n=new Set,r=!1)=>{let i=D(e);if(T(i,`Identifier`)){let e=t.scopes.symbolFor(i);if(!e||n.has(e.id))return[];n.add(e.id);let a=e.bindingIdentifier.parent,o=a?.parent,s=o?.parent;if(T(a,`Property`)&&T(o,`ObjectPattern`)&&T(s,`VariableDeclarator`)){let e=S(a),i=s.init?V9(s.init,t,n,r):null;return e&&i?[...i,e]:null}return!r&&e.kind!==`const`||!e.initializer?[]:V9(e.initializer,t,n,r)}if(T(i,`MemberExpression`)){let e=C(i),a=V9(i.object,t,n,r);return e&&a?[...a,e]:null}return T(i,`CallExpression`)?[]:null},H9=(e,t,n)=>{let r=D(e.callee);if(!T(r,`MemberExpression`))return!1;let i=C(r),a=V9(r.object,n,new Set,!0);return!i||!a?!1:dr.has(i)&&E9({collectionKind:`array`,functionNode:t,propertyPath:a,scopes:n.scopes})?!0:fr.has(i)&&E9({collectionKind:`map-or-set`,functionNode:t,propertyPath:a,scopes:n.scopes})},U9=(e,t,n)=>{let r=D(e);return T(r,`ObjectExpression`)||T(r,`ArrayExpression`)||T(r,`NewExpression`)||T(r,`Literal`)||T(r,`TemplateLiteral`)||xKt(r,t,n)},OKt=(e,t,n,r,i,a,o,s=[])=>{let c=t[0];if(!c)return!0;let l=!a;for(let a of e.properties){if(T(a,`SpreadElement`)){let e=B(a.argument,o),t=V9(a.argument,o);l=e===r||W9(t,s)?!1:null;continue}if(!T(a,`Property`)||S(a)!==c)continue;if(t.length===1){l=R9(a.value,n,i,o)?!1:U9(a.value,n,o)?!0:null;continue}let e=D(a.value);l=T(e,`ObjectExpression`)?OKt(e,t.slice(1),n,`${r}.${c}`,i,!1,o,[...s,c]):L9(e,n,o)?!1:U9(e,n,o)?!0:null}return l},W9=(e,t)=>!!(e&&e.length<=t.length&&e.every((e,n)=>e===t[n])),kKt=(e,t,n,r,i=[])=>{let a=t[0];if(!a)return!0;let o=!n;for(let n of e.properties){if(T(n,`SpreadElement`)){o=null;continue}if(!T(n,`Property`)||S(n)!==a)continue;let e=D(n.value);if(t.length>1&&T(e,`ObjectExpression`)){o=kKt(e,t.slice(1),!1,r,[...i,a]);continue}if(W9(V9(e,r),[...i,...t])){o=!1;continue}o=U9(e,``,r)?!0:null}return o},AKt=(e,t,n,r)=>{let i=t[0];if(!i)return!1;for(let a of e.properties){if(!T(a,`Property`)||S(a)!==i)continue;let e=D(a.value);return t.length>1?T(e,`ObjectExpression`)&&AKt(e,t.slice(1),n,r):T(e,`Identifier`)&&r.scopes.symbolFor(e)?.id===n}return!1},G9=(e,t)=>{let n=e,r=b(t.node);for(;n.parent&&n.parent!==r;){let e=n.parent;if(T(e,`IfStatement`)&&(e.consequent===n||e.alternate===n)){if(z(t.node,n)){n=e;continue}let r=e.consequent===n?e.alternate:e.consequent;return r&&z(t.node,r)?!1:null}n=e}return!0},jKt=(e,t)=>T(e.parent,`ExpressionStatement`)?G9(e.parent,t):null,MKt=(e,t,n,r,i)=>{let a=Gn(t.receiver);if(!a)return;let o=i.scopes.symbolFor(a);if(!o||o.kind===`const`)return;let s=D(e);if(!(n.length===0?T(s,`Identifier`)&&i.scopes.symbolFor(s)?.id===o.id:T(s,`ObjectExpression`)&&AKt(s,n,o.id,i)))return;let c=O(t.node),l=O(e),u=b(t.node);if(c===null||l===null)return;let d=null,f=null,p=null;for(let e of o.references){if(e.flag===`read`)continue;let n=e.identifier.parent;if(!T(n,`AssignmentExpression`)||n.operator!==`=`||n.left!==e.identifier||b(n)!==u)continue;let r=O(n);if(r===null||r<=c||r>=l)continue;let i=jKt(n,t);if(i!==!1){if(i===null){(p===null||r>p)&&(p=r);continue}f!==null&&r<=f||(d=n,f=r)}}if(p!==null&&(f===null||p>f))return null;if(d)return L9(d.right,r,i)?!1:U9(d.right,r,i)?!0:null},K9=(e,t,n)=>{let r=B(t.receiver,n),i=V9(t.receiver,n,new Set,!0);if(!i)return null;let a=D(e);if(!r)return i.length===0?null:T(a,`ObjectExpression`)?kKt(a,i,!0,n):W9(V9(a,n),i)?!1:null;if(i.length===0){if(R9(a,r,t.node,n)){let e=MKt(a,t,i,r,n);return e===void 0?!1:e}return U9(a,r,n)?!0:null}if(!T(a,`ObjectExpression`))return R9(a,r,t.node,n)?!1:null;let o=`.${i.join(`.`)}`,s=OKt(a,i,r,r.endsWith(o)?r.slice(0,-o.length):r,t.node,!0,n);if(s!==!1)return s;let c=MKt(a,t,i,r,n);return c===void 0?!1:c},NKt=(e,t,n)=>{let r=e.arguments[0];if(!r)return!1;if(T(r,`SpreadElement`))return null;let i=M(r,n.scopes),a=(i?z9(i):[r]).map(e=>K9(e,t,n));return a.some(e=>e===!0)?!0:a.some(e=>e===null)?null:!1},PKt=(e,t)=>e===!0||t===!0?!0:e===null||t===null?null:!1,q9=(e,t,n,r,i)=>{if(T(e,`BlockStatement`))return e.body.reduce((e,a)=>PKt(e,q9(a,t,n,r,i)),!1);if(T(e,`IfStatement`)){let a=q9(e.consequent,t,n,r,i),o=e.alternate?q9(e.alternate,t,n,r,i):!1;return a===!1||o===!1?!1:a===!0&&o===!0?!0:null}return B9(e,n,r,i).reduce((e,n)=>PKt(e,NKt(n,t,i)),!1)},FKt=(e,t)=>{let n=[];return A(e,e=>{if(y(e))return!1;T(e,`IfStatement`)&&n.push({statement:e,statementIndex:t})}),n},IKt=(e,t)=>{if(T(e,`VariableDeclaration`)){QR(e,t);return}if(!T(e,`ExpressionStatement`))return;let n=D(e.expression);T(n,`AssignmentExpression`)&&$R(n,t)},J9=(e,t,n,r)=>{let i={mutableStateSourceNames:new Set(t.mutableStateSourceNames)};t.isAdditionalMutableStateSource&&(i.isAdditionalMutableStateSource=t.isAdditionalMutableStateSource);let a=T(e,`BlockStatement`)?e.body:[e],o=[],s={isProvenMutatingMethodCall:e=>H9(e,n,r)};for(let e of a){if(T(e,`IfStatement`)){o.push(...J9(e.consequent,i,n,r)),e.alternate&&o.push(...J9(e.alternate,i,n,r));continue}o.push(...ez(e,i,s)),IKt(e,i)}return o},LKt=(e,t,n,r,i,a,o,s,c=[])=>{if(EKt(e))return;let l={isAdditionalMutableStateSource:e=>bKt(e,t,r,o),mutableStateSourceNames:new Set},u=[],d=[],f=[],p={isProvenMutatingMethodCall:e=>H9(e,a,o)};for(let t=0;t<e.length;t+=1){let r=e[t];if(T(r,`IfStatement`))for(let e of[r.consequent,r.alternate]){if(!e)continue;for(let n of J9(e,l,a,o))u.push({branchRoot:e,mutation:n,statementIndex:t});let r=B9(e,n,i,o);for(let n of r)d.push({branchRoot:e,callExpression:n,statementIndex:t})}else{for(let e of ez(r,l,p))u.push({branchRoot:null,mutation:e,statementIndex:t});for(let e of B9(r,n,i,o))d.push({branchRoot:null,callExpression:e,statementIndex:t})}if(f.push(...FKt(r,t)),IKt(r,l),T(r,`ReturnStatement`))break}for(let{branchRoot:e,mutation:t,statementIndex:r}of u){let a=[...d.filter(n=>{if(!n.branchRoot){if(n.statementIndex!==r)return n.statementIndex>r;let e=O(t.node),i=O(n.callExpression);return z(t.node,n.callExpression)||e!==null&&i!==null&&i>=e}if(n.statementIndex!==r||n.branchRoot!==e||G9(n.callExpression,t)!==!0)return!1;let i=O(t.node),a=O(n.callExpression);return z(t.node,n.callExpression)||i!==null&&a!==null&&a>=i}).map(e=>NKt(e.callExpression,t,o)),...c.map(e=>K9(e,t,o))];for(let e of f){if(e.statementIndex<r)continue;let s=O(t.node),c=O(e.statement);s===null||c===null||c<=s||G9(e.statement,t)!==!0||a.push(q9(e.statement,t,n,i,o))}a.some(e=>e!==!1)||s.has(t.node)||(s.add(t.node),o.report({node:t.node,message:fKt}))}},RKt=x({id:`zustand-no-mutating-state`,title:`Zustand state mutated in place`,severity:`error`,category:`Correctness`,recommendation:`Create a new object, array, Map, or Set before passing the updated value to Zustand.`,requires:[`zustand`,`zustand:1`],create:e=>{let t=new Map,n=new Set,r=new Set,i=new Map,a=(e,t)=>{let n=i.get(e);n?n.add(t):i.set(e,new Set([t]))},o=new WeakSet,s=null;return{Program(e){s=e},CallExpression(n){let r=k9(n,e.scopes);if(!r)return;let i=!r.middlewareNames.has(`immer`),a=t.get(r.creatorFunction);a?i&&(a.hasNonImmerUsage=!0):(a={creatorFunction:r.creatorFunction,getSymbol:gKt(r.creatorFunction,1,e),hasNonImmerUsage:i,nonImmerStoreSymbolIds:new Set,setSymbol:gKt(r.creatorFunction,0,e),storeSymbolIds:new Set},t.set(r.creatorFunction,a));let o=n.parent;if(T(o,`VariableDeclarator`)&&T(o.id,`Identifier`)){let t=e.scopes.symbolFor(o.id);t&&(a.storeSymbolIds.add(t.id),i&&a.nonImmerStoreSymbolIds.add(t.id))}},ArrowFunctionExpression(e){r.add(e)},FunctionDeclaration(e){r.add(e)},FunctionExpression(e){r.add(e)},"Program:exit"(){for(let r of t.values()){if(r.hasNonImmerUsage&&r.setSymbol){let t=r.setSymbol.id,n=new Set([t]);A(r.creatorFunction.body,i=>{if(!T(i,`CallExpression`)||!I9(i,n,e))return;let s=i.arguments[0];if(!s||T(s,`SpreadElement`))return;let c=M(s,e.scopes);c&&(a(c,t),DKt(c,r.getSymbol?new Set([r.getSymbol.id]):new Set,r.storeSymbolIds,r.creatorFunction,e,o))})}!s||r.storeSymbolIds.size===0||A(s,t=>{if(!T(t,`CallExpression`))return;let i=vKt(t,`setState`,e);if(i===null||!r.storeSymbolIds.has(i))return;n.add(r);let s=t.arguments[0];if(!s||T(s,`SpreadElement`))return;let c=M(s,e.scopes);c&&(a(c,i),r.nonImmerStoreSymbolIds.has(i)&&DKt(c,new Set,new Set([i]),r.creatorFunction,e,o))})}let c=(t,n,a,c,l)=>{s&&LKt(s.body,t,n,a,c,l,e,o);for(let s of r){if(!y(s)||!T(s.body,`BlockStatement`))continue;let r=i.get(s),u=!!(r&&Array.from(r).some(e=>n.has(e)||c.has(e)));LKt(s.body.body,t,n,a,c,l,e,o,u?z9(s):[])}};for(let e of t.values()){let t=new Set,r=new Set;e.getSymbol&&e.setSymbol&&(e.setSymbol.references.length>0||n.has(e))&&t.add(e.getSymbol.id),e.setSymbol&&r.add(e.setSymbol.id),c(t,r,new Set,e.storeSymbolIds,e.creatorFunction);for(let t of e.storeSymbolIds){let n=new Set([t]);c(new Set,new Set,n,n,e.creatorFunction)}}}}}}),zKt=new Set([`create`,`createWithEqualityFn`]),BKt=new Set([`createStore`]),VKt=(e,t,n)=>{let r=D(e);if(!T(r,`CallExpression`))return!1;let i=A9(r,n);return!!(i&&t.has(i.factoryApiName))},HKt=(e,t,n)=>{let r=D(e);if(VKt(r,t,n))return!0;if(!T(r,`Identifier`))return!1;let i=w(r,n);return!!(i?.kind===`const`&&i.initializer&&VKt(i.initializer,t,n))},UKt=(e,t)=>{let n=D(e.callee);return T(n,`Identifier`)&&HKt(n,zKt,t)},WKt=(e,t)=>{if(e.arguments.length!==1)return!1;let n=D9(e.callee,t);return n?.apiName!==`useStore`&&n?.apiName!==`useStoreWithEqualityFn`?!1:HKt(e.arguments[0],BKt,t)},GKt=(e,t)=>{let n=X(e,t.scopes);if(!n||b(e)!==n)return!1;let r=Js(n);return!!(r&&(Gs(r)||gF(n,t.scopes,t.cfg)))},KKt=x({id:`zustand-no-whole-store-destructure`,title:`Whole Zustand store subscribed during render`,severity:`warn`,requires:[`zustand:1`],recommendation:`Pass a selector to the Zustand hook so this component rerenders only when the state it reads changes.`,create:e=>({CallExpression(t){GKt(t,e)&&(!(t.arguments.length===0&&UKt(t,e.scopes))&&!WKt(t,e.scopes)||e.report({node:t,message:`This hook subscribes to the whole Zustand store, so every store update rerenders this component. Pass a selector for the state it reads.`}))}})}),Y9=[{key:`react-doctor/active-static-asset`,id:`active-static-asset`,source:`react-doctor`,originallyExternal:!1,rule:{...p,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...p.tags??[]])]}},{key:`react-doctor/activity-wraps-effect-heavy-subtree`,id:`activity-wraps-effect-heavy-subtree`,source:`react-doctor`,originallyExternal:!1,rule:{...hne,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...hne.requires??[]])]}},{key:`react-doctor/advanced-event-handler-refs`,id:`advanced-event-handler-refs`,source:`react-doctor`,originallyExternal:!1,rule:{...Cne,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Cne.requires??[]])]}},{key:`react-doctor/agent-tool-capability-risk`,id:`agent-tool-capability-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Rn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Rn.tags??[]])]}},{key:`react-doctor/alt-text`,id:`alt-text`,source:`react-doctor`,originallyExternal:!0,rule:{...jr,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...jr.requires??[]])]}},{key:`react-doctor/anchor-ambiguous-text`,id:`anchor-ambiguous-text`,source:`react-doctor`,originallyExternal:!0,rule:{...Nr,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Nr.requires??[]])]}},{key:`react-doctor/anchor-has-content`,id:`anchor-has-content`,source:`react-doctor`,originallyExternal:!0,rule:{...Lr,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Lr.requires??[]])]}},{key:`react-doctor/anchor-is-valid`,id:`anchor-is-valid`,source:`react-doctor`,originallyExternal:!0,rule:{...Vr,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Vr.requires??[]])]}},{key:`react-doctor/anchor-target-exists`,id:`anchor-target-exists`,source:`react-doctor`,originallyExternal:!1,rule:{...Yr,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Yr.requires??[]])]}},{key:`react-doctor/aria-activedescendant-has-tabindex`,id:`aria-activedescendant-has-tabindex`,source:`react-doctor`,originallyExternal:!0,rule:{...li,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...li.requires??[]])]}},{key:`react-doctor/aria-braille-equivalent`,id:`aria-braille-equivalent`,source:`react-doctor`,originallyExternal:!0,rule:{...di,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...di.requires??[]])]}},{key:`react-doctor/aria-props`,id:`aria-props`,source:`react-doctor`,originallyExternal:!0,rule:{...pi,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...pi.requires??[]])]}},{key:`react-doctor/aria-proptypes`,id:`aria-proptypes`,source:`react-doctor`,originallyExternal:!0,rule:{...Ure,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Ure.requires??[]])]}},{key:`react-doctor/aria-role`,id:`aria-role`,source:`react-doctor`,originallyExternal:!0,rule:{...Gre,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Gre.requires??[]])]}},{key:`react-doctor/aria-unsupported-elements`,id:`aria-unsupported-elements`,source:`react-doctor`,originallyExternal:!0,rule:{...qre,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...qre.requires??[]])]}},{key:`react-doctor/artifact-baas-authority-surface`,id:`artifact-baas-authority-surface`,source:`react-doctor`,originallyExternal:!1,rule:{...qe,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...qe.tags??[]])]}},{key:`react-doctor/artifact-env-leak`,id:`artifact-env-leak`,source:`react-doctor`,originallyExternal:!1,rule:{...en,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...en.tags??[]])]}},{key:`react-doctor/artifact-secret-leak`,id:`artifact-secret-leak`,source:`react-doctor`,originallyExternal:!1,rule:{..._t,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,..._t.tags??[]])]}},{key:`react-doctor/async-await-in-loop`,id:`async-await-in-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...Xie,framework:`global`,category:`Performance`}},{key:`react-doctor/async-defer-await`,id:`async-defer-await`,source:`react-doctor`,originallyExternal:!1,rule:{...Xi,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Xi.requires??[]])]}},{key:`react-doctor/async-parallel`,id:`async-parallel`,source:`react-doctor`,originallyExternal:!1,rule:{...Sae,framework:`global`,category:`Performance`}},{key:`react-doctor/auth-token-in-web-storage`,id:`auth-token-in-web-storage`,source:`react-doctor`,originallyExternal:!1,rule:{...Aae,framework:`global`,category:`Security`}},{key:`react-doctor/autocomplete-valid`,id:`autocomplete-valid`,source:`react-doctor`,originallyExternal:!0,rule:{...da,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...da.requires??[]])]}},{key:`react-doctor/build-pipeline-secret-boundary`,id:`build-pipeline-secret-boundary`,source:`react-doctor`,originallyExternal:!1,rule:{...Ut,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Ut.tags??[]])]}},{key:`react-doctor/button-has-type`,id:`button-has-type`,source:`react-doctor`,originallyExternal:!0,rule:{...wa,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...wa.requires??[]])]}},{key:`react-doctor/checked-requires-onchange-or-readonly`,id:`checked-requires-onchange-or-readonly`,source:`react-doctor`,originallyExternal:!0,rule:{...Da,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Da.requires??[]])]}},{key:`react-doctor/class-component-missing-component-will-unmount-teardown`,id:`class-component-missing-component-will-unmount-teardown`,source:`react-doctor`,originallyExternal:!1,rule:{...Do,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Do.requires??[]])]}},{key:`react-doctor/click-events-have-key-events`,id:`click-events-have-key-events`,source:`react-doctor`,originallyExternal:!0,rule:{...os,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...os.requires??[]])]}},{key:`react-doctor/clickjacking-redirect-risk`,id:`clickjacking-redirect-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...ln,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...ln.tags??[]])]}},{key:`react-doctor/client-localstorage-no-version`,id:`client-localstorage-no-version`,source:`react-doctor`,originallyExternal:!1,rule:{...ds,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...ds.requires??[]])]}},{key:`react-doctor/client-passive-event-listeners`,id:`client-passive-event-listeners`,source:`react-doctor`,originallyExternal:!1,rule:{...Yse,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Yse.requires??[]])]}},{key:`react-doctor/command-execution-input-risk`,id:`command-execution-input-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...jte,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...jte.tags??[]])]}},{key:`react-doctor/context-provider-value-from-unmemoized-local-literal`,id:`context-provider-value-from-unmemoized-local-literal`,source:`react-doctor`,originallyExternal:!1,rule:{...Tce,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Tce.requires??[]])]}},{key:`react-doctor/control-has-associated-label`,id:`control-has-associated-label`,source:`react-doctor`,originallyExternal:!0,rule:{...ale,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...ale.requires??[]])]}},{key:`react-doctor/cors-cookie-trust-risk`,id:`cors-cookie-trust-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...hn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...hn.tags??[]])]}},{key:`react-doctor/dangerous-html-sink`,id:`dangerous-html-sink`,source:`react-doctor`,originallyExternal:!1,rule:{...he,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...he.tags??[]])]}},{key:`react-doctor/data-table-requires-accessible-name`,id:`data-table-requires-accessible-name`,source:`react-doctor`,originallyExternal:!1,rule:{...hle,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...hle.requires??[]])]}},{key:`react-doctor/debounce-no-cleanup`,id:`debounce-no-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...jc,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...jc.requires??[]])]}},{key:`react-doctor/design-no-em-dash-in-jsx-text`,id:`design-no-em-dash-in-jsx-text`,source:`react-doctor`,originallyExternal:!1,rule:{...$c,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...$c.requires??[]])]}},{key:`react-doctor/design-no-redundant-padding-axes`,id:`design-no-redundant-padding-axes`,source:`react-doctor`,originallyExternal:!1,rule:{...nl,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...nl.requires??[]])]}},{key:`react-doctor/design-no-redundant-size-axes`,id:`design-no-redundant-size-axes`,source:`react-doctor`,originallyExternal:!1,rule:{...rl,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...rl.requires??[]])]}},{key:`react-doctor/design-no-space-on-flex-children`,id:`design-no-space-on-flex-children`,source:`react-doctor`,originallyExternal:!1,rule:{...il,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...il.requires??[]])]}},{key:`react-doctor/design-no-three-period-ellipsis`,id:`design-no-three-period-ellipsis`,source:`react-doctor`,originallyExternal:!1,rule:{...ol,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...ol.requires??[]])]}},{key:`react-doctor/design-no-vague-button-label`,id:`design-no-vague-button-label`,source:`react-doctor`,originallyExternal:!1,rule:{...dl,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...dl.requires??[]])]}},{key:`react-doctor/details-requires-summary`,id:`details-requires-summary`,source:`react-doctor`,originallyExternal:!1,rule:{...fl,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...fl.requires??[]])]}},{key:`react-doctor/dialog-has-accessible-name`,id:`dialog-has-accessible-name`,source:`react-doctor`,originallyExternal:!1,rule:{...pl,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...pl.requires??[]])]}},{key:`react-doctor/display-name`,id:`display-name`,source:`react-doctor`,originallyExternal:!0,rule:{...Al,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Al.requires??[]])]}},{key:`react-doctor/effect-listener-cleanup-mismatch`,id:`effect-listener-cleanup-mismatch`,source:`react-doctor`,originallyExternal:!1,rule:{...Yl,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Yl.requires??[]])]}},{key:`react-doctor/effect-listener-cleanup-reference-mismatch`,id:`effect-listener-cleanup-reference-mismatch`,source:`react-doctor`,originallyExternal:!1,rule:{...eu,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...eu.requires??[]])]}},{key:`react-doctor/effect-needs-cleanup`,id:`effect-needs-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...Nf,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Nf.requires??[]])]}},{key:`react-doctor/effect-observer-needs-disconnect`,id:`effect-observer-needs-disconnect`,source:`react-doctor`,originallyExternal:!1,rule:{...Rf,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Rf.requires??[]])]}},{key:`react-doctor/effect-raf-loop-needs-cancel`,id:`effect-raf-loop-needs-cancel`,source:`react-doctor`,originallyExternal:!1,rule:{...ip,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...ip.requires??[]])]}},{key:`react-doctor/effect-remove-listener-inline-handler`,id:`effect-remove-listener-inline-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...op,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...op.requires??[]])]}},{key:`react-doctor/empty-table-header`,id:`empty-table-header`,source:`react-doctor`,originallyExternal:!0,rule:{...sp,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...sp.requires??[]])]}},{key:`react-doctor/exhaustive-deps`,id:`exhaustive-deps`,source:`react-doctor`,originallyExternal:!0,rule:{...lhe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...lhe.requires??[]])]}},{key:`react-doctor/expo-no-non-inlined-env`,id:`expo-no-non-inlined-env`,source:`react-doctor`,originallyExternal:!1,rule:{...phe,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...phe.tags??[]])]}},{key:`react-doctor/fieldset-requires-legend`,id:`fieldset-requires-legend`,source:`react-doctor`,originallyExternal:!1,rule:{...hhe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...hhe.requires??[]])]}},{key:`react-doctor/firebase-client-owned-authz-field`,id:`firebase-client-owned-authz-field`,source:`react-doctor`,originallyExternal:!1,rule:{...ot,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...ot.tags??[]])]}},{key:`react-doctor/firebase-permissive-rules`,id:`firebase-permissive-rules`,source:`react-doctor`,originallyExternal:!1,rule:{...et,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...et.tags??[]])]}},{key:`react-doctor/firebase-query-filter-as-auth`,id:`firebase-query-filter-as-auth`,source:`react-doctor`,originallyExternal:!1,rule:{...iee,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...iee.tags??[]])]}},{key:`react-doctor/forbid-component-props`,id:`forbid-component-props`,source:`react-doctor`,originallyExternal:!0,rule:{...Che,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Che.requires??[]])]}},{key:`react-doctor/forbid-dom-props`,id:`forbid-dom-props`,source:`react-doctor`,originallyExternal:!0,rule:{...Ehe,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Ehe.requires??[]])]}},{key:`react-doctor/forbid-elements`,id:`forbid-elements`,source:`react-doctor`,originallyExternal:!0,rule:{...Ahe,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Ahe.requires??[]])]}},{key:`react-doctor/form-control-requires-name`,id:`form-control-requires-name`,source:`react-doctor`,originallyExternal:!1,rule:{...$he,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...$he.requires??[]])]}},{key:`react-doctor/forward-ref-uses-ref`,id:`forward-ref-uses-ref`,source:`react-doctor`,originallyExternal:!0,rule:{...ege,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...ege.requires??[]])]}},{key:`react-doctor/git-provider-url-injection-risk`,id:`git-provider-url-injection-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...it,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...it.tags??[]])]}},{key:`react-doctor/heading-has-content`,id:`heading-has-content`,source:`react-doctor`,originallyExternal:!0,rule:{...rge,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...rge.requires??[]])]}},{key:`react-doctor/hook-import-rename-loses-use-prefix`,id:`hook-import-rename-loses-use-prefix`,source:`react-doctor`,originallyExternal:!1,rule:{...uge,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...uge.requires??[]])]}},{key:`react-doctor/hook-use-state`,id:`hook-use-state`,source:`react-doctor`,originallyExternal:!0,rule:{...gge,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...gge.requires??[]])]}},{key:`react-doctor/hooks-no-nan-in-deps`,id:`hooks-no-nan-in-deps`,source:`react-doctor`,originallyExternal:!1,rule:{...yge,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...yge.requires??[]])]}},{key:`react-doctor/html-has-lang`,id:`html-has-lang`,source:`react-doctor`,originallyExternal:!0,rule:{...Cge,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Cge.requires??[]])]}},{key:`react-doctor/html-label-has-single-control`,id:`html-label-has-single-control`,source:`react-doctor`,originallyExternal:!1,rule:{...Tge,framework:`global`,category:`Bugs`}},{key:`react-doctor/html-no-invalid-paragraph-child`,id:`html-no-invalid-paragraph-child`,source:`react-doctor`,originallyExternal:!1,rule:{...Age,framework:`global`,category:`Bugs`}},{key:`react-doctor/html-no-invalid-table-nesting`,id:`html-no-invalid-table-nesting`,source:`react-doctor`,originallyExternal:!1,rule:{...zge,framework:`global`,category:`Bugs`}},{key:`react-doctor/html-no-nested-form`,id:`html-no-nested-form`,source:`react-doctor`,originallyExternal:!1,rule:{...Hge,framework:`global`,category:`Bugs`}},{key:`react-doctor/html-no-nested-interactive`,id:`html-no-nested-interactive`,source:`react-doctor`,originallyExternal:!1,rule:{...e_e,framework:`global`,category:`Accessibility`}},{key:`react-doctor/html-xml-lang-mismatch`,id:`html-xml-lang-mismatch`,source:`react-doctor`,originallyExternal:!0,rule:{...n_e,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...n_e.requires??[]])]}},{key:`react-doctor/iframe-has-title`,id:`iframe-has-title`,source:`react-doctor`,originallyExternal:!0,rule:{...l_e,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...l_e.requires??[]])]}},{key:`react-doctor/iframe-missing-sandbox`,id:`iframe-missing-sandbox`,source:`react-doctor`,originallyExternal:!0,rule:{...h_e,framework:`global`,category:`Security`,requires:[...new Set([`react`,...h_e.requires??[]])]}},{key:`react-doctor/iframe-title-unique`,id:`iframe-title-unique`,source:`react-doctor`,originallyExternal:!0,rule:{...v_e,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...v_e.requires??[]])]}},{key:`react-doctor/img-redundant-alt`,id:`img-redundant-alt`,source:`react-doctor`,originallyExternal:!0,rule:{...w_e,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...w_e.requires??[]])]}},{key:`react-doctor/import-metadata-execution-risk`,id:`import-metadata-execution-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...l,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...l.tags??[]])]}},{key:`react-doctor/ink-ctrl-c-handler-requires-exit-option`,id:`ink-ctrl-c-handler-requires-exit-option`,source:`react-doctor`,originallyExternal:!1,rule:{...j_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...j_e.tags??[]])]}},{key:`react-doctor/ink-newline-inside-text`,id:`ink-newline-inside-text`,source:`react-doctor`,originallyExternal:!1,rule:{...M_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...M_e.tags??[]])]}},{key:`react-doctor/ink-no-bare-process-exit`,id:`ink-no-bare-process-exit`,source:`react-doctor`,originallyExternal:!1,rule:{...F_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...F_e.tags??[]])]}},{key:`react-doctor/ink-no-direct-raw-mode`,id:`ink-no-direct-raw-mode`,source:`react-doctor`,originallyExternal:!1,rule:{...L_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...L_e.tags??[]])]}},{key:`react-doctor/ink-no-dom-host-elements`,id:`ink-no-dom-host-elements`,source:`react-doctor`,originallyExternal:!1,rule:{...B_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...B_e.tags??[]])]}},{key:`react-doctor/ink-no-dom-router`,id:`ink-no-dom-router`,source:`react-doctor`,originallyExternal:!1,rule:{...G_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...G_e.tags??[]])]}},{key:`react-doctor/ink-no-focus-in-render`,id:`ink-no-focus-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...J_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...J_e.tags??[]])]}},{key:`react-doctor/ink-no-layout-inside-text`,id:`ink-no-layout-inside-text`,source:`react-doctor`,originallyExternal:!1,rule:{...Z_e,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Z_e.tags??[]])]}},{key:`react-doctor/ink-no-live-hooks-in-render-to-string`,id:`ink-no-live-hooks-in-render-to-string`,source:`react-doctor`,originallyExternal:!1,rule:{...eve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...eve.tags??[]])]}},{key:`react-doctor/ink-no-measure-element-in-render`,id:`ink-no-measure-element-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...tve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...tve.tags??[]])]}},{key:`react-doctor/ink-no-multiple-static`,id:`ink-no-multiple-static`,source:`react-doctor`,originallyExternal:!1,rule:{...nve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...nve.tags??[]])]}},{key:`react-doctor/ink-no-raw-text`,id:`ink-no-raw-text`,source:`react-doctor`,originallyExternal:!1,rule:{...Tve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Tve.tags??[]])]}},{key:`react-doctor/ink-no-repeated-render`,id:`ink-no-repeated-render`,source:`react-doctor`,originallyExternal:!1,rule:{...Fve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Fve.tags??[]])]}},{key:`react-doctor/ink-prefer-use-animation`,id:`ink-prefer-use-animation`,source:`react-doctor`,originallyExternal:!1,rule:{...zve,framework:`global`,category:`Performance`,tags:[...new Set([`ink`,...zve.tags??[]])]}},{key:`react-doctor/ink-prefer-use-paste`,id:`ink-prefer-use-paste`,source:`react-doctor`,originallyExternal:!1,rule:{...Vve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Vve.tags??[]])]}},{key:`react-doctor/ink-static-is-append-only`,id:`ink-static-is-append-only`,source:`react-doctor`,originallyExternal:!1,rule:{...Uve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Uve.tags??[]])]}},{key:`react-doctor/ink-static-requires-key`,id:`ink-static-requires-key`,source:`react-doctor`,originallyExternal:!1,rule:{...Gve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Gve.tags??[]])]}},{key:`react-doctor/ink-suspense-requires-concurrent`,id:`ink-suspense-requires-concurrent`,source:`react-doctor`,originallyExternal:!1,rule:{...Kve,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...Kve.tags??[]])]}},{key:`react-doctor/ink-use-reactive-window-size`,id:`ink-use-reactive-window-size`,source:`react-doctor`,originallyExternal:!1,rule:{...tye,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...tye.tags??[]])]}},{key:`react-doctor/ink-use-string-width-for-cursor`,id:`ink-use-string-width-for-cursor`,source:`react-doctor`,originallyExternal:!1,rule:{...iye,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...iye.tags??[]])]}},{key:`react-doctor/ink-use-suspend-terminal`,id:`ink-use-suspend-terminal`,source:`react-doctor`,originallyExternal:!1,rule:{...fye,framework:`global`,category:`Bugs`,tags:[...new Set([`ink`,...fye.tags??[]])]}},{key:`react-doctor/ink-valid-aria-semantics`,id:`ink-valid-aria-semantics`,source:`react-doctor`,originallyExternal:!1,rule:{...hye,framework:`global`,category:`Accessibility`,tags:[...new Set([`ink`,...hye.tags??[]])]}},{key:`react-doctor/insecure-crypto-risk`,id:`insecure-crypto-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Fn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Fn.tags??[]])]}},{key:`react-doctor/insecure-session-cookie`,id:`insecure-session-cookie`,source:`react-doctor`,originallyExternal:!1,rule:{...Cee,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Cee.tags??[]])]}},{key:`react-doctor/interactive-supports-focus`,id:`interactive-supports-focus`,source:`react-doctor`,originallyExternal:!0,rule:{...Dye,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Dye.requires??[]])]}},{key:`react-doctor/jotai-derived-atom-returns-fresh-object`,id:`jotai-derived-atom-returns-fresh-object`,source:`react-doctor`,originallyExternal:!1,rule:{...zye,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...zye.requires??[]])]}},{key:`react-doctor/jotai-select-atom-in-render-body`,id:`jotai-select-atom-in-render-body`,source:`react-doctor`,originallyExternal:!1,rule:{..._h,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,..._h.requires??[]])]}},{key:`react-doctor/jotai-tq-use-raw-query-atom`,id:`jotai-tq-use-raw-query-atom`,source:`react-doctor`,originallyExternal:!1,rule:{...Sh,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Sh.requires??[]])]}},{key:`react-doctor/js-async-reduce-without-awaited-acc`,id:`js-async-reduce-without-awaited-acc`,source:`react-doctor`,originallyExternal:!1,rule:{...Qye,framework:`global`,category:`Performance`}},{key:`react-doctor/js-batch-dom-css`,id:`js-batch-dom-css`,source:`react-doctor`,originallyExternal:!1,rule:{...fbe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-cache-property-access`,id:`js-cache-property-access`,source:`react-doctor`,originallyExternal:!1,rule:{...hbe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-cache-storage`,id:`js-cache-storage`,source:`react-doctor`,originallyExternal:!1,rule:{..._be,framework:`global`,category:`Performance`}},{key:`react-doctor/js-combine-iterations`,id:`js-combine-iterations`,source:`react-doctor`,originallyExternal:!1,rule:{...Ebe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-early-exit`,id:`js-early-exit`,source:`react-doctor`,originallyExternal:!1,rule:{...Dbe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-flatmap-filter`,id:`js-flatmap-filter`,source:`react-doctor`,originallyExternal:!1,rule:{...Abe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-hoist-intl`,id:`js-hoist-intl`,source:`react-doctor`,originallyExternal:!1,rule:{...Gbe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-hoist-regexp`,id:`js-hoist-regexp`,source:`react-doctor`,originallyExternal:!1,rule:{...sxe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-index-maps`,id:`js-index-maps`,source:`react-doctor`,originallyExternal:!1,rule:{...mxe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-length-check-first`,id:`js-length-check-first`,source:`react-doctor`,originallyExternal:!1,rule:{...Dxe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-min-max-loop`,id:`js-min-max-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...Rxe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-set-map-lookups`,id:`js-set-map-lookups`,source:`react-doctor`,originallyExternal:!1,rule:{...kSe,framework:`global`,category:`Performance`}},{key:`react-doctor/js-tosorted-immutable`,id:`js-tosorted-immutable`,source:`react-doctor`,originallyExternal:!1,rule:{...FSe,framework:`global`,category:`Performance`}},{key:`react-doctor/jsx-boolean-value`,id:`jsx-boolean-value`,source:`react-doctor`,originallyExternal:!0,rule:{...n_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...n_.requires??[]])]}},{key:`react-doctor/jsx-curly-brace-presence`,id:`jsx-curly-brace-presence`,source:`react-doctor`,originallyExternal:!0,rule:{...l_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...l_.requires??[]])]}},{key:`react-doctor/jsx-filename-extension`,id:`jsx-filename-extension`,source:`react-doctor`,originallyExternal:!0,rule:{...d_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...d_.requires??[]])]}},{key:`react-doctor/jsx-fragments`,id:`jsx-fragments`,source:`react-doctor`,originallyExternal:!0,rule:{...f_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...f_.requires??[]])]}},{key:`react-doctor/jsx-handler-names`,id:`jsx-handler-names`,source:`react-doctor`,originallyExternal:!0,rule:{...h_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...h_.requires??[]])]}},{key:`react-doctor/jsx-key`,id:`jsx-key`,source:`react-doctor`,originallyExternal:!0,rule:{...D_,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...D_.requires??[]])]}},{key:`react-doctor/jsx-max-depth`,id:`jsx-max-depth`,source:`react-doctor`,originallyExternal:!0,rule:{...A_,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...A_.requires??[]])]}},{key:`react-doctor/jsx-no-comment-textnodes`,id:`jsx-no-comment-textnodes`,source:`react-doctor`,originallyExternal:!0,rule:{...j_,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...j_.requires??[]])]}},{key:`react-doctor/jsx-no-constructed-context-values`,id:`jsx-no-constructed-context-values`,source:`react-doctor`,originallyExternal:!0,rule:{...P_,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...P_.requires??[]])]}},{key:`react-doctor/jsx-no-duplicate-props`,id:`jsx-no-duplicate-props`,source:`react-doctor`,originallyExternal:!0,rule:{...F_,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...F_.requires??[]])]}},{key:`react-doctor/jsx-no-jsx-as-prop`,id:`jsx-no-jsx-as-prop`,source:`react-doctor`,originallyExternal:!0,rule:{...Y_,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Y_.requires??[]])]}},{key:`react-doctor/jsx-no-new-array-as-prop`,id:`jsx-no-new-array-as-prop`,source:`react-doctor`,originallyExternal:!0,rule:{...$_,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...$_.requires??[]])]}},{key:`react-doctor/jsx-no-new-function-as-prop`,id:`jsx-no-new-function-as-prop`,source:`react-doctor`,originallyExternal:!0,rule:{...cv,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...cv.requires??[]])]}},{key:`react-doctor/jsx-no-new-object-as-prop`,id:`jsx-no-new-object-as-prop`,source:`react-doctor`,originallyExternal:!0,rule:{...fv,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...fv.requires??[]])]}},{key:`react-doctor/jsx-no-script-url`,id:`jsx-no-script-url`,source:`react-doctor`,originallyExternal:!0,rule:{...pv,framework:`global`,category:`Security`,requires:[...new Set([`react`,...pv.requires??[]])]}},{key:`react-doctor/jsx-no-target-blank`,id:`jsx-no-target-blank`,source:`react-doctor`,originallyExternal:!0,rule:{...Tv,framework:`global`,category:`Security`,requires:[...new Set([`react`,...Tv.requires??[]])]}},{key:`react-doctor/jsx-no-undef`,id:`jsx-no-undef`,source:`react-doctor`,originallyExternal:!0,rule:{...Ov,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Ov.requires??[]])]}},{key:`react-doctor/jsx-no-useless-fragment`,id:`jsx-no-useless-fragment`,source:`react-doctor`,originallyExternal:!0,rule:{...Mv,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Mv.requires??[]])]}},{key:`react-doctor/jsx-numeric-and-leaked-render`,id:`jsx-numeric-and-leaked-render`,source:`react-doctor`,originallyExternal:!1,rule:{...dTe,framework:`global`,category:`Bugs`}},{key:`react-doctor/jsx-pascal-case`,id:`jsx-pascal-case`,source:`react-doctor`,originallyExternal:!0,rule:{...Jv,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Jv.requires??[]])]}},{key:`react-doctor/jsx-props-no-spread-multi`,id:`jsx-props-no-spread-multi`,source:`react-doctor`,originallyExternal:!0,rule:{...Xv,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Xv.requires??[]])]}},{key:`react-doctor/jsx-props-no-spreading`,id:`jsx-props-no-spreading`,source:`react-doctor`,originallyExternal:!0,rule:{...Zv,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...Zv.requires??[]])]}},{key:`react-doctor/jwt-insecure-verification`,id:`jwt-insecure-verification`,source:`react-doctor`,originallyExternal:!1,rule:{...uee,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...uee.tags??[]])]}},{key:`react-doctor/key-lifecycle-risk`,id:`key-lifecycle-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...oee,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...oee.tags??[]])]}},{key:`react-doctor/label-has-associated-control`,id:`label-has-associated-control`,source:`react-doctor`,originallyExternal:!0,rule:{...ay,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...ay.requires??[]])]}},{key:`react-doctor/lang`,id:`lang`,source:`react-doctor`,originallyExternal:!0,rule:{...sy,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...sy.requires??[]])]}},{key:`react-doctor/loading-action-preserves-trigger`,id:`loading-action-preserves-trigger`,source:`react-doctor`,originallyExternal:!1,rule:{...dy,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...dy.requires??[]])]}},{key:`react-doctor/local-rpc-native-bridge-risk`,id:`local-rpc-native-bridge-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...de,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...de.tags??[]])]}},{key:`react-doctor/mcp-tool-capability-risk`,id:`mcp-tool-capability-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Ve,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Ve.tags??[]])]}},{key:`react-doctor/mdx-ssr-execution-risk`,id:`mdx-ssr-execution-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Fe,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Fe.tags??[]])]}},{key:`react-doctor/media-has-caption`,id:`media-has-caption`,source:`react-doctor`,originallyExternal:!0,rule:{...py,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...py.requires??[]])]}},{key:`react-doctor/mobx-no-make-auto-observable-in-inheritance`,id:`mobx-no-make-auto-observable-in-inheritance`,source:`react-doctor`,originallyExternal:!1,rule:{...pEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/mobx-no-observer-wrapped-memo`,id:`mobx-no-observer-wrapped-memo`,source:`react-doctor`,originallyExternal:!1,rule:{...hEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/mobx-reaction-disposer-discarded`,id:`mobx-reaction-disposer-discarded`,source:`react-doctor`,originallyExternal:!1,rule:{...zEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-animate-presence-must-outlive-child`,id:`motion-animate-presence-must-outlive-child`,source:`react-doctor`,originallyExternal:!1,rule:{...qEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-animate-presence-requires-key`,id:`motion-animate-presence-requires-key`,source:`react-doctor`,originallyExternal:!1,rule:{...JEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-animate-presence-wait-single-child`,id:`motion-animate-presence-wait-single-child`,source:`react-doctor`,originallyExternal:!1,rule:{...YEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-create-in-render`,id:`motion-create-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...QEe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-drag-axis-constraint-mismatch`,id:`motion-drag-axis-constraint-mismatch`,source:`react-doctor`,originallyExternal:!1,rule:{...rDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-imperative-animation-in-render`,id:`motion-imperative-animation-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...sDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-keyframe-times-mismatch`,id:`motion-keyframe-times-mismatch`,source:`react-doctor`,originallyExternal:!1,rule:{...uDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-layout-on-inline-element`,id:`motion-layout-on-inline-element`,source:`react-doctor`,originallyExternal:!1,rule:{...pDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-unstable-layout-id-in-iteration`,id:`motion-unstable-layout-id-in-iteration`,source:`react-doctor`,originallyExternal:!1,rule:{...vDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-use-transform-range-length`,id:`motion-use-transform-range-length`,source:`react-doctor`,originallyExternal:!1,rule:{...yDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/motion-value-constructor-in-render`,id:`motion-value-constructor-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...eb,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...eb.requires??[]])]}},{key:`react-doctor/motion-value-subscription-in-render`,id:`motion-value-subscription-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...xDe,framework:`global`,category:`Bugs`}},{key:`react-doctor/mouse-events-have-key-events`,id:`mouse-events-have-key-events`,source:`react-doctor`,originallyExternal:!0,rule:{...ob,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...ob.requires??[]])]}},{key:`react-doctor/nextjs-async-client-component`,id:`nextjs-async-client-component`,source:`react-doctor`,originallyExternal:!1,rule:{...CDe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-async-dynamic-api-not-awaited`,id:`nextjs-async-dynamic-api-not-awaited`,source:`react-doctor`,originallyExternal:!1,rule:{...lOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-error-boundary-missing-use-client`,id:`nextjs-error-boundary-missing-use-client`,source:`react-doctor`,originallyExternal:!1,rule:{...uOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-global-error-missing-html-body`,id:`nextjs-global-error-missing-html-body`,source:`react-doctor`,originallyExternal:!1,rule:{...fOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-image-missing-sizes`,id:`nextjs-image-missing-sizes`,source:`react-doctor`,originallyExternal:!1,rule:{...mOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-inline-script-missing-id`,id:`nextjs-inline-script-missing-id`,source:`react-doctor`,originallyExternal:!1,rule:{...hOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-metadata-url-consistency`,id:`nextjs-metadata-url-consistency`,source:`react-doctor`,originallyExternal:!1,rule:{..._Oe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-missing-metadata`,id:`nextjs-missing-metadata`,source:`react-doctor`,originallyExternal:!1,rule:{...bOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-a-element`,id:`nextjs-no-a-element`,source:`react-doctor`,originallyExternal:!1,rule:{...xOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-client-fetch-for-server-data`,id:`nextjs-no-client-fetch-for-server-data`,source:`react-doctor`,originallyExternal:!1,rule:{...wOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-client-side-redirect`,id:`nextjs-no-client-side-redirect`,source:`react-doctor`,originallyExternal:!1,rule:{...POe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-css-link`,id:`nextjs-no-css-link`,source:`react-doctor`,originallyExternal:!1,rule:{...IOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-default-export-in-route-handler`,id:`nextjs-no-default-export-in-route-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...LOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-edge-og-runtime`,id:`nextjs-no-edge-og-runtime`,source:`react-doctor`,originallyExternal:!1,rule:{...ROe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-font-link`,id:`nextjs-no-font-link`,source:`react-doctor`,originallyExternal:!1,rule:{...zOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-google-analytics-script`,id:`nextjs-no-google-analytics-script`,source:`react-doctor`,originallyExternal:!1,rule:{...BOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-head-import`,id:`nextjs-no-head-import`,source:`react-doctor`,originallyExternal:!1,rule:{...VOe,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-img-element`,id:`nextjs-no-img-element`,source:`react-doctor`,originallyExternal:!1,rule:{...uke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-native-script`,id:`nextjs-no-native-script`,source:`react-doctor`,originallyExternal:!1,rule:{...pke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-polyfill-script`,id:`nextjs-no-polyfill-script`,source:`react-doctor`,originallyExternal:!1,rule:{...hke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-redirect-in-try-catch`,id:`nextjs-no-redirect-in-try-catch`,source:`react-doctor`,originallyExternal:!1,rule:{..._ke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-script-in-head`,id:`nextjs-no-script-in-head`,source:`react-doctor`,originallyExternal:!1,rule:{...bke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-side-effect-in-get-handler`,id:`nextjs-no-side-effect-in-get-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...Vke,framework:`nextjs`,category:`Security`}},{key:`react-doctor/nextjs-no-use-search-params-without-suspense`,id:`nextjs-no-use-search-params-without-suspense`,source:`react-doctor`,originallyExternal:!1,rule:{...qke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/nextjs-no-vercel-og-import`,id:`nextjs-no-vercel-og-import`,source:`react-doctor`,originallyExternal:!1,rule:{...Jke,framework:`nextjs`,category:`Bugs`}},{key:`react-doctor/no-access-key`,id:`no-access-key`,source:`react-doctor`,originallyExternal:!0,rule:{...cS,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...cS.requires??[]])]}},{key:`react-doctor/no-adjust-state-on-prop-change`,id:`no-adjust-state-on-prop-change`,source:`react-doctor`,originallyExternal:!0,rule:{...Cw,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Cw.requires??[]])]}},{key:`react-doctor/no-all-caps-body-text`,id:`no-all-caps-body-text`,source:`react-doctor`,originallyExternal:!1,rule:{...Tw,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...Tw.tags??[]])]}},{key:`react-doctor/no-arbitrary-px-font-size`,id:`no-arbitrary-px-font-size`,source:`react-doctor`,originallyExternal:!1,rule:{...Dw,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...Dw.tags??[]])]}},{key:`react-doctor/no-aria-hidden-on-body`,id:`no-aria-hidden-on-body`,source:`react-doctor`,originallyExternal:!0,rule:{...Ow,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Ow.requires??[]])]}},{key:`react-doctor/no-aria-hidden-on-focusable`,id:`no-aria-hidden-on-focusable`,source:`react-doctor`,originallyExternal:!0,rule:{...kw,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...kw.requires??[]])]}},{key:`react-doctor/no-aria-invalid-without-description`,id:`no-aria-invalid-without-description`,source:`react-doctor`,originallyExternal:!1,rule:{...Aw,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Aw.requires??[]])]}},{key:`react-doctor/no-arithmetic-on-optional-chained-operand`,id:`no-arithmetic-on-optional-chained-operand`,source:`react-doctor`,originallyExternal:!1,rule:{...aMe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-array-find-result-member-access-without-guard`,id:`no-array-find-result-member-access-without-guard`,source:`react-doctor`,originallyExternal:!1,rule:{...vMe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-array-index-as-key`,id:`no-array-index-as-key`,source:`react-doctor`,originallyExternal:!1,rule:{...dNe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-array-index-deref-without-bounds-or-empty-guard`,id:`no-array-index-deref-without-bounds-or-empty-guard`,source:`react-doctor`,originallyExternal:!1,rule:{...MNe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-array-index-key`,id:`no-array-index-key`,source:`react-doctor`,originallyExternal:!0,rule:{...YT,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...YT.requires??[]])]}},{key:`react-doctor/no-assertive-status`,id:`no-assertive-status`,source:`react-doctor`,originallyExternal:!1,rule:{...XT,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...XT.requires??[]])]}},{key:`react-doctor/no-async-effect-callback`,id:`no-async-effect-callback`,source:`react-doctor`,originallyExternal:!1,rule:{...ZT,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...ZT.requires??[]])]}},{key:`react-doctor/no-async-event-handler-without-reentry-guard`,id:`no-async-event-handler-without-reentry-guard`,source:`react-doctor`,originallyExternal:!1,rule:{...fE,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...fE.requires??[]])]}},{key:`react-doctor/no-auto-scrolling-content`,id:`no-auto-scrolling-content`,source:`react-doctor`,originallyExternal:!1,rule:{..._E,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,..._E.tags??[]])]}},{key:`react-doctor/no-autofocus`,id:`no-autofocus`,source:`react-doctor`,originallyExternal:!0,rule:{...SPe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...SPe.requires??[]])]}},{key:`react-doctor/no-autoplay-without-muted`,id:`no-autoplay-without-muted`,source:`react-doctor`,originallyExternal:!1,rule:{...wPe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...wPe.requires??[]])]}},{key:`react-doctor/no-barrel-import`,id:`no-barrel-import`,source:`react-doctor`,originallyExternal:!1,rule:{...VPe,framework:`global`,category:`Performance`}},{key:`react-doctor/no-blocked-paste`,id:`no-blocked-paste`,source:`react-doctor`,originallyExternal:!1,rule:{...KPe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...KPe.requires??[]])]}},{key:`react-doctor/no-boolean-toggle-without-functional-update`,id:`no-boolean-toggle-without-functional-update`,source:`react-doctor`,originallyExternal:!1,rule:{...fFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...fFe.requires??[]])]}},{key:`react-doctor/no-broken-image-source`,id:`no-broken-image-source`,source:`react-doctor`,originallyExternal:!1,rule:{...mFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...mFe.requires??[]])]}},{key:`react-doctor/no-call-component-as-function`,id:`no-call-component-as-function`,source:`react-doctor`,originallyExternal:!1,rule:{...SFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...SFe.requires??[]])]}},{key:`react-doctor/no-cascading-set-state`,id:`no-cascading-set-state`,source:`react-doctor`,originallyExternal:!1,rule:{...CFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...CFe.requires??[]])]}},{key:`react-doctor/no-chain-state-updates`,id:`no-chain-state-updates`,source:`react-doctor`,originallyExternal:!0,rule:{...JFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...JFe.requires??[]])]}},{key:`react-doctor/no-children-prop`,id:`no-children-prop`,source:`react-doctor`,originallyExternal:!0,rule:{...XFe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...XFe.requires??[]])]}},{key:`react-doctor/no-clipped-overlay`,id:`no-clipped-overlay`,source:`react-doctor`,originallyExternal:!1,rule:{...rIe,framework:`global`,category:`Bugs`,defaultEnabled:!1,tags:[...new Set([`design`,...rIe.tags??[]])]}},{key:`react-doctor/no-clone-element`,id:`no-clone-element`,source:`react-doctor`,originallyExternal:!0,rule:{...aIe,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...aIe.requires??[]])]}},{key:`react-doctor/no-collapse-request-error-to-empty-state`,id:`no-collapse-request-error-to-empty-state`,source:`react-doctor`,originallyExternal:!1,rule:{...MIe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...MIe.requires??[]])]}},{key:`react-doctor/no-collapsed-literal-or-chain-as-value`,id:`no-collapsed-literal-or-chain-as-value`,source:`react-doctor`,originallyExternal:!1,rule:{...HIe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-common-root-font`,id:`no-common-root-font`,source:`react-doctor`,originallyExternal:!1,rule:{...KIe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...KIe.tags??[]])]}},{key:`react-doctor/no-conflicting-spring-options`,id:`no-conflicting-spring-options`,source:`react-doctor`,originallyExternal:!1,rule:{...XIe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...XIe.requires??[]])]}},{key:`react-doctor/no-controlled-input-value-without-state-update`,id:`no-controlled-input-value-without-state-update`,source:`react-doctor`,originallyExternal:!1,rule:{...pLe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-controlled-selection-focus-effect`,id:`no-controlled-selection-focus-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...xLe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...xLe.requires??[]])]}},{key:`react-doctor/no-cramped-container-padding`,id:`no-cramped-container-padding`,source:`react-doctor`,originallyExternal:!1,rule:{...qLe,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...qLe.tags??[]])]}},{key:`react-doctor/no-create-context-in-render`,id:`no-create-context-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...JLe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...JLe.requires??[]])]}},{key:`react-doctor/no-create-object-url-in-render`,id:`no-create-object-url-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...XLe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...XLe.requires??[]])]}},{key:`react-doctor/no-create-object-url-without-revoke`,id:`no-create-object-url-without-revoke`,source:`react-doctor`,originallyExternal:!1,rule:{...HRe,framework:`global`,category:`Performance`}},{key:`react-doctor/no-create-ref-in-function-component`,id:`no-create-ref-in-function-component`,source:`react-doctor`,originallyExternal:!1,rule:{...vze,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...vze.requires??[]])]}},{key:`react-doctor/no-create-store-in-render`,id:`no-create-store-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...xze,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...xze.requires??[]])]}},{key:`react-doctor/no-crushed-letter-spacing`,id:`no-crushed-letter-spacing`,source:`react-doctor`,originallyExternal:!1,rule:{...Tze,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...Tze.tags??[]])]}},{key:`react-doctor/no-danger`,id:`no-danger`,source:`react-doctor`,originallyExternal:!0,rule:{...Dze,framework:`global`,category:`Security`,requires:[...new Set([`react`,...Dze.requires??[]])]}},{key:`react-doctor/no-danger-with-children`,id:`no-danger-with-children`,source:`react-doctor`,originallyExternal:!0,rule:{...Nze,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...Nze.requires??[]])]}},{key:`react-doctor/no-dark-mode-glow`,id:`no-dark-mode-glow`,source:`react-doctor`,originallyExternal:!1,rule:{...Yze,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Yze.tags??[]])]}},{key:`react-doctor/no-decorative-blur-orb`,id:`no-decorative-blur-orb`,source:`react-doctor`,originallyExternal:!1,rule:{...tBe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...tBe.tags??[]])]}},{key:`react-doctor/no-decorative-grid-background`,id:`no-decorative-grid-background`,source:`react-doctor`,originallyExternal:!1,rule:{...gBe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...gBe.tags??[]])]}},{key:`react-doctor/no-decorative-pulse`,id:`no-decorative-pulse`,source:`react-doctor`,originallyExternal:!1,rule:{...VBe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...VBe.tags??[]])]}},{key:`react-doctor/no-decorative-radial-spotlight`,id:`no-decorative-radial-spotlight`,source:`react-doctor`,originallyExternal:!1,rule:{...uVe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...uVe.tags??[]])]}},{key:`react-doctor/no-default-props`,id:`no-default-props`,source:`react-doctor`,originallyExternal:!1,rule:{...pVe,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-default-purple-page-gradient`,id:`no-default-purple-page-gradient`,source:`react-doctor`,originallyExternal:!1,rule:{...vVe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...vVe.tags??[]])]}},{key:`react-doctor/no-default-warm-page-surface`,id:`no-default-warm-page-surface`,source:`react-doctor`,originallyExternal:!1,rule:{...xVe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...xVe.tags??[]])]}},{key:`react-doctor/no-deprecated-keyboard-event-keycode-which`,id:`no-deprecated-keyboard-event-keycode-which`,source:`react-doctor`,originallyExternal:!1,rule:{...GVe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-deprecated-tailwind-class`,id:`no-deprecated-tailwind-class`,source:`react-doctor`,originallyExternal:!1,rule:{...qVe,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...qVe.tags??[]])]}},{key:`react-doctor/no-derived-state`,id:`no-derived-state`,source:`react-doctor`,originallyExternal:!0,rule:{...pHe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...pHe.requires??[]])]}},{key:`react-doctor/no-derived-state-effect`,id:`no-derived-state-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...mHe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...mHe.requires??[]])]}},{key:`react-doctor/no-derived-useState`,id:`no-derived-useState`,source:`react-doctor`,originallyExternal:!1,rule:{...zHe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...zHe.requires??[]])]}},{key:`react-doctor/no-did-mount-set-state`,id:`no-did-mount-set-state`,source:`react-doctor`,originallyExternal:!0,rule:{...WUe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...WUe.requires??[]])]}},{key:`react-doctor/no-did-update-set-state`,id:`no-did-update-set-state`,source:`react-doctor`,originallyExternal:!0,rule:{..._Ue,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,..._Ue.requires??[]])]}},{key:`react-doctor/no-direct-mutation-state`,id:`no-direct-mutation-state`,source:`react-doctor`,originallyExternal:!0,rule:{...YUe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...YUe.requires??[]])]}},{key:`react-doctor/no-direct-state-mutation`,id:`no-direct-state-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...cWe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...cWe.requires??[]])]}},{key:`react-doctor/no-disabled-zoom`,id:`no-disabled-zoom`,source:`react-doctor`,originallyExternal:!1,rule:{...lWe,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...lWe.tags??[]])]}},{key:`react-doctor/no-distracting-elements`,id:`no-distracting-elements`,source:`react-doctor`,originallyExternal:!0,rule:{...pWe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...pWe.requires??[]])]}},{key:`react-doctor/no-document-start-view-transition`,id:`no-document-start-view-transition`,source:`react-doctor`,originallyExternal:!1,rule:{...gWe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...gWe.requires??[]])]}},{key:`react-doctor/no-document-write`,id:`no-document-write`,source:`react-doctor`,originallyExternal:!1,rule:{...yWe,framework:`global`,category:`Performance`}},{key:`react-doctor/no-duplicate-static-id-reference`,id:`no-duplicate-static-id-reference`,source:`react-doctor`,originallyExternal:!0,rule:{...xWe,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...xWe.requires??[]])]}},{key:`react-doctor/no-dynamic-import-path`,id:`no-dynamic-import-path`,source:`react-doctor`,originallyExternal:!1,rule:{...KWe,framework:`global`,category:`Performance`}},{key:`react-doctor/no-dynamic-tailwind-class-fragment`,id:`no-dynamic-tailwind-class-fragment`,source:`react-doctor`,originallyExternal:!1,rule:{...ZWe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...ZWe.tags??[]])]}},{key:`react-doctor/no-eager-new-in-use-state-initializer`,id:`no-eager-new-in-use-state-initializer`,source:`react-doctor`,originallyExternal:!1,rule:{...sGe,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...sGe.requires??[]])]}},{key:`react-doctor/no-ease-in-motion`,id:`no-ease-in-motion`,source:`react-doctor`,originallyExternal:!1,rule:{...uGe,framework:`global`,category:`Performance`,defaultEnabled:!1,tags:[...new Set([`design`,...uGe.tags??[]])]}},{key:`react-doctor/no-effect-chain`,id:`no-effect-chain`,source:`react-doctor`,originallyExternal:!1,rule:{...LKe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...LKe.requires??[]])]}},{key:`react-doctor/no-effect-event-handler`,id:`no-effect-event-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...eqe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...eqe.requires??[]])]}},{key:`react-doctor/no-effect-event-in-deps`,id:`no-effect-event-in-deps`,source:`react-doctor`,originallyExternal:!1,rule:{...aqe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...aqe.requires??[]])]}},{key:`react-doctor/no-effect-with-fresh-deps`,id:`no-effect-with-fresh-deps`,source:`react-doctor`,originallyExternal:!1,rule:{...cqe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...cqe.requires??[]])]}},{key:`react-doctor/no-effect-wrapper-discards-callback-cleanup-return`,id:`no-effect-wrapper-discards-callback-cleanup-return`,source:`react-doctor`,originallyExternal:!1,rule:{...xqe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...xqe.requires??[]])]}},{key:`react-doctor/no-emoji-heading-decoration`,id:`no-emoji-heading-decoration`,source:`react-doctor`,originallyExternal:!1,rule:{...Eqe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Eqe.tags??[]])]}},{key:`react-doctor/no-empty-card-shell`,id:`no-empty-card-shell`,source:`react-doctor`,originallyExternal:!1,rule:{...jqe,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...jqe.tags??[]])]}},{key:`react-doctor/no-enter-submit-without-ime-composition-guard`,id:`no-enter-submit-without-ime-composition-guard`,source:`react-doctor`,originallyExternal:!1,rule:{...lJe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-eval`,id:`no-eval`,source:`react-doctor`,originallyExternal:!1,rule:{...fJe,framework:`global`,category:`Security`}},{key:`react-doctor/no-event-handler`,id:`no-event-handler`,source:`react-doctor`,originallyExternal:!0,rule:{...kJe,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...kJe.requires??[]])]}},{key:`react-doctor/no-event-trigger-state`,id:`no-event-trigger-state`,source:`react-doctor`,originallyExternal:!1,rule:{...TA,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...TA.requires??[]])]}},{key:`react-doctor/no-excessive-card-surfaces`,id:`no-excessive-card-surfaces`,source:`react-doctor`,originallyExternal:!1,rule:{...MA,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...MA.tags??[]])]}},{key:`react-doctor/no-excessive-centered-copy`,id:`no-excessive-centered-copy`,source:`react-doctor`,originallyExternal:!1,rule:{...NA,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...NA.tags??[]])]}},{key:`react-doctor/no-excessive-font-families`,id:`no-excessive-font-families`,source:`react-doctor`,originallyExternal:!1,rule:{...PA,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...PA.tags??[]])]}},{key:`react-doctor/no-excessive-motion-stagger`,id:`no-excessive-motion-stagger`,source:`react-doctor`,originallyExternal:!1,rule:{...FA,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...FA.requires??[]])]}},{key:`react-doctor/no-excessive-pill-treatment`,id:`no-excessive-pill-treatment`,source:`react-doctor`,originallyExternal:!1,rule:{...IA,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...IA.tags??[]])]}},{key:`react-doctor/no-fake-browser-chrome`,id:`no-fake-browser-chrome`,source:`react-doctor`,originallyExternal:!1,rule:{...zA,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...zA.tags??[]])]}},{key:`react-doctor/no-fetch-in-effect`,id:`no-fetch-in-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...KA,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...KA.requires??[]])]}},{key:`react-doctor/no-fetch-response-used-without-status-check`,id:`no-fetch-response-used-without-status-check`,source:`react-doctor`,originallyExternal:!1,rule:{...JYe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-fill-map-element-as-key`,id:`no-fill-map-element-as-key`,source:`react-doctor`,originallyExternal:!1,rule:{...aXe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-find-dom-node`,id:`no-find-dom-node`,source:`react-doctor`,originallyExternal:!0,rule:{...cj,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...cj.requires??[]])]}},{key:`react-doctor/no-fixed-inside-transformed-ancestor`,id:`no-fixed-inside-transformed-ancestor`,source:`react-doctor`,originallyExternal:!1,rule:{...dj,framework:`global`,category:`Bugs`,tags:[...new Set([`design`,...dj.tags??[]])]}},{key:`react-doctor/no-flat-page-type-scale`,id:`no-flat-page-type-scale`,source:`react-doctor`,originallyExternal:!1,rule:{...hj,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...hj.tags??[]])]}},{key:`react-doctor/no-floating-then-in-jsx-handler`,id:`no-floating-then-in-jsx-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...yXe,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-flush-sync`,id:`no-flush-sync`,source:`react-doctor`,originallyExternal:!1,rule:{...Cj,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Cj.requires??[]])]}},{key:`react-doctor/no-focus-in-animation-completion-handler`,id:`no-focus-in-animation-completion-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...Nj,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...Nj.tags??[]])]}},{key:`react-doctor/no-focusable-content-in-aria-hidden`,id:`no-focusable-content-in-aria-hidden`,source:`react-doctor`,originallyExternal:!1,rule:{...Pj,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Pj.requires??[]])]}},{key:`react-doctor/no-focusable-content-in-role-text`,id:`no-focusable-content-in-role-text`,source:`react-doctor`,originallyExternal:!0,rule:{...Fj,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...Fj.requires??[]])]}},{key:`react-doctor/no-full-lodash-import`,id:`no-full-lodash-import`,source:`react-doctor`,originallyExternal:!1,rule:{...rZe,framework:`global`,category:`Performance`}},{key:`react-doctor/no-full-viewport-centered-hero`,id:`no-full-viewport-centered-hero`,source:`react-doctor`,originallyExternal:!1,rule:{...Bj,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Bj.tags??[]])]}},{key:`react-doctor/no-full-viewport-width`,id:`no-full-viewport-width`,source:`react-doctor`,originallyExternal:!1,rule:{...Hj,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Hj.tags??[]])]}},{key:`react-doctor/no-generic-handler-names`,id:`no-generic-handler-names`,source:`react-doctor`,originallyExternal:!1,rule:{...uZe,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-generic-marketing-copy`,id:`no-generic-marketing-copy`,source:`react-doctor`,originallyExternal:!1,rule:{...Kj,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Kj.tags??[]])]}},{key:`react-doctor/no-generic-purple-blue-icon-gradient`,id:`no-generic-purple-blue-icon-gradient`,source:`react-doctor`,originallyExternal:!1,rule:{...Yj,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...Yj.tags??[]])]}},{key:`react-doctor/no-giant-component`,id:`no-giant-component`,source:`react-doctor`,originallyExternal:!1,rule:{...SZe,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-global-css-variable-animation`,id:`no-global-css-variable-animation`,source:`react-doctor`,originallyExternal:!1,rule:{...Xj,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Xj.requires??[]])]}},{key:`react-doctor/no-gradient-text`,id:`no-gradient-text`,source:`react-doctor`,originallyExternal:!1,rule:{...$j,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...$j.tags??[]])]}},{key:`react-doctor/no-gray-on-colored-background`,id:`no-gray-on-colored-background`,source:`react-doctor`,originallyExternal:!1,rule:{...cM,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...cM.tags??[]])]}},{key:`react-doctor/no-hairline-border-wide-shadow`,id:`no-hairline-border-wide-shadow`,source:`react-doctor`,originallyExternal:!1,rule:{...lM,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...lM.tags??[]])]}},{key:`react-doctor/no-hero-eyebrow-chip`,id:`no-hero-eyebrow-chip`,source:`react-doctor`,originallyExternal:!1,rule:{...pM,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...pM.tags??[]])]}},{key:`react-doctor/no-hover-only-reveal`,id:`no-hover-only-reveal`,source:`react-doctor`,originallyExternal:!1,rule:{...CM,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...CM.tags??[]])]}},{key:`react-doctor/no-hydration-branch-on-browser-global`,id:`no-hydration-branch-on-browser-global`,source:`react-doctor`,originallyExternal:!1,rule:{...gN,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...gN.requires??[]])]}},{key:`react-doctor/no-icon-tile-heading-stack`,id:`no-icon-tile-heading-stack`,source:`react-doctor`,originallyExternal:!1,rule:{...vN,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...vN.tags??[]])]}},{key:`react-doctor/no-image-hover-transform`,id:`no-image-hover-transform`,source:`react-doctor`,originallyExternal:!1,rule:{...TN,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...TN.tags??[]])]}},{key:`react-doctor/no-img-lazy-with-high-fetchpriority`,id:`no-img-lazy-with-high-fetchpriority`,source:`react-doctor`,originallyExternal:!1,rule:{...EN,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...EN.requires??[]])]}},{key:`react-doctor/no-img-without-dimensions`,id:`no-img-without-dimensions`,source:`react-doctor`,originallyExternal:!1,rule:{...fP,framework:`global`,category:`Performance`,tags:[...new Set([`design`,...fP.tags??[]])]}},{key:`react-doctor/no-impure-call-at-module-scope`,id:`no-impure-call-at-module-scope`,source:`react-doctor`,originallyExternal:!1,rule:{...k$e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-impure-state-updater`,id:`no-impure-state-updater`,source:`react-doctor`,originallyExternal:!1,rule:{...bP,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...bP.requires??[]])]}},{key:`react-doctor/no-indeterminate-attribute`,id:`no-indeterminate-attribute`,source:`react-doctor`,originallyExternal:!1,rule:{...q$e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-inert-pointer-affordance`,id:`no-inert-pointer-affordance`,source:`react-doctor`,originallyExternal:!1,rule:{...TP,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...TP.tags??[]])]}},{key:`react-doctor/no-inert-sticky-position`,id:`no-inert-sticky-position`,source:`react-doctor`,originallyExternal:!1,rule:{...EP,framework:`global`,category:`Bugs`,tags:[...new Set([`design`,...EP.tags??[]])]}},{key:`react-doctor/no-initialize-state`,id:`no-initialize-state`,source:`react-doctor`,originallyExternal:!0,rule:{...OP,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...OP.requires??[]])]}},{key:`react-doctor/no-inline-bounce-easing`,id:`no-inline-bounce-easing`,source:`react-doctor`,originallyExternal:!1,rule:{...kP,framework:`global`,category:`Performance`,defaultEnabled:!1,tags:[...new Set([`design`,...kP.tags??[]])]}},{key:`react-doctor/no-inline-exhaustive-style`,id:`no-inline-exhaustive-style`,source:`react-doctor`,originallyExternal:!1,rule:{...AP,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...AP.tags??[]])]}},{key:`react-doctor/no-inline-hoc-on-component`,id:`no-inline-hoc-on-component`,source:`react-doctor`,originallyExternal:!1,rule:{...x1e,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-inline-prop-on-memo-component`,id:`no-inline-prop-on-memo-component`,source:`react-doctor`,originallyExternal:!1,rule:{...LP,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...LP.requires??[]])]}},{key:`react-doctor/no-interactive-element-to-noninteractive-role`,id:`no-interactive-element-to-noninteractive-role`,source:`react-doctor`,originallyExternal:!0,rule:{...zP,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...zP.requires??[]])]}},{key:`react-doctor/no-invalid-progress-range`,id:`no-invalid-progress-range`,source:`react-doctor`,originallyExternal:!1,rule:{...VP,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...VP.requires??[]])]}},{key:`react-doctor/no-invisible-focus-control`,id:`no-invisible-focus-control`,source:`react-doctor`,originallyExternal:!1,rule:{...KP,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...KP.tags??[]])]}},{key:`react-doctor/no-is-mounted`,id:`no-is-mounted`,source:`react-doctor`,originallyExternal:!0,rule:{...JP,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...JP.requires??[]])]}},{key:`react-doctor/no-italic-serif-display-heading`,id:`no-italic-serif-display-heading`,source:`react-doctor`,originallyExternal:!1,rule:{...YP,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...YP.tags??[]])]}},{key:`react-doctor/no-json-parse-stringify-clone`,id:`no-json-parse-stringify-clone`,source:`react-doctor`,originallyExternal:!1,rule:{...q1e,framework:`global`,category:`Performance`}},{key:`react-doctor/no-jsx-element-type`,id:`no-jsx-element-type`,source:`react-doctor`,originallyExternal:!1,rule:{...Z1e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-justified-text`,id:`no-justified-text`,source:`react-doctor`,originallyExternal:!1,rule:{...nF,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...nF.tags??[]])]}},{key:`react-doctor/no-large-animated-blur`,id:`no-large-animated-blur`,source:`react-doctor`,originallyExternal:!1,rule:{...aF,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...aF.requires??[]])]}},{key:`react-doctor/no-layout-property-animation`,id:`no-layout-property-animation`,source:`react-doctor`,originallyExternal:!1,rule:{...oF,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...oF.requires??[]])]}},{key:`react-doctor/no-layout-shifting-interaction-state`,id:`no-layout-shifting-interaction-state`,source:`react-doctor`,originallyExternal:!1,rule:{...dF,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...dF.tags??[]])]}},{key:`react-doctor/no-layout-transition-inline`,id:`no-layout-transition-inline`,source:`react-doctor`,originallyExternal:!1,rule:{...pF,framework:`global`,category:`Performance`,defaultEnabled:!1,tags:[...new Set([`design`,...pF.tags??[]])]}},{key:`react-doctor/no-legacy-class-lifecycles`,id:`no-legacy-class-lifecycles`,source:`react-doctor`,originallyExternal:!1,rule:{...p0e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-legacy-context-api`,id:`no-legacy-context-api`,source:`react-doctor`,originallyExternal:!1,rule:{...y0e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-loading-flag-reset-outside-finally`,id:`no-loading-flag-reset-outside-finally`,source:`react-doctor`,originallyExternal:!1,rule:{...DI,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...DI.requires??[]])]}},{key:`react-doctor/no-locale-format-in-render`,id:`no-locale-format-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...KI,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...KI.requires??[]])]}},{key:`react-doctor/no-long-transition-duration`,id:`no-long-transition-duration`,source:`react-doctor`,originallyExternal:!1,rule:{...qI,framework:`global`,category:`Performance`,defaultEnabled:!1,tags:[...new Set([`design`,...qI.tags??[]])]}},{key:`react-doctor/no-low-contrast-inline-style`,id:`no-low-contrast-inline-style`,source:`react-doctor`,originallyExternal:!1,rule:{...QI,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...QI.tags??[]])]}},{key:`react-doctor/no-manufactured-contrast-copy`,id:`no-manufactured-contrast-copy`,source:`react-doctor`,originallyExternal:!1,rule:{...tL,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...tL.tags??[]])]}},{key:`react-doctor/no-many-boolean-props`,id:`no-many-boolean-props`,source:`react-doctor`,originallyExternal:!1,rule:{...Q2e,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-match-media-in-state-initializer`,id:`no-match-media-in-state-initializer`,source:`react-doctor`,originallyExternal:!1,rule:{...aL,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...aL.requires??[]])]}},{key:`react-doctor/no-mirror-prop-effect`,id:`no-mirror-prop-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...oL,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...oL.requires??[]])]}},{key:`react-doctor/no-mixed-animation-owners`,id:`no-mixed-animation-owners`,source:`react-doctor`,originallyExternal:!1,rule:{...CL,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...CL.tags??[]])]}},{key:`react-doctor/no-mixed-icon-libraries`,id:`no-mixed-icon-libraries`,source:`react-doctor`,originallyExternal:!1,rule:{...AL,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...AL.tags??[]])]}},{key:`react-doctor/no-mixed-srcset-descriptors`,id:`no-mixed-srcset-descriptors`,source:`react-doctor`,originallyExternal:!1,rule:{...Y4e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-moment`,id:`no-moment`,source:`react-doctor`,originallyExternal:!1,rule:{...X4e,framework:`global`,category:`Performance`}},{key:`react-doctor/no-monotonous-page-spacing`,id:`no-monotonous-page-spacing`,source:`react-doctor`,originallyExternal:!1,rule:{...NL,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...NL.tags??[]])]}},{key:`react-doctor/no-multi-comp`,id:`no-multi-comp`,source:`react-doctor`,originallyExternal:!0,rule:{...tR,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...tR.requires??[]])]}},{key:`react-doctor/no-multiple-main-landmarks`,id:`no-multiple-main-landmarks`,source:`react-doctor`,originallyExternal:!1,rule:{...nR,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...nR.requires??[]])]}},{key:`react-doctor/no-multiple-unlabeled-navigation-landmarks`,id:`no-multiple-unlabeled-navigation-landmarks`,source:`react-doctor`,originallyExternal:!1,rule:{...oR,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...oR.requires??[]])]}},{key:`react-doctor/no-mutable-in-deps`,id:`no-mutable-in-deps`,source:`react-doctor`,originallyExternal:!1,rule:{...sR,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...sR.requires??[]])]}},{key:`react-doctor/no-mutate-queried-dom-node-in-component`,id:`no-mutate-queried-dom-node-in-component`,source:`react-doctor`,originallyExternal:!1,rule:{...M3e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-mutate-then-set-or-return-same-reference`,id:`no-mutate-then-set-or-return-same-reference`,source:`react-doctor`,originallyExternal:!1,rule:{...FR,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...FR.requires??[]])]}},{key:`react-doctor/no-mutating-array-method-on-prop-or-hook-result`,id:`no-mutating-array-method-on-prop-or-hook-result`,source:`react-doctor`,originallyExternal:!1,rule:{...f6e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-mutating-reducer-state`,id:`no-mutating-reducer-state`,source:`react-doctor`,originallyExternal:!1,rule:{...lz,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...lz.requires??[]])]}},{key:`react-doctor/no-namespace`,id:`no-namespace`,source:`react-doctor`,originallyExternal:!0,rule:{...dz,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...dz.requires??[]])]}},{key:`react-doctor/no-nested-card-surface`,id:`no-nested-card-surface`,source:`react-doctor`,originallyExternal:!1,rule:{...pz,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...pz.tags??[]])]}},{key:`react-doctor/no-nested-component-definition`,id:`no-nested-component-definition`,source:`react-doctor`,originallyExternal:!1,rule:{...k6e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-non-literal-selector-query-without-try-catch`,id:`no-non-literal-selector-query-without-try-catch`,source:`react-doctor`,originallyExternal:!1,rule:{...u8e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-non-null-assertion-on-maybe-undefined-result`,id:`no-non-null-assertion-on-maybe-undefined-result`,source:`react-doctor`,originallyExternal:!1,rule:{...R8e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-nondeterministic-id-value-in-render-body`,id:`no-nondeterministic-id-value-in-render-body`,source:`react-doctor`,originallyExternal:!1,rule:{...q8e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-noninteractive-element-interactions`,id:`no-noninteractive-element-interactions`,source:`react-doctor`,originallyExternal:!0,rule:{...dB,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...dB.requires??[]])]}},{key:`react-doctor/no-noninteractive-element-to-interactive-role`,id:`no-noninteractive-element-to-interactive-role`,source:`react-doctor`,originallyExternal:!0,rule:{...pB,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...pB.requires??[]])]}},{key:`react-doctor/no-noninteractive-tabindex`,id:`no-noninteractive-tabindex`,source:`react-doctor`,originallyExternal:!0,rule:{...vB,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...vB.requires??[]])]}},{key:`react-doctor/no-nonresizable-textarea`,id:`no-nonresizable-textarea`,source:`react-doctor`,originallyExternal:!1,rule:{...yB,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...yB.requires??[]])]}},{key:`react-doctor/no-nullish-coalescing-arithmetic-precedence`,id:`no-nullish-coalescing-arithmetic-precedence`,source:`react-doctor`,originallyExternal:!1,rule:{...v5e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-numbered-section-markers`,id:`no-numbered-section-markers`,source:`react-doctor`,originallyExternal:!1,rule:{...kB,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...kB.tags??[]])]}},{key:`react-doctor/no-object-keys-values-entries-on-maybe-undefined`,id:`no-object-keys-values-entries-on-maybe-undefined`,source:`react-doctor`,originallyExternal:!1,rule:{...e7e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-object-or-array-coerced-to-string-in-template-literal`,id:`no-object-or-array-coerced-to-string-in-template-literal`,source:`react-doctor`,originallyExternal:!1,rule:{...u7e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-outline-none`,id:`no-outline-none`,source:`react-doctor`,originallyExternal:!1,rule:{...GB,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...GB.tags??[]])]}},{key:`react-doctor/no-overloaded-hover-state`,id:`no-overloaded-hover-state`,source:`react-doctor`,originallyExternal:!1,rule:{...qB,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...qB.tags??[]])]}},{key:`react-doctor/no-oversized-long-heading`,id:`no-oversized-long-heading`,source:`react-doctor`,originallyExternal:!1,rule:{...JB,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...JB.tags??[]])]}},{key:`react-doctor/no-overwide-text-measure`,id:`no-overwide-text-measure`,source:`react-doctor`,originallyExternal:!1,rule:{...YB,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...YB.tags??[]])]}},{key:`react-doctor/no-pass-data-to-parent`,id:`no-pass-data-to-parent`,source:`react-doctor`,originallyExternal:!0,rule:{...UV,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...UV.requires??[]])]}},{key:`react-doctor/no-pass-live-state-to-parent`,id:`no-pass-live-state-to-parent`,source:`react-doctor`,originallyExternal:!0,rule:{...QV,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...QV.requires??[]])]}},{key:`react-doctor/no-passive-request-owner-ref`,id:`no-passive-request-owner-ref`,source:`react-doctor`,originallyExternal:!1,rule:{...tH,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...tH.requires??[]])]}},{key:`react-doctor/no-path-prefix-containment`,id:`no-path-prefix-containment`,source:`react-doctor`,originallyExternal:!1,rule:{..._9e,framework:`global`,category:`Security`}},{key:`react-doctor/no-permanent-will-change`,id:`no-permanent-will-change`,source:`react-doctor`,originallyExternal:!1,rule:{...sH,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...sH.requires??[]])]}},{key:`react-doctor/no-pill-navigation-count`,id:`no-pill-navigation-count`,source:`react-doctor`,originallyExternal:!1,rule:{...lH,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...lH.tags??[]])]}},{key:`react-doctor/no-placeholder-only-field`,id:`no-placeholder-only-field`,source:`react-doctor`,originallyExternal:!1,rule:{...pH,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...pH.requires??[]])]}},{key:`react-doctor/no-placeholder-persona-copy`,id:`no-placeholder-persona-copy`,source:`react-doctor`,originallyExternal:!1,rule:{...mH,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...mH.tags??[]])]}},{key:`react-doctor/no-pointer-disabled-enabled-control`,id:`no-pointer-disabled-enabled-control`,source:`react-doctor`,originallyExternal:!1,rule:{...hH,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...hH.tags??[]])]}},{key:`react-doctor/no-polymorphic-children`,id:`no-polymorphic-children`,source:`react-doctor`,originallyExternal:!1,rule:{...R9e,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-predicate-function-reference-in-boolean-position`,id:`no-predicate-function-reference-in-boolean-position`,source:`react-doctor`,originallyExternal:!1,rule:{...G9e,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-presentation-role-conflict`,id:`no-presentation-role-conflict`,source:`react-doctor`,originallyExternal:!0,rule:{...EH,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...EH.requires??[]])]}},{key:`react-doctor/no-prevent-default`,id:`no-prevent-default`,source:`react-doctor`,originallyExternal:!1,rule:{...fet,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-promise-then-side-effect-in-effect-without-catch`,id:`no-promise-then-side-effect-in-effect-without-catch`,source:`react-doctor`,originallyExternal:!1,rule:{...RH,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...RH.requires??[]])]}},{key:`react-doctor/no-prop-callback-in-effect`,id:`no-prop-callback-in-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...BH,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...BH.requires??[]])]}},{key:`react-doctor/no-prop-callback-in-render`,id:`no-prop-callback-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...KH,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...KH.requires??[]])]}},{key:`react-doctor/no-prop-types`,id:`no-prop-types`,source:`react-doctor`,originallyExternal:!1,rule:{...Uet,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-pulsing-status-dot`,id:`no-pulsing-status-dot`,source:`react-doctor`,originallyExternal:!1,rule:{...ZH,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...ZH.tags??[]])]}},{key:`react-doctor/no-pure-black-background`,id:`no-pure-black-background`,source:`react-doctor`,originallyExternal:!1,rule:{...QH,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...QH.tags??[]])]}},{key:`react-doctor/no-pure-black-shadow`,id:`no-pure-black-shadow`,source:`react-doctor`,originallyExternal:!1,rule:{...eU,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...eU.tags??[]])]}},{key:`react-doctor/no-radial-halo`,id:`no-radial-halo`,source:`react-doctor`,originallyExternal:!1,rule:{...rU,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...rU.tags??[]])]}},{key:`react-doctor/no-random-key`,id:`no-random-key`,source:`react-doctor`,originallyExternal:!1,rule:{...Ttt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-react-children`,id:`no-react-children`,source:`react-doctor`,originallyExternal:!0,rule:{...oU,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...oU.requires??[]])]}},{key:`react-doctor/no-react-dom-deprecated-apis`,id:`no-react-dom-deprecated-apis`,source:`react-doctor`,originallyExternal:!1,rule:{...Mtt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-react19-deprecated-apis`,id:`no-react19-deprecated-apis`,source:`react-doctor`,originallyExternal:!1,rule:{...Ftt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-reduced-motion-content-removal`,id:`no-reduced-motion-content-removal`,source:`react-doctor`,originallyExternal:!1,rule:{...PU,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...PU.requires??[]])]}},{key:`react-doctor/no-redundant-display-class`,id:`no-redundant-display-class`,source:`react-doctor`,originallyExternal:!1,rule:{...FU,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...FU.tags??[]])]}},{key:`react-doctor/no-redundant-roles`,id:`no-redundant-roles`,source:`react-doctor`,originallyExternal:!0,rule:{...zU,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...zU.requires??[]])]}},{key:`react-doctor/no-redundant-should-component-update`,id:`no-redundant-should-component-update`,source:`react-doctor`,originallyExternal:!0,rule:{...BU,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...BU.requires??[]])]}},{key:`react-doctor/no-redundant-title-tooltip`,id:`no-redundant-title-tooltip`,source:`react-doctor`,originallyExternal:!1,rule:{...HU,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...HU.tags??[]])]}},{key:`react-doctor/no-ref-callback-cleanup-before-react-19`,id:`no-ref-callback-cleanup-before-react-19`,source:`react-doctor`,originallyExternal:!1,rule:{...vnt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-ref-current-in-render`,id:`no-ref-current-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...eW,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...eW.requires??[]])]}},{key:`react-doctor/no-render-in-render`,id:`no-render-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...Vnt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-render-prop-children`,id:`no-render-prop-children`,source:`react-doctor`,originallyExternal:!1,rule:{...qnt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/no-render-return-value`,id:`no-render-return-value`,source:`react-doctor`,originallyExternal:!0,rule:{...nW,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...nW.requires??[]])]}},{key:`react-doctor/no-repeated-container-text`,id:`no-repeated-container-text`,source:`react-doctor`,originallyExternal:!1,rule:{...uW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...uW.tags??[]])]}},{key:`react-doctor/no-repeated-emoji-tiles`,id:`no-repeated-emoji-tiles`,source:`react-doctor`,originallyExternal:!1,rule:{...dW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...dW.tags??[]])]}},{key:`react-doctor/no-repeated-glass-surfaces`,id:`no-repeated-glass-surfaces`,source:`react-doctor`,originallyExternal:!1,rule:{...fW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...fW.tags??[]])]}},{key:`react-doctor/no-repeated-hover-scale`,id:`no-repeated-hover-scale`,source:`react-doctor`,originallyExternal:!1,rule:{...pW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...pW.tags??[]])]}},{key:`react-doctor/no-repeated-kicker-labels`,id:`no-repeated-kicker-labels`,source:`react-doctor`,originallyExternal:!1,rule:{...mW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...mW.tags??[]])]}},{key:`react-doctor/no-repeated-placeholder-navigation`,id:`no-repeated-placeholder-navigation`,source:`react-doctor`,originallyExternal:!1,rule:{...hW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...hW.tags??[]])]}},{key:`react-doctor/no-repeated-section-shells`,id:`no-repeated-section-shells`,source:`react-doctor`,originallyExternal:!1,rule:{...gW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...gW.tags??[]])]}},{key:`react-doctor/no-repeating-gradient-decoration`,id:`no-repeating-gradient-decoration`,source:`react-doctor`,originallyExternal:!1,rule:{...vW,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...vW.tags??[]])]}},{key:`react-doctor/no-reset-all-state-on-prop-change`,id:`no-reset-all-state-on-prop-change`,source:`react-doctor`,originallyExternal:!0,rule:{...HW,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...HW.requires??[]])]}},{key:`react-doctor/no-responsive-hidden-accessible-name`,id:`no-responsive-hidden-accessible-name`,source:`react-doctor`,originallyExternal:!1,rule:{...nG,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...nG.requires??[]])]}},{key:`react-doctor/no-scale-from-zero`,id:`no-scale-from-zero`,source:`react-doctor`,originallyExternal:!1,rule:{...vG,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...vG.requires??[]])]}},{key:`react-doctor/no-secrets-in-client-code`,id:`no-secrets-in-client-code`,source:`react-doctor`,originallyExternal:!1,rule:{...zit,framework:`global`,category:`Security`}},{key:`react-doctor/no-self-updating-effect`,id:`no-self-updating-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...aK,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...aK.requires??[]])]}},{key:`react-doctor/no-server-side-image-map`,id:`no-server-side-image-map`,source:`react-doctor`,originallyExternal:!0,rule:{...oK,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...oK.requires??[]])]}},{key:`react-doctor/no-set-state`,id:`no-set-state`,source:`react-doctor`,originallyExternal:!0,rule:{...sK,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...sK.requires??[]])]}},{key:`react-doctor/no-set-state-after-await-in-effect`,id:`no-set-state-after-await-in-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...DK,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...DK.requires??[]])]}},{key:`react-doctor/no-set-state-in-render`,id:`no-set-state-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...OK,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...OK.requires??[]])]}},{key:`react-doctor/no-shape-assembled-illustration`,id:`no-shape-assembled-illustration`,source:`react-doctor`,originallyExternal:!1,rule:{...IK,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...IK.tags??[]])]}},{key:`react-doctor/no-side-effect-in-state-updater-function`,id:`no-side-effect-in-state-updater-function`,source:`react-doctor`,originallyExternal:!1,rule:{...kq,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...kq.requires??[]])]}},{key:`react-doctor/no-side-tab-border`,id:`no-side-tab-border`,source:`react-doctor`,originallyExternal:!1,rule:{...$q,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...$q.tags??[]])]}},{key:`react-doctor/no-skipped-heading-level`,id:`no-skipped-heading-level`,source:`react-doctor`,originallyExternal:!1,rule:{...nJ,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...nJ.requires??[]])]}},{key:`react-doctor/no-small-form-control-text`,id:`no-small-form-control-text`,source:`react-doctor`,originallyExternal:!1,rule:{...rJ,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...rJ.tags??[]])]}},{key:`react-doctor/no-smooth-scroll-without-reduced-motion`,id:`no-smooth-scroll-without-reduced-motion`,source:`react-doctor`,originallyExternal:!1,rule:{...sJ,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...sJ.tags??[]])]}},{key:`react-doctor/no-spread-accumulator-in-reduce`,id:`no-spread-accumulator-in-reduce`,source:`react-doctor`,originallyExternal:!1,rule:{...fst,framework:`global`,category:`Performance`}},{key:`react-doctor/no-spread-props-over-defaults-clobbers-with-undefined`,id:`no-spread-props-over-defaults-clobbers-with-undefined`,source:`react-doctor`,originallyExternal:!1,rule:{...AJ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...AJ.requires??[]])]}},{key:`react-doctor/no-srcset-without-sizes`,id:`no-srcset-without-sizes`,source:`react-doctor`,originallyExternal:!1,rule:{...jJ,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...jJ.requires??[]])]}},{key:`react-doctor/no-stale-timer-ref`,id:`no-stale-timer-ref`,source:`react-doctor`,originallyExternal:!1,rule:{...BJ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...BJ.requires??[]])]}},{key:`react-doctor/no-static-element-interactions`,id:`no-static-element-interactions`,source:`react-doctor`,originallyExternal:!0,rule:{...qJ,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...qJ.requires??[]])]}},{key:`react-doctor/no-static-motion-config-never`,id:`no-static-motion-config-never`,source:`react-doctor`,originallyExternal:!1,rule:{...JJ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...JJ.requires??[]])]}},{key:`react-doctor/no-string-false-on-boolean-attribute`,id:`no-string-false-on-boolean-attribute`,source:`react-doctor`,originallyExternal:!1,rule:{...YJ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...YJ.requires??[]])]}},{key:`react-doctor/no-string-refs`,id:`no-string-refs`,source:`react-doctor`,originallyExternal:!0,rule:{...XJ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...XJ.requires??[]])]}},{key:`react-doctor/no-svg-currentcolor-with-fill-class`,id:`no-svg-currentcolor-with-fill-class`,source:`react-doctor`,originallyExternal:!1,rule:{...QJ,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...QJ.tags??[]])]}},{key:`react-doctor/no-symmetric-text-button-padding`,id:`no-symmetric-text-button-padding`,source:`react-doctor`,originallyExternal:!1,rule:{...$J,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...$J.tags??[]])]}},{key:`react-doctor/no-sync-xhr`,id:`no-sync-xhr`,source:`react-doctor`,originallyExternal:!1,rule:{...ect,framework:`global`,category:`Performance`}},{key:`react-doctor/no-tailwind-layout-transition`,id:`no-tailwind-layout-transition`,source:`react-doctor`,originallyExternal:!1,rule:{...eY,framework:`global`,category:`Performance`,defaultEnabled:!1,tags:[...new Set([`design`,...eY.tags??[]])]}},{key:`react-doctor/no-this-in-sfc`,id:`no-this-in-sfc`,source:`react-doctor`,originallyExternal:!0,rule:{...nY,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...nY.requires??[]])]}},{key:`react-doctor/no-tight-all-caps-heading`,id:`no-tight-all-caps-heading`,source:`react-doctor`,originallyExternal:!1,rule:{...rY,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...rY.tags??[]])]}},{key:`react-doctor/no-tight-body-leading`,id:`no-tight-body-leading`,source:`react-doctor`,originallyExternal:!1,rule:{...aY,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...aY.tags??[]])]}},{key:`react-doctor/no-tight-display-tracking`,id:`no-tight-display-tracking`,source:`react-doctor`,originallyExternal:!1,rule:{...oY,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...oY.tags??[]])]}},{key:`react-doctor/no-tiny-text`,id:`no-tiny-text`,source:`react-doctor`,originallyExternal:!1,rule:{...dY,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...dY.tags??[]])]}},{key:`react-doctor/no-tiny-uppercase-tracked-label`,id:`no-tiny-uppercase-tracked-label`,source:`react-doctor`,originallyExternal:!1,rule:{...mY,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...mY.tags??[]])]}},{key:`react-doctor/no-transition-all`,id:`no-transition-all`,source:`react-doctor`,originallyExternal:!1,rule:{...gY,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...gY.requires??[]])]}},{key:`react-doctor/no-transitioned-composite-widget-state`,id:`no-transitioned-composite-widget-state`,source:`react-doctor`,originallyExternal:!1,rule:{...AY,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...AY.tags??[]])]}},{key:`react-doctor/no-transitioned-focus-ring`,id:`no-transitioned-focus-ring`,source:`react-doctor`,originallyExternal:!1,rule:{...jY,framework:`global`,category:`Accessibility`,defaultEnabled:!1,tags:[...new Set([`design`,...jY.tags??[]])]}},{key:`react-doctor/no-unbounded-animation-frame-loop`,id:`no-unbounded-animation-frame-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...NY,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...NY.requires??[]])]}},{key:`react-doctor/no-uncontrolled-input`,id:`no-uncontrolled-input`,source:`react-doctor`,originallyExternal:!1,rule:{...Rlt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-undeferred-third-party`,id:`no-undeferred-third-party`,source:`react-doctor`,originallyExternal:!1,rule:{...Blt,framework:`global`,category:`Performance`}},{key:`react-doctor/no-undersized-icon-button`,id:`no-undersized-icon-button`,source:`react-doctor`,originallyExternal:!1,rule:{...zY,framework:`global`,category:`Accessibility`,tags:[...new Set([`design`,...zY.tags??[]])]}},{key:`react-doctor/no-unescaped-dynamic-string-in-regexp`,id:`no-unescaped-dynamic-string-in-regexp`,source:`react-doctor`,originallyExternal:!1,rule:{...gut,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-unescaped-entities`,id:`no-unescaped-entities`,source:`react-doctor`,originallyExternal:!0,rule:{...aX,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...aX.requires??[]])]}},{key:`react-doctor/no-ungated-tailwind-animation`,id:`no-ungated-tailwind-animation`,source:`react-doctor`,originallyExternal:!1,rule:{...uX,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...uX.requires??[]])]}},{key:`react-doctor/no-unguarded-browser-global-at-module-scope`,id:`no-unguarded-browser-global-at-module-scope`,source:`react-doctor`,originallyExternal:!1,rule:{...Put,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-unguarded-browser-global-in-render-or-hook-init`,id:`no-unguarded-browser-global-in-render-or-hook-init`,source:`react-doctor`,originallyExternal:!1,rule:{...LX,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...LX.requires??[]])]}},{key:`react-doctor/no-unguarded-numeric-input-parse`,id:`no-unguarded-numeric-input-parse`,source:`react-doctor`,originallyExternal:!1,rule:{...fdt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-unguarded-throwing-parse-call`,id:`no-unguarded-throwing-parse-call`,source:`react-doctor`,originallyExternal:!1,rule:{...Ndt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-uniform-feature-card-grid`,id:`no-uniform-feature-card-grid`,source:`react-doctor`,originallyExternal:!1,rule:{...gZ,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...gZ.tags??[]])]}},{key:`react-doctor/no-uninformative-aria-label`,id:`no-uninformative-aria-label`,source:`react-doctor`,originallyExternal:!1,rule:{..._Z,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,..._Z.requires??[]])]}},{key:`react-doctor/no-unknown-property`,id:`no-unknown-property`,source:`react-doctor`,originallyExternal:!0,rule:{...SZ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...SZ.requires??[]])]}},{key:`react-doctor/no-unowned-async-error-clear`,id:`no-unowned-async-error-clear`,source:`react-doctor`,originallyExternal:!1,rule:{...PZ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...PZ.requires??[]])]}},{key:`react-doctor/no-unsafe`,id:`no-unsafe`,source:`react-doctor`,originallyExternal:!0,rule:{...LZ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...LZ.requires??[]])]}},{key:`react-doctor/no-unsafe-json-parse`,id:`no-unsafe-json-parse`,source:`react-doctor`,originallyExternal:!1,rule:{...Ift,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-unstable-nested-components`,id:`no-unstable-nested-components`,source:`react-doctor`,originallyExternal:!0,rule:{...$Z,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...$Z.requires??[]])]}},{key:`react-doctor/no-unthrottled-scroll-mutation`,id:`no-unthrottled-scroll-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...nQ,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...nQ.requires??[]])]}},{key:`react-doctor/no-uppercase-mono-label`,id:`no-uppercase-mono-label`,source:`react-doctor`,originallyExternal:!1,rule:{...rQ,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...rQ.tags??[]])]}},{key:`react-doctor/no-uppercase-tracked-navigation-label`,id:`no-uppercase-tracked-navigation-label`,source:`react-doctor`,originallyExternal:!1,rule:{...iQ,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...iQ.tags??[]])]}},{key:`react-doctor/no-usememo-simple-expression`,id:`no-usememo-simple-expression`,source:`react-doctor`,originallyExternal:!1,rule:{...sQ,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...sQ.requires??[]])]}},{key:`react-doctor/no-whole-object-default-losing-per-key-defaults`,id:`no-whole-object-default-losing-per-key-defaults`,source:`react-doctor`,originallyExternal:!1,rule:{...Spt,framework:`global`,category:`Bugs`}},{key:`react-doctor/no-whole-object-dep-with-member-reads`,id:`no-whole-object-dep-with-member-reads`,source:`react-doctor`,originallyExternal:!1,rule:{..._Q,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,..._Q.requires??[]])]}},{key:`react-doctor/no-wide-letter-spacing`,id:`no-wide-letter-spacing`,source:`react-doctor`,originallyExternal:!1,rule:{...vQ,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...vQ.tags??[]])]}},{key:`react-doctor/no-will-update-set-state`,id:`no-will-update-set-state`,source:`react-doctor`,originallyExternal:!0,rule:{...yQ,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...yQ.requires??[]])]}},{key:`react-doctor/no-z-index-9999`,id:`no-z-index-9999`,source:`react-doctor`,originallyExternal:!1,rule:{...bQ,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...bQ.tags??[]])]}},{key:`react-doctor/nosql-injection-risk`,id:`nosql-injection-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Ne,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Ne.tags??[]])]}},{key:`react-doctor/only-export-components`,id:`only-export-components`,source:`react-doctor`,originallyExternal:!0,rule:{...a$,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...a$.requires??[]])]}},{key:`react-doctor/package-metadata-secret`,id:`package-metadata-secret`,source:`react-doctor`,originallyExternal:!1,rule:{...pte,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...pte.tags??[]])]}},{key:`react-doctor/path-traversal-risk`,id:`path-traversal-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...a,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...a.tags??[]])]}},{key:`react-doctor/plugin-update-trust-risk`,id:`plugin-update-trust-risk`,source:`react-doctor`,originallyExternal:!1,rule:{..._te,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,..._te.tags??[]])]}},{key:`react-doctor/pointer-capture-needs-cancel-handler`,id:`pointer-capture-needs-cancel-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...zmt,framework:`global`,category:`Bugs`}},{key:`react-doctor/postmessage-origin-risk`,id:`postmessage-origin-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Re,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Re.tags??[]])]}},{key:`react-doctor/preact-no-children-length`,id:`preact-no-children-length`,source:`react-doctor`,originallyExternal:!1,rule:{...Wmt,framework:`preact`,category:`Bugs`}},{key:`react-doctor/preact-no-react-hooks-import`,id:`preact-no-react-hooks-import`,source:`react-doctor`,originallyExternal:!1,rule:{...qmt,framework:`preact`,category:`Bugs`}},{key:`react-doctor/preact-no-render-arguments`,id:`preact-no-render-arguments`,source:`react-doctor`,originallyExternal:!1,rule:{...eht,framework:`preact`,category:`Bugs`}},{key:`react-doctor/preact-prefer-ondblclick`,id:`preact-prefer-ondblclick`,source:`react-doctor`,originallyExternal:!1,rule:{...tht,framework:`preact`,category:`Bugs`}},{key:`react-doctor/preact-prefer-oninput`,id:`preact-prefer-oninput`,source:`react-doctor`,originallyExternal:!1,rule:{...iht,framework:`preact`,category:`Bugs`}},{key:`react-doctor/prefer-dvh-over-vh`,id:`prefer-dvh-over-vh`,source:`react-doctor`,originallyExternal:!1,rule:{...d$,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...d$.tags??[]])]}},{key:`react-doctor/prefer-dynamic-import`,id:`prefer-dynamic-import`,source:`react-doctor`,originallyExternal:!1,rule:{...sht,framework:`global`,category:`Performance`}},{key:`react-doctor/prefer-es6-class`,id:`prefer-es6-class`,source:`react-doctor`,originallyExternal:!0,rule:{...p$,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...p$.requires??[]])]}},{key:`react-doctor/prefer-explicit-variants`,id:`prefer-explicit-variants`,source:`react-doctor`,originallyExternal:!1,rule:{...mht,framework:`global`,category:`Maintainability`}},{key:`react-doctor/prefer-function-component`,id:`prefer-function-component`,source:`react-doctor`,originallyExternal:!0,rule:{...g$,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...g$.requires??[]])]}},{key:`react-doctor/prefer-html-dialog`,id:`prefer-html-dialog`,source:`react-doctor`,originallyExternal:!1,rule:{...S$,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...S$.requires??[]])]}},{key:`react-doctor/prefer-module-scope-pure-function`,id:`prefer-module-scope-pure-function`,source:`react-doctor`,originallyExternal:!1,rule:{...Oht,framework:`global`,category:`Maintainability`}},{key:`react-doctor/prefer-module-scope-static-value`,id:`prefer-module-scope-static-value`,source:`react-doctor`,originallyExternal:!1,rule:{...Uht,framework:`global`,category:`Maintainability`}},{key:`react-doctor/prefer-motion-transform-property`,id:`prefer-motion-transform-property`,source:`react-doctor`,originallyExternal:!1,rule:{...E$,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...E$.requires??[]])]}},{key:`react-doctor/prefer-stable-empty-fallback`,id:`prefer-stable-empty-fallback`,source:`react-doctor`,originallyExternal:!1,rule:{...O$,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...O$.requires??[]])]}},{key:`react-doctor/prefer-tabular-numeric-data`,id:`prefer-tabular-numeric-data`,source:`react-doctor`,originallyExternal:!1,rule:{...k$,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...k$.tags??[]])]}},{key:`react-doctor/prefer-tag-over-role`,id:`prefer-tag-over-role`,source:`react-doctor`,originallyExternal:!0,rule:{...j$,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...j$.requires??[]])]}},{key:`react-doctor/prefer-truncate-shorthand`,id:`prefer-truncate-shorthand`,source:`react-doctor`,originallyExternal:!1,rule:{...M$,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...M$.tags??[]])]}},{key:`react-doctor/prefer-use-effect-event`,id:`prefer-use-effect-event`,source:`react-doctor`,originallyExternal:!1,rule:{...L$,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...L$.requires??[]])]}},{key:`react-doctor/prefer-use-sync-external-store`,id:`prefer-use-sync-external-store`,source:`react-doctor`,originallyExternal:!1,rule:{...V$,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...V$.requires??[]])]}},{key:`react-doctor/prefer-useReducer`,id:`prefer-useReducer`,source:`react-doctor`,originallyExternal:!1,rule:{...U$,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...U$.requires??[]])]}},{key:`react-doctor/public-debug-artifact`,id:`public-debug-artifact`,source:`react-doctor`,originallyExternal:!1,rule:{...ne,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...ne.tags??[]])]}},{key:`react-doctor/public-env-secret-name`,id:`public-env-secret-name`,source:`react-doctor`,originallyExternal:!1,rule:{...oe,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...oe.tags??[]])]}},{key:`react-doctor/query-destructure-result`,id:`query-destructure-result`,source:`react-doctor`,originallyExternal:!1,rule:{...Vgt,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-floating-mutate-async`,id:`query-floating-mutate-async`,source:`react-doctor`,originallyExternal:!1,rule:{...Ygt,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-mutation-missing-invalidation`,id:`query-mutation-missing-invalidation`,source:`react-doctor`,originallyExternal:!1,rule:{...p_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-no-mutation-in-effect-as-read`,id:`query-no-mutation-in-effect-as-read`,source:`react-doctor`,originallyExternal:!1,rule:{...F_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-no-query-in-effect`,id:`query-no-query-in-effect`,source:`react-doctor`,originallyExternal:!1,rule:{...V_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-no-rest-destructuring`,id:`query-no-rest-destructuring`,source:`react-doctor`,originallyExternal:!1,rule:{...H_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-no-usequery-for-mutation`,id:`query-no-usequery-for-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...Y_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-no-void-query-fn`,id:`query-no-void-query-fn`,source:`react-doctor`,originallyExternal:!1,rule:{...X_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/query-stable-query-client`,id:`query-stable-query-client`,source:`react-doctor`,originallyExternal:!1,rule:{...$_t,framework:`tanstack-query`,category:`Bugs`}},{key:`react-doctor/r3f-cap-device-pixel-ratio`,id:`r3f-cap-device-pixel-ratio`,source:`react-doctor`,originallyExternal:!1,rule:{...f0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...f0.tags??[]])],requires:[...new Set([`react`,`r3f`,...f0.requires??[]])]}},{key:`react-doctor/r3f-limit-shadowed-point-lights`,id:`r3f-limit-shadowed-point-lights`,source:`react-doctor`,originallyExternal:!1,rule:{...m0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...m0.tags??[]])],requires:[...new Set([`react`,`r3f`,...m0.requires??[]])]}},{key:`react-doctor/r3f-no-advancing-clock-in-use-frame`,id:`r3f-no-advancing-clock-in-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...g0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...g0.tags??[]])],requires:[...new Set([`react`,`r3f`,...g0.requires??[]])]}},{key:`react-doctor/r3f-no-allocation-in-pointer-move`,id:`r3f-no-allocation-in-pointer-move`,source:`react-doctor`,originallyExternal:!1,rule:{...y0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...y0.tags??[]])],requires:[...new Set([`react`,`r3f`,...y0.requires??[]])]}},{key:`react-doctor/r3f-no-async-use-frame`,id:`r3f-no-async-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...b0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...b0.tags??[]])],requires:[...new Set([`react`,`r3f`,...b0.requires??[]])]}},{key:`react-doctor/r3f-no-clone-in-use-frame`,id:`r3f-no-clone-in-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...D0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...D0.tags??[]])],requires:[...new Set([`react`,`r3f`,...D0.requires??[]])]}},{key:`react-doctor/r3f-no-deep-use-three-selector`,id:`r3f-no-deep-use-three-selector`,source:`react-doctor`,originallyExternal:!1,rule:{...k0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...k0.tags??[]])],requires:[...new Set([`react`,`r3f`,...k0.requires??[]])]}},{key:`react-doctor/r3f-no-dispose-loader-cache`,id:`r3f-no-dispose-loader-cache`,source:`react-doctor`,originallyExternal:!1,rule:{...I0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...I0.tags??[]])],requires:[...new Set([`react`,`r3f`,...I0.requires??[]])]}},{key:`react-doctor/r3f-no-duplicate-primitive-object`,id:`r3f-no-duplicate-primitive-object`,source:`react-doctor`,originallyExternal:!1,rule:{...H0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...H0.tags??[]])],requires:[...new Set([`react`,`r3f`,...H0.requires??[]])]}},{key:`react-doctor/r3f-no-extend-in-render`,id:`r3f-no-extend-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...W0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...W0.tags??[]])],requires:[...new Set([`react`,`r3f`,...W0.requires??[]])]}},{key:`react-doctor/r3f-no-extend-three-namespace`,id:`r3f-no-extend-three-namespace`,source:`react-doctor`,originallyExternal:!1,rule:{...q0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...q0.tags??[]])],requires:[...new Set([`react`,`r3f`,...q0.requires??[]])]}},{key:`react-doctor/r3f-no-fresh-portal-container`,id:`r3f-no-fresh-portal-container`,source:`react-doctor`,originallyExternal:!1,rule:{...X0,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...X0.tags??[]])],requires:[...new Set([`react`,`r3f`,...X0.requires??[]])]}},{key:`react-doctor/r3f-no-fresh-use-three-selector`,id:`r3f-no-fresh-use-three-selector`,source:`react-doctor`,originallyExternal:!1,rule:{...Z0,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...Z0.tags??[]])],requires:[...new Set([`react`,`r3f`,...Z0.requires??[]])]}},{key:`react-doctor/r3f-no-imperative-attach-of-managed-ref`,id:`r3f-no-imperative-attach-of-managed-ref`,source:`react-doctor`,originallyExternal:!1,rule:{...e2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...e2.tags??[]])],requires:[...new Set([`react`,`r3f`,...e2.requires??[]])]}},{key:`react-doctor/r3f-no-inline-primitive-object`,id:`r3f-no-inline-primitive-object`,source:`react-doctor`,originallyExternal:!1,rule:{...t2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...t2.tags??[]])],requires:[...new Set([`react`,`r3f`,...t2.requires??[]])]}},{key:`react-doctor/r3f-no-inline-resource-prop`,id:`r3f-no-inline-resource-prop`,source:`react-doctor`,originallyExternal:!1,rule:{...o2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...o2.tags??[]])],requires:[...new Set([`react`,`r3f`,...o2.requires??[]])]}},{key:`react-doctor/r3f-no-internal-imports`,id:`r3f-no-internal-imports`,source:`react-doctor`,originallyExternal:!1,rule:{...s2,framework:`global`,category:`Maintainability`,tags:[...new Set([`r3f`,`webgl`,...s2.tags??[]])],requires:[...new Set([`react`,`r3f`,...s2.requires??[]])]}},{key:`react-doctor/r3f-no-manual-canvas-resize`,id:`r3f-no-manual-canvas-resize`,source:`react-doctor`,originallyExternal:!1,rule:{...l2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...l2.tags??[]])],requires:[...new Set([`react`,`r3f`,...l2.requires??[]])]}},{key:`react-doctor/r3f-no-mutate-loader-cache`,id:`r3f-no-mutate-loader-cache`,source:`react-doctor`,originallyExternal:!1,rule:{...u2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...u2.tags??[]])],requires:[...new Set([`react`,`r3f`,...u2.requires??[]])]}},{key:`react-doctor/r3f-no-mutating-pointer-event-data`,id:`r3f-no-mutating-pointer-event-data`,source:`react-doctor`,originallyExternal:!1,rule:{...f2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...f2.tags??[]])],requires:[...new Set([`react`,`r3f`,...f2.requires??[]])]}},{key:`react-doctor/r3f-no-new-in-use-frame`,id:`r3f-no-new-in-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...p2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...p2.tags??[]])],requires:[...new Set([`react`,`r3f`,...p2.requires??[]])]}},{key:`react-doctor/r3f-no-null-loader-input`,id:`r3f-no-null-loader-input`,source:`react-doctor`,originallyExternal:!1,rule:{...g2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...g2.tags??[]])],requires:[...new Set([`react`,`r3f`,...g2.requires??[]])]}},{key:`react-doctor/r3f-no-object-pointer-capture`,id:`r3f-no-object-pointer-capture`,source:`react-doctor`,originallyExternal:!1,rule:{...v2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...v2.tags??[]])],requires:[...new Set([`react`,`r3f`,...v2.requires??[]])]}},{key:`react-doctor/r3f-no-recursive-raf-with-use-frame`,id:`r3f-no-recursive-raf-with-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...x2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...x2.tags??[]])],requires:[...new Set([`react`,`r3f`,...x2.requires??[]])]}},{key:`react-doctor/r3f-no-state-in-pointer-move`,id:`r3f-no-state-in-pointer-move`,source:`react-doctor`,originallyExternal:!1,rule:{...F2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...F2.tags??[]])],requires:[...new Set([`react`,`r3f`,...F2.requires??[]])]}},{key:`react-doctor/r3f-no-state-in-use-frame`,id:`r3f-no-state-in-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...N2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...N2.tags??[]])],requires:[...new Set([`react`,`r3f`,...N2.requires??[]])]}},{key:`react-doctor/r3f-no-sync-readback-in-use-frame`,id:`r3f-no-sync-readback-in-use-frame`,source:`react-doctor`,originallyExternal:!1,rule:{...L2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...L2.tags??[]])],requires:[...new Set([`react`,`r3f`,...L2.requires??[]])]}},{key:`react-doctor/r3f-no-unstable-args`,id:`r3f-no-unstable-args`,source:`react-doctor`,originallyExternal:!1,rule:{...z2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...z2.tags??[]])],requires:[...new Set([`react`,`r3f`,...z2.requires??[]])]}},{key:`react-doctor/r3f-no-use-frame-dependency-array`,id:`r3f-no-use-frame-dependency-array`,source:`react-doctor`,originallyExternal:!1,rule:{...B2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...B2.tags??[]])],requires:[...new Set([`react`,`r3f`,...B2.requires??[]])]}},{key:`react-doctor/r3f-prefer-instanced-mesh`,id:`r3f-prefer-instanced-mesh`,source:`react-doctor`,originallyExternal:!1,rule:{...U2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...U2.tags??[]])],requires:[...new Set([`react`,`r3f`,...U2.requires??[]])]}},{key:`react-doctor/r3f-prefer-use-loader`,id:`r3f-prefer-use-loader`,source:`react-doctor`,originallyExternal:!1,rule:{...W2,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...W2.tags??[]])],requires:[...new Set([`react`,`r3f`,...W2.requires??[]])]}},{key:`react-doctor/r3f-require-frame-delta`,id:`r3f-require-frame-delta`,source:`react-doctor`,originallyExternal:!1,rule:{...Y2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...Y2.tags??[]])],requires:[...new Set([`react`,`r3f`,...Y2.requires??[]])]}},{key:`react-doctor/r3f-require-global-effect-cleanup`,id:`r3f-require-global-effect-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...X2,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...X2.tags??[]])],requires:[...new Set([`react`,`r3f`,...X2.requires??[]])]}},{key:`react-doctor/r3f-require-instanced-buffer-update`,id:`r3f-require-instanced-buffer-update`,source:`react-doctor`,originallyExternal:!1,rule:{...t4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...t4.tags??[]])],requires:[...new Set([`react`,`r3f`,...t4.requires??[]])]}},{key:`react-doctor/r3f-require-owned-texture-cleanup`,id:`r3f-require-owned-texture-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...p4,framework:`global`,category:`Performance`,tags:[...new Set([`r3f`,`webgl`,...p4.tags??[]])],requires:[...new Set([`react`,`r3f`,...p4.requires??[]])]}},{key:`react-doctor/r3f-require-projection-matrix-update`,id:`r3f-require-projection-matrix-update`,source:`react-doctor`,originallyExternal:!1,rule:{...g4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...g4.tags??[]])],requires:[...new Set([`react`,`r3f`,...g4.requires??[]])]}},{key:`react-doctor/r3f-require-render-with-positive-priority`,id:`r3f-require-render-with-positive-priority`,source:`react-doctor`,originallyExternal:!1,rule:{...v4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...v4.tags??[]])],requires:[...new Set([`react`,`r3f`,...v4.requires??[]])]}},{key:`react-doctor/r3f-require-root-unmount`,id:`r3f-require-root-unmount`,source:`react-doctor`,originallyExternal:!1,rule:{...y4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...y4.tags??[]])],requires:[...new Set([`react`,`r3f`,...y4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-canvas-prop-compatibility`,id:`r3f-webgpu-canvas-prop-compatibility`,source:`react-doctor`,originallyExternal:!1,rule:{...b4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...b4.tags??[]])],requires:[...new Set([`react`,`r3f`,...b4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-no-gl-state`,id:`r3f-webgpu-no-gl-state`,source:`react-doctor`,originallyExternal:!1,rule:{...w4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...w4.tags??[]])],requires:[...new Set([`react`,`r3f`,...w4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-no-js-uniform-branch`,id:`r3f-webgpu-no-js-uniform-branch`,source:`react-doctor`,originallyExternal:!1,rule:{...E4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...E4.tags??[]])],requires:[...new Set([`react`,`r3f`,...E4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-no-legacy-effect-composer`,id:`r3f-webgpu-no-legacy-effect-composer`,source:`react-doctor`,originallyExternal:!1,rule:{...O4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...O4.tags??[]])],requires:[...new Set([`react`,`r3f`,...O4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-no-legacy-material-api`,id:`r3f-webgpu-no-legacy-material-api`,source:`react-doctor`,originallyExternal:!1,rule:{...k4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...k4.tags??[]])],requires:[...new Set([`react`,`r3f`,...k4.requires??[]])]}},{key:`react-doctor/r3f-webgpu-no-unregistered-pipeline-pass`,id:`r3f-webgpu-no-unregistered-pipeline-pass`,source:`react-doctor`,originallyExternal:!1,rule:{...A4,framework:`global`,category:`Bugs`,tags:[...new Set([`r3f`,`webgl`,...A4.tags??[]])],requires:[...new Set([`react`,`r3f`,...A4.requires??[]])]}},{key:`react-doctor/radio-input-missing-name`,id:`radio-input-missing-name`,source:`react-doctor`,originallyExternal:!1,rule:{...ASt,framework:`global`,category:`Accessibility`}},{key:`react-doctor/raw-sql-injection-risk`,id:`raw-sql-injection-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...Xe,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Xe.tags??[]])]}},{key:`react-doctor/react-compiler-no-manual-memoization`,id:`react-compiler-no-manual-memoization`,source:`react-doctor`,originallyExternal:!1,rule:{...RSt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/react-in-jsx-scope`,id:`react-in-jsx-scope`,source:`react-doctor`,originallyExternal:!0,rule:{...BSt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...BSt.requires??[]])]}},{key:`react-doctor/react-markdown-unsanitized-raw-html`,id:`react-markdown-unsanitized-raw-html`,source:`react-doctor`,originallyExternal:!1,rule:{...eCt,framework:`global`,category:`Security`}},{key:`react-doctor/react-router-csp-nonce-consistency`,id:`react-router-csp-nonce-consistency`,source:`react-doctor`,originallyExternal:!1,rule:{...oCt,framework:`global`,category:`Security`}},{key:`react-doctor/react-router-descendant-routes-require-splat`,id:`react-router-descendant-routes-require-splat`,source:`react-doctor`,originallyExternal:!1,rule:{...dCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-guard-aborted-handle-error`,id:`react-router-guard-aborted-handle-error`,source:`react-doctor`,originallyExternal:!1,rule:{...vCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-internal-route-anchor`,id:`react-router-internal-route-anchor`,source:`react-doctor`,originallyExternal:!1,rule:{...bCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-loader-fetch-forwards-signal`,id:`react-router-loader-fetch-forwards-signal`,source:`react-doctor`,originallyExternal:!1,rule:{...ECt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...ECt.requires??[]])]}},{key:`react-doctor/react-router-loader-parallel-fetch`,id:`react-router-loader-parallel-fetch`,source:`react-doctor`,originallyExternal:!1,rule:{...jCt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...jCt.requires??[]])]}},{key:`react-doctor/react-router-nested-route-requires-outlet`,id:`react-router-nested-route-requires-outlet`,source:`react-doctor`,originallyExternal:!1,rule:{...FCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-catch-middleware-next`,id:`react-router-no-catch-middleware-next`,source:`react-doctor`,originallyExternal:!1,rule:{...zCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-client-module-in-server-render`,id:`react-router-no-client-module-in-server-render`,source:`react-doctor`,originallyExternal:!1,rule:{...GCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-duplicate-route-id`,id:`react-router-no-duplicate-route-id`,source:`react-doctor`,originallyExternal:!1,rule:{...qCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-empty-leaf-route`,id:`react-router-no-empty-leaf-route`,source:`react-doctor`,originallyExternal:!1,rule:{...XCt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-invalid-absolute-child-path`,id:`react-router-no-invalid-absolute-child-path`,source:`react-doctor`,originallyExternal:!1,rule:{...$Ct,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-invalid-lazy-route-properties`,id:`react-router-no-invalid-lazy-route-properties`,source:`react-doctor`,originallyExternal:!1,rule:{...twt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-invalid-splat-path`,id:`react-router-no-invalid-splat-path`,source:`react-doctor`,originallyExternal:!1,rule:{...nwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-loader-request-body`,id:`react-router-no-loader-request-body`,source:`react-doctor`,originallyExternal:!1,rule:{...iwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-middleware-response-body-consumption`,id:`react-router-no-middleware-response-body-consumption`,source:`react-doctor`,originallyExternal:!1,rule:{...awt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-multiple-blockers`,id:`react-router-no-multiple-blockers`,source:`react-doctor`,originallyExternal:!1,rule:{...owt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-multiple-middleware-next`,id:`react-router-no-multiple-middleware-next`,source:`react-doctor`,originallyExternal:!1,rule:{...cwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-multiple-set-search-params-in-tick`,id:`react-router-no-multiple-set-search-params-in-tick`,source:`react-doctor`,originallyExternal:!1,rule:{...dwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-navigate-in-render`,id:`react-router-no-navigate-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...pwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-nested-router`,id:`react-router-no-nested-router`,source:`react-doctor`,originallyExternal:!1,rule:{...hwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-redirect-in-try-catch`,id:`react-router-no-redirect-in-try-catch`,source:`react-doctor`,originallyExternal:!1,rule:{..._wt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-route-module-environment-suffix`,id:`react-router-no-route-module-environment-suffix`,source:`react-doctor`,originallyExternal:!1,rule:{...ywt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-router-in-render`,id:`react-router-no-router-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...bwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-session-mutation-in-loader`,id:`react-router-no-session-mutation-in-loader`,source:`react-doctor`,originallyExternal:!1,rule:{...xwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-static-cookie-expires`,id:`react-router-no-static-cookie-expires`,source:`react-doctor`,originallyExternal:!1,rule:{...Twt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-unsynchronized-search-params-mutation`,id:`react-router-no-unsynchronized-search-params-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...jwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-no-use-loader-data-in-error-ui`,id:`react-router-no-use-loader-data-in-error-ui`,source:`react-doctor`,originallyExternal:!1,rule:{...Nwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-prefer-route-lazy`,id:`react-router-prefer-route-lazy`,source:`react-doctor`,originallyExternal:!1,rule:{...Fwt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Fwt.requires??[]])]}},{key:`react-doctor/react-router-require-root-error-boundary`,id:`react-router-require-root-error-boundary`,source:`react-doctor`,originallyExternal:!1,rule:{...Iwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-resource-link-requires-reload`,id:`react-router-resource-link-requires-reload`,source:`react-doctor`,originallyExternal:!1,rule:{...zwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-return-navigation-promise-in-transition`,id:`react-router-return-navigation-promise-in-transition`,source:`react-doctor`,originallyExternal:!1,rule:{...Bwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-server-middleware-return-response`,id:`react-router-server-middleware-return-response`,source:`react-doctor`,originallyExternal:!1,rule:{...Uwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-session-mutation-requires-commit`,id:`react-router-session-mutation-requires-commit`,source:`react-doctor`,originallyExternal:!1,rule:{...Kwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/react-router-v8-no-meta-data-field`,id:`react-router-v8-no-meta-data-field`,source:`react-doctor`,originallyExternal:!1,rule:{...qwt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/react-router-v8-no-react-router-dom-import`,id:`react-router-v8-no-react-router-dom-import`,source:`react-doctor`,originallyExternal:!1,rule:{...Jwt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/react-router-v8-no-removed-future-flags`,id:`react-router-v8-no-removed-future-flags`,source:`react-doctor`,originallyExternal:!1,rule:{...Xwt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/react-router-valid-route-object`,id:`react-router-valid-route-object`,source:`react-doctor`,originallyExternal:!1,rule:{...Qwt,framework:`global`,category:`Bugs`}},{key:`react-doctor/redux-useselector-inline-derivation`,id:`redux-useselector-inline-derivation`,source:`react-doctor`,originallyExternal:!1,rule:{...cTt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...cTt.requires??[]])]}},{key:`react-doctor/redux-useselector-returns-new-collection`,id:`redux-useselector-returns-new-collection`,source:`react-doctor`,originallyExternal:!1,rule:{...uTt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...uTt.requires??[]])]}},{key:`react-doctor/remotion-calculate-metadata-fetch-signal`,id:`remotion-calculate-metadata-fetch-signal`,source:`react-doctor`,originallyExternal:!1,rule:{...TTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-deterministic-randomness`,id:`remotion-deterministic-randomness`,source:`react-doctor`,originallyExternal:!1,rule:{...ATt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-css-animation`,id:`remotion-no-css-animation`,source:`react-doctor`,originallyExternal:!1,rule:{...NTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-css-transition`,id:`remotion-no-css-transition`,source:`react-doctor`,originallyExternal:!1,rule:{...FTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-css-url-assets`,id:`remotion-no-css-url-assets`,source:`react-doctor`,originallyExternal:!1,rule:{...HTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-module-scope-delay-render`,id:`remotion-no-module-scope-delay-render`,source:`react-doctor`,originallyExternal:!1,rule:{...UTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-native-media-elements`,id:`remotion-no-native-media-elements`,source:`react-doctor`,originallyExternal:!1,rule:{...GTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-no-next-image`,id:`remotion-no-next-image`,source:`react-doctor`,originallyExternal:!1,rule:{...KTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/remotion-stable-delay-render-handle`,id:`remotion-stable-delay-render-handle`,source:`react-doctor`,originallyExternal:!1,rule:{...JTt,framework:`global`,category:`Bugs`}},{key:`react-doctor/rendering-animate-svg-wrapper`,id:`rendering-animate-svg-wrapper`,source:`react-doctor`,originallyExternal:!1,rule:{...YTt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...YTt.requires??[]])]}},{key:`react-doctor/rendering-conditional-render`,id:`rendering-conditional-render`,source:`react-doctor`,originallyExternal:!1,rule:{...eEt,framework:`global`,category:`Bugs`}},{key:`react-doctor/rendering-hoist-jsx`,id:`rendering-hoist-jsx`,source:`react-doctor`,originallyExternal:!1,rule:{...nEt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...nEt.requires??[]])]}},{key:`react-doctor/rendering-hydration-mismatch-time`,id:`rendering-hydration-mismatch-time`,source:`react-doctor`,originallyExternal:!1,rule:{...sEt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...sEt.requires??[]])]}},{key:`react-doctor/rendering-hydration-no-flicker`,id:`rendering-hydration-no-flicker`,source:`react-doctor`,originallyExternal:!1,rule:{...MEt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...MEt.requires??[]])]}},{key:`react-doctor/rendering-script-defer-async`,id:`rendering-script-defer-async`,source:`react-doctor`,originallyExternal:!1,rule:{...IEt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...IEt.requires??[]])]}},{key:`react-doctor/rendering-svg-precision`,id:`rendering-svg-precision`,source:`react-doctor`,originallyExternal:!1,rule:{...HEt,framework:`global`,category:`Performance`}},{key:`react-doctor/rendering-usetransition-loading`,id:`rendering-usetransition-loading`,source:`react-doctor`,originallyExternal:!1,rule:{...pDt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...pDt.requires??[]])]}},{key:`react-doctor/repository-secret-file`,id:`repository-secret-file`,source:`react-doctor`,originallyExternal:!1,rule:{...En,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...En.tags??[]])]}},{key:`react-doctor/request-body-mass-assignment`,id:`request-body-mass-assignment`,source:`react-doctor`,originallyExternal:!1,rule:{...m,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...m.tags??[]])]}},{key:`react-doctor/require-autoplay-video-poster`,id:`require-autoplay-video-poster`,source:`react-doctor`,originallyExternal:!1,rule:{..._Dt,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,..._Dt.tags??[]])]}},{key:`react-doctor/require-render-return`,id:`require-render-return`,source:`react-doctor`,originallyExternal:!0,rule:{...wDt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...wDt.requires??[]])]}},{key:`react-doctor/require-scale-reveal-transform-origin`,id:`require-scale-reveal-transform-origin`,source:`react-doctor`,originallyExternal:!1,rule:{...kDt,framework:`global`,category:`Maintainability`,tags:[...new Set([`design`,...kDt.tags??[]])]}},{key:`react-doctor/rerender-defer-reads-hook`,id:`rerender-defer-reads-hook`,source:`react-doctor`,originallyExternal:!1,rule:{...FDt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...FDt.requires??[]])]}},{key:`react-doctor/rerender-dependencies`,id:`rerender-dependencies`,source:`react-doctor`,originallyExternal:!1,rule:{...IDt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...IDt.requires??[]])]}},{key:`react-doctor/rerender-derived-state-from-hook`,id:`rerender-derived-state-from-hook`,source:`react-doctor`,originallyExternal:!1,rule:{...VDt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...VDt.requires??[]])]}},{key:`react-doctor/rerender-functional-setstate`,id:`rerender-functional-setstate`,source:`react-doctor`,originallyExternal:!1,rule:{...XDt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...XDt.requires??[]])]}},{key:`react-doctor/rerender-lazy-ref-init`,id:`rerender-lazy-ref-init`,source:`react-doctor`,originallyExternal:!1,rule:{...QDt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...QDt.requires??[]])]}},{key:`react-doctor/rerender-lazy-state-init`,id:`rerender-lazy-state-init`,source:`react-doctor`,originallyExternal:!1,rule:{...eOt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...eOt.requires??[]])]}},{key:`react-doctor/rerender-memo-before-early-return`,id:`rerender-memo-before-early-return`,source:`react-doctor`,originallyExternal:!1,rule:{...cOt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...cOt.requires??[]])]}},{key:`react-doctor/rerender-memo-with-default-value`,id:`rerender-memo-with-default-value`,source:`react-doctor`,originallyExternal:!1,rule:{...NOt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...NOt.requires??[]])]}},{key:`react-doctor/rerender-state-only-in-handlers`,id:`rerender-state-only-in-handlers`,source:`react-doctor`,originallyExternal:!1,rule:{...Mkt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Mkt.requires??[]])]}},{key:`react-doctor/rerender-transitions-scroll`,id:`rerender-transitions-scroll`,source:`react-doctor`,originallyExternal:!1,rule:{...Vkt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...Vkt.requires??[]])]}},{key:`react-doctor/rn-animate-layout-property`,id:`rn-animate-layout-property`,source:`react-doctor`,originallyExternal:!1,rule:{...Hkt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Hkt.tags??[]])]}},{key:`react-doctor/rn-animation-reaction-as-derived`,id:`rn-animation-reaction-as-derived`,source:`react-doctor`,originallyExternal:!1,rule:{...Ukt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Ukt.tags??[]])]}},{key:`react-doctor/rn-bottom-sheet-no-ignored-scroll-prop`,id:`rn-bottom-sheet-no-ignored-scroll-prop`,source:`react-doctor`,originallyExternal:!1,rule:{...Gkt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Gkt.tags??[]])]}},{key:`react-doctor/rn-bottom-sheet-no-state-in-on-animate`,id:`rn-bottom-sheet-no-state-in-on-animate`,source:`react-doctor`,originallyExternal:!1,rule:{...qkt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...qkt.tags??[]])]}},{key:`react-doctor/rn-bottom-sheet-prefer-native`,id:`rn-bottom-sheet-prefer-native`,source:`react-doctor`,originallyExternal:!1,rule:{...Ykt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Ykt.tags??[]])]}},{key:`react-doctor/rn-bottom-sheet-use-integrated-scrollable`,id:`rn-bottom-sheet-use-integrated-scrollable`,source:`react-doctor`,originallyExternal:!1,rule:{...Qkt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Qkt.tags??[]])]}},{key:`react-doctor/rn-detox-missing-await`,id:`rn-detox-missing-await`,source:`react-doctor`,originallyExternal:!1,rule:{...dAt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...dAt.tags??[]])]}},{key:`react-doctor/rn-list-callback-per-row`,id:`rn-list-callback-per-row`,source:`react-doctor`,originallyExternal:!1,rule:{...OAt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...OAt.tags??[]])]}},{key:`react-doctor/rn-list-data-mapped`,id:`rn-list-data-mapped`,source:`react-doctor`,originallyExternal:!1,rule:{...PAt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...PAt.tags??[]])]}},{key:`react-doctor/rn-list-missing-estimated-item-size`,id:`rn-list-missing-estimated-item-size`,source:`react-doctor`,originallyExternal:!1,rule:{...RAt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...RAt.tags??[]])]}},{key:`react-doctor/rn-list-recyclable-without-types`,id:`rn-list-recyclable-without-types`,source:`react-doctor`,originallyExternal:!1,rule:{...Sjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Sjt.tags??[]])]}},{key:`react-doctor/rn-no-deep-imports`,id:`rn-no-deep-imports`,source:`react-doctor`,originallyExternal:!1,rule:{...Djt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Djt.tags??[]])]}},{key:`react-doctor/rn-no-deprecated-modules`,id:`rn-no-deprecated-modules`,source:`react-doctor`,originallyExternal:!1,rule:{...Ojt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Ojt.tags??[]])]}},{key:`react-doctor/rn-no-dimensions-get`,id:`rn-no-dimensions-get`,source:`react-doctor`,originallyExternal:!1,rule:{...Pjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Pjt.tags??[]])]}},{key:`react-doctor/rn-no-falsy-and-render`,id:`rn-no-falsy-and-render`,source:`react-doctor`,originallyExternal:!1,rule:{...qjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...qjt.tags??[]])]}},{key:`react-doctor/rn-no-image-children`,id:`rn-no-image-children`,source:`react-doctor`,originallyExternal:!1,rule:{...Yjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Yjt.tags??[]])]}},{key:`react-doctor/rn-no-inline-flatlist-renderitem`,id:`rn-no-inline-flatlist-renderitem`,source:`react-doctor`,originallyExternal:!1,rule:{...Xjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Xjt.tags??[]])]}},{key:`react-doctor/rn-no-inline-object-in-list-item`,id:`rn-no-inline-object-in-list-item`,source:`react-doctor`,originallyExternal:!1,rule:{...Zjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Zjt.tags??[]])]}},{key:`react-doctor/rn-no-legacy-expo-packages`,id:`rn-no-legacy-expo-packages`,source:`react-doctor`,originallyExternal:!1,rule:{...Qjt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...Qjt.tags??[]])]}},{key:`react-doctor/rn-no-legacy-shadow-styles`,id:`rn-no-legacy-shadow-styles`,source:`react-doctor`,originallyExternal:!1,rule:{...$jt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...$jt.tags??[]])]}},{key:`react-doctor/rn-no-non-native-navigator`,id:`rn-no-non-native-navigator`,source:`react-doctor`,originallyExternal:!1,rule:{...rMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...rMt.tags??[]])]}},{key:`react-doctor/rn-no-panresponder`,id:`rn-no-panresponder`,source:`react-doctor`,originallyExternal:!1,rule:{...iMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...iMt.tags??[]])]}},{key:`react-doctor/rn-no-raw-text`,id:`rn-no-raw-text`,source:`react-doctor`,originallyExternal:!1,rule:{...yMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...yMt.tags??[]])]}},{key:`react-doctor/rn-no-renderitem-key`,id:`rn-no-renderitem-key`,source:`react-doctor`,originallyExternal:!1,rule:{...SMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...SMt.tags??[]])]}},{key:`react-doctor/rn-no-scroll-state`,id:`rn-no-scroll-state`,source:`react-doctor`,originallyExternal:!1,rule:{...AMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...AMt.tags??[]])]}},{key:`react-doctor/rn-no-scrollview-mapped-list`,id:`rn-no-scrollview-mapped-list`,source:`react-doctor`,originallyExternal:!1,rule:{...LMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...LMt.tags??[]])]}},{key:`react-doctor/rn-no-set-native-props`,id:`rn-no-set-native-props`,source:`react-doctor`,originallyExternal:!1,rule:{...zMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...zMt.tags??[]])]}},{key:`react-doctor/rn-no-single-element-style-array`,id:`rn-no-single-element-style-array`,source:`react-doctor`,originallyExternal:!1,rule:{...BMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...BMt.tags??[]])]}},{key:`react-doctor/rn-platform-shaking-use-direct-import`,id:`rn-platform-shaking-use-direct-import`,source:`react-doctor`,originallyExternal:!1,rule:{...VMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...VMt.tags??[]])]}},{key:`react-doctor/rn-prefer-content-inset-adjustment`,id:`rn-prefer-content-inset-adjustment`,source:`react-doctor`,originallyExternal:!1,rule:{...HMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...HMt.tags??[]])]}},{key:`react-doctor/rn-prefer-expo-image`,id:`rn-prefer-expo-image`,source:`react-doctor`,originallyExternal:!1,rule:{...qMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...qMt.tags??[]])]}},{key:`react-doctor/rn-prefer-pressable`,id:`rn-prefer-pressable`,source:`react-doctor`,originallyExternal:!1,rule:{...XMt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...XMt.tags??[]])]}},{key:`react-doctor/rn-prefer-pressable-over-gesture-detector`,id:`rn-prefer-pressable-over-gesture-detector`,source:`react-doctor`,originallyExternal:!1,rule:{...eNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...eNt.tags??[]])]}},{key:`react-doctor/rn-prefer-reanimated`,id:`rn-prefer-reanimated`,source:`react-doctor`,originallyExternal:!1,rule:{...nNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...nNt.tags??[]])]}},{key:`react-doctor/rn-pressable-shared-value-mutation`,id:`rn-pressable-shared-value-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...oNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...oNt.tags??[]])]}},{key:`react-doctor/rn-reanimated-4-no-legacy-spring-thresholds`,id:`rn-reanimated-4-no-legacy-spring-thresholds`,source:`react-doctor`,originallyExternal:!1,rule:{...lNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...lNt.tags??[]])]}},{key:`react-doctor/rn-reanimated-4-no-removed-api`,id:`rn-reanimated-4-no-removed-api`,source:`react-doctor`,originallyExternal:!1,rule:{...fNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...fNt.tags??[]])]}},{key:`react-doctor/rn-reanimated-4-use-worklets-scheduler`,id:`rn-reanimated-4-use-worklets-scheduler`,source:`react-doctor`,originallyExternal:!1,rule:{...hNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...hNt.tags??[]])]}},{key:`react-doctor/rn-scrollview-dynamic-padding`,id:`rn-scrollview-dynamic-padding`,source:`react-doctor`,originallyExternal:!1,rule:{...xNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...xNt.tags??[]])]}},{key:`react-doctor/rn-scrollview-flex-in-content-container`,id:`rn-scrollview-flex-in-content-container`,source:`react-doctor`,originallyExternal:!1,rule:{...DNt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...DNt.tags??[]])]}},{key:`react-doctor/rn-style-prefer-boxshadow`,id:`rn-style-prefer-boxshadow`,source:`react-doctor`,originallyExternal:!1,rule:{...INt,framework:`react-native`,category:`Bugs`,tags:[...new Set([`react-native`,...INt.tags??[]])]}},{key:`react-doctor/role-button-requires-complete-keyboard-activation`,id:`role-button-requires-complete-keyboard-activation`,source:`react-doctor`,originallyExternal:!1,rule:{...YNt,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...YNt.requires??[]])]}},{key:`react-doctor/role-has-required-aria-props`,id:`role-has-required-aria-props`,source:`react-doctor`,originallyExternal:!0,rule:{...nPt,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...nPt.requires??[]])]}},{key:`react-doctor/role-supports-aria-props`,id:`role-supports-aria-props`,source:`react-doctor`,originallyExternal:!0,rule:{...lPt,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...lPt.requires??[]])]}},{key:`react-doctor/rules-of-hooks`,id:`rules-of-hooks`,source:`react-doctor`,originallyExternal:!0,rule:{...hFt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...hFt.requires??[]])]}},{key:`react-doctor/scope`,id:`scope`,source:`react-doctor`,originallyExternal:!0,rule:{...gFt,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...gFt.requires??[]])]}},{key:`react-doctor/secret-in-fallback`,id:`secret-in-fallback`,source:`react-doctor`,originallyExternal:!1,rule:{...Je,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Je.tags??[]])]}},{key:`react-doctor/self-closing-comp`,id:`self-closing-comp`,source:`react-doctor`,originallyExternal:!0,rule:{...yFt,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...yFt.requires??[]])]}},{key:`react-doctor/server-after-nonblocking`,id:`server-after-nonblocking`,source:`react-doctor`,originallyExternal:!1,rule:{...IFt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...IFt.tags??[]])]}},{key:`react-doctor/server-auth-actions`,id:`server-auth-actions`,source:`react-doctor`,originallyExternal:!1,rule:{...JIt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...JIt.tags??[]])]}},{key:`react-doctor/server-cache-with-object-literal`,id:`server-cache-with-object-literal`,source:`react-doctor`,originallyExternal:!1,rule:{...YIt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...YIt.tags??[]])]}},{key:`react-doctor/server-dedup-props`,id:`server-dedup-props`,source:`react-doctor`,originallyExternal:!1,rule:{...eLt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...eLt.tags??[]])]}},{key:`react-doctor/server-fetch-without-revalidate`,id:`server-fetch-without-revalidate`,source:`react-doctor`,originallyExternal:!1,rule:{...mLt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...mLt.tags??[]])]}},{key:`react-doctor/server-hoist-static-io`,id:`server-hoist-static-io`,source:`react-doctor`,originallyExternal:!1,rule:{...TLt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...TLt.tags??[]])]}},{key:`react-doctor/server-no-mutable-module-state`,id:`server-no-mutable-module-state`,source:`react-doctor`,originallyExternal:!1,rule:{...GLt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...GLt.tags??[]])]}},{key:`react-doctor/server-sequential-independent-await`,id:`server-sequential-independent-await`,source:`react-doctor`,originallyExternal:!1,rule:{...eRt,framework:`global`,category:`Bugs`,tags:[...new Set([`server-action`,...eRt.tags??[]])]}},{key:`react-doctor/shadcn-tabs-trigger-requires-list`,id:`shadcn-tabs-trigger-requires-list`,source:`react-doctor`,originallyExternal:!1,rule:{...iRt,framework:`global`,category:`Bugs`}},{key:`react-doctor/state-in-constructor`,id:`state-in-constructor`,source:`react-doctor`,originallyExternal:!0,rule:{...cRt,framework:`global`,category:`Maintainability`,requires:[...new Set([`react`,...cRt.requires??[]])]}},{key:`react-doctor/style-prop-object`,id:`style-prop-object`,source:`react-doctor`,originallyExternal:!0,rule:{...yRt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...yRt.requires??[]])]}},{key:`react-doctor/styled-components-duplicate-css-property-in-block`,id:`styled-components-duplicate-css-property-in-block`,source:`react-doctor`,originallyExternal:!1,rule:{...FRt,framework:`global`,category:`Maintainability`,defaultEnabled:!1,tags:[...new Set([`design`,...FRt.tags??[]])]}},{key:`react-doctor/styled-components-non-transient-custom-prop-on-intrinsic-element`,id:`styled-components-non-transient-custom-prop-on-intrinsic-element`,source:`react-doctor`,originallyExternal:!1,rule:{...JRt,framework:`global`,category:`Bugs`}},{key:`react-doctor/supabase-client-owned-authz-field`,id:`supabase-client-owned-authz-field`,source:`react-doctor`,originallyExternal:!1,rule:{...vt,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...vt.tags??[]])]}},{key:`react-doctor/supabase-rls-policy-risk`,id:`supabase-rls-policy-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...jn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...jn.tags??[]])]}},{key:`react-doctor/supabase-table-missing-rls`,id:`supabase-table-missing-rls`,source:`react-doctor`,originallyExternal:!1,rule:{...Sn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Sn.tags??[]])]}},{key:`react-doctor/svg-filter-clickjacking-risk`,id:`svg-filter-clickjacking-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...ft,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...ft.tags??[]])]}},{key:`react-doctor/tabindex-no-positive`,id:`tabindex-no-positive`,source:`react-doctor`,originallyExternal:!0,rule:{...YRt,framework:`global`,category:`Accessibility`,requires:[...new Set([`react`,...YRt.requires??[]])]}},{key:`react-doctor/tanstack-start-get-mutation`,id:`tanstack-start-get-mutation`,source:`react-doctor`,originallyExternal:!1,rule:{...XRt,framework:`tanstack-start`,category:`Security`}},{key:`react-doctor/tanstack-start-loader-parallel-fetch`,id:`tanstack-start-loader-parallel-fetch`,source:`react-doctor`,originallyExternal:!1,rule:{...ZRt,framework:`tanstack-start`,category:`Performance`}},{key:`react-doctor/tanstack-start-missing-head-content`,id:`tanstack-start-missing-head-content`,source:`react-doctor`,originallyExternal:!1,rule:{...azt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-missing-scripts`,id:`tanstack-start-missing-scripts`,source:`react-doctor`,originallyExternal:!1,rule:{...hzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-anchor-element`,id:`tanstack-start-no-anchor-element`,source:`react-doctor`,originallyExternal:!1,rule:{..._zt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-direct-fetch-in-loader`,id:`tanstack-start-no-direct-fetch-in-loader`,source:`react-doctor`,originallyExternal:!1,rule:{...vzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-dynamic-server-fn-import`,id:`tanstack-start-no-dynamic-server-fn-import`,source:`react-doctor`,originallyExternal:!1,rule:{...yzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-navigate-in-render`,id:`tanstack-start-no-navigate-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...Szt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-secrets-in-loader`,id:`tanstack-start-no-secrets-in-loader`,source:`react-doctor`,originallyExternal:!1,rule:{...Dzt,framework:`tanstack-start`,category:`Security`}},{key:`react-doctor/tanstack-start-no-use-server-in-handler`,id:`tanstack-start-no-use-server-in-handler`,source:`react-doctor`,originallyExternal:!1,rule:{...Ozt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-no-useeffect-fetch`,id:`tanstack-start-no-useeffect-fetch`,source:`react-doctor`,originallyExternal:!1,rule:{...kzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-redirect-in-try-catch`,id:`tanstack-start-redirect-in-try-catch`,source:`react-doctor`,originallyExternal:!1,rule:{...Azt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-route-property-order`,id:`tanstack-start-route-property-order`,source:`react-doctor`,originallyExternal:!1,rule:{...jzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-server-fn-method-order`,id:`tanstack-start-server-fn-method-order`,source:`react-doctor`,originallyExternal:!1,rule:{...Nzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tanstack-start-server-fn-validate-input`,id:`tanstack-start-server-fn-validate-input`,source:`react-doctor`,originallyExternal:!1,rule:{...Fzt,framework:`tanstack-start`,category:`Bugs`}},{key:`react-doctor/tenant-static-proxy-risk`,id:`tenant-static-proxy-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...It,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...It.tags??[]])]}},{key:`react-doctor/three-cap-device-pixel-ratio`,id:`three-cap-device-pixel-ratio`,source:`react-doctor`,originallyExternal:!1,rule:{...W8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...W8.tags??[]])],requires:[...new Set([`three`,...W8.requires??[]])]}},{key:`react-doctor/three-limit-shadowed-point-lights`,id:`three-limit-shadowed-point-lights`,source:`react-doctor`,originallyExternal:!1,rule:{...G8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...G8.tags??[]])],requires:[...new Set([`three`,...G8.requires??[]])]}},{key:`react-doctor/three-no-allocation-in-pointer-move`,id:`three-no-allocation-in-pointer-move`,source:`react-doctor`,originallyExternal:!1,rule:{...q8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...q8.tags??[]])],requires:[...new Set([`three`,...q8.requires??[]])]}},{key:`react-doctor/three-no-async-animation-loop`,id:`three-no-async-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...Y8,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...Y8.tags??[]])],requires:[...new Set([`three`,...Y8.requires??[]])]}},{key:`react-doctor/three-no-clone-in-animation-loop`,id:`three-no-clone-in-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...X8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...X8.tags??[]])],requires:[...new Set([`three`,...X8.requires??[]])]}},{key:`react-doctor/three-no-material-recompile-in-animation-loop`,id:`three-no-material-recompile-in-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...Z8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...Z8.tags??[]])],requires:[...new Set([`three`,...Z8.requires??[]])]}},{key:`react-doctor/three-no-new-in-animation-loop`,id:`three-no-new-in-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...Q8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...Q8.tags??[]])],requires:[...new Set([`three`,...Q8.requires??[]])]}},{key:`react-doctor/three-no-object-construction-in-render`,id:`three-no-object-construction-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...$8,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...$8.tags??[]])],requires:[...new Set([`react`,`three`,...$8.requires??[]])]}},{key:`react-doctor/three-no-redundant-uniforms-need-update`,id:`three-no-redundant-uniforms-need-update`,source:`react-doctor`,originallyExternal:!1,rule:{...e5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...e5.tags??[]])],requires:[...new Set([`three`,...e5.requires??[]])]}},{key:`react-doctor/three-no-state-in-animation-loop`,id:`three-no-state-in-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...t5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...t5.tags??[]])],requires:[...new Set([`react`,`three`,...t5.requires??[]])]}},{key:`react-doctor/three-no-state-in-pointer-move`,id:`three-no-state-in-pointer-move`,source:`react-doctor`,originallyExternal:!1,rule:{...n5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...n5.tags??[]])],requires:[...new Set([`react`,`three`,...n5.requires??[]])]}},{key:`react-doctor/three-on-before-compile-require-program-cache-key`,id:`three-on-before-compile-require-program-cache-key`,source:`react-doctor`,originallyExternal:!1,rule:{...a5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...a5.tags??[]])],requires:[...new Set([`three`,...a5.requires??[]])]}},{key:`react-doctor/three-prefer-instanced-mesh`,id:`three-prefer-instanced-mesh`,source:`react-doctor`,originallyExternal:!1,rule:{...o5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...o5.tags??[]])],requires:[...new Set([`three`,...o5.requires??[]])]}},{key:`react-doctor/three-raw-shader-require-fragment-float-precision`,id:`three-raw-shader-require-fragment-float-precision`,source:`react-doctor`,originallyExternal:!1,rule:{...d5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...d5.tags??[]])],requires:[...new Set([`three`,...d5.requires??[]])]}},{key:`react-doctor/three-raw-shader-require-glsl3-version`,id:`three-raw-shader-require-glsl3-version`,source:`react-doctor`,originallyExternal:!1,rule:{..._5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,..._5.tags??[]])],requires:[...new Set([`three`,..._5.requires??[]])]}},{key:`react-doctor/three-require-animation-mixer-cleanup`,id:`three-require-animation-mixer-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...v5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...v5.tags??[]])],requires:[...new Set([`react`,`three`,...v5.requires??[]])]}},{key:`react-doctor/three-require-controls-cleanup`,id:`three-require-controls-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...y5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...y5.tags??[]])],requires:[...new Set([`react`,`three`,...y5.requires??[]])]}},{key:`react-doctor/three-require-frame-delta`,id:`three-require-frame-delta`,source:`react-doctor`,originallyExternal:!1,rule:{...x5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...x5.tags??[]])],requires:[...new Set([`three`,...x5.requires??[]])]}},{key:`react-doctor/three-require-instanced-buffer-update`,id:`three-require-instanced-buffer-update`,source:`react-doctor`,originallyExternal:!1,rule:{...S5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...S5.tags??[]])],requires:[...new Set([`three`,...S5.requires??[]])]}},{key:`react-doctor/three-require-owned-geometry-cleanup`,id:`three-require-owned-geometry-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...C5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...C5.tags??[]])],requires:[...new Set([`react`,`three`,...C5.requires??[]])]}},{key:`react-doctor/three-require-owned-material-cleanup`,id:`three-require-owned-material-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...w5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...w5.tags??[]])],requires:[...new Set([`react`,`three`,...w5.requires??[]])]}},{key:`react-doctor/three-require-owned-texture-cleanup`,id:`three-require-owned-texture-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...T5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...T5.tags??[]])],requires:[...new Set([`react`,`three`,...T5.requires??[]])]}},{key:`react-doctor/three-require-postprocessing-cleanup`,id:`three-require-postprocessing-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...E5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...E5.tags??[]])],requires:[...new Set([`react`,`three`,...E5.requires??[]])]}},{key:`react-doctor/three-require-projection-matrix-update`,id:`three-require-projection-matrix-update`,source:`react-doctor`,originallyExternal:!1,rule:{...O5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...O5.tags??[]])],requires:[...new Set([`three`,...O5.requires??[]])]}},{key:`react-doctor/three-require-render-target-cleanup`,id:`three-require-render-target-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...k5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...k5.tags??[]])],requires:[...new Set([`react`,`three`,...k5.requires??[]])]}},{key:`react-doctor/three-require-renderer-cleanup`,id:`three-require-renderer-cleanup`,source:`react-doctor`,originallyExternal:!1,rule:{...j5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...j5.tags??[]])],requires:[...new Set([`react`,`three`,...j5.requires??[]])]}},{key:`react-doctor/three-shader-no-constant-out-of-bounds-index`,id:`three-shader-no-constant-out-of-bounds-index`,source:`react-doctor`,originallyExternal:!1,rule:{...M5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...M5.tags??[]])],requires:[...new Set([`three`,...M5.requires??[]])]}},{key:`react-doctor/three-shader-no-derivatives-in-nonuniform-flow`,id:`three-shader-no-derivatives-in-nonuniform-flow`,source:`react-doctor`,originallyExternal:!1,rule:{...N5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...N5.tags??[]])],requires:[...new Set([`three`,...N5.requires??[]])]}},{key:`react-doctor/three-shader-no-invalid-clamp-bounds`,id:`three-shader-no-invalid-clamp-bounds`,source:`react-doctor`,originallyExternal:!1,rule:{...F5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...F5.tags??[]])],requires:[...new Set([`three`,...F5.requires??[]])]}},{key:`react-doctor/three-shader-no-invalid-constant-bit-operations`,id:`three-shader-no-invalid-constant-bit-operations`,source:`react-doctor`,originallyExternal:!1,rule:{...I5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...I5.tags??[]])],requires:[...new Set([`three`,...I5.requires??[]])]}},{key:`react-doctor/three-shader-no-invalid-constant-math`,id:`three-shader-no-invalid-constant-math`,source:`react-doctor`,originallyExternal:!1,rule:{...L5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...L5.tags??[]])],requires:[...new Set([`three`,...L5.requires??[]])]}},{key:`react-doctor/three-shader-no-invalid-smoothstep-edges`,id:`three-shader-no-invalid-smoothstep-edges`,source:`react-doctor`,originallyExternal:!1,rule:{...R5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...R5.tags??[]])],requires:[...new Set([`three`,...R5.requires??[]])]}},{key:`react-doctor/three-shader-no-inverse-of-uniform`,id:`three-shader-no-inverse-of-uniform`,source:`react-doctor`,originallyExternal:!1,rule:{...z5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...z5.tags??[]])],requires:[...new Set([`three`,...z5.requires??[]])]}},{key:`react-doctor/three-shader-no-redeclared-builtins`,id:`three-shader-no-redeclared-builtins`,source:`react-doctor`,originallyExternal:!1,rule:{...B5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...B5.tags??[]])],requires:[...new Set([`three`,...B5.requires??[]])]}},{key:`react-doctor/three-shader-no-redundant-frag-depth`,id:`three-shader-no-redundant-frag-depth`,source:`react-doctor`,originallyExternal:!1,rule:{...V5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...V5.tags??[]])],requires:[...new Set([`three`,...V5.requires??[]])]}},{key:`react-doctor/three-shader-no-version-directive`,id:`three-shader-no-version-directive`,source:`react-doctor`,originallyExternal:!1,rule:{...H5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...H5.tags??[]])],requires:[...new Set([`three`,...H5.requires??[]])]}},{key:`react-doctor/three-shader-prefer-small-integer-pow`,id:`three-shader-prefer-small-integer-pow`,source:`react-doctor`,originallyExternal:!1,rule:{...U5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...U5.tags??[]])],requires:[...new Set([`three`,...U5.requires??[]])]}},{key:`react-doctor/three-shader-prefer-squared-distance-comparison`,id:`three-shader-prefer-squared-distance-comparison`,source:`react-doctor`,originallyExternal:!1,rule:{...G5,framework:`global`,category:`Performance`,tags:[...new Set([`three`,`webgl`,...G5.tags??[]])],requires:[...new Set([`three`,...G5.requires??[]])]}},{key:`react-doctor/three-shader-require-matching-uniforms`,id:`three-shader-require-matching-uniforms`,source:`react-doctor`,originallyExternal:!1,rule:{...K5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...K5.tags??[]])],requires:[...new Set([`three`,...K5.requires??[]])]}},{key:`react-doctor/three-shader-require-matching-varyings`,id:`three-shader-require-matching-varyings`,source:`react-doctor`,originallyExternal:!1,rule:{...q5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...q5.tags??[]])],requires:[...new Set([`three`,...q5.requires??[]])]}},{key:`react-doctor/three-shader-require-position-on-all-paths`,id:`three-shader-require-position-on-all-paths`,source:`react-doctor`,originallyExternal:!1,rule:{...Z5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...Z5.tags??[]])],requires:[...new Set([`three`,...Z5.requires??[]])]}},{key:`react-doctor/three-shader-require-uniform-bindings`,id:`three-shader-require-uniform-bindings`,source:`react-doctor`,originallyExternal:!1,rule:{...Q5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...Q5.tags??[]])],requires:[...new Set([`three`,...Q5.requires??[]])]}},{key:`react-doctor/three-tsl-no-js-uniform-branch`,id:`three-tsl-no-js-uniform-branch`,source:`react-doctor`,originallyExternal:!1,rule:{...$5,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...$5.tags??[]])],requires:[...new Set([`three`,...$5.requires??[]])]}},{key:`react-doctor/three-webgpu-no-legacy-effect-composer`,id:`three-webgpu-no-legacy-effect-composer`,source:`react-doctor`,originallyExternal:!1,rule:{...e7,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...e7.tags??[]])],requires:[...new Set([`three`,...e7.requires??[]])]}},{key:`react-doctor/three-webgpu-no-legacy-material-api`,id:`three-webgpu-no-legacy-material-api`,source:`react-doctor`,originallyExternal:!1,rule:{...t7,framework:`global`,category:`Bugs`,tags:[...new Set([`three`,`webgl`,...t7.tags??[]])],requires:[...new Set([`three`,...t7.requires??[]])]}},{key:`react-doctor/unsafe-json-in-html`,id:`unsafe-json-in-html`,source:`react-doctor`,originallyExternal:!1,rule:{...Bt,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Bt.tags??[]])]}},{key:`react-doctor/untrusted-redirect-following`,id:`untrusted-redirect-following`,source:`react-doctor`,originallyExternal:!1,rule:{...Tte,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...Tte.tags??[]])]}},{key:`react-doctor/url-prefilled-privileged-action`,id:`url-prefilled-privileged-action`,source:`react-doctor`,originallyExternal:!1,rule:{...tn,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...tn.tags??[]])]}},{key:`react-doctor/use-lazy-motion`,id:`use-lazy-motion`,source:`react-doctor`,originallyExternal:!1,rule:{...CHt,framework:`global`,category:`Performance`}},{key:`react-doctor/valtio-no-proxy-read-in-render`,id:`valtio-no-proxy-read-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...LHt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...LHt.requires??[]])]}},{key:`react-doctor/valtio-no-snapshot-in-callback`,id:`valtio-no-snapshot-in-callback`,source:`react-doctor`,originallyExternal:!1,rule:{...oUt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...oUt.requires??[]])]}},{key:`react-doctor/void-dom-elements-no-children`,id:`void-dom-elements-no-children`,source:`react-doctor`,originallyExternal:!0,rule:{...uUt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...uUt.requires??[]])]}},{key:`react-doctor/waapi-animation-in-render`,id:`waapi-animation-in-render`,source:`react-doctor`,originallyExternal:!1,rule:{...dUt,framework:`global`,category:`Bugs`}},{key:`react-doctor/web-animation-offsets-valid`,id:`web-animation-offsets-valid`,source:`react-doctor`,originallyExternal:!1,rule:{..._Ut,framework:`global`,category:`Bugs`}},{key:`react-doctor/webgl-no-sync-readback-in-animation-loop`,id:`webgl-no-sync-readback-in-animation-loop`,source:`react-doctor`,originallyExternal:!1,rule:{...yUt,framework:`global`,category:`Performance`,tags:[...new Set([`webgl`,...yUt.tags??[]])]}},{key:`react-doctor/webhook-signature-risk`,id:`webhook-signature-risk`,source:`react-doctor`,originallyExternal:!1,rule:{...jt,framework:`global`,category:`Security`,tags:[...new Set([`security-scan`,...jt.tags??[]])]}},{key:`react-doctor/window-open-without-noopener`,id:`window-open-without-noopener`,source:`react-doctor`,originallyExternal:!1,rule:{...KWt,framework:`global`,category:`Security`}},{key:`react-doctor/zod-v4-no-deprecated-error-apis`,id:`zod-v4-no-deprecated-error-apis`,source:`react-doctor`,originallyExternal:!1,rule:{...rGt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/zod-v4-no-deprecated-error-customization`,id:`zod-v4-no-deprecated-error-customization`,source:`react-doctor`,originallyExternal:!1,rule:{...fGt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/zod-v4-no-deprecated-schema-apis`,id:`zod-v4-no-deprecated-schema-apis`,source:`react-doctor`,originallyExternal:!1,rule:{...PGt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/zod-v4-prefer-top-level-string-formats`,id:`zod-v4-prefer-top-level-string-formats`,source:`react-doctor`,originallyExternal:!1,rule:{...LGt,framework:`global`,category:`Maintainability`}},{key:`react-doctor/zustand-no-fresh-selector-result`,id:`zustand-no-fresh-selector-result`,source:`react-doctor`,originallyExternal:!1,rule:{...sKt,framework:`global`,category:`Performance`,requires:[...new Set([`react`,...sKt.requires??[]])]}},{key:`react-doctor/zustand-no-get-during-initialization`,id:`zustand-no-get-during-initialization`,source:`react-doctor`,originallyExternal:!1,rule:{...dKt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...dKt.requires??[]])]}},{key:`react-doctor/zustand-no-mutating-state`,id:`zustand-no-mutating-state`,source:`react-doctor`,originallyExternal:!1,rule:{...RKt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...RKt.requires??[]])]}},{key:`react-doctor/zustand-no-whole-store-destructure`,id:`zustand-no-whole-store-destructure`,source:`react-doctor`,originallyExternal:!1,rule:{...KKt,framework:`global`,category:`Bugs`,requires:[...new Set([`react`,...KKt.requires??[]])]}}],qKt=Object.fromEntries(Y9.map(e=>[e.id,e.rule])),JKt=e=>{let t=e.create.bind(e);return{...e,create:n=>!e.minimumInkVersion||!Ite(n.filename,e.minimumInkVersion)?Te:t(n)}},YKt=e=>{let t=e.filename;if(!t)return!0;let n=ge(t),r=bt(n);if(!r||wn(r,`next`)||!mt(r))return!0;let i=Mn(n),a=Wr(e.settings,`rootDirectory`);return!(i!==null&&yE(i,a,!1))},XKt=e=>{let t=e.create.bind(e);return{...e,create:e=>YKt(e)?t(e):Te}},ZKt=e=>{let t=e.create.bind(e);return{...e,create:e=>APe(e)?t(e):Te}},QKt=()=>({rootScope:{id:0,kind:`module`,node:{},parent:null,children:[],symbols:[],references:[],symbolsByName:new Map},scopeFor:()=>({id:0}),ownScopeFor:()=>null,symbolFor:()=>null,referenceFor:()=>null,isGlobalReference:()=>!1}),$Kt={cfgFor:()=>null,enclosingFunction:()=>null,isUnconditionalFromEntry:()=>!1},eqt=new WeakMap,tqt=new WeakMap,nqt=e=>({...e,create:t=>{let n=t.sourceCode?.ast??null,r,i,a={report:t.report,get filename(){return t.filename??t.getFilename?.()},settings:t.settings,get scopes(){return n?(r||(r=eqt.get(n),r||(r=Se(n),eqt.set(n,r))),r):QKt()},get cfg(){return n?(i||(i=tqt.get(n),i||(i=yp(n),tqt.set(n,i))),i):$Kt}},o=e.create(a);if(o===Te||n)return o;let s=o.Program;return{...o,Program:(e=>{n=e,s&&s(e)})}}}),rqt=e=>e.minimumInkVersion?JKt(e):e.framework===`react-native`?ZKt(e):e.framework===`nextjs`?XKt(e):e,iqt={meta:{name:`react-doctor`},rules:(e=>{let t={};for(let[n,r]of Object.entries(e))t[n]=nqt(rqt(r));return t})(qKt)},X9=e=>Object.fromEntries(e.map(e=>[e.key,e.severity])),Z9=e=>e.map(e=>({key:e.key,severity:e.rule.severity})),aqt=e=>e.rule.defaultEnabled!==!1,oqt=e=>e.rule.scan!==void 0,Q9=e=>Y9.filter(t=>t.rule.framework===e&&aqt(t)&&!oqt(t)),sqt=()=>{let e=new Set;for(let t of Y9)t.rule.framework!==`global`&&e.add(t.key);return e},$9=Y9,cqt=[...$9,...yt],lqt=X9(Z9(Q9(`global`))),uqt=X9(Z9(Q9(`nextjs`))),dqt=X9(Z9(Q9(`react-native`))),fqt=X9(Z9(Q9(`tanstack-start`))),pqt=X9(Z9(Q9(`tanstack-query`))),mqt=X9(Z9(Q9(`preact`))),hqt=X9(Z9($9.filter(e=>!oqt(e)))),gqt=new Set($9.map(e=>e.key)),_qt=sqt();var vqt=iqt;export{hqt as ALL_REACT_DOCTOR_RULES,gqt as ALL_REACT_DOCTOR_RULE_KEYS,zee as CROSS_FILE_DEPENDENCY_COLLECTORS,Ute as CROSS_FILE_RULE_IDS,yt as EXTERNAL_RULES,_qt as FRAMEWORK_SPECIFIC_RULE_KEYS,Hte as FRAMEWORK_TOKENS,$te as MOTION_LIBRARY_PACKAGES,uqt as NEXTJS_RULES,mqt as PREACT_RULES,Zte as REACT_COMPILER_RULES,$9 as REACT_DOCTOR_RULES,Jte as REACT_NATIVE_DEPENDENCY_NAMES,kee as REACT_NATIVE_DEPENDENCY_PREFIXES,dqt as REACT_NATIVE_RULES,lqt as RECOMMENDED_RULES,cqt as RULES,pqt as TANSTACK_QUERY_RULES,fqt as TANSTACK_START_RULES,Iee as UNBOUNDED_CROSS_FILE_RULE_IDS,Ote as classifySecurityScanFile,Vee as collectCrossFileDependencyProbes,vqt as default,se as isReactNativeDependencyName,lte as resetManifestCaches,Lte as shouldReadSecurityScanContent};
26
26
  //# sourceMappingURL=index.js.map