oxlint-plugin-react-doctor 0.9.7 → 0.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capability-BAJBLwvF.js +31 -0
- package/dist/core-NYcNjo1f.d.ts +1371 -0
- package/dist/core.d.ts +2 -1045
- package/dist/core.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -14
- package/package.json +1 -1
- package/dist/capability-BN46vnIK.js +0 -31
- package/dist/react-native-dependency-names-DrsRME-d.d.ts +0 -330
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import{parseSync as e,visitorKeys as t}from"oxc-parser";import{KEYS as n}from"eslint-visitor-keys";import*as r from"node:fs";import*as i from"node:path";const a=[[`nextjs`,`Next.js`,`NEXT_PUBLIC_*`],[`vite`,`Vite`,`VITE_*`],[`tanstack-start`,`TanStack Start`,`VITE_*`],[`cra`,`Create React App`,`REACT_APP_*`],[`gatsby`,`Gatsby`,`GATSBY_*`]],o=e=>{for(let[t,n,r]of a)if(e(t))return`Move secrets to server-only code. In ${n}, only \`${r}\` env vars are exposed to the browser, and they must not contain secrets`},s=e=>e(`nextjs:static-export`)?`Avoid redirects inside useEffect — they flash the wrong page first. Use an event handler (e.g. onClick), or call redirect() from next/navigation during render (it prerenders a client-side redirect under output: "export"). Middleware and getServerSideProps redirects aren't available in a static export.`:void 0,c=[{key:`react-hooks-js/set-state-in-render`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/immutability`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/refs`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/purity`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/hooks`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/set-state-in-effect`,source:`react-compiler`,severity:`warn`},{key:`react-hooks-js/globals`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/error-boundaries`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/preserve-manual-memoization`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/unsupported-syntax`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/component-hook-factories`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/static-components`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/use-memo`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/void-use-memo`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/incompatible-library`,source:`react-compiler`,severity:`error`},{key:`react-hooks-js/todo`,source:`react-compiler`,severity:`error`}],l=Object.fromEntries(c.map(e=>[e.key,e.severity])),u=new Set(`width.height.min-width.max-width.min-height.max-height.top.right.bottom.left.padding.padding-top.padding-right.padding-bottom.padding-left.margin.margin-top.margin-right.margin-bottom.margin-left.border-width.border-top-width.border-right-width.border-bottom-width.border-left-width.line-height.column-width`.split(`.`)),d=new Set([`width`,`height`,`top`,`left`,`right`,`bottom`,`padding`,`paddingTop`,`paddingRight`,`paddingBottom`,`paddingLeft`,`margin`,`marginTop`,`marginRight`,`marginBottom`,`marginLeft`,`borderWidth`,`fontSize`,`lineHeight`,`gap`]),f=new Set([`animate`,`initial`,`exit`,`whileHover`,`whileTap`,`whileFocus`,`whileDrag`,`whileInView`]),p=/blur\((\d+(?:\.\d+)?)px\)/,m=new Set([`requestAnimationFrame`,`setInterval`]),h=new Set([`framer-motion`,`motion`]),ee=new Set([`bounce`,`elastic`,`wobble`,`jiggle`,`spring`]),te={base:`3.0.0`,textLayoutGuard:`3.0.1`,aria:`6.2.0`,cursor:`6.7.0`,concurrent:`6.7.0`,renderToString:`6.8.0`,modernHooks:`7.0.0`,suspendTerminal:`7.1.0`},g=[`ink-ctrl-c-handler-requires-exit-option`,`ink-newline-inside-text`,`ink-no-bare-process-exit`,`ink-no-direct-raw-mode`,`ink-no-dom-host-elements`,`ink-no-dom-router`,`ink-no-focus-in-render`,`ink-no-layout-inside-text`,`ink-no-live-hooks-in-render-to-string`,`ink-no-measure-element-in-render`,`ink-no-multiple-static`,`ink-no-raw-text`,`ink-no-repeated-render`,`ink-prefer-use-animation`,`ink-prefer-use-paste`,`ink-static-is-append-only`,`ink-static-requires-key`,`ink-suspense-requires-concurrent`,`ink-use-reactive-window-size`,`ink-use-string-width-for-cursor`,`ink-use-suspend-terminal`,`ink-valid-aria-semantics`],ne=[`@react-router/dev`,`react-router-dom`,`react-router`],re=[`Component`,`element`,`lazy`],ie=[`action`,`clientAction`,`clientLoader`,`loader`],ae=`react-router-csp-nonce-consistency.react-router-descendant-routes-require-splat.react-router-guard-aborted-handle-error.react-router-internal-route-anchor.react-router-loader-fetch-forwards-signal.react-router-loader-parallel-fetch.react-router-nested-route-requires-outlet.react-router-no-catch-middleware-next.react-router-no-client-module-in-server-render.react-router-no-duplicate-route-id.react-router-no-empty-leaf-route.react-router-no-invalid-absolute-child-path.react-router-no-invalid-lazy-route-properties.react-router-no-invalid-splat-path.react-router-no-loader-request-body.react-router-no-middleware-response-body-consumption.react-router-no-multiple-blockers.react-router-no-multiple-middleware-next.react-router-no-multiple-set-search-params-in-tick.react-router-no-navigate-in-render.react-router-no-nested-router.react-router-no-redirect-in-try-catch.react-router-no-route-module-environment-suffix.react-router-no-router-in-render.react-router-no-session-mutation-in-loader.react-router-no-static-cookie-expires.react-router-no-unsynchronized-search-params-mutation.react-router-no-use-loader-data-in-error-ui.react-router-prefer-route-lazy.react-router-require-root-error-boundary.react-router-resource-link-requires-reload.react-router-return-navigation-promise-in-transition.react-router-server-middleware-return-response.react-router-session-mutation-requires-commit.react-router-v8-no-meta-data-field.react-router-v8-no-react-router-dom-import.react-router-v8-no-removed-future-flags.react-router-valid-route-object`.split(`.`),oe=new Set([`@react-router/cloudflare`,`@react-router/node`,`react-router/dom`,`react-router-dom`,`react-router`]),se=new Set([`flash`,`set`,`unset`]),ce=new Set([`createCookieSessionStorage`,`createFileSessionStorage`,`createMemorySessionStorage`,`createSessionStorage`,`createWorkersKVSessionStorage`]),le=new Set([`createBrowserRouter`,`createHashRouter`,`createMemoryRouter`]),ue=new Set([`append`,`delete`,`set`,`sort`]),de=new Set([`caseSensitive`,`children`,`id`,`index`,`lazy`,`path`]),fe=new Set([`arrayBuffer`,`blob`,`bytes`,`formData`,`json`,`text`]),pe=new Set([`unstable_previewServerPrerendering`,`v8_middleware`,`v8_passThroughRequests`,`v8_splitRouteModules`,`v8_trailingSlashAwareDataRequests`,`v8_viteEnvironmentApi`]),me=new Set([`BrowserRouter`,`HashRouter`,`MemoryRouter`,`Router`,`RouterProvider`]),he=new Set([...g,`client-passive-event-listeners`,`effect-needs-cleanup`,`anchor-target-exists`,`exhaustive-deps`,`no-barrel-import`,`nextjs-async-dynamic-api-not-awaited`,`nextjs-missing-metadata`,`nextjs-no-img-element`,`nextjs-no-use-search-params-without-suspense`,`no-dynamic-import-path`,`no-full-lodash-import`,`no-hydration-branch-on-browser-global`,`no-img-without-dimensions`,`no-indeterminate-attribute`,`no-loading-flag-reset-outside-finally`,`no-locale-format-in-render`,`no-match-media-in-state-initializer`,`no-create-ref-in-function-component`,`no-reset-all-state-on-prop-change`,`no-side-effect-in-state-updater-function`,`no-adjust-state-on-prop-change`,`no-derived-state`,`no-derived-state-effect`,`no-event-handler`,`no-initialize-state`,`no-mutating-reducer-state`,`only-export-components`,`no-unguarded-browser-global-at-module-scope`,`no-unguarded-browser-global-in-render-or-hook-init`,`window-open-without-noopener`,`prefer-dynamic-import`,`rendering-hydration-mismatch-time`,`remotion-calculate-metadata-fetch-signal`,`remotion-deterministic-randomness`,`remotion-no-css-animation`,`remotion-no-css-transition`,`remotion-no-css-url-assets`,`remotion-no-native-media-elements`,`remotion-no-next-image`,`rerender-memo-with-default-value`,`rn-no-legacy-shadow-styles`,`rn-no-raw-text`,`rn-prefer-expo-image`,`rn-style-prefer-boxshadow`,...ae]),ge=new Set([`implements`,`returnType`,`superTypeArguments`,`superTypeParameters`,`typeAnnotation`,`typeArguments`,`typeParameters`]),_=e=>typeof e==`object`&&!!e&&typeof e.type==`string`,v=e=>e!=null&&(e.type===`ArrowFunctionExpression`||e.type===`FunctionExpression`||e.type===`FunctionDeclaration`),y=(e,t)=>typeof e==`object`&&!!e&&e.type===t,_e={...t,...n,ArrayPattern:[`decorators`,...n.ArrayPattern],AssignmentPattern:[`decorators`,...n.AssignmentPattern],ClassDeclaration:[`decorators`,...n.ClassDeclaration],ClassExpression:[`decorators`,...n.ClassExpression],Identifier:[`decorators`,...n.Identifier],MethodDefinition:[`decorators`,...n.MethodDefinition],ObjectPattern:[`decorators`,...n.ObjectPattern],PropertyDefinition:[`decorators`,...n.PropertyDefinition],RestElement:[`decorators`,...n.RestElement]},ve=e=>e===`var`||e===`function`,ye=e=>{let t=e;for(;t;){if(t.kind===`module`||t.kind===`function`||t.kind===`arrow-function`||t.kind===`method`)return t;t=t.parent}return e},be=(e,t,n,r)=>{let i={id:r.nextScopeId++,kind:e,node:t,parent:n,children:[],symbols:[],references:[],symbolsByName:new Map};return n&&n.children.push(i),i},b=(e,t,n)=>{let r=be(e,t,n.currentScope,n);return n.scopeStack.push(r),n.currentScope=r,n.ownScopeForNode.set(t,r),r},x=e=>{e.scopeStack.pop();let t=e.scopeStack[e.scopeStack.length-1];if(!t)throw Error(`scope stack underflow`);e.currentScope=t},S=(e,t,n)=>{let r={id:t.nextSymbolId++,name:n.name,kind:n.kind,bindingIdentifier:n.bindingIdentifier,declarationNode:n.declarationNode,scope:e,initializer:n.initializer,references:[]};return e.symbols.push(r),e.symbolsByName.set(n.name,r),t.symbolByBindingIdentifier.set(n.bindingIdentifier,r),r},C=(e,t,n,r,i,a)=>{if(y(e,`Identifier`)){S(n,r,{name:e.name,kind:i,bindingIdentifier:e,declarationNode:a,initializer:t});return}if(y(e,`ObjectPattern`)){for(let o of e.properties)if(y(o,`Property`)){let e=o.value;C(e,y(e,`AssignmentPattern`)?e.right:t,n,r,i,a)}else y(o,`RestElement`)&&C(o.argument,t,n,r,i,a);return}if(y(e,`ArrayPattern`)){for(let o of e.elements)o&&C(o,y(o,`AssignmentPattern`)?o.right??null:t,n,r,i,a);return}if(y(e,`AssignmentPattern`)){C(e.left,e.right??null,n,r,i,a);return}y(e,`RestElement`)&&C(e.argument,null,n,r,i,a)},xe=(e,t,n)=>{let r={id:e.nextReferenceId++,identifier:t,resolvedSymbol:null,flag:n,scope:e.currentScope};e.currentScope.references.push(r),e.referenceByIdentifier.set(t,r)},Se=e=>e.parent?v(e.parent):!1,Ce=e=>e.parent!==null&&e.parent!==void 0&&e.parent.type===`CatchClause`,we=(e,t)=>{if(!y(e,`VariableDeclaration`))return;let n=e.kind===`var`?`var`:e.kind===`let`?`let`:e.kind===`const`?`const`:`using`,r=ve(n)?ye(t.currentScope):t.currentScope;for(let i of e.declarations){let e=i,a=i.init??null;C(i.id,a,r,t,n,e)}},Te=(e,t)=>{y(e,`FunctionDeclaration`)&&e.id&&S(ye(t.currentScope),t,{name:e.id.name,kind:`function`,bindingIdentifier:e.id,declarationNode:e,initializer:e})},Ee=(e,t)=>{y(e,`ClassDeclaration`)&&e.id&&S(t.currentScope,t,{name:e.id.name,kind:`class`,bindingIdentifier:e.id,declarationNode:e,initializer:e})},De=(e,t)=>{if(!y(e,`ImportDeclaration`))return;let n=ye(t.currentScope);for(let r of e.specifiers){let e=r.local;y(e,`Identifier`)&&S(n,t,{name:e.name,kind:`import`,bindingIdentifier:e,declarationNode:r,initializer:r})}},Oe=(e,t)=>{if(e.type!==`TSImportEqualsDeclaration`&&e.type!==`TSEnumDeclaration`&&e.type!==`TSTypeAliasDeclaration`&&e.type!==`TSInterfaceDeclaration`&&e.type!==`TSModuleDeclaration`)return;let n=e.id;if(!n||!y(n,`Identifier`))return;let r=e.type===`TSImportEqualsDeclaration`?`ts-import-equals`:e.type===`TSEnumDeclaration`?`ts-enum`:e.type===`TSTypeAliasDeclaration`?`ts-type-alias`:e.type===`TSInterfaceDeclaration`?`ts-interface`:`ts-module`;S(ye(t.currentScope),t,{name:n.name,kind:r,bindingIdentifier:n,declarationNode:e,initializer:null})},ke=(e,t,n)=>{for(let r of e)C(r,null,t,n,`parameter`,r)},Ae=e=>!(!y(e,`BlockStatement`)||Se(e)||Ce(e)||e.parent&&e.parent.type===`TSModuleDeclaration`),je=e=>{let t=e.parent;if(!t)return!1;if(t.type===`JSXMemberExpression`)return t.object===e;if(t.type===`JSXNamespacedName`)return!1;let n=e.name.charCodeAt(0);return!(n>=97&&n<=122)},Me=e=>{let t=e.parent;if(!t)return!1;switch(t.type){case`MemberExpression`:return t.property===e&&!t.computed;case`Property`:return t.key===e&&!t.computed&&!t.shorthand;case`MethodDefinition`:case`PropertyDefinition`:return t.key===e&&!t.computed;case`JSXAttribute`:return t.name===e;case`ImportSpecifier`:return t.imported===e;case`ExportSpecifier`:return t.exported===e&&t.local!==t.exported;case`LabeledStatement`:case`BreakStatement`:case`ContinueStatement`:return t.label===e;default:return!1}},Ne=e=>{let t=e.parent;if(!t)return`read`;switch(t.type){case`AssignmentExpression`:return t.left===e?t.operator===`=`?`write`:`read-write`:`read`;case`UpdateExpression`:return`read-write`;case`ForInStatement`:case`ForOfStatement`:return t.left===e?`write`:`read`;default:return`read`}},w=(e,t)=>{t.nodeScope.set(e,t.currentScope)},Pe=(e,t)=>{if(e.type===`AssignmentPattern`){Pe(e.left,t);let n=e.right??null;n&&T(n,t);return}if(e.type===`ObjectPattern`){for(let n of e.properties){let e=n;if(e.type===`RestElement`){Pe(e.argument,t);continue}if(e.type!==`Property`)continue;let r=e;r.computed&&T(r.key,t),Pe(r.value,t)}return}if(e.type===`ArrayPattern`){for(let n of e.elements)n&&Pe(n,t);return}e.type===`RestElement`&&Pe(e.argument,t)},T=(e,t)=>{if(e.type===`ArrowFunctionExpression`||e.type===`FunctionExpression`||e.type===`FunctionDeclaration`){e.type===`FunctionDeclaration`&&e.id&&Te(e,t);let n=e.params??[];for(let e of n)if(!(!(`decorators`in e)||!Array.isArray(e.decorators)))for(let n of e.decorators)_(n)&&T(n,t);w(e,t);let r=b(e.type===`ArrowFunctionExpression`?`arrow-function`:`function`,e,t);(e.type===`FunctionExpression`||e.type===`FunctionDeclaration`)&&e.id&&S(r,t,{name:e.id.name,kind:`function`,bindingIdentifier:e.id,declarationNode:e,initializer:e}),ke(n,r,t);for(let e of n)Pe(e,t);let i=e.body;i&&T(i,t),x(t);return}if(e.type===`ClassDeclaration`||e.type===`ClassExpression`){if(e.type===`ClassDeclaration`&&e.id&&Ee(e,t),Array.isArray(e.decorators))for(let n of e.decorators)_(n)&&T(n,t);let n=b(`class`,e,t);w(e,t),e.type===`ClassExpression`&&e.id&&S(n,t,{name:e.id.name,kind:`class`,bindingIdentifier:e.id,declarationNode:e,initializer:e}),e.superClass&&T(e.superClass,t),e.body&&T(e.body,t),x(t);return}if(e.type===`CatchClause`){let n=b(`catch`,e,t);w(e,t),e.param&&C(e.param,null,n,t,`catch-clause-parameter`,e),e.body&&T(e.body,t),x(t);return}if(e.type===`ForStatement`||e.type===`ForInStatement`||e.type===`ForOfStatement`){b(`for`,e,t),w(e,t);let n=e,r=_e[e.type]??Object.keys(n);for(let e of r){if(e===`parent`||ge.has(e))continue;let r=n[e];if(Array.isArray(r))for(let e of r)_(e)&&T(e,t);else _(r)&&T(r,t)}x(t);return}if(e.type===`SwitchStatement`){b(`switch`,e,t),w(e,t),e.discriminant&&T(e.discriminant,t);for(let n of e.cases)T(n,t);x(t);return}if(e.type===`TSModuleDeclaration`){let n=b(`ts-module`,e,t);if(w(e,t),e.id&&y(e.id,`Identifier`)){let r=e.id;S(ye(n.parent??t.currentScope),t,{name:r.name,kind:`ts-module`,bindingIdentifier:r,declarationNode:e,initializer:null})}e.body&&T(e.body,t),x(t);return}if(e.type===`TSEnumDeclaration`){Oe(e,t),b(`ts-enum`,e,t),w(e,t);let n=e.members??[];for(let e of n)T(e,t);x(t);return}if(e.type===`BlockStatement`&&Ae(e)){b(`block`,e,t),w(e,t);for(let n of e.body)T(n,t);x(t);return}switch(w(e,t),e.type){case`VariableDeclaration`:we(e,t);break;case`ImportDeclaration`:De(e,t);break;case`TSImportEqualsDeclaration`:case`TSTypeAliasDeclaration`:case`TSInterfaceDeclaration`:Oe(e,t);break}(e.type===`Identifier`||e.type===`JSXIdentifier`)&&!t.symbolByBindingIdentifier.has(e)&&!Me(e)&&(e.type===`JSXIdentifier`?je(e)&&xe(t,e,Ne(e)):xe(t,e,Ne(e)));let n=e,r=_e[e.type]??Object.keys(n);for(let e of r){if(e===`parent`||ge.has(e))continue;let r=n[e];if(Array.isArray(r))for(let e of r)_(e)&&T(e,t);else _(r)&&T(r,t)}},Fe=e=>{let t=e=>{for(let t of e.references){let n=t.identifier.name;if(typeof n!=`string`)continue;let r=e;for(;r;){let e=r.symbolsByName.get(n);if(e){t.resolvedSymbol=e,e.references.push(t);break}r=r.parent}}for(let n of e.children)t(n)};t(e)},Ie=e=>{let t={id:0,kind:`module`,node:e,parent:null,children:[],symbols:[],references:[],symbolsByName:new Map},n={nextScopeId:1,nextSymbolId:0,nextReferenceId:0,currentScope:t,scopeStack:[t],rootScope:t,nodeScope:new WeakMap,ownScopeForNode:new WeakMap,symbolByBindingIdentifier:new WeakMap,referenceByIdentifier:new WeakMap};if(n.nodeScope.set(e,t),n.ownScopeForNode.set(e,t),e.type===`Program`)for(let t of e.body)T(t,n);else T(e,n);return Fe(t),{rootScope:t,scopeFor:e=>{let r=e;for(;r;){let e=n.nodeScope.get(r);if(e)return e;r=r.parent??null}return t},ownScopeFor:e=>n.ownScopeForNode.get(e)??null,symbolFor:e=>{let t=n.referenceByIdentifier.get(e);return t?t.resolvedSymbol:n.symbolByBindingIdentifier.get(e)||null},referenceFor:e=>n.referenceByIdentifier.get(e)??null,isGlobalReference:e=>{let t=n.referenceByIdentifier.get(e);return t?t.resolvedSymbol===null:!1}}},Le=(e,t)=>{let n=e;for(;n;){if(n===t)return!0;n=n.parent}return!1},Re=`(?:tsx?|jsx?|mts|mjs)`,ze=RegExp(`/page\\.${Re}$`),Be=RegExp(`/(page|layout)\\.${Re}$`),Ve=[`layout.tsx`,`layout.jsx`,`layout.ts`,`layout.js`,`layout.mts`,`layout.mjs`],He=[`metadata`,`generateMetadata`],Ue=/\/(?:(?:\((?:dashboard|admin|settings|account|internal|manage|console|portal|auth|onboarding|app|ee|protected)\))|(?:dashboard|admin|settings|account|internal|manage|console|portal))\//i,We=new Set([`redirect`,`permanentRedirect`,`notFound`,`forbidden`,`unauthorized`]),Ge=new Set([`revalidateTag`,`revalidatePath`,`expireTag`,`expirePath`,`unstable_expireTag`,`unstable_expirePath`]),Ke=/fonts\.googleapis\.com/,qe=/polyfill\.io|polyfill\.min\.js|cdn\.polyfill/,Je=RegExp(`/route\\.${Re}$`),Ye=/\/(?:cron|jobs\/cron)(?:\/|$)/i,Xe=new Set([`logout`,`log-out`,`signout`,`sign-out`,`unsubscribe`,`delete`,`remove`,`revoke`,`cancel`,`deactivate`]),Ze=RegExp(`/(error|global-error)\\.${Re}$`),Qe=RegExp(`/global-error\\.${Re}$`),$e=new Set([`GET`,`POST`,`PUT`,`PATCH`,`DELETE`,`OPTIONS`,`HEAD`]),et=/google-analytics\.com|googletagmanager\.com\/gtag/,tt=RegExp(`/(opengraph-image|twitter-image)\\d*\\.${Re}$`),nt=1024,rt=2e6,it=1e3,at=1e3,ot=new Set([`expo`,`expo-router`,`@expo/cli`,`@expo/metro-config`,`@expo/metro-runtime`]),st=new Set([`react-native`,`react-native-tvos`,...ot,`react-native-windows`,`react-native-macos`]),ct=[`@react-native/`,`@react-native-`],lt=e=>ot.has(e),ut=e=>{if(st.has(e))return!0;for(let t of ct)if(e.startsWith(t))return!0;return!1};let dt=null;const ft=e=>{dt?.existencePaths.add(e)},E=e=>{dt?.contentPaths.add(e)},pt=()=>dt!==null,mt=e=>{let t=dt,n={existencePaths:new Set,contentPaths:new Set};dt=n;try{return{value:e(),trace:n}}finally{if(dt=t,t!==null){for(let e of n.existencePaths)t.existencePaths.add(e);for(let e of n.contentPaths)t.contentPaths.add(e)}}},ht=e=>mt(e).trace,gt=new Map,_t=new Map,vt=()=>{gt.clear(),_t.clear()},yt=e=>{if(!e)return null;let t=gt.get(e);if(t!==void 0){if(pt()){let n=i.dirname(e);for(;ft(i.join(n,`package.json`)),n!==t;){let e=i.dirname(n);if(e===n)break;n=e}}return t}let n=i.dirname(e);for(;;){let t=i.join(n,`package.json`);ft(t);let a=!1;try{a=r.statSync(t).isFile()}catch{a=!1}if(a)return gt.set(e,n),n;let o=i.dirname(n);if(o===n)return gt.set(e,null),null;n=o}},bt=e=>{let t=yt(e);return t?xt(t):null},xt=e=>{let t=i.join(e,`package.json`);E(t);let n=_t.get(e);if(n!==void 0)return n;let a=null;try{let e=JSON.parse(r.readFileSync(t,`utf-8`));typeof e==`object`&&e&&(a=e)}catch{a=null}return _t.set(e,a),a},St=new Set([`next`,`vite`,`react-scripts`,`gatsby`,`@remix-run/react`,`@remix-run/node`,`@docusaurus/core`,`@docusaurus/preset-classic`,`@storybook/react`,`@storybook/react-vite`,`@storybook/react-webpack5`,`@storybook/nextjs`,`@storybook/web-components`,`storybook`,`react-dom`,`@vitejs/plugin-react`,`@vitejs/plugin-react-swc`]),Ct=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`],wt=function*(e){for(let t of Ct){let n=e[t];if(n)for(let e of Object.keys(n))yield e}},Tt=e=>{if(typeof e[`react-native`]==`string`)return!0;for(let t of wt(e))if(ut(t))return!0;return!1},Et=e=>{for(let t of wt(e))if(lt(t))return!0;return!1},Dt=e=>{for(let t of wt(e))if(St.has(t))return!0;return!1},Ot=e=>Ct.some(t=>{let n=e[t];return typeof n==`object`&&!!n&&Object.keys(n).length>0}),kt=(e,t)=>Ct.some(n=>{let r=e[n];return typeof r==`object`&&!!r&&Object.prototype.propertyIsEnumerable.call(r,t)}),At=new WeakMap,jt=e=>{let t=bt(e);if(!t)return`unknown`;let n=At.get(t);if(n!==void 0)return n;let r;return r=Et(t)?`expo`:Tt(t)?`react-native`:Dt(t)?`web`:Ot(t)?`neutral`:`unknown`,At.set(t,r),r},Mt=e=>y(e,`Identifier`)?e.name:y(e,`Literal`)&&typeof e.value==`string`?e.value:null,Nt=e=>{if(y(e,`ImportSpecifier`)){let t=e.imported;return y(t,`Identifier`)?t.name:y(t,`Literal`)&&typeof t.value==`string`?t.value:null}return y(e,`ImportDefaultSpecifier`)?`default`:null},Pt=(e,t)=>{if(!y(e,`ExportNamedDeclaration`)||!e.source||e.exportKind===`type`)return null;let n=e.source.value;if(typeof n!=`string`)return null;for(let r of e.specifiers??[]){let e=Ft(r,t,n);if(e)return e}return null},Ft=(e,t,n)=>{if(!y(e,`ExportSpecifier`)||e.exportKind===`type`||Mt(e.exported)!==t)return null;let r=Mt(e.local);return r?{importedName:r,source:n}:null},It=(e,t)=>{if(!y(e,`ExportAllDeclaration`)||!e.source||e.exportKind===`type`||e.exported)return null;let n=e.source.value;return typeof n==`string`?{importedName:t,source:n}:null},Lt=(e,t)=>{if(!y(e,`Program`))return[];let n=[];for(let r of e.body??[]){let e=Pt(r,t);if(e)return[e];let i=It(r,t);i&&n.push(i)}return n},Rt=new Set([`ParenthesizedExpression`,`TSAsExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`,`TSNonNullExpression`,`TSInstantiationExpression`,`ChainExpression`]),D=e=>{let t=e;for(;;)switch(t.type){case`ParenthesizedExpression`:case`TSAsExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:case`TSNonNullExpression`:case`TSInstantiationExpression`:case`ChainExpression`:if(!(`expression`in t)||!t.expression)return t;t=t.expression;break;default:return t}},zt=(e,t)=>{if(!y(e,`Program`))return null;let n=new Map,r=new Map,i=null,a=null,o=e=>{for(let t of e.declarations??[])y(t,`VariableDeclarator`)&&(!y(t.id,`Identifier`)||!t.init||n.set(t.id.name,D(t.init)))};for(let t of e.body??[]){if(y(t,`ImportDeclaration`)){if(t.importKind===`type`)continue;for(let e of t.specifiers??[])y(e,`ImportSpecifier`)&&e.importKind===`type`||(y(e,`ImportDefaultSpecifier`)||y(e,`ImportNamespaceSpecifier`)||y(e,`ImportSpecifier`))&&y(e.local,`Identifier`)&&n.set(e.local.name,e.local);continue}if(y(t,`VariableDeclaration`)){o(t);continue}if(y(t,`FunctionDeclaration`)&&t.id){n.set(t.id.name,t);continue}if(y(t,`ExportNamedDeclaration`)){if(t.exportKind===`type`)continue;let e=t.declaration;if(e&&y(e,`VariableDeclaration`)){o(e);for(let t of e.declarations??[])y(t,`VariableDeclarator`)&&y(t.id,`Identifier`)&&r.set(t.id.name,t.id.name)}else e&&y(e,`FunctionDeclaration`)&&e.id&&(n.set(e.id.name,e),r.set(e.id.name,e.id.name));if(t.source)continue;for(let e of t.specifiers??[]){if(!y(e,`ExportSpecifier`)||e.exportKind===`type`)continue;let t=y(e.local,`Identifier`)?e.local.name:null,n=null;y(e.exported,`Identifier`)?n=e.exported.name:y(e.exported,`Literal`)&&typeof e.exported.value==`string`&&(n=e.exported.value),t&&n&&r.set(n,t)}continue}if(!y(t,`ExportDefaultDeclaration`))continue;let e=t.declaration;e&&(y(e,`Identifier`)?a=e.name:((y(e,`FunctionDeclaration`)||y(e,`ClassDeclaration`))&&e.id&&n.set(e.id.name,e),i=D(e)))}if(t===`default`){if(i)return i;if(a){let e=n.get(a);if(e)return e}}let s=r.get(t);return s?n.get(s)??null:null},Bt=e=>{let t=(e,n)=>{let r=e;r.parent=n,r.range==null&&typeof r.start==`number`&&typeof r.end==`number`&&(r.range=[r.start,r.end]);let i=e;for(let n of Object.keys(i)){if(n===`parent`)continue;let r=i[n];if(Array.isArray(r))for(let n of r)_(n)&&t(n,e);else _(r)&&t(r,e)}};t(e,null)},Vt={".ts":`ts`,".tsx":`tsx`,".js":`js`,".jsx":`jsx`,".mjs":`js`,".cjs":`js`,".mts":`ts`,".cts":`ts`},Ht=e=>Vt[i.extname(e).toLowerCase()]??`tsx`,Ut=({filename:t,sourceText:n,shouldAttachParentReferences:r=!0})=>{try{let i=e(t,n,{astType:`ts`,lang:Ht(t)});if(i.errors.some(e=>e.severity===`Error`))return null;let a=i.program;return r&&Bt(a),a}catch{return null}},Wt=new Map,Gt=e=>{e.endsWith(`.d.ts`)||e.endsWith(`.d.mts`)||e.endsWith(`.d.cts`)||E(e);let t;try{t=r.statSync(e)}catch{return null}if(!t.isFile()||t.size>2e6)return null;let n=Wt.get(e);if(n&&n.mtimeMs===t.mtimeMs&&n.size===t.size)return n.program;if(e.endsWith(`.d.ts`)||e.endsWith(`.d.mts`)||e.endsWith(`.d.cts`))return Wt.set(e,{mtimeMs:t.mtimeMs,size:t.size,program:null}),null;let i;try{i=r.readFileSync(e,`utf8`)}catch{return Wt.set(e,{mtimeMs:t.mtimeMs,size:t.size,program:null}),null}let a=Ut({filename:e,sourceText:i});return Wt.set(e,{mtimeMs:t.mtimeMs,size:t.size,program:a}),a},Kt=[`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`,`.mts`,`.cts`],qt=[`import`,`default`,`module`,`browser`,`require`],Jt=[`module`,`main`,`browser`],Yt={isDirectory:!0,isFile:!1},Xt={isDirectory:!1,isFile:!0},Zt={isDirectory:!1,isFile:!1},Qt=new Map,$t=new Map,en=e=>{ft(e);let t=Qt.get(e);if(t)return t;let n=Zt;try{let t=r.statSync(e);t.isFile()?n=Xt:t.isDirectory()&&(n=Yt)}catch{return Qt.set(e,Zt),Zt}return Qt.set(e,n),n},tn=e=>en(e).isFile?e:null,nn=e=>en(e).isDirectory?e:null,rn=e=>{let t=i.extname(e);if(!Kt.includes(t))return Kt.map(t=>`${e}${t}`);let n=e.slice(0,-t.length);return t===`.js`?[e,`${n}.ts`,`${n}.tsx`,`${n}.jsx`]:t===`.jsx`?[e,`${n}.tsx`]:t===`.mjs`?[e,`${n}.mts`]:t===`.cjs`?[e,`${n}.cts`]:[e]},an=e=>typeof e==`object`&&!!e,on=e=>{if(typeof e==`string`)return e;if(Array.isArray(e)){for(let t of e){let e=on(t);if(e)return e}return null}if(!an(e))return null;for(let t of qt){let n=on(e[t]);if(n)return n}return null},sn=e=>{let t=e.exports;return t?on(t)||(an(t)?on(t[`.`]):null):null},cn=e=>{E(e);let t=$t.get(e);if(t!==void 0)return t;let n;try{n=JSON.parse(r.readFileSync(e,`utf8`))}catch{n=null}return $t.set(e,n),n},ln=e=>dn(e)||dn(i.join(e,`index`)),un=e=>{let t=nn(e);if(!t)return null;let n=cn(i.join(t,`package.json`));if(!n)return null;let r=sn(n)??Jt.map(e=>n[e]).find(e=>typeof e==`string`);return r?ln(i.resolve(t,r)):null},dn=e=>{let t=tn(e);if(t)return t;for(let t of rn(e)){let e=tn(t);if(e)return e}return null},fn=e=>dn(e)||un(e)||dn(i.join(e,`index`)),pn=(e,t)=>fn(i.resolve(i.dirname(e),t)),mn=()=>{Qt.clear(),$t.clear()},hn=[`tsconfig.json`,`jsconfig.json`],gn=e=>typeof e==`object`&&!!e,_n=e=>{let t=``,n=!1,r=!1,i=!1;for(let a=0;a<e.length;a++){let o=e[a],s=e[a+1];if(r){o===`
|
|
2
|
+
`&&(r=!1,t+=o);continue}if(i){o===`*`&&s===`/`&&(i=!1,a++);continue}if(n){t+=o,o===`\\`?(t+=s??``,a++):o===`"`&&(n=!1);continue}if(o===`"`){n=!0,t+=o;continue}if(o===`/`&&s===`/`){r=!0,a++;continue}if(o===`/`&&s===`*`){i=!0,a++;continue}t+=o}return t.replace(/,(\s*[}\]])/g,`$1`)},vn=(e,t)=>{E(e),t.push(e);let n;try{n=r.readFileSync(e,`utf8`)}catch{return null}try{let e=JSON.parse(_n(n));return gn(e)?e:null}catch{return null}},yn=(e,t)=>{let n=e.endsWith(`.json`)?e:`${e}.json`;return e.startsWith(`./`)||e.startsWith(`../`)?i.resolve(t,n):i.join(t,`node_modules`,n)},bn=e=>{let t=new Map;if(!gn(e))return t;for(let[n,r]of Object.entries(e)){if(!Array.isArray(r))continue;let e=r.filter(e=>typeof e==`string`);e.length>0&&t.set(n,e)}return t},xn=(e,t,n)=>{let r=vn(e,n);if(!r)return null;let a=i.dirname(e),o=gn(r.compilerOptions)?r.compilerOptions:{},s=typeof o.baseUrl==`string`?o.baseUrl:null,c=s!==null,l=s===null?a:i.resolve(a,s);if(gn(o.paths))return{baseAbsolutePath:l,hasExplicitBaseUrl:c,paths:bn(o.paths)};if(typeof r.extends==`string`&&t<8){let e=yn(r.extends,a),i=e?xn(e,t+1,n):null;if(i)return i}return c?{baseAbsolutePath:l,hasExplicitBaseUrl:c,paths:new Map}:null},Sn=new Map,Cn=new Map,wn=e=>{E(e);let t;try{t=r.statSync(e)}catch{return{config:null,probedContentPaths:new Set([e])}}let n=Sn.get(e);if(n&&n.mtimeMs===t.mtimeMs){for(let e of n.probedChainPaths)E(e);return{config:n.config,probedContentPaths:new Set(n.probedChainPaths)}}let i=[],a=xn(e,0,i);return Sn.set(e,{mtimeMs:t.mtimeMs,config:a,probedChainPaths:i}),{config:a,probedContentPaths:new Set(i)}},Tn=(e,t,n)=>{let r=new Set(t.probedContentPaths),i=n;for(let n=e.length-1;n>=0;n--){let a=e[n];i++;for(let e of a.probedContentPaths)r.add(e);Cn.set(a.directory,{config:t.config,directoryCount:i,probedContentPaths:new Set(r)})}},En=e=>{let t=Cn.get(e);if(t!==void 0){for(let e of t.probedContentPaths)E(e);return t.config}let n=[],r=e;for(let e=0;e<30;e++){let t=Cn.get(r),a=30-e;if(t!==void 0&&t.directoryCount<=a){for(let e of t.probedContentPaths)E(e);return Tn(n,t,t.directoryCount),t.config}let o=new Set;for(let e of hn){let t=wn(i.join(r,e));for(let e of t.probedContentPaths)o.add(e);if(t.config)return n.push({directory:r,probedContentPaths:o}),Tn(n,{config:t.config,probedContentPaths:new Set},0),t.config}n.push({directory:r,probedContentPaths:o});let s=i.dirname(r);if(s===r)return Tn(n,{config:null,probedContentPaths:new Set},0),null;r=s}let a=new Set;for(let e of n)for(let t of e.probedContentPaths)a.add(t);return Cn.set(e,{config:null,directoryCount:n.length,probedContentPaths:a}),null},Dn=(e,t)=>{let n=t.indexOf(`*`);if(n===-1)return e===t?``:null;let r=t.slice(0,n),i=t.slice(n+1);return e.length>=r.length+i.length&&e.startsWith(r)&&e.endsWith(i)?e.slice(r.length,e.length-i.length):null},On=(e,t)=>{let n=En(i.dirname(e));if(!n)return null;let r=null,a=``,o=-1;for(let e of n.paths.keys()){let n=Dn(t,e);if(n===null)continue;let i=e.indexOf(`*`),s=i===-1?e.length:i;s>o&&(r=e,a=n,o=s)}if(r)for(let e of n.paths.get(r)??[]){let t=e.replaceAll(`*`,a),r=fn(i.resolve(n.baseAbsolutePath,t));if(r)return r}return n.hasExplicitBaseUrl?fn(i.resolve(n.baseAbsolutePath,t)):null},kn=()=>{Sn.clear(),Cn.clear()},An=(e,t)=>i.isAbsolute(t)?null:t.startsWith(`.`)?pn(e,t):On(e,t),jn=new Map,Mn=()=>{jn.clear()},Nn=(e,t,n)=>{if(n.size>=4||n.has(e))return null;n.add(e);let r=Gt(e);if(!r)return null;let i=zt(r,t);if(i)return{filePath:e,exportedNode:i,programNode:r};let a=new Map;for(let i of Lt(r,t)){let t=An(e,i.source);if(!t)continue;let r=Nn(t,i.importedName,new Set(n));r&&a.set(r.exportedNode,r)}return a.size===1?a.values().next().value??null:null},Pn=(e,t,n)=>Fn(e,t,n)?.functionNode??null,Fn=(e,t,n)=>{let r=O(e,t,n);return!r||!v(r.exportedNode)?null:{filePath:r.filePath,functionNode:r.exportedNode,programNode:r.programNode}},O=(e,t,n)=>{if(!pt()){let r=An(e,t);return r?Nn(r,n,new Set):null}let r=`${e}\0${t}\0${n}`,i=jn.get(r);if(i!==void 0){for(let e of i.trace.contentPaths)E(e);for(let e of i.trace.existencePaths)ft(e);return i.result}let a=mt(()=>{let r=An(e,t);return r?Nn(r,n,new Set):null});return jn.set(r,{result:a.value,trace:a.trace}),a.value},In=(e,t)=>{let n=e,r=_e[e.type];if(r!==void 0){for(let e=r.length-1;e>=0;--e){let i=n[r[e]];if(Array.isArray(i))for(let e=i.length-1;e>=0;--e){let n=i[e];_(n)&&t.push(n)}else _(i)&&t.push(i)}return}let i=Object.keys(n);for(let e=i.length-1;e>=0;--e){let r=i[e];if(r===`parent`)continue;let a=n[r];if(Array.isArray(a))for(let e=a.length-1;e>=0;--e){let n=a[e];_(n)&&t.push(n)}else _(a)&&t.push(a)}},Ln=(e,t)=>{let n=e,r=_e[e.type];if(r!==void 0){for(let e=0;e<r.length;e+=1){let i=n[r[e]];if(Array.isArray(i))for(let e=0;e<i.length;e+=1){let n=i[e];_(n)&&t(n)}else _(i)&&t(i)}return}for(let e in n){if(e===`parent`||!Object.hasOwn(n,e))continue;let r=n[e];if(Array.isArray(r))for(let e=0;e<r.length;e+=1){let n=r[e];_(n)&&t(n)}else _(r)&&t(r)}},k=(e,t)=>{if(!e||typeof e!=`object`)return;let n=[e];for(;n.length>0;){let e=n.pop();e===void 0||t(e)===!1||In(e,n)}},Rn=({absoluteFilePath:e,staticImports:t,program:n})=>{let r=new Set;if(k(n,e=>{if(e.type!==`JSXOpeningElement`)return;let t=e.name;if(t){if(t.type===`JSXIdentifier`){let e=t.name;typeof e==`string`&&r.add(e)}else if(t.type===`JSXMemberExpression`){let e=t.property;e?.type===`JSXIdentifier`&&typeof e.name==`string`&&r.add(e.name)}else if(t.type===`JSXNamespacedName`){let e=t.namespace;typeof e?.name==`string`&&r.add(e.name)}}}),r.size!==0)for(let n of t)for(let t of n.entries){let{importName:i}=t;if(i.kind===`NamespaceObject`||!r.has(t.localName.value))continue;let a=i.kind===`Default`?`default`:i.name;a&&Pn(e,n.moduleRequest.value,a)}},zn=e=>e.replace(/^type\s+/,``).trim(),Bn=(e,t)=>e.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let n=t||e.startsWith(`type `),[r,i]=e.split(/\s+as\s+/),a=zn(r??``);return{localName:a,exportedName:zn(i??a),isTypeOnly:n}}),Vn=/\/\*[\s\S]*?\*\//g,Hn=/^\s*\/\/.*$/gm,Un=e=>e.replace(Vn,``).replace(Hn,``),Wn=/^\s*export\s+default\b/m,Gn=/^\s*export\s+(?:declare\s+)?(?:(?:async\s+)?function|(?:abstract\s+)?class|const|let|var|enum|interface|type)\s+([\w$]+)/gm,Kn=/^\s*export\s+(?:type\s+)?\{([\s\S]*?)\}(?:\s+from\s+["'][^"']+["'])?\s*;?\s*(?:(?:\/\/[^\n]*)?\s*)/gm,qn=e=>{let t=Un(e),n=new Set;Wn.test(t)&&n.add(`default`);for(let e of t.matchAll(Gn))e[1]&&n.add(e[1]);for(let e of t.matchAll(Kn)){let t=e[1]??``;for(let e of Bn(t,!1))n.add(e.exportedName)}return n},Jn=new Map,Yn=(e,t)=>{E(e);try{let n=r.statSync(e),i=Jn.get(e);if(i&&i.mtimeMs===n.mtimeMs&&i.size===n.size)return i.exportedNames.has(t);let a=qn(r.readFileSync(e,`utf8`));return Jn.set(e,{mtimeMs:n.mtimeMs,size:n.size,exportedNames:a}),a.has(t)}catch{return!1}},Xn=(e,t)=>{let n=e.replaceAll(`\\`,`/`),r=i.dirname(n);for(let e=0;e<30;e++){for(let e of Ve){let a=i.join(r,e);if(a.replaceAll(`\\`,`/`)!==n&&t(a))return!0}let e=i.dirname(r);if(i.basename(r)===`app`&&i.basename(e)!==`app`||e===r)break;r=e}return!1},Zn=e=>Xn(e,e=>He.some(t=>Yn(e,t))),A=e=>{if(!y(e,`ImportSpecifier`))return;let t=e.imported;if(y(t,`Identifier`))return t.name;if(y(t,`Literal`)&&typeof t.value==`string`)return t.value},Qn=e=>y(e,`JSXIdentifier`)?e.name===`Suspense`:y(e,`JSXMemberExpression`)&&y(e.property,`JSXIdentifier`)&&e.property.name===`Suspense`,$n=e=>{let t=!1;return k(e,e=>{if(t)return!1;if(y(e,`JSXOpeningElement`)&&Qn(e.name)||y(e,`ImportDeclaration`)&&e.source?.value===`react`&&(e.specifiers??[]).some(e=>y(e,`ImportSpecifier`)&&A(e)===`Suspense`))return t=!0,!1}),t},er=e=>Xn(e,e=>{let t=Gt(e);return!!(t&&$n(t))}),tr=e=>{if(y(e,`ImportDeclaration`)){if(e.importKind===`type`||e.specifiers.length>0&&e.specifiers.every(e=>y(e,`ImportSpecifier`)&&e.importKind===`type`))return null}else if(y(e,`ExportNamedDeclaration`)){if(e.exportKind===`type`||!e.source||e.specifiers.length>0&&e.specifiers.every(e=>y(e,`ExportSpecifier`)&&e.exportKind===`type`))return null}else if(y(e,`ExportAllDeclaration`)){if(e.exportKind===`type`)return null}else return null;return e.source&&typeof e.source.value==`string`?e.source.value:null},j=e=>{let t=e.property;return!e.computed&&y(t,`Identifier`)?t.name:e.computed&&y(t,`Literal`)?typeof t.value==`string`?t.value:null:e.computed&&y(t,`TemplateLiteral`)&&t.expressions.length===0?t.quasis[0]?.value.cooked??t.quasis[0]?.value.raw??null:null},nr=/^index\.(?:[cm]?[jt]sx?|mjs)$/,rr=/^\s*import\s+(type\s+)?(?!["'])([^;]*?)\s+from\s+["']([^"']+)["']\s*;?\s*(?:(?:\/\/[^\n]*)?\s*)/gm,ir=/^\s*export\s+(type\s+)?(?:\*(?:\s+as\s+([\w$]+))?|\{([\s\S]*?)\})\s+from\s+["']([^"']+)["']\s*;?\s*(?:(?:\/\/[^\n]*)?\s*)/gm,ar=/^\s*export\s+(type\s+)?\{([\s\S]*?)\}\s*;?\s*(?:(?:\/\/[^\n]*)?\s*)/gm,or=new Map,sr=e=>nr.test(i.basename(e)),cr=()=>({isBarrel:!1,exportsByName:new Map,starExportSources:[]}),lr=(e,t)=>{e.set(t.localName,{...t,didExport:!1})},ur=(e,t,n,r)=>{for(let i of Bn(e,n))lr(r,{localName:i.exportedName,importedName:i.localName,source:t,isTypeOnly:i.isTypeOnly})},dr=(e,t,n,r)=>{let i=e.trim(),a=i.match(/(?:^|,\s*)\*\s+as\s+([\w$]+)/);a?.[1]&&lr(r,{localName:a[1],importedName:`*`,source:t,isTypeOnly:n});let o=i.match(/\{([\s\S]*?)\}/);o?.[1]&&ur(o[1],t,n,r);let s=i.split(`,`)[0]?.trim();s&&!s.startsWith(`{`)&&!s.startsWith(`*`)&&lr(r,{localName:s,importedName:`default`,source:t,isTypeOnly:n})},fr=(e,t,n,r)=>{let i=e.replace(rr,(e,n,r,i)=>(dr(r,i,!!n,t),``));return i=i.replace(ir,(e,t,i,a,o)=>{let s=!!t;if(i)return n.set(i,{exportedName:i,importedName:`*`,source:o,isTypeOnly:s}),``;if(a){for(let e of Bn(a,s))n.set(e.exportedName,{exportedName:e.exportedName,importedName:e.localName,source:o,isTypeOnly:e.isTypeOnly});return``}return r.push(o),``}),i=i.replace(ar,(e,r,i)=>{for(let a of Bn(i,!!r)){let r=t.get(a.localName);if(!r)return e;r.didExport=!0,n.set(a.exportedName,{exportedName:a.exportedName,importedName:r.importedName,source:r.source,isTypeOnly:a.isTypeOnly||r.isTypeOnly})}return``}),i},pr=e=>{for(let t of e.values())if(!t.isTypeOnly&&!t.didExport)return!0;return!1},mr=e=>{let t=Un(e).trim();if(!t)return cr();let n=new Map,r=new Map,i=[];return fr(t,n,r,i).trim()||pr(n)?cr():{isBarrel:r.size>0||i.length>0,exportsByName:r,starExportSources:i}},hr=e=>{if(!sr(e))return cr();E(e);let t;try{t=r.statSync(e)}catch{t=null}let n=or.get(e);if(n!==void 0&&t!==null&&n.mtimeMs===t.mtimeMs&&n.size===t.size)return n.moduleInfo;if(t===null)return cr();let i=cr();try{i=mr(r.readFileSync(e,`utf8`))}catch{i=cr()}return or.set(e,{mtimeMs:t.mtimeMs,size:t.size,moduleInfo:i}),i},gr=e=>hr(e).isBarrel,_r=i.join(`android`,`gradle.properties`),vr=/^\s*newArchEnabled\s*=\s*false\s*$/m,yr=[`app.config.ts`,`app.config.js`,`app.config.cjs`,`app.config.mjs`],br=[`app.config.json`,`app.json`],xr=new WeakMap,Sr=e=>{E(i.join(e,_r));for(let t of yr)ft(i.join(e,t));for(let t of br)E(i.join(e,t))},Cr=e=>{try{return r.readFileSync(e,`utf-8`)}catch{return null}},wr=e=>{let t=e.dependencies?.[`react-native`]??e.devDependencies?.[`react-native`];return typeof t==`string`?t:null},Tr=e=>{let t=e.match(/(?:^|[^\d.])0\.(\d+)/);return t?Number.parseInt(t[1],10):null},Er=e=>{let t=Cr(i.join(e,_r));return t!==null&&vr.test(t)},Dr=e=>{for(let t of yr)if(r.existsSync(i.join(e,t)))return!1;for(let t of br){let n=Cr(i.join(e,t));if(n===null)continue;let r;try{r=JSON.parse(n)}catch{continue}if(typeof r!=`object`||!r)continue;let a=Object.getOwnPropertyDescriptor(r,`expo`)?.value;if(!(typeof a!=`object`||!a)&&Object.getOwnPropertyDescriptor(a,`newArchEnabled`)?.value===!1)return!0}return!1},Or=(e,t)=>{let n=wr(t);if(n!==null){let e=Tr(n);if(e!==null&&e<76)return!0}return Er(e)||Dr(e)},kr=e=>{let t=yt(e);if(!t)return!1;let n=bt(e);if(!n)return!1;Sr(t);let r=xr.get(n);if(r!==void 0)return r;let i=Or(t,n);return xr.set(n,i),i},Ar=e=>{let t=e.match(/^(\d+)(?:\.(\d+))?(?:\.(\d+))?(-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/);return t?{major:Number(t[1]),minor:Number(t[2]??0),patch:Number(t[3]??0),isPrerelease:!!t[4]}:null},jr=(e,t)=>e.major-t.major||e.minor-t.minor||e.patch-t.patch||Number(t.isPrerelease)-Number(e.isPrerelease),Mr=e=>{if(typeof e!=`string`)return null;let t=e.trim();if(!t||/^(?:catalog|file|git|https?|link|npm|workspace):/.test(t)||/^(?:latest|next|\*)$/.test(t))return null;let n=[];for(let e of t.split(`||`)){let t=e.trim();if(/^<(?!=)/.test(t)||/^<=/.test(t))return null;let r=t.match(/\d+(?:\.\d+)?(?:\.\d+)?(?:-[0-9A-Za-z.-]+)?/)?.[0];if(!r)return null;let i=Ar(r);if(!i)return null;n.push(i)}return n.reduce((e,t)=>jr(t,e)<0?t:e)},Nr=e=>Mr(e.dependencies?.ink??e.devDependencies?.ink??e.peerDependencies?.ink??e.optionalDependencies?.ink),Pr=e=>{let t=e;for(;;){let e=xt(i.join(t,`node_modules`,`ink`));if(e)return{didFindPackage:!0,version:typeof e.version==`string`?Ar(e.version):null};let n=i.dirname(t);if(n===t)return{didFindPackage:!1,version:null};t=n}},Fr=e=>{if(!e)return null;let t=yt(i.resolve(e));if(!t)return null;let n=Pr(t);if(n.didFindPackage)return n.version;let r=xt(t);return r?Nr(r):null},Ir=(e,t)=>{let n=Fr(e),r=Ar(t);return!!(n&&r&&jr(n,r)>=0)},Lr=new Set([`@monaco-editor/react`,`monaco-editor`,`recharts`,`@react-pdf/renderer`,`react-quill`,`@codemirror/view`,`@codemirror/state`,`chart.js`,`react-chartjs-2`,`@toast-ui/editor`,`draft-js`,`mermaid`]),Rr=new Set([`fetch`,`ky`,`got`,`wretch`,`ofetch`]),zr=new Set([`axios`,`ky`,`got`,`ofetch`,`wretch`,`request`]),Br=new Set([`create`,`insert`,`insertInto`,`update`,`upsert`,`delete`,`remove`,`destroy`,`set`,`append`]),Vr=new Set([`POST`,`PUT`,`DELETE`,`PATCH`]),Hr=new Set([`Map`,`Set`,`WeakMap`,`WeakSet`,`Headers`,`URLSearchParams`,`FormData`,`Response`,`NextResponse`]),Ur=new Set([`Response`,`NextResponse`]),Wr=new Set([`json`,`redirect`,`next`,`rewrite`,`error`]),Gr=new Set([`wheel`,`mousewheel`,`touchstart`,`touchmove`]),Kr=new Set([`defer`,`async`]),qr=new Set([`text/javascript`,`application/javascript`,`module`]),Jr=new Set([`setTimeout`,`setInterval`,`requestAnimationFrame`,`requestIdleCallback`,`queueMicrotask`]),Yr=new Set([`setInterval`,`setTimeout`]),Xr=new Set([`clearInterval`,`clearTimeout`]),Zr=new Set([`WebSocket`,`EventSource`,`BroadcastChannel`,`RTCPeerConnection`]),Qr=new Set([`location`,`window`,`document`,`navigator`,`history`,`screen`,`performance`]),$r=new Set([`IntersectionObserver`,`MutationObserver`,`ResizeObserver`,`PerformanceObserver`]),ei=new Set([`blur`,`canPlayType`,`focus`,`getBoundingClientRect`,`getClientRects`,`measure`,`measureInWindow`,`measureLayout`,`scroll`,`scrollBy`,`scrollIntoView`,`scrollTo`,`select`,`setRangeText`,`setSelectionRange`]),ti=new Set([`localStorage`,`sessionStorage`]),ni=new Set([`index`,`idx`,`i`]),ri=new Set([`react`,`react-dom`,`preact/compat`,`preact/hooks`,`@wordpress/element`]),ii=new Set([`next`,`next-themes`,`@remix-run/react`,`swr`,`zustand`,`jotai`,`recoil`,`wouter`,`framer-motion`,`@apollo/client`,`urql`,`usehooks-ts`]),ai=/^(?:isLoading|isPending)$/,oi=new Set([`useState`,`useMemo`,`useRef`]),si=new Set([`Click`,`Change`,`Input`,`Blur`,`Focus`]),ci=new Set([`Boolean`,`String`,`Number`,`Array`,`Object`,`parseInt`,`parseFloat`]),li=/^set[A-Z]/,ui=/^render[A-Z]/,di=/^[A-Z]/,fi=/^on[A-Z]/,pi=/^use[A-Z]/,mi=/^(?:on|handle)[A-Z]/,hi=new Set([`useEffect`,`useLayoutEffect`]),gi=new Set([`useEffect`,`useLayoutEffect`,`useMemo`,`useCallback`]),_i=new Set([`use`,`useState`,`useRef`,`useMemo`,`useCallback`,`useReducer`,`useContext`,`useEffect`,`useLayoutEffect`,`useInsertionEffect`,`useImperativeHandle`,`useSyncExternalStore`,`useDeferredValue`,`useTransition`,`useId`,`useDebugValue`]),vi=new Set([`memo`,`forwardRef`,`React.memo`,`React.forwardRef`]),yi=new Set([`useMemo`,`useCallback`]),bi=new Set([`memo`,`forwardRef`,`observer`,`lazy`]),xi=new Set([`subscribe`,`addEventListener`,`addListener`,`on`,`watch`,`listen`,`sub`]),Si=new Set([`subscribe`,`sub`,`listen`]),Ci=new Set([`unsubscribe`,`removeEventListener`,`removeListener`,`off`,`unwatch`,`unlisten`,`unsub`,`abort`,`disconnect`,`unobserve`,`close`]),wi=new Set([`remove`,`cleanup`,`dispose`,`destroy`,`stop`,`teardown`]),Ti=new Set([...Ci,`cleanup`,`dispose`,`destroy`,`teardown`]),Ei=new Set([...xi,`connect`,`disconnect`,`open`,`close`,`fetch`,`post`,`put`,`patch`]),Di=new Set([`get`,`head`,`options`,`delete`]),Oi=new Set([...Rr,...Jr]),ki=new Set([...Rr,`post`,`put`,`patch`,`navigate`,`navigateTo`,`showNotification`,`toast`,`alert`,`confirm`,`logVisit`,`captureEvent`]),Ai=new Set([`post`,`put`,`patch`,`delete`,`navigate`,`capture`,`track`,`logEvent`]),ji=new Set([`push`,`replace`]),Mi=new Set([`router`,`navigation`,`navigator`,`history`,`location`]),M=(e,t={})=>{if(!y(e,`Property`)&&!y(e,`MethodDefinition`)&&!y(e,`PropertyDefinition`)&&!y(e,`MemberExpression`))return null;let n=y(e,`MemberExpression`)?e.property:e.key;if(e.computed)return t.allowComputedString&&y(n,`Literal`)&&typeof n.value==`string`?n.value:t.allowComputedString&&t.stringifyNonStringLiterals&&y(n,`Literal`)?String(n.value):t.allowComputedString&&y(n,`TemplateLiteral`)&&n.expressions.length===0?n.quasis[0]?.value.cooked??n.quasis[0]?.value.raw??null:null;if(y(n,`Identifier`))return n.name;if(y(n,`Literal`)){if(typeof n.value==`string`)return n.value;if(t.stringifyNonStringLiterals)return String(n.value)}return null},N=(e,t,n=!1)=>{if(e.type!==`Identifier`&&e.type!==`JSXIdentifier`)return null;let r=null,i=t.symbolFor(e);for(;i?.kind===`const`;){if(!i.initializer||i.declarationNode.type!==`VariableDeclarator`)return null;if(i.declarationNode.id!==i.bindingIdentifier)return n?i:null;let e=D(i.initializer);if(e.type!==`Identifier`)return i;if(r?.has(i.id))return null;r||=new Set,r.add(i.id),i=t.symbolFor(e)}return i},Ni={},Pi=new WeakMap,Fi=(e,t)=>typeof e==`string`?e===t:e.has(t),Ii=e=>{let t=Pi.get(e);if(t)return t;let n=e.declarationNode.parent,r=!!(e.kind===`import`&&n&&n.type===`ImportDeclaration`&&typeof n.source.value==`string`&&ri.has(n.source.value)),i={importedName:r?A(e.declarationNode):void 0,isReactImport:r};return Pi.set(e,i),i},Li=e=>Ii(e).isReactImport,Ri=(e,t,n,r)=>{if(e.type!==`Identifier`)return!1;let i=r?N(e,n):n.symbolFor(e);if(!i)return!1;let a=Ii(i);return!!(a.isReactImport&&a.importedName&&Fi(t,a.importedName))},zi=(e,t)=>{let n=N(e,t);if(!n)return!1;let r=Ii(n);return r.isReactImport?n.declarationNode.type===`ImportDefaultSpecifier`||n.declarationNode.type===`ImportNamespaceSpecifier`||r.importedName===`default`:!1},Bi=(e,t,n)=>e.type===`Identifier`?zi(e,t)?!0:!!(n.allowGlobalReactNamespace&&e.name===`React`&&t.isGlobalReference(e)):!1,Vi=(e,t,n,r)=>{let i=n.symbolFor(e);if(!i||i.kind!==`const`||!i.initializer||i.declarationNode.type!==`VariableDeclarator`)return!1;let a=i.declarationNode.id;if(a.type!==`ObjectPattern`)return!1;for(let e of a.properties){if(e.type!==`Property`||e.value!==i.bindingIdentifier)continue;let a=M(e);return!!(a&&Fi(t,a)&&Bi(D(i.initializer),n,r))}return!1},Hi=(e,t,n,r=Ni)=>e.type===`CallExpression`?Ui(e.callee,t,n,r):!1,Ui=(e,t,n,r,i)=>{let a=D(e);if(r.resolveConditionalAliases&&a.type===`ConditionalExpression`)return Ui(a.consequent,t,n,r,new Set(i))&&Ui(a.alternate,t,n,r,new Set(i));if(a.type===`Identifier`){if(Ri(a,t,n,!!r.resolveNamedAliases)||r.resolveNamedAliases&&Vi(a,t,n,r))return!0;if(r.resolveConditionalAliases){let e=n.symbolFor(a);if(e?.kind===`const`&&e.initializer&&!i?.has(e.id)){let a=i??new Set;return a.add(e.id),Ui(e.initializer,t,n,r,a)}}return!!(r.allowUnboundBareCalls&&Fi(t,a.name)&&n.isGlobalReference(a))}return a.type!==`MemberExpression`||!Fi(t,j(a)??``)?!1:Bi(D(a.object),n,r)},Wi=e=>e.includes(`\\`)?e.replaceAll(`\\`,`/`):e,Gi=e=>{let t=new Set(e);if(t.size!==1)return null;let[n]=t;return n??null},Ki=(e,t,n,r)=>{let i=pn(e,n);return i?qi(i,t,new Set(r))||(Yn(i,t)?i:null):null},qi=(e,t,n=new Set)=>{if(n.has(e))return null;n.add(e);let r=hr(e);if(!r.isBarrel)return null;let i=r.exportsByName.get(t);if(i){let t=pn(e,i.source);return t?qi(t,i.importedName,n)??t:null}return t===`default`?null:Gi(r.starExportSources.map(r=>Ki(e,t,r,n)).filter(e=>!!e))},Ji=(e,t,n)=>{let r=O(e,t,n);return r?{filePath:r.filePath,node:r.exportedNode,programNode:r.programNode,kind:v(r.exportedNode)?`function`:`initializer`}:null},P=e=>{let t=e;for(;t.parent&&Rt.has(t.parent.type);)t=t.parent;return t},Yi=(e,t)=>{if(!y(e,`ArrowFunctionExpression`)&&!y(e,`FunctionExpression`)&&!y(e,`FunctionDeclaration`))return null;let n=e.params[0],r=y(n,`AssignmentPattern`)?n.left:n;if(y(r,`ObjectPattern`)){let e=r.properties.find(e=>y(e,`Property`)&&M(e,{allowComputedString:!0})===`children`);if(!e||!y(e,`Property`))return null;let n=y(e.value,`AssignmentPattern`)?e.value.left:e.value;if(!y(n,`Identifier`))return null;let i=t.symbolFor(n);return!i||i.references.length===0||i.references.some(e=>e.flag!==`read`)?null:i.references.map(e=>e.identifier)}if(!y(r,`Identifier`))return null;let i=t.symbolFor(r);if(!i||i.references.length===0)return null;let a=[];for(let e of i.references){if(e.flag!==`read`)return null;let t=[],n=P(e.identifier);for(;n.parent&&y(n.parent,`MemberExpression`)&&n.parent.object===n;){let e=j(n.parent);if(!e)return null;t.push(e),n=P(n.parent)}if(t[0]!==`children`){if(t.length===0)return null;continue}if(t.length!==1)return null;a.push(n)}return a.length>0?a:null},F=e=>{let t=e.parent;for(;t;){if(v(t))return t;t=t.parent??null}return null},Xi=e=>{let t=e;for(;t;){if(y(t,`Program`))return t;t=t.parent??null}return null},Zi=e=>{let t=new Map,n=e.body??[];for(let e of n){if(e.type!==`ImportDeclaration`||!(`source`in e)||!e.source)continue;let n=e.source.value;if(typeof n==`string`&&!(!(`specifiers`in e)||!Array.isArray(e.specifiers)))for(let r of e.specifiers){if(!(`local`in r)||!r.local)continue;let e=r.local;if(typeof e.name==`string`){if(r.type===`ImportDefaultSpecifier`)t.set(e.name,{source:n,imported:null,isDefault:!0,isNamespace:!1});else if(r.type===`ImportNamespaceSpecifier`)t.set(e.name,{source:n,imported:null,isDefault:!1,isNamespace:!0});else if(r.type===`ImportSpecifier`){let i=r.imported,a=i?.name??(typeof i?.value==`string`?i.value:null);t.set(e.name,{source:n,imported:a,isDefault:!1,isNamespace:!1})}}}}return t},Qi=new WeakMap,$i=e=>{let t=Xi(e);if(!t)return null;let n=Qi.get(t);return n||(n=Zi(t),Qi.set(t,n)),n},ea=(e,t)=>{let n=$i(e);if(!n)return!1;for(let e of n.values())if(t.includes(e.source))return!0;return!1},ta=(e,t,n)=>{let r=$i(e);if(!r)return!1;let i=r.get(t);return i?i.source===n:!1},na=(e,t,n)=>{let r=$i(e);if(!r)return!1;let i=r.get(t);return i?i.isNamespace&&i.source===n:!1},ra=(e,t,n)=>{let r=$i(e);if(!r)return!1;let i=r.get(t);return i?i.isDefault&&i.source===n:!1},ia=(e,t,n)=>{let r=$i(e);if(!r)return null;let i=r.get(t);return!i||i.source!==n?null:i.imported},aa=(e,t)=>{let n=$i(e);return n?n.get(t)?.source??null:null},oa=(e,t)=>{let n=$i(e)?.get(t);return n?n.isNamespace?{source:n.source,exportedName:null,isNamespace:!0}:{source:n.source,exportedName:n.isDefault?`default`:n.imported,isNamespace:!1}:null},sa=e=>{let t=e,n=t.parent;for(;n&&D(n)===e;)t=n,n=t.parent;return n&&y(n,`AssignmentExpression`)&&n.operator===`=`&&n.left===t?n.right:null},ca=e=>{let t=e.range?.[0];return typeof t==`number`?t:null},la=new Set([`let`,`var`]),ua=new Set([`ConditionalExpression`,`LogicalExpression`]),da=new WeakMap,fa=(e,t,n)=>{let r=e.parent??null;for(;r&&n.blockOf(r)===t;){if(ua.has(r.type))return!0;r=r.parent??null}return!1},pa=(e,t)=>e.size===t.size&&[...e].every(e=>t.has(e)),ma=(e,t)=>{let n=new Set(e);for(let e of t)e.isConditionalWithinBlock||(n=new Set),n.add(e);return n},ha=(e,t,n)=>{let r=F(t);if(F(e.bindingIdentifier)!==r||!r)return[];let i=n.cfgFor(r);if(!i)return[];let a=i.blockOf(t);if(!a)return[];let o=ca(t),s=ca(e.bindingIdentifier);if(o===null||s===null)return[];let c=new Map,l=(e,t,n)=>{let r=i.blockOf(t);if(!r)return;let a=c.get(r)??[];a.push({expression:e,position:n,isConditionalWithinBlock:fa(t,r,i)}),c.set(r,a)};e.initializer&&l(e.initializer,e.bindingIdentifier,s);for(let t of e.references){let e=ca(t.identifier);if(t.flag===`read`||F(t.identifier)!==r||e===null||e>=o)continue;let n=sa(t.identifier);n&&l(n,t.identifier,e)}for(let e of c.values())e.sort((e,t)=>e.position-t.position);let u=new Map,d=new Map,f=new Set([i.entry]),p=[i.entry];for(;p.length>0;){let e=p.pop();if(!e)break;for(let t of e.successors)f.has(t.to)||(f.add(t.to),p.push(t.to))}if(!f.has(a))return[];let m=!0;for(;m;){m=!1;for(let e of i.blocks){if(!f.has(e))continue;let t=new Set;for(let n of e.predecessors)if(f.has(n.from))for(let e of d.get(n.from)??[])t.add(e);let n=ma(t,c.get(e)??[]),r=u.get(e)??new Set,i=d.get(e)??new Set;(!pa(t,r)||!pa(n,i))&&(u.set(e,t),d.set(e,n),m=!0)}}let h=(c.get(a)??[]).filter(e=>e.position<o);return[...ma(u.get(a)??new Set,h)].map(e=>e.expression)},ga=(e,t,n)=>{if(!la.has(e.kind))return e.initializer?[e.initializer]:[];if(!n)return[];let r=da.get(n);r||(r=new WeakMap,da.set(n,r));let i=r.get(e);i||(i=new WeakMap,r.set(e,i));let a=i.get(t);if(a)return a;let o=ha(e,t,n);return i.set(t,o),o},_a=e=>{if(!v(e)||!y(e.body,`BlockStatement`))return[];let t=[];return k(e.body,n=>{if(n!==e.body&&(v(n)||y(n,`ClassDeclaration`)||y(n,`ClassExpression`)))return!1;y(n,`ReturnStatement`)&&t.push(n)}),t},I=e=>{if(y(e,`ReturnStatement`)||y(e,`ThrowStatement`))return!0;if(y(e,`IfStatement`)){if(y(e.test,`Literal`)){let t=e.test.value?e.consequent:e.alternate;return t?I(t):!1}return!!(e.alternate&&I(e.consequent)&&I(e.alternate))}if(y(e,`TryStatement`))return e.finalizer&&I(e.finalizer)?!0:I(e.block)?e.handler?I(e.handler.body):!0:!1;if(y(e,`DoWhileStatement`))return I(e.body);if(y(e,`WhileStatement`)){let t=e.test;return!!(y(t,`Literal`)&&t.value&&I(e.body))}if(y(e,`ForStatement`)){let t=e.test;return!!((!t||y(t,`Literal`)&&t.value)&&I(e.body))}return y(e,`BlockStatement`)?e.body.some(e=>I(e)):!1},va=new Set([`let`,`var`]),ya=e=>!v(e)||!e.body?[]:y(e.body,`BlockStatement`)?_a(e).flatMap(e=>e.argument?[e.argument]:[]):[e.body],ba=e=>{if(!v(e)||!y(e.body,`BlockStatement`))return!1;let t=!1;return k(e.body,n=>{if(t||n!==e.body&&v(n))return!1;y(n,`ReturnStatement`)&&!n.argument&&(t=!0)}),t},xa=(e,t,n,r=`some`)=>{let i=new Set,a=new Set,o,s=e=>{if(a.has(e))return!1;a.add(e);try{let t=ya(e);return r===`every`&&v(e)&&y(e.body,`BlockStatement`)&&(!I(e.body)||ba(e))?!1:t.length>0&&(r===`every`?t.every(o):t.some(o))}finally{a.delete(e)}};o=a=>{let l=D(a);if(i.has(l))return!1;i.add(l);try{if(t(l))return!0;if(y(l,`Identifier`)){let t=e.symbolFor(l);if(!t||t.kind!==`const`&&!va.has(t.kind))return!1;let i=ga(t,l,n),a=e=>{let t=D(e);return!v(t)&&o(t)};return r===`every`?i.length>0&&i.every(a):i.some(a)}if(y(l,`CallExpression`)){if(l.arguments.length!==0||!y(l.callee,`Identifier`))return!1;let t=e.symbolFor(l.callee);if(!t||t.kind!==`const`&&t.kind!==`function`)return!1;let n=t.initializer?D(t.initializer):null,r=null;return v(n)?r=n:v(t.declarationNode)&&(r=t.declarationNode),!r||r.async||r.generator||r.params.length!==0?!1:s(r)}return y(l,`ConditionalExpression`)?c(l.consequent,l.alternate):y(l,`LogicalExpression`)?c(l.left,l.right):!1}finally{i.delete(l)}};let c=(e,t)=>{let n=[o(e),o(t)];return r===`every`?n.every(Boolean):n.some(Boolean)};return{expressionMatches:o,functionMatches:s}},Sa=(e,t,n,r,i=`some`)=>xa(t,n,r,i).functionMatches(e),Ca=(e,t,n,r,i)=>{let a=i.cfgFor(e),o=a?.blockOf(t);if(!a||!o)return!1;let s=new Set(_a(e).flatMap(e=>{if(!e.argument||!xa(n,r,i,`every`).expressionMatches(e.argument))return[];let t=a.blockOf(e.argument);return t?[t]:[]}));if(s.size===0)return!1;let c=new Set([o]),l=[o];for(;l.length>0;){let e=l.pop();if(!e)break;if(!s.has(e))for(let t of e.successors){if(t.to===a.exit)return!1;c.has(t.to)||(c.add(t.to),l.push(t.to))}}return!0},wa=e=>y(e,`Program`)?e.range[1]:e.range[0],Ta=new WeakMap,Ea=(e,t)=>{t.push(...e.symbols);for(let n of e.children)Ea(n,t)},Da=e=>{let t=new Map,n=[];Ea(e.rootScope,n);for(let r of n){let n=N(r.bindingIdentifier,e);if(!n)continue;let i=t.get(n.id)??[];i.push(r),t.set(n.id,i)}return t},Oa=(e,t)=>{let n=N(e,t);if(!n)return[];let r=Ta.get(t);return r||(r=Da(t),Ta.set(t,r)),r.get(n.id)??[]},ka=e=>{let t=e.expressions??[],n=e.quasis??[];if(t.length!==0||n.length!==1)return null;let r=n[0]?.value;return r?.cooked??r?.raw??null},L=(e,t,n={})=>{let r=M(e,{allowComputedString:!0,stringifyNonStringLiterals:n.stringifyNonStringLiterals});if(r!==null||!y(e,`Property`)&&!y(e,`MethodDefinition`)&&!y(e,`PropertyDefinition`)&&!y(e,`MemberExpression`)||!e.computed)return r;let i=D(y(e,`MemberExpression`)?e.property:e.key);if(!y(i,`Identifier`))return null;let a=N(i,t);if(a?.kind!==`const`||!a.initializer)return null;let o=D(a.initializer);return y(o,`Literal`)?typeof o.value==`string`?o.value:n.allowConstNumericLiteral&&typeof o.value==`number`?String(o.value):null:n.allowConstTemplateLiteral&&y(o,`TemplateLiteral`)?ka(o):null},Aa=new Set([`CatchClause`,`ConditionalExpression`,`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`IfStatement`,`LogicalExpression`,`SwitchCase`,`SwitchStatement`,`TryStatement`,`WhileStatement`]),ja=(e,t)=>{let n=e.parent??null;for(;n&&n!==t;){if(Aa.has(n.type))return!1;n=n.parent??null}return n===t},Ma=e=>F(e)??Xi(e),Na=e=>{let t=P(e),n=t.parent;return!!(n&&y(n,`VariableDeclarator`)&&n.init===t&&n.parent&&y(n.parent,`VariableDeclaration`)&&n.parent.kind===`const`)},Pa=e=>{let t=P(e),n=t.parent;return!!(n&&(y(n,`AssignmentExpression`)&&n.left===t||y(n,`UpdateExpression`)&&n.argument===t||y(n,`UnaryExpression`)&&n.operator===`delete`&&n.argument===t))},Fa=e=>{let t=P(e),n=t.parent;return n&&y(n,`MemberExpression`)&&D(n.object)===t?n:null},Ia=(e,t,n,r)=>{if(!y(e,`ObjectExpression`))return null;for(let i of e.properties.toReversed()){if(!y(i,`Property`))return null;let e=L(i,n);if(e===null)return null;if(e===t)return i.kind===`init`?R(i.value,n,r):null}return null},La=(e,t,n,r)=>{if(!y(e,`ObjectExpression`))return[];let i=[],a=new Set;for(let o of e.properties){if(!y(o,`Property`))continue;let e=L(o,n),s=o.kind===`init`||o.kind===`get`?R(o.value,n,new Set(r)):null;e===t?(i=s?[s]:[],a.clear(),s&&a.add(s)):e===null&&s&&!a.has(s)&&(i.push(s),a.add(s))}return i},Ra=(e,t,n,r)=>{if(!y(e,`ClassDeclaration`)&&!y(e,`ClassExpression`))return null;for(let i of e.body.body.toReversed()){if(!y(i,`MethodDefinition`)&&!y(i,`PropertyDefinition`)||!i.static)continue;let e=L(i,n);if(e===null)return null;if(e===t)return y(i,`MethodDefinition`)&&i.kind!==`method`?null:i.value?R(i.value,n,r):null}return null},za=(e,t,n,r)=>{if(!y(e,`ClassDeclaration`)&&!y(e,`ClassExpression`))return[];let i=[],a=new Set;for(let o of e.body.body){if(!y(o,`MethodDefinition`)&&!y(o,`PropertyDefinition`)||!o.static)continue;let e=L(o,n),s=o.value&&(!y(o,`MethodDefinition`)||o.kind===`method`||o.kind===`get`)?R(o.value,n,new Set(r)):null;e===t?(i=s?[s]:[],a.clear(),s&&a.add(s)):e===null&&s&&!a.has(s)&&(i.push(s),a.add(s))}return i},Ba=(e,t,n,r,i,a,o)=>{let s=Ma(t);if(!s||!y(e,`Identifier`))return{exactFunction:null,possibleFunctions:[]};let c=[];for(let r of Oa(e,a))for(let e of r.references){let r=e.identifier;if(r.range[0]>=t.range[0]||Na(r))continue;let i=Fa(r);if(!i){Ma(r)===s&&c.push({assignedExpression:null,isDefinite:!1,offset:r.range[0]});continue}if(!Pa(i)||Ma(i)!==s)continue;let o=L(i,a),l=P(i).parent,u=l&&y(l,`AssignmentExpression`)&&l.operator===`=`?l.right:null;if(o===null){c.push({assignedExpression:u,isDefinite:!1,offset:i.range[0]});continue}if(o===n){if(!l||!y(l,`AssignmentExpression`)||l.operator!==`=`||!ja(i,s)){c.push({assignedExpression:u,isDefinite:!1,offset:i.range[0]});continue}c.push({assignedExpression:u,isDefinite:!0,offset:l.range[0]})}}c.sort((e,t)=>e.offset-t.offset);let l=r,u=i,d=new Set(i);for(let e of c){let t=e.assignedExpression?R(e.assignedExpression,a,new Set(o)):null;if(e.isDefinite){l=t,u=t?[t]:[],d.clear(),t&&d.add(t);continue}l=null,t&&!d.has(t)&&(u.push(t),d.add(t))}return{exactFunction:l,possibleFunctions:u}},Va=(e,t,n)=>{if(!y(e,`MemberExpression`))return{exactFunction:null,possibleFunctions:[]};let r=j(e);if(r===null)return{exactFunction:null,possibleFunctions:[]};let i=D(e.object);if(y(i,`ObjectExpression`))return{exactFunction:Ia(i,r,t,n),possibleFunctions:La(i,r,t,n)};if(y(i,`ClassExpression`))return{exactFunction:Ra(i,r,t,n),possibleFunctions:za(i,r,t,n)};if(!y(i,`Identifier`))return{exactFunction:null,possibleFunctions:[]};let a=N(i,t);if(!a||n.has(a.id))return{exactFunction:null,possibleFunctions:[]};n.add(a.id);let o=null,s=[];if(a.kind===`const`&&a.initializer){let e=D(a.initializer);o=Ia(e,r,t,n),s=La(e,r,t,n)}else a.kind===`class`&&a.initializer&&(o=Ra(a.initializer,r,t,n),s=za(a.initializer,r,t,n));return Ba(i,e,r,o,s,t,n)},Ha=(e,t,n)=>{let r=D(e);if(y(r,`CallExpression`)){let e=D(r.callee);return y(e,`MemberExpression`)&&j(e)===`bind`?Ha(e.object,t,n):[]}if(y(r,`MemberExpression`)){let e=j(r);return e===`call`||e===`apply`?Ha(r.object,t,n):Va(r,t,n).possibleFunctions}let i=R(r,t,n);return i?[i]:[]},R=(e,t,n)=>{let r=D(e);if(v(r))return r;if(y(r,`CallExpression`)){let e=D(r.callee);return y(e,`MemberExpression`)&&j(e)===`bind`?R(e.object,t,n):null}if(y(r,`MemberExpression`)){let e=j(r);return e===`call`||e===`apply`?R(r.object,t,n):Va(r,t,n).exactFunction}if(!y(r,`Identifier`))return null;let i=N(r,t);return!i||n.has(i.id)?null:(n.add(i.id),i.kind===`function`?!i.references.some(e=>e.flag!==`read`)&&v(i.declarationNode)?i.declarationNode:null:i.kind!==`const`||!i.initializer?null:R(i.initializer,t,n))},Ua=(e,t)=>R(e,t,new Set),Wa=(e,t)=>Ha(e,t,new Set),Ga=new WeakMap,Ka=(e,t)=>{let n=D(e);return y(n,`Identifier`)?t.symbolFor(n):null},qa=(e,t)=>{let n=P(e),r=n.parent;return!r||!y(r,`AssignmentExpression`)||r.operator!==`=`||r.left!==n?null:Ka(r.right,t)},Ja=e=>{let t=P(e),n=t.parent;return n&&y(n,`VariableDeclarator`)&&n.init===t&&(y(n.id,`Identifier`)||y(n.id,`ObjectPattern`))?!0:!!(n&&y(n,`AssignmentExpression`)&&n.operator===`=`&&n.right===t&&y(D(n.left),`Identifier`))},Ya=(e,t,n)=>{if(e.initializer&&y(e.declarationNode,`VariableDeclarator`)&&e.declarationNode.id===e.bindingIdentifier){let r=Ka(e.initializer,n);if(r&&t.has(r.id))return!0}return e.references.some(e=>{let r=qa(e.identifier,n);return!!(r&&t.has(r.id))})},Xa=(e,t)=>{let n=N(e,t);if(!n)return[];let r=Ga.get(t);r||(r=new Map,Ga.set(t,r));let i=r.get(n.id);if(i)return i;let a=[],o=[t.rootScope];for(;o.length>0;){let e=o.pop();e&&(a.push(...e.symbols),o.push(...e.children))}let s=new Set([n.id]),c=!0;for(;c;){c=!1;for(let e of a)s.has(e.id)||Ya(e,s,t)&&(s.add(e.id),c=!0)}let l=a.filter(e=>s.has(e.id));return r.set(n.id,l),l},Za=e=>{let t=e;for(;t;){if(v(t)||y(t,`Program`))return t;t=t.parent??null}return null},Qa=new WeakMap,$a=(e,t)=>{let n=Qa.get(t);if(!n){let r=new Map,i=new Map,a=Xi(e);a&&k(a,e=>{if(!y(e,`CallExpression`))return;let n=D(e.callee),a=y(n,`Identifier`)?t.symbolFor(n):null,o=a?i.get(a.id):void 0;o===void 0&&(o=Wa(e.callee,t),a&&i.set(a.id,o));for(let t of o){let n=r.get(t)??[];n.push(e),r.set(t,n)}}),n=r,Qa.set(t,n)}return n.get(e)??[]},eo=new WeakMap,to=(e,t)=>{let n=eo.get(t);if(n===void 0){let e=null;k(t,n=>{y(n,`AwaitExpression`)&&F(n)===t&&(e===null||n.range[0]<e)&&(e=n.range[0])}),n=e,eo.set(t,n)}return n===null||e.range[0]<n},no=(e,t,n,r=new Set,i=null,a)=>{if(r.has(e)||!v(e)||e.generator||i!==null&&!ja(i,e)||i!==null&&a!==void 0&&!a(i)||i!==null&&e.async&&!to(i,e))return[];r.add(e);let o=Za(t);return o?$a(e,n).flatMap(e=>{let s=Za(e);return!s||i!==null&&!ja(e,s)||i!==null&&a!==void 0&&!a(e)?[]:s===o?e.range[0]<wa(t)?[[e.range[0]]]:[]:v(s)?no(s,t,n,new Set(r),i===null?null:e,a).map(t=>[...t,e.range[0]]):[]}):[]},ro=(e,t,n,r=new Set,i=null)=>no(e,t,n,r,i).length>0,io=e=>{let t=e.parent;return t?y(t,`AssignmentExpression`)?t.left===e:(y(t,`UpdateExpression`)||y(t,`UnaryExpression`)&&t.operator===`delete`)&&t.argument===e:!1},ao=e=>{let t=e.parent;for(;t&&D(t)===e;)t=t.parent;return!t||!y(t,`MemberExpression`)||D(t.object)!==e||!io(t)?null:t},oo=(e,t,n)=>{let r=ao(e);return r&&L(r,n)===t?r:null},so=(e,t,n,r)=>e.references.some(e=>{let i=oo(e.identifier,t,r);if(!i)return!1;let a=Za(i),o=Za(n);return!a||!o||!ja(i,a)?!1:a===o?i.range[0]<wa(n):v(a)&&ro(a,n,r)}),co=e=>{if(Ja(e))return!0;let t=P(e),n=t.parent;return!!(n&&y(n,`MemberExpression`)&&D(n.object)===t)},lo=e=>{if(Ja(e))return!0;let t=P(e),n=t.parent;if(!n||!y(n,`MemberExpression`)||D(n.object)!==t)return!1;let r=P(n),i=r.parent;return!(i&&y(i,`CallExpression`)&&i.callee===r)},uo=(e,t,n)=>y(e,`Identifier`)?Xa(e,n).some(e=>e.references.some(e=>{let r=ao(e.identifier);if(!r)return!1;let i=L(r,n);return i===null||i===t})):!1,fo=(e,t,n)=>{let r=Za(e),i=Za(t);return!r||!i?!0:r===i?e.range[0]<wa(t):v(r)?ro(r,t,n):!0},po=(e,t,n,r)=>y(e,`Identifier`)?Xa(e,r).some(e=>e.references.some(e=>{let i=ao(e.identifier);if(!i||!fo(i,n,r))return!1;let a=L(i,r);return a===null||a===t})):!1,mo=(e,t,n)=>y(e,`Identifier`)?uo(e,t,n)?!0:Xa(e,n).some(e=>e.references.some(e=>!co(e.identifier))):!1,ho=(e,t,n,r)=>y(e,`Identifier`)?po(e,t,n,r)?!0:Xa(e,r).some(e=>e.references.some(e=>!lo(e.identifier)&&fo(e.identifier,n,r))):!1,go=(e,t)=>{let n=D(e);if(!y(n,`CallExpression`))return!1;let r=D(n.callee);if(!y(r,`MemberExpression`))return!1;let i=j(r);if(i===null)return!1;let a=D(r.object);return y(a,`Identifier`)&&uo(a,i,t)},_o=(e,t,n,r)=>y(e,`Identifier`)?Oa(e,r).some(e=>so(e,t,n,r)):!1,vo=(e,t,n,r={})=>{let i=F(e);return i===F(t)?e.range[0]>=wa(t)||r.requireSynchronousWrite&&(!i||!ja(e,i)||r.isSynchronousNode!==void 0&&!r.isSynchronousNode(e))?[]:[[e.range[0]]]:i?r.requireSynchronousWrite?no(i,t,n,new Set,e,r.isSynchronousNode).map(t=>[...t,e.range[0]]):no(i,t,n).map(t=>[...t,e.range[0]]):r.requireSynchronousWrite?[]:[[-1/0,e.range[0]]]},yo=(e,t,n,r={})=>vo(e,t,n,r).length>0,z=(e,t,n,r={})=>e.references.some(e=>e.flag===`read`?!1:yo(e.identifier,t,n,r)),bo=(e,t)=>{if(!y(e,`CallExpression`))return!1;let n=D(e.callee);if(y(n,`Identifier`)){let e=t.symbolFor(n);return!!(e&&!z(e,n,t))}if(!y(n,`MemberExpression`))return!1;let r=j(n),i=D(n.object);return!!(r&&y(i,`Identifier`)&&!_o(i,r,n,t))},xo=new Set([`FunctionDeclaration`,`FunctionExpression`,`ArrowFunctionExpression`,`ClassDeclaration`,`ClassExpression`]),So={allowGlobalReactNamespace:!1,allowUnboundBareCalls:!1},Co=new Set([`lodash/sortBy`,`lodash/sortBy.js`,`lodash-es/sortBy`,`lodash-es/sortBy.js`]),wo=e=>y(e,`TSArrayType`)||y(e,`TSTupleType`)?!0:y(e,`TSTypeReference`)?y(e.typeName,`Identifier`)&&(e.typeName.name===`Array`||e.typeName.name===`ReadonlyArray`):!1,To=e=>{if(!y(e,`Identifier`))return!1;let t=e.typeAnnotation;return!!(t&&y(t,`TSTypeAnnotation`)&&wo(t.typeAnnotation))},Eo=(e,t)=>{if(!y(e,`CallExpression`))return!1;let n=D(e.callee);if(!y(n,`Identifier`))return!1;let r=t.symbolFor(n);if(!r||z(r,n,t)||!y(r.declarationNode,`ImportDefaultSpecifier`)&&!y(r.declarationNode,`ImportSpecifier`))return!1;let i=oa(n,n.name);return!i||i.isNamespace?!1:Co.has(i.source)&&i.exportedName===`default`?!0:(i.source===`lodash`||i.source===`lodash-es`)&&i.exportedName===`sortBy`},Do=(e,t,n,r=new Set)=>{let i=D(e);if(y(i,`ArrayExpression`)||Eo(i,t))return!0;if(!y(i,`Identifier`))return!1;let a=t.symbolFor(i);return!a||r.has(a.id)||z(a,n,t)?!1:To(a.bindingIdentifier)?!0:a.initializer?(r.add(a.id),Do(a.initializer,t,n,r)):!1},Oo=(e,t)=>{if(!y(e,`CallExpression`))return!1;let n=D(e.callee);if(!y(n,`MemberExpression`)||j(n)!==`map`)return!1;let r=D(n.object);return Do(r,t,e)?!(y(r,`Identifier`)&&_o(r,`map`,e,t)):!1},ko=(e,t)=>{if(e.type!==`ArrowFunctionExpression`&&e.type!==`FunctionExpression`)return!1;let n=e.parent;return y(n,`CallExpression`)?Hi(n,`useMemo`,t,{resolveNamedAliases:!0})&&bo(n,t)?n.arguments[0]===e:n.arguments.some(t=>t===e)&&Oo(n,t):!1},Ao=(e,t)=>xo.has(e.type)&&!ko(e,t),jo=(e,t)=>e.type===`JSXElement`||e.type===`JSXFragment`||Hi(e,`createElement`,t,So)||Mo(e,t),Mo=(e,t)=>{if(!y(e,`CallExpression`))return!1;let n=D(e.callee);if(y(n,`Identifier`))return t.symbolFor(n)?.kind===`import`&&ia(n,n.name,`react-dom`)===`createPortal`;if(!y(n,`MemberExpression`)||n.computed||!y(n.object,`Identifier`)||!y(n.property,`Identifier`)||n.property.name!==`createPortal`)return!1;let r=t.symbolFor(n.object);return!r||r.kind!==`import`?!1:ra(n.object,n.object.name,`react-dom`)||na(n.object,n.object.name,`react-dom`)},No=(e,t)=>{let n=!1;return k(e,r=>{if(n||r!==e&&Ao(r,t))return!1;if(jo(r,t))return n=!0,!1}),n},Po=new WeakMap,Fo=(e,t,n)=>{let r=Po.get(e);if(r&&r.scopes===t&&r.controlFlow===n)return r.hasRenderOutput;let i=Sa(e,t,e=>No(e,t),n);return Po.set(e,{scopes:t,controlFlow:n,hasRenderOutput:i}),i},Io=e=>y(e,`JSXIdentifier`)?e.name:y(e,`JSXNamespacedName`)?`${e.namespace.name}:${e.name.name}`:null,Lo=new Set([`Component`,`PureComponent`]),Ro=(e,t,n,r)=>{let i=D(e);if(y(i,`MemberExpression`)){let e=j(i),n=D(i.object);return!!(e&&Lo.has(e)&&y(n,`Identifier`)&&!_o(n,e,i,t)&&zi(n,t))}if(y(i,`ClassExpression`))return zo(i,t,n,r);if(!y(i,`Identifier`))return!1;let a=t.symbolFor(i);if(!a||r.has(a.id)||z(a,i,t))return!1;if(r.add(a.id),Li(a)){let e=A(a.declarationNode);return!!(e&&Lo.has(e))}return y(a.declarationNode,`ClassDeclaration`)||y(a.declarationNode,`ClassExpression`)?zo(a.declarationNode,t,n,r):!!(a.kind===`const`&&a.initializer&&Ro(a.initializer,t,n,r))},zo=(e,t,n=new Set,r=new Set)=>!y(e,`ClassDeclaration`)&&!y(e,`ClassExpression`)||n.has(e)||!e.superClass?!1:(n.add(e),Ro(e.superClass,t,n,r)),Bo=new Set([`FunctionDeclaration`,`FunctionExpression`,`ArrowFunctionExpression`,`MethodDefinition`,`Program`]),Vo=e=>{let t=e;for(;t;){if(Bo.has(t.type))return t;t=t.parent??null}return null},Ho=(e,t)=>{if(t!==`let`&&t!==`const`)return Vo(e);let n=e.parent;for(;n;){if(n.type===`BlockStatement`){let t=n.parent;return t&&(t.type===`FunctionDeclaration`||t.type===`FunctionExpression`||t.type===`ArrowFunctionExpression`||t.type===`MethodDefinition`)?Vo(e):n}if(Bo.has(n.type))return n;n=n.parent??null}return null},Uo=(e,t,n,r)=>{if(y(e,`Identifier`)){let i=r.get(e.name)??[];i.push({bindingIdentifier:e,initializer:t,scopeOwner:n}),r.set(e.name,i);return}if(y(e,`ObjectPattern`)){for(let t of e.properties)if(y(t,`Property`)){let e=t.value;Uo(e,y(e,`AssignmentPattern`)?e.right:null,n,r)}else y(t,`RestElement`)&&Uo(t.argument,null,n,r);return}if(y(e,`ArrayPattern`)){for(let t of e.elements)t&&Uo(t,y(t,`AssignmentPattern`)?t.right??null:null,n,r);return}if(y(e,`AssignmentPattern`)){Uo(e.left,e.right??null,n,r);return}y(e,`RestElement`)&&Uo(e.argument,null,n,r)},Wo=e=>{let t=new Map;return k(e,e=>{switch(e.type){case`VariableDeclarator`:{let n=e.parent,r=Ho(e,n?.type===`VariableDeclaration`?n.kind:void 0);r&&Uo(e.id,e.init??null,r,t);break}case`FunctionDeclaration`:case`FunctionExpression`:case`ArrowFunctionExpression`:if(e.type!==`ArrowFunctionExpression`&&e.id){let n=e.parent?Vo(e.parent):null;if(n){let r=t.get(e.id.name)??[];r.push({bindingIdentifier:e.id,initializer:e,scopeOwner:n}),t.set(e.id.name,r)}}for(let n of e.params)Uo(n,null,e,t);break;case`ClassDeclaration`:case`ClassExpression`:{if(!e.id)break;let n=e.parent?Vo(e.parent):null;if(n){let r=t.get(e.id.name)??[];r.push({bindingIdentifier:e.id,initializer:e,scopeOwner:n}),t.set(e.id.name,r)}break}case`ImportDeclaration`:{let n=Vo(e);if(!n)break;for(let r of e.specifiers){let e=r.local;if(e&&y(e,`Identifier`)){let i=t.get(e.name)??[];i.push({bindingIdentifier:e,initializer:r,scopeOwner:n}),t.set(e.name,i)}}break}case`TSImportEqualsDeclaration`:case`TSEnumDeclaration`:case`TSModuleDeclaration`:{let n=e.id;if(n?.type===`Identifier`){let r=Vo(e);if(r){let e=t.get(n.name)??[];e.push({bindingIdentifier:n,initializer:null,scopeOwner:r}),t.set(n.name,e)}}break}}}),t},Go=new WeakMap,Ko=new WeakMap,qo=e=>{let t=Xi(e);if(!t)return null;let n=Go.get(t);return n||(n=Wo(t),Go.set(t,n)),n},Jo=(e,t,n)=>{let r=qo(e);if(!r)return null;let i=r.get(t);if(!i||i.length===0)return null;let a=i[0];if(i.length===1&&a){let t=e;for(;t;){if(t===a.scopeOwner)return a;t=t.parent??null}return null}let o=e;for(;o;){let t=null;for(let r of i)if(r.scopeOwner===o){if(t===null){t=r;continue}if(n?.preferInitializerBeforeReference){let n=!!(r.initializer&&(y(r.initializer,`FunctionDeclaration`)||r.bindingIdentifier.range[0]<e.range[0]));if(n!==!!(t.initializer&&(y(t.initializer,`FunctionDeclaration`)||t.bindingIdentifier.range[0]<e.range[0]))){n&&(t=r);continue}}(r.initializer!==null||t.initializer===null)&&(t=r)}if(t)return t;o=o.parent??null}return null},Yo=(e,t,n)=>{let r=Ko.get(e),i;if(!r)i={},Ko.set(e,{primaryBindingName:t,primaryLookup:i});else if(r.primaryBindingName===t)i=r.primaryLookup;else{let e=r.additionalLookups;e||(e=new Map,r.additionalLookups=e);let n=e.get(t);n?i=n:(i={},e.set(t,i))}let a=n?.preferInitializerBeforeReference?`preferredResult`:`defaultResult`;if(a in i)return i[a]??null;let o=Jo(e,t,n);return i[a]=o,o},Xo=e=>di.test(e),Zo=e=>{let t=Yo(e,e.name);if(!t?.initializer)return null;let n=t.bindingIdentifier.parent;if(!n||!y(n,`VariableDeclarator`)||n.id!==t.bindingIdentifier)return null;let r=n.parent;if(!r||!y(r,`VariableDeclaration`)||r.kind!==`const`)return null;let i=D(t.initializer);return y(i,`Literal`)&&typeof i.value==`string`?i.value:null},Qo=e=>y(e,`JSXIdentifier`)?e.name:y(e,`JSXMemberExpression`)?`${Qo(e.object)}.${e.property.name}`:y(e,`JSXNamespacedName`)?`${e.namespace.name}:${e.name.name}`:``,$o=e=>{let t=e.name;return y(t,`JSXIdentifier`)?Xo(t.name)?Zo(t)??t.name:t.name:Qo(t)},es=(e,t)=>{if(!y(e.name,`JSXIdentifier`))return!1;let n=$o(e);if(n[0]===n[0]?.toLowerCase())return!0;let r=new Set,i=e=>{let n=P(e);if(y(n,`Literal`))return typeof n.value==`string`;if(y(n,`Identifier`)||y(n,`JSXIdentifier`)){let e=t.symbolFor(n);if(!e||e.kind!==`const`||!e.initializer||r.has(e.id))return!1;r.add(e.id);let a=i(e.initializer);return r.delete(e.id),a}return y(n,`ConditionalExpression`)?i(n.consequent)&&i(n.alternate):!1};return i(e.name)},ts=(e,t,n=new Set)=>{if(!e)return null;let r=D(e);if(v(r))return r;if(y(r,`Identifier`)){let e=t.symbolFor(r);return!e||n.has(e.id)||!e.initializer||z(e,r,t)?null:(n.add(e.id),ts(e.initializer,t,n))}if(!y(r,`CallExpression`)||!Hi(r,`memo`,t,{resolveNamedAliases:!0})&&!Hi(r,`forwardRef`,t,{resolveNamedAliases:!0}))return null;let i=r.arguments[0];return!i||y(i,`SpreadElement`)?null:ts(i,t,n)},ns=(e,t)=>{let n=P(e);if(!v(n)||n.async||n.generator)return!1;let r=n.parent;if(!r||!y(r,`JSXExpressionContainer`))return!1;let i=r.parent;if(!i||!y(i,`JSXAttribute`)||Io(i.name)!==`ref`)return!1;let a=i.parent;return!!(a&&y(a,`JSXOpeningElement`)&&es(a,t))},rs=(e,t)=>t.every((t,n)=>e[n]===t),is=e=>{let t=P(e);for(;t.parent&&y(t.parent,`MemberExpression`)&&t.parent.object===t;){if(!j(t.parent))return null;t=P(t.parent)}return t},as=(e,t,n,r)=>{if(t.length!==n.length+1||!rs(t,n)||t[n.length]!==`current`)return!1;let i=is(e),a=i?.parent;if(!i||!a||!y(a,`AssignmentExpression`)||a.operator!==`=`||a.left!==i)return!1;let o=F(e);if(!o)return!1;if(ns(o,r))return!0;if(!v(o)||o.async||o.generator)return!1;let s=F(o);if(!s||!ns(s,r))return!1;let c=P(o),l=c.parent;return!!(y(l,`ReturnStatement`)&&l.argument===c&&F(l)===s||y(s,`ArrowFunctionExpression`)&&s.body===c)},os=(e,t)=>{if(!y(e,`JSXOpeningElement`))return!1;let n=e.name;if(y(n,`JSXIdentifier`)){if(!t)return n.name===`Fragment`;let e=N(n,t);return e?Li(e)&&A(e.declarationNode)===`Fragment`:n.name===`Fragment`&&t.isGlobalReference(n)}return y(n,`JSXMemberExpression`)?!y(n.object,`JSXIdentifier`)||n.property.name!==`Fragment`?!1:t?zi(n.object,t)?!0:n.object.name===`React`&&t.isGlobalReference(n.object):n.object.name===`React`:!1},ss=(e,t,n,r,i)=>{let a=P(e),o=a.parent;if(!o)return!1;if(y(o,`ReturnStatement`)&&o.argument===a)return F(o)===t;if(y(o,`ArrowFunctionExpression`)&&o.body===a)return o===t;if(y(o,`JSXFragment`)&&o.children.some(e=>e===a)||y(o,`JSXElement`)&&o.children.some(e=>e===a)&&(es(o.openingElement,n)||os(o.openingElement,n)||i.doesCustomElementRenderChildren?.(o.openingElement)))return ss(o,t,n,r,i);if(y(o,`JSXExpressionContainer`)&&o.expression===a&&o.parent&&(y(o.parent,`JSXFragment`)||y(o.parent,`JSXElement`)&&(es(o.parent.openingElement,n)||os(o.parent.openingElement,n)||i.doesCustomElementRenderChildren?.(o.parent.openingElement))))return ss(o.parent,t,n,r,i);if(y(o,`ConditionalExpression`)&&(o.consequent===a||o.alternate===a)||y(o,`LogicalExpression`)&&(o.left===a||o.right===a)||y(o,`ArrayExpression`)&&o.elements.some(e=>e===a))return ss(o,t,n,r,i);if(!y(o,`VariableDeclarator`)||o.init!==a||!y(o.id,`Identifier`))return!1;let s=n.symbolFor(o.id);if(!s||s.kind!==`const`||s.references.length===0||r.has(s.id))return!1;r.add(s.id);let c=s.references.every(e=>e.flag===`read`&&ss(e.identifier,t,n,r,i));return r.delete(s.id),c},cs=(e,t,n={})=>ss(e,F(e),t,new Set,n),ls=(e,t)=>t.every((t,n)=>e[n]===t),us=(e,t)=>ls(e,t)||ls(t,e),ds=e=>v(e)&&y(e.body,`BlockStatement`)&&e.body.body.length===0,fs=(e,t,n)=>Hi(e,t,n,{resolveNamedAliases:!0}),ps=(e,t,n=new Set)=>y(e,`ObjectExpression`)?e.properties.every(e=>{if(y(e,`SpreadElement`)){let r=P(e.argument);if(y(r,`ObjectExpression`))return ps(r,t,n);if(!y(r,`Identifier`))return!1;let i=t.symbolFor(r);if(!i||i.kind!==`const`||n.has(i.id)||!y(i.initializer,`ObjectExpression`))return!1;n.add(i.id);let a=ps(i.initializer,t,n);return n.delete(i.id),a}return y(e,`Property`)?!v(e.value)||ds(e.value):!1}):!1,ms=e=>j(e)||(e.computed&&y(e.property,`Literal`)&&typeof e.property.value==`number`&&Number.isSafeInteger(e.property.value)&&e.property.value>=0?String(e.property.value):null),hs=e=>{let t=[],n=P(e);for(;n.parent&&y(n.parent,`MemberExpression`)&&n.parent.object===n;){let e=ms(n.parent);if(!e)return null;t.push(e),n=P(n.parent)}return{expression:n,propertyPath:t}},gs=(e,t,n)=>{let r=n.environmentsByProgram.get(e);if(r)return r;let i={filename:t,program:e,scopes:Ie(e)};return n.environmentsByProgram.set(e,i),i},_s=(e,t,n=new Set)=>{let r=P(e);if(y(r,`Identifier`)){let e=t.symbolFor(r);return!e||!e.initializer||n.has(e.id)||z(e,r,t)?!1:(n.add(e.id),_s(e.initializer,t,n))}if(!y(r,`CallExpression`))return!1;if(fs(r,`forwardRef`,t))return!0;if(!fs(r,`memo`,t))return!1;let i=r.arguments[0];return!i||y(i,`SpreadElement`)?!1:_s(i,t,n)},vs=(e,t)=>{let n=gs(e.programNode,e.filePath,t),r=ts(e.exportedNode,n.scopes);return r?{environment:n,functionNode:r,isForwardRef:_s(e.exportedNode,n.scopes)}:null},ys=(e,t,n)=>{if(!y(e,`Identifier`)&&!y(e,`JSXIdentifier`))return null;let r=t.scopes.symbolFor(e);if(r&&r.kind!==`import`){if(z(r,e,t.scopes))return null;let n=ts(r.initializer,t.scopes);return n?{environment:t,functionNode:n,isForwardRef:!!(r.initializer&&_s(r.initializer,t.scopes))}:null}let i=oa(e,e.name);if(!i||i.isNamespace||i.exportedName===null)return null;let a=O(t.filename,i.source,i.exportedName);return a?vs(a,n):null},bs=(e,t,n)=>{if(y(e,`JSXIdentifier`))return ys(e,t,n);if(!y(e,`JSXMemberExpression`)||!y(e.object,`JSXIdentifier`))return null;let r=oa(e.object,e.object.name);if(!r?.isNamespace)return null;let i=O(t.filename,r.source,e.property.name);return i?vs(i,n):null},xs=(e,t,n=new Set)=>{let r=P(e);if(y(r,`Identifier`)){let e=t.scopes.symbolFor(r);return!e||!e.initializer||n.has(e.id)||z(e,r,t.scopes)?!1:(n.add(e.id),xs(e.initializer,t,n))}return zo(r,t.scopes)},Ss=(e,t,n)=>{if(!y(e,`JSXIdentifier`))return!1;let r=t.scopes.symbolFor(e);if(r&&r.kind!==`import`)return z(r,e,t.scopes)?!1:!!(r.initializer&&xs(r.initializer,t));let i=oa(e,e.name);if(!i||i.isNamespace||i.exportedName===null)return!1;let a=O(t.filename,i.source,i.exportedName);if(!a)return!1;let o=gs(a.programNode,a.filePath,n);return xs(a.exportedNode,o)},Cs=(e,t)=>{if(!e)return null;let n=P(e);return!y(n,`ClassDeclaration`)&&!y(n,`ClassExpression`)||!xs(n,t)?null:{classNode:n,environment:t}},ws=(e,t,n)=>{if(!y(e,`JSXIdentifier`))return null;let r=t.scopes.symbolFor(e);if(r&&r.kind!==`import`)return z(r,e,t.scopes)?null:Cs(r.initializer,t);let i=oa(e,e.name);if(!i||i.isNamespace||i.exportedName===null)return null;let a=O(t.filename,i.source,i.exportedName);if(!a)return null;let o=gs(a.programNode,a.filePath,n);return Cs(a.exportedNode,o)},Ts=(e,t,n)=>{let r=[...t],i=P(e);for(;i.parent;){let e=i.parent;if(y(e,`ArrayExpression`)){if(e.elements.some(e=>e&&y(e,`SpreadElement`)))return null;let t=e.elements.findIndex(e=>e===i);if(t<0)return null;r.unshift(String(t)),i=P(e);continue}if(y(e,`Property`)&&e.value===i){let t=M(e,{allowComputedString:!0}),a=e.parent;if(!t||!a||!ps(a,n.scopes))return null;r.unshift(t),i=P(a);continue}if(y(e,`ConditionalExpression`)&&(e.consequent===i||e.alternate===i)||y(e,`LogicalExpression`)&&(e.left===i||e.right===i)){i=P(e);continue}if(y(e,`VariableDeclarator`)&&e.init===i&&y(e.id,`Identifier`)){let t=n.scopes.symbolFor(e.id);return!t||t.kind!==`const`?null:{environment:n,propertyPath:r,symbol:t}}if(y(e,`AssignmentExpression`)&&e.operator===`=`&&e.right===i&&y(e.left,`MemberExpression`)){let t=[],i=e.left;for(;y(i,`MemberExpression`);){let e=ms(i);if(!e)return null;t.unshift(e),i=P(i.object)}if(!y(i,`Identifier`))return null;let a=n.scopes.symbolFor(i);return!a||a.kind!==`const`?null:{environment:n,originWriteReference:i,propertyPath:[...t,...r],symbol:a}}return null}return null},Es=(e,t,n,r,i)=>{if(y(e,`AssignmentPattern`))return Es(e.left,t,n,r,i);if(y(e,`Identifier`)){let a=n.scopes.symbolFor(e);return!!(a&&Vs({environment:n,propertyPath:t,symbol:a},r,i-1))}if(!y(e,`ObjectPattern`)||t.length===0)return!1;let[a,...o]=t;for(let t of e.properties){if(!y(t,`Property`))continue;let e=M(t,{allowComputedString:!0});if(!e)return!1;if(e===a)return Es(t.value,o,n,r,i)}let s=e.properties.find(e=>y(e,`RestElement`));return s?Es(s.argument,t,n,r,i):!0},Ds=(e,t)=>{let n=e.arguments[0];return!n||y(n,`SpreadElement`)?!1:fs(e,`createElement`,t.scopes)?y(n,`Literal`)&&typeof n.value==`string`:!fs(e,`cloneElement`,t.scopes)||!y(n,`JSXElement`)?!1:es(n.openingElement,t.scopes)},Os=(e,t,n,r,i)=>{if(t.length>0)return!1;let a=e.parent;if(!a||!y(a,`Property`)||a.value!==e||M(a,{allowComputedString:!0})!==`ref`)return!1;let o=a.parent;if(!o||!y(o,`ObjectExpression`))return!1;let s=o.parent;return!(!s||!y(s,`CallExpression`)||s.arguments[1]!==o||!Ds(s,n)||!B(s,n,r,i))},ks=(e,t,n,r,i)=>{if(i<=0||!v(e.functionNode)||e.functionNode.async||e.functionNode.generator)return!1;let a=e.functionNode.params[t];return!!(a&&Es(a,n,e.environment,r,i))},As=e=>{if(!y(e,`MemberExpression`)||j(e)!==`children`)return!1;let t=P(e.object);return!!(y(t,`MemberExpression`)&&j(t)===`props`&&y(P(t.object),`ThisExpression`))},js=(e,t)=>{if(!y(e,`JSXOpeningElement`)||!y(e.name,`JSXMemberExpression`)||e.name.property.name!==`Provider`||!y(e.name.object,`JSXIdentifier`))return!1;let n=t.scopes.symbolFor(e.name.object);return!!(n?.kind===`const`&&n.initializer&&y(n.initializer,`CallExpression`)&&fs(n.initializer,`createContext`,t.scopes))},B=(e,t,n,r)=>cs(e,t.scopes,{doesCustomElementRenderChildren:e=>Ps(e,t,n,r-1)}),Ms=(e,t,n)=>{let{functionNode:r}=e;if(n<=0||t.activeRenderedChildrenComponents.has(r)||!y(r,`ArrowFunctionExpression`)&&!y(r,`FunctionExpression`)&&!y(r,`FunctionDeclaration`)||r.async||r.generator)return!1;let i=Yi(r,e.environment.scopes);if(!i)return!1;t.activeRenderedChildrenComponents.add(r);let a=i.every(r=>B(r,e.environment,t,n));return t.activeRenderedChildrenComponents.delete(r),a},Ns=(e,t,n)=>{let{classNode:r,environment:i}=e;if(n<=0||t.activeRenderedChildrenComponents.has(r)||!y(r,`ClassDeclaration`)&&!y(r,`ClassExpression`))return!1;let a=r.body.body.find(e=>y(e,`MethodDefinition`)&&!e.computed&&y(e.key,`Identifier`)&&e.key.name===`render`);if(!a||!y(a,`MethodDefinition`))return!1;let o=[];if(k(r,e=>{As(e)&&o.push(e)}),o.length===0)return!1;t.activeRenderedChildrenComponents.add(r);let s=o.every(e=>F(e)===a.value&&B(e,i,t,n));return t.activeRenderedChildrenComponents.delete(r),s},Ps=(e,t,n,r)=>{if(r<=0||!y(e,`JSXOpeningElement`))return!1;if(js(e,t))return!0;let i=bs(e.name,t,n);if(i)return Ms(i,n,r);let a=ws(e.name,t,n);return!!(a&&Ns(a,n,r))},Fs=(e,t,n,r,i)=>{let a=Io(e.name),o=e.parent;if(!a||!o||!y(o,`JSXOpeningElement`))return!1;let s=o.parent;if(!s||!y(s,`JSXElement`)||!B(s,n,r,i))return!1;if(es(o,n.scopes))return a===`ref`&&t.length===0;if(y(o.name,`JSXIdentifier`)&&a===`ref`&&t.length===0&&Ss(o.name,n,r))return!0;let c=bs(o.name,n,r);return c?a===`ref`&&c.isForwardRef?ks(c,1,t,r,i):ks(c,0,[a,...t],r,i):!1},Is=(e,t,n,r,i,a)=>{let o=e.arguments.findIndex(e=>e===t);if(o<0)return!1;if(o===0&&y(e.callee,`Identifier`)&&e.callee.name===`Boolean`&&r.scopes.isGlobalReference(e.callee))return!0;if(o===0&&fs(e,`useImperativeHandle`,r.scopes))return n.length===0;if(o===1&&n.length===1&&n[0]===`ref`&&Ds(e,r)&&B(e,r,i,a))return!0;let s=P(e.callee);if(v(s))return Fo(s,r.scopes)&&!B(e,r,i,a)?!1:ks({environment:r,functionNode:s,isForwardRef:!1},o,n,i,a);if(!y(e.callee,`Identifier`))return!1;let c=ys(e.callee,r,i);return!!(c&&(!Fo(c.functionNode,c.environment.scopes)||B(e,r,i,a))&&ks(c,o,n,i,a))},Ls=(e,t,n,r,i)=>{let a;if(t.length===1&&t[0]===`ref`)a=e.parent;else if(t.length===0){let t=e.parent;if(!t||!y(t,`Property`)||t.value!==e||M(t,{allowComputedString:!0})!==`ref`)return!1;a=t.parent?.parent}if(!a||!y(a,`JSXSpreadAttribute`))return!1;let o=a.parent;if(!o||!y(o,`JSXOpeningElement`))return!1;let s=o.parent;return!!(es(o,n.scopes)&&s&&y(s,`JSXElement`)&&B(s,n,r,i))},Rs=(e,t,n,r,i)=>{let a=P(e),o=a.parent;if(!o)return!1;if(y(o,`ExpressionStatement`)||y(o,`UnaryExpression`)&&o.operator===`void`&&o.argument===a)return!0;if(t.length===0&&y(o,`BinaryExpression`)&&(o.operator===`===`||o.operator===`!==`||o.operator===`==`||o.operator===`!=`)){let e=o.left===a?o.right:o.left;return!!(y(a,`Identifier`)&&y(e,`Identifier`)&&n.scopes.symbolFor(a)?.id===n.scopes.symbolFor(e)?.id)}if(Ls(a,t,n,r,i)||Os(a,t,n,r,i)||t.length>0&&(y(o,`LogicalExpression`)&&o.left===a||y(o,`ConditionalExpression`)&&o.test===a||y(o,`IfStatement`)&&o.test===a||y(o,`UnaryExpression`)&&o.operator===`!`&&o.argument===a))return!0;if(y(o,`JSXExpressionContainer`)&&o.expression===a){let e=o.parent;return!!(e&&y(e,`JSXAttribute`)&&Fs(e,t,n,r,i))}if(y(o,`CallExpression`))return Is(o,a,t,n,r,i);if(y(o,`VariableDeclarator`)&&o.init===a&&!y(o.id,`Identifier`))return Es(o.id,t,n,r,i);let s=Ts(a,t,n);return!!(s&&Vs(s,r,i-1))},zs=e=>{let t=e.parent;return t&&y(t,`VariableDeclarator`)&&t.init===e&&y(t.id,`Identifier`)?t.id:(y(e,`FunctionDeclaration`)||y(e,`FunctionExpression`))&&e.id?e.id:null},Bs=(e,t,n)=>{if(!e||!t||!v(e)||e.async||e.generator)return!1;let r=zs(e);if(!r||((y(e,`FunctionDeclaration`)||y(e,`FunctionExpression`))&&e.id===r?F(e):F(r))!==t)return!1;let i=y(e,`FunctionDeclaration`)?n.ownScopeFor(t)?.symbolsByName.get(r.name):n.symbolFor(r);return!!(i&&i.references.length>0&&i.references.every(e=>{let r=P(e.identifier),i=r.parent;return!!(i&&y(i,`CallExpression`)&&i.callee===r&&F(i)===t&&cs(i,n))}))},Vs=(e,t,n)=>{if(n<=0)return!1;let r=`${e.environment.filename}:${e.symbol.id}:${e.propertyPath.join(`.`)}`;if(t.activePaths.has(r))return!1;t.activePaths.add(r);let i=F(e.symbol.bindingIdentifier),a=e.symbol.references.every(r=>{if(r.identifier===e.originWriteReference)return!0;let a=r.identifier.parent;if(a&&y(a,`Property`)&&!a.computed&&a.key===r.identifier&&a.value!==r.identifier)return!0;let o=hs(r.identifier);if(!o)return!1;if(!us(o.propertyPath,e.propertyPath))return!0;let s=F(r.identifier);if(s!==i&&!Bs(s,i,e.environment.scopes))return!!as(r.identifier,o.propertyPath,e.propertyPath,e.environment.scopes);if(r.flag!==`read`)return!1;if(ls(o.propertyPath,e.propertyPath)){if(o.propertyPath.length>e.propertyPath.length){let t=o.expression.parent;return!!(o.propertyPath.length===e.propertyPath.length+1&&o.propertyPath[e.propertyPath.length]===`current`&&t&&y(t,`UnaryExpression`)&&t.operator===`void`&&t.argument===o.expression)}return Rs(o.expression,[],e.environment,t,n)}return Rs(o.expression,e.propertyPath.slice(o.propertyPath.length),e.environment,t,n)});return t.activePaths.delete(r),a},Hs=(e,t,n)=>{if(!t)return!1;let r=Xi(e);if(!r)return!1;let i={filename:t,program:r,scopes:n},a={activePaths:new Set,activeRenderedChildrenComponents:new WeakSet,environmentsByProgram:new WeakMap([[r,i]])},o=Ts(e,[],i);return o?Vs(o,a,12):Rs(e,[],i,a,12)},Us=e=>{let t=[];for(let n of e)for(let e of n.entries){if(e.importName.kind===`NamespaceObject`)continue;let r=e.importName.kind===`Default`?`default`:e.importName.name??null;r!==null&&t.push({source:n.moduleRequest.value,exportedName:r})}return t},Ws=({absoluteFilePath:e,staticImports:t})=>{let n=!1;for(let r of t){let t=r.moduleRequest.value;if(!t.startsWith(`.`))continue;let i=r.entries.filter(e=>!e.isType);if(i.length===0)continue;let a=pn(e,t);if(!(!a||!gr(a))){n||(n=!0,jt(e));for(let e of i){let t=e.importName.kind===`Default`?`default`:e.importName.name;t&&qi(a,t)}}}},Gs=({absoluteFilePath:e})=>{ze.test(e)&&(Ue.test(e)||Zn(e))},Ks=({absoluteFilePath:e,staticImports:t})=>{if(Be.test(e)&&!er(e))for(let n of Us(t))Pn(e,n.source,n.exportedName)},V=({absoluteFilePath:e,staticImports:t})=>{for(let n of Us(t))Pn(e,n.source,n.exportedName)},qs=({absoluteFilePath:e,staticImports:t})=>{for(let n of Us(t))O(e,n.source,n.exportedName)},Js=(e,t,n,r)=>{let i=n.get(t);if(!(i!==void 0&&i<=r)){n.set(t,r);for(let i of e.body??[]){let e=tr(i);if(!e)continue;let a=An(t,e);if(!a||r>=8)continue;let o=r+1,s=n.get(a);if(s!==void 0&&s<=o)continue;let c=Gt(a);if(!c){n.set(a,o);continue}Js(c,a,n,o)}}},Ys=e=>{qs(e);let t=e.getProgram(),n=!1;k(t,e=>{if(n)return!1;if(!y(e,`CallExpression`))return;let t=D(e.callee);if(!y(t,`MemberExpression`))return;let r=j(t);n=r===`add`||r===`set`}),n&&Js(t,e.absoluteFilePath,new Map,0)},Xs=({absoluteFilePath:e,staticImports:t})=>{for(let n of Us(t))Ji(e,n.source,n.exportedName)},Zs=e=>{let t=[];for(let n of e.body??[]){if(n.type!==`ImportDeclaration`)continue;let e=n.source?.value;if(typeof e==`string`){for(let r of n.specifiers??[])if(r.type===`ImportDefaultSpecifier`)t.push({source:e,exportedName:`default`});else if(r.type===`ImportSpecifier`){let n=r.imported,i=null;typeof n?.name==`string`?i=n.name:typeof n?.value==`string`&&(i=n.value),i&&t.push({source:e,exportedName:i})}}}return t},Qs=({absoluteFilePath:e,staticImports:t},n,r=()=>!0,i=()=>!0)=>{let a=new Map,o=(e,t,n)=>{if(!((a.get(e)??-1)>=n)){a.set(e,n);for(let a of Zs(t)){let t=O(e,a.source,a.exportedName);!t||n===0||!r(t)||!i(t.filePath)||o(t.filePath,t.programNode,n-1)}}};for(let a of Us(t)){let t=O(e,a.source,a.exportedName);!t||!r(t)||!i(t.filePath)||o(t.filePath,t.programNode,n)}},$s=e=>{Qs(e,4)},ec=({absoluteFilePath:e,sourceText:t,getProgram:n})=>{if(!t.includes(`createRef`)&&!t.includes(`\\u`))return;let r=n();Bt(r);let i=Ie(r);k(r,t=>{!y(t,`CallExpression`)||!Hi(t,`createRef`,i,{allowGlobalReactNamespace:!0,allowUnboundBareCalls:!0,resolveNamedAliases:!0})||Hs(t,e,i)})},tc=({absoluteFilePath:e,sourceText:t,staticImports:n,getProgram:r})=>{let i=new Set,a=new Set;for(let e of n)if(e.moduleRequest.value===`react`)for(let t of e.entries){let{importName:e}=t;e.kind===`Name`&&e.name===`useReducer`?i.add(t.localName.value):(e.kind===`Default`||e.kind===`NamespaceObject`)&&a.add(t.localName.value)}if(!(i.size>0||a.size>0&&(t.includes(`useReducer`)||t.includes(`\\u`))))return;let o=r(),s=e=>{if(e?.type!==`Identifier`)return null;let{name:t}=e;return typeof t==`string`?t:null},c=e=>{let t=s(e);if(t!==null)return i.has(t);if(e.type!==`MemberExpression`)return!1;let n=e,r=s(n.object);return r!==null&&a.has(r)&&s(n.property)===`useReducer`},l=new Set;if(k(o,e=>{if(e.type!==`CallExpression`)return;let t=e;if(!t.callee||!c(t.callee))return;let n=t.arguments?.[0];if(!n)return;let r=s(D(n));r!==null&&l.add(r)}),l.size!==0)for(let t of n)for(let n of t.entries){if(n.importName.kind===`NamespaceObject`||!l.has(n.localName.value))continue;let r=n.importName.kind===`Default`?`default`:n.importName.name;r&&Pn(e,t.moduleRequest.value,r)}},nc=({absoluteFilePath:e,staticImports:t,getProgram:n})=>{jt(e),Rn({absoluteFilePath:e,staticImports:t,program:n()})},H=({absoluteFilePath:e})=>{jt(e)},rc=e=>{H(e),Qs(e,1/0,e=>v(e.exportedNode),e=>!e.split(/[\\/]/).includes(`node_modules`))},ic=({absoluteFilePath:e})=>{kr(e)},ac=({absoluteFilePath:e})=>{Fr(e)},oc=e=>{ac(e),Rn({absoluteFilePath:e.absoluteFilePath,staticImports:e.staticImports,program:e.getProgram()})},sc=new Map([...g.map(e=>[e,ac]),[`ink-no-raw-text`,oc],[`client-passive-event-listeners`,V],[`effect-needs-cleanup`,V],[`exhaustive-deps`,$s],[`no-barrel-import`,Ws],[`nextjs-async-dynamic-api-not-awaited`,H],[`nextjs-missing-metadata`,Gs],[`nextjs-no-use-search-params-without-suspense`,Ks],[`no-dynamic-import-path`,H],[`no-full-lodash-import`,H],[`no-hydration-branch-on-browser-global`,H],[`no-indeterminate-attribute`,H],[`no-locale-format-in-render`,H],[`no-match-media-in-state-initializer`,H],[`no-create-ref-in-function-component`,ec],[`no-adjust-state-on-prop-change`,V],[`no-derived-state`,V],[`no-derived-state-effect`,V],[`no-event-handler`,V],[`no-initialize-state`,V],[`no-reset-all-state-on-prop-change`,V],[`no-mutating-reducer-state`,tc],[`no-side-effect-in-state-updater-function`,Ys],[`no-unguarded-browser-global-at-module-scope`,Xs],[`no-unguarded-browser-global-in-render-or-hook-init`,rc],[`prefer-dynamic-import`,H],[`rendering-hydration-mismatch-time`,H],[`rerender-memo-with-default-value`,$s],[`rn-no-legacy-shadow-styles`,ic],[`rn-no-raw-text`,nc],[`rn-prefer-expo-image`,H],[`rn-style-prefer-boxshadow`,ic],...ae.map(e=>[e,H])]),cc=new Set([`anchor-target-exists`,`nextjs-no-img-element`,`no-img-without-dimensions`,`no-loading-flag-reset-outside-finally`,`only-export-components`,`remotion-calculate-metadata-fetch-signal`,`remotion-deterministic-randomness`,`remotion-no-css-animation`,`remotion-no-css-transition`,`remotion-no-css-url-assets`,`remotion-no-native-media-elements`,`remotion-no-next-image`,`window-open-without-noopener`]),lc=t=>{let n=new Set;for(let e of t.ruleIds){let t=sc.get(e);if(!t)return null;n.add(t)}let r=Wi(t.absoluteFilePath),i,a;try{let n=e(r,t.sourceText,{astType:`ts`,lang:Ht(r)});if(n.errors.some(e=>e.severity===`Error`))return null;i=n.module.staticImports;let o;a=()=>(o??=n.program,o)}catch{return null}let o={absoluteFilePath:r,sourceText:t.sourceText,staticImports:i,getProgram:a};return ht(()=>{for(let e of n)e(o)})},uc={},dc=(e,t,n)=>!e||e.length===0?!1:e.every(e=>y(e,t)&&e[n]===`type`),fc=e=>e.importKind===`type`||dc(e.specifiers,`ImportSpecifier`,`importKind`),pc=new Set([`solid-js`,`solid-js/web`,`solid-js/store`,`solid-js/h`,`solid-js/html`,`@builder.io/qwik`,`@builder.io/qwik-city`,`@builder.io/qwik-react`,`voby`,`vidode`]),mc=[`solid-js`,`@builder.io/qwik`],hc=[`react`,`react-dom`,`preact`],gc=new WeakMap,_c=new WeakMap,vc=(e,t)=>t.some(t=>e===t||e.startsWith(`${t}/`)),yc=e=>{let t=gc.get(e);if(t)return t;let n=!1,r=!1;for(let t of e.body){if(!y(t,`ImportDeclaration`))continue;let e=t;if(fc(e))continue;let i=e.source,a=i&&typeof i.value==`string`?i.value:null;a&&((pc.has(a)||vc(a,mc))&&(n=!0),vc(a,hc)&&(r=!0))}let i={hasNonReactRuntime:n,hasReactRuntime:r};return gc.set(e,i),i},bc=e=>{let t=yc(e);return t.hasNonReactRuntime&&!t.hasReactRuntime},xc=e=>{let t=_c.get(e);if(t!==void 0)return t;let n=!1;for(let t of e.attributes){if(!y(t,`JSXAttribute`)||!y(t.name,`JSXIdentifier`))continue;let e=t.name.name;if(e===`classList`||e.startsWith(`class:`)||e.startsWith(`bind:`)){n=!0;break}}return _c.set(e,n),n},Sc=`/test/,/tests/,/testing/,/__tests__/,/__test__/,/__fixtures__/,/fixtures/,/__mocks__/,/mocks/,/testUtils/,/test-utils/,/testutils/,/cypress/,/playwright/,/.storybook/,/.dumi/,/stories/,/__stories__/,/playground/,/playgrounds/,/examples/,/example/,/demo/,/demos/,/sandbox/,/sandboxes/,/e2e/,/e2e-tests/,/specs/,/spec/,/integration-tests/,/integration/,/it/,/benchmarks/,/benchmark/,/__benchmarks__/,/perf/,/perf-tests/,/scripts/,/cli/,/bin/,/tooling/,/tools/,/codemods/,/codemod/,/migrations/,/migration/,/generators/,/generator/,/runbooks/,/devtools/,/internal-tools/,/seeds/,/seed/,/dev-seeder/`.split(`,`),Cc=[`.test.`,`.spec.`,`.cy.`,`.stories.`,`.story.`,`.bench.`,`.benchmark.`,`.e2e.`,`.integration-spec.`,`.int-spec.`,`.mock.`,`.mocks.`,`.fixture.`],wc=new Set(`setuptests.js,setuptests.ts,setuptests.jsx,setuptests.tsx,setupvitest.js,setupvitest.ts,setupvitest.jsx,setupvitest.tsx,setupjest.js,setupjest.ts,vitest.setup.js,vitest.setup.ts,vitest.setup.mjs,vitest.config.ts,vitest.config.js,vitest.config.mts,vitest.config.mjs,jest.setup.js,jest.setup.ts,jest.setup.jsx,jest.setup.tsx,jest.config.js,jest.config.ts,jest.config.mjs,playwright.config.ts,playwright.config.js,cypress.config.ts,cypress.config.js,karma.conf.js,karma.conf.ts,vite.config.ts,vite.config.js,vite.config.mts,vite.config.mjs,webpack.config.ts,webpack.config.js,webpack.config.mjs,rollup.config.ts,rollup.config.js,rollup.config.mjs,esbuild.config.ts,esbuild.config.js,esbuild.config.mjs,tsup.config.ts,tsup.config.js,tsup.config.mjs,rsbuild.config.ts,rsbuild.config.js,rspack.config.ts,rspack.config.js,next.config.ts,next.config.js,next.config.mjs,remix.config.js,remix.config.ts,astro.config.ts,astro.config.js,astro.config.mjs,tailwind.config.ts,tailwind.config.js,tailwind.config.mjs,postcss.config.ts,postcss.config.js,postcss.config.mjs,biome.config.ts,biome.config.js,drizzle.config.ts,drizzle.config.js,prisma.config.ts,prisma.config.js,knip.config.ts,knip.config.js,knip.config.mjs,lint-staged.config.js,lint-staged.config.mjs`.split(`,`)),Tc=[`/src/`,`/app/`,`/lib/`,`/components/`,`/pages/`,`/features/`,`/modules/`,`/packages/`,`/apps/`,`/frontend/`,`/client/`],Ec=Sc.filter(e=>e.startsWith(`/.`)),Dc=e=>{let t=-1;for(let n of Tc){let r=e.lastIndexOf(n);r>t&&(t=r)}return t<0?e:e.slice(t)};let Oc,kc=!1;const Ac=e=>e?e===Oc?kc:(Oc=e,kc=Mc(e),kc):!1,jc=(e,t)=>e?Mc(e,t):!1,Mc=(e,t=new Set)=>{let n=e.replaceAll(`\\`,`/`),r=n.lastIndexOf(`/`),i=r===-1?n:n.slice(r+1);if(wc.has(i.toLowerCase()))return!0;for(let e of Cc)if(i.includes(e))return!0;let a=n.startsWith(`/`)?n:`/${n}`;for(let e of Ec)if(!t.has(e)&&a.includes(e))return!0;let o=Dc(n);for(let e of Sc)if(!t.has(e)&&(e.startsWith(`/.`)?n:o).includes(e))return!0;return!1},Nc=e=>t=>Ac(t.filename)?uc:e(t),Pc=e=>(t=>{let n=e(t),r=!1,i=!1,a={};for(let e in n){if(!Object.hasOwn(n,e))continue;let t=n[e];if(typeof t!=`function`){a[e]=t;continue}let o=e.charAt(0);if(o<`A`||o>`Z`){a[e]=t;continue}if(e===`Program`){a.Program=e=>{let n=yc(e);i=n.hasReactRuntime,r=n.hasNonReactRuntime&&!n.hasReactRuntime,t(e)};continue}if(e===`JSXOpeningElement`){a.JSXOpeningElement=e=>{!i&&!r&&xc(e)&&(r=!0),!r&&t(e)};continue}a[e]=(...e)=>{r||t(...e)}}return`Program`in a||(a.Program=e=>{let t=yc(e);i=t.hasReactRuntime,r=t.hasNonReactRuntime&&!t.hasReactRuntime}),a}),U=e=>{if(!(`create`in e))return{...e,create:()=>uc};let t=e.tags,n=e.create,r=t?.includes(`test-noise`)&&!t?.includes(`migration-hint`);return t?.includes(`react-jsx-only`)&&(n=Pc(n)),r&&(n=Nc(n)),n===e.create?e:{...e,create:n}};let Fc;const Ic=e=>{let t=[0];for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`\r`&&e[n+1]===`
|
|
3
|
+
`){n+=1,t.push(n+1);continue}(r===`\r`||r===`
|
|
4
|
+
`||r===`\u2028`||r===`\u2029`)&&t.push(n+1)}return t},Lc=e=>{if(Fc?.content===e)return Fc.lineStartOffsets;let t=Ic(e);return Fc={content:e,lineStartOffsets:t},t},W=(e,t)=>{if(Number.isNaN(t)||t<0)return{line:1,column:1};let n=Lc(e),r=Math.min(Math.trunc(t),e.length),i=0,a=n.length-1;for(;i<a;){let e=i+a+1>>1;n[e]<=r?i=e:a=e-1}return{line:i+1,column:r-n[i]+1}},Rc=(e,t)=>W(e,e.search(t)),zc=/\.(?:[cm]?[jt]sx?|json|jsonc|map|html?|mdx?|ya?ml|toml|sql|rules|env|txt|log|svg|xml|pem|key|crt|cert|pub|py|php)$/i,Bc=/(?:^|\/)\.env(?:\.|$)/,Vc=/\.(?:[cm]?[jt]sx?)$/i,Hc=/\.(?:[cm]?[jt]sx?|py|php)$/i,Uc=/\.(?:[cm]?[jt]sx?|py)$/i,Wc=/(?:^|\/)(?:api|backend|server|servers|middleware|route|routes|functions|lambdas|workers)(?:\/|$)|(?:^|\/)[^/]+\.server\.[cm]?[jt]sx?$/i,Gc=/(?:^|\/)(?:__fixtures__|__mocks__|__tests__|__integration__|fixtures|mocks|test|tests|testdata|test-data|e2e|playwright|cypress|specs?)(?:\/|$)|^(?:test|spec)-[^/]+\.[cm]?[jt]sx?$|\.(?:test|spec|e2e|e2e-spec|integration-test|fixture|fixtures|stories|story)\.[cm]?[jt]sx?$|(?:^|\/)(?:playwright|cypress|vitest|jest|karma)[^/]*\.conf(?:ig)?\.[cm]?[jt]s$|(?:^|\/)(?:test_[^/]+|[^/]+_test|conftest)\.py$|\.env\.[^/]*(?:test|e2e)[^/]*$/i,Kc=/(?:^|\/)(?:vite|next|nuxt|astro|remix|webpack|rollup|rspack|rsbuild|esbuild|tsup|metro|expo|babel|tailwind|postcss|svelte|farm|parcel|snowpack)[^/]*\.config\.[cm]?[jt]sx?$/i,qc=/(?:^|\/)scripts(?:\/|$)/i,Jc=/(?:^|\/)(?:examples?|tutorials?|demos?|samples?|playgrounds?)(?:\/|$)/i,Yc=/(?:^|\/)(?:README|CHANGELOG|CONTRIBUTING|PUBLISHING|DOCS)\.mdx?$|\.mdx?$/i,Xc=/(?:^|\/)(?:generated|__generated__|dist|build|coverage|out|storybook-static|vendor|vendors|third[-_]?party|libraries)(?:\/|$)|(?:^|\/)\.next\/|(?:^|\/)\.yarn\/|(?:^|\/)public\/(?:chunks?|assets?|build|dist|static)\/|(?:generated|\.gen)\.[cm]?[jt]sx?$|@\d+\.\d+\.\d+(?:[-.][\w.]+)?\.[cm]?js$|[.-]min\.[cm]?js$|\.asm\.js$|(?:^|\/)[\w-]+[.@-]\d+\.\d+\.\d+(?:[-.][\w.]+)?\//i,Zc=/\.(iife|umd|global|min)\.js$/i,Qc=[/(?:^|\/)\.next\/static\//,/(?:^|\/)\.output\/public\//,/(?:^|\/)build\/static\//,/(?:^|\/)dist\/assets\//,/(?:^|\/)public\//,/(?:^|\/)out\//,/(?:^|\/)storybook-static\//],$c=/\b(?:exec|execSync|spawn|child_process|eval|new Function|vm\.run|readFile|writeFile|fs\.read|fs\.write|fetch|axios|http\.request|sandbox|runCode|executeCode)\b/,el=new Set([`.next`,`.output`]),tl=e=>{let t=e.split(`/`);for(let e=0;e<t.length;e+=1)if(el.has(t[e])&&(t[e]===`.next`&&t[e+1]===`dev`||t[e+1]===`server`&&e+2<t.length))return!0;return!1},nl=(e,t)=>tl(e)?!1:t||e.endsWith(`.map`)?!0:Qc.some(t=>t.test(e)),rl=e=>/(?:^|\/)(?:package\.json|Dockerfile|docker-compose\.ya?ml|\.github\/workflows\/[^/]+\.ya?ml|vercel\.json|next\.config\.[cm]?[jt]s|netlify\.toml)$/i.test(e),il=new Map,al=(e,t)=>{let n=il.get(t);n||(n=new Map,il.set(t,n));let r=n.get(e);if(r!==void 0)return r;let i=t.test(e)&&!Gc.test(e)&&!qc.test(e)&&!Yc.test(e)&&!Xc.test(e);return n.set(e,i),i},G=e=>/\.d\.[cm]?[jt]s$/i.test(e)?!1:al(e,Vc),ol=/<script\b|on(?:load|error|click|mouseover)\s*=/i,sl=/dangerouslyAllowSVG\s*:\s*true/i,cl=/<(?:object|embed|iframe)\b[^>]+(?:data|src)=["'][^"']+\.svg(?:\?[^"']*)?["']/i,ll=U({id:`active-static-asset`,title:`Executable SVG exposure`,severity:`warn`,recommendation:"Prefer `<img>` for SVG images; if SVG must be served directly, use attachment disposition and a CSP that blocks scripts and objects.",scan:e=>{let t=[];if(e.relativePath.endsWith(`.svg`)&&nl(e.relativePath,e.isGeneratedBundle)){if(ol.test(e.content)){let n=Rc(e.content,ol);t.push({message:`A browser-reachable SVG contains script or event-handler code.`,line:n.line,column:n.column,severity:`error`,title:`Active SVG in public assets`,help:`Serve untrusted SVG as downloads, sanitize it, or isolate it on a cookieless asset origin with a restrictive CSP.`})}return t}if(!G(e.relativePath)&&!rl(e.relativePath))return t;let n=[sl,cl].find(t=>t.test(e.content));if(n!==void 0){let r=Rc(e.content,n);t.push({message:`The app enables or embeds SVG in an executable browser context.`,line:r.line,column:r.column})}return t}}),ul=e=>/(?:^|\/)(?:firestore\.rules|storage\.rules|database\.rules\.json)$/.test(e),dl=/\s/,fl=/[\p{ID_Continue}$]/u,pl=new Set([`return`,`typeof`,`case`,`in`,`of`,`new`,`delete`,`void`,`instanceof`,`do`,`else`,`yield`,`await`,`throw`]),ml=(e,t,n)=>{let r=n-1;for(;r>=0&&dl.test(t[r]);)--r;if(r<0)return!0;let i=t[r],a=r>0?t[r-1]:``;if(fl.test(i)){let n=r;for(;n>0&&fl.test(t[n-1]);)--n;return n>0&&t[n-1]===`.`?!1:pl.has(e.slice(n,r+1))}return i===`<`?!1:i===`>`?a===`=`:i===`+`||i===`-`?a!==i:i===`!`?!(fl.test(a)||a===`)`||a===`]`):!(i===`)`||i===`]`||i===`}`||i===`"`||i===`'`||i==="`")},hl=(e,t)=>{let n=t+1,r=!1;for(;n<e.length;){let t=e[n];if(t===`\\`){n+=2;continue}if(t===`
|
|
5
|
+
`)return null;if(t===`[`)r=!0;else if(t===`]`)r=!1;else if(t===`/`&&!r)return e[n+1]===`/`?null:n+1;n+=1}return null},gl=(e,t,n)=>{for(let r=t+1;r<e.length;r+=1){let t=e[r];if(t===`\\`){r+=1;continue}if(t===n)return!1;if(dl.test(t))return!0}return!1},_l=(e,t)=>{let n=null,r=null,i=!1,a=[],o=0,s=t=>{t>=e.length||e[t]===`
|
|
6
|
+
`||(n??=e.split(``),n[t]=` `)};for(;o<e.length;){let c=e[o],l=e[o+1];if(r!==null){if(c===`\\`){i&&(s(o),s(o+1)),o+=2;continue}if(c===`
|
|
7
|
+
`&&r!=="`"){r=null,o+=1;continue}if(c===r){r=null,o+=1;continue}if(t&&r==="`"&&c===`$`&&l===`{`){a.push(0),r=null,o+=2;continue}i&&s(o),o+=1;continue}if(c===`"`||c===`'`){r=c,i=t&&gl(e,o,c),o+=1;continue}if(c==="`"){r="`",i=t,o+=1;continue}if(c===`/`&&l===`/`){for(n??=e.split(``);o<e.length&&e[o]!==`
|
|
8
|
+
`;)n[o]=` `,o+=1;continue}if(c===`/`&&l===`*`){for(n??=e.split(``);o<e.length;){if(e[o]===`*`&&e[o+1]===`/`){n[o]=` `,n[o+1]=` `,o+=2;break}s(o),o+=1}continue}if(c===`/`){let r=ml(e,n??e,o)?hl(e,o):null;if(r!==null){if(t)for(let e=o+1;e<r-1;e+=1)s(e);o=r;continue}}if(a.length>0){let e=a.length-1;c===`{`?a[e]+=1:c===`}`&&(a[e]===0?(a.pop(),r="`",i=t):--a[e])}o+=1}return n?.join(``)??e},vl=e=>e.includes(`//`)||e.includes(`/*`)?_l(e,!1):e,yl=e=>_l(e,!0),bl=new WeakMap,xl=new WeakMap,Sl=(e,t=!1)=>{if(!Vc.test(e.relativePath)&&!ul(e.relativePath))return e.content;let n=t?xl:bl,r=n.get(e);if(r!==void 0)return r;let i=t?yl(e.content):vl(e.content);return n.set(e,i),i},K=({shouldScan:e,pattern:t,requireAll:n,suppressWhen:r,ignoreStringLiterals:i,message:a})=>o=>{if(!e(o))return[];let s=Sl(o,i);if(n!==void 0&&!n.every(e=>e.test(s)))return[];let c=-1;if(t instanceof RegExp)c=s.search(t);else for(let e=0;e<t.length&&(c=s.search(t[e]),!(c>=0));e+=1);if(c<0||r!==void 0&&r.test(s))return[];let{line:l,column:u}=W(s,c);return[{message:a,line:l,column:u}]},Cl=/\b(?:tool\s*\(\s*\{|createTool\s*\(|defineTool\s*\(|new\s+(?:DynamicTool|StructuredTool)\s*\()/,wl=/\b(?:tool|createTool|defineTool|DynamicTool|StructuredTool)\b/,Tl=/(?:^|\/)(?:agents?|tools?|mcp)(?:\/|$)|(?:agent|tool|mcp)[^/]*\.[cm]?[jt]sx?$/i,El=U({id:`agent-tool-capability-risk`,title:`Agent tool exposes dangerous capability`,severity:`warn`,recommendation:`Treat tool inputs as prompt-injection controlled. Validate arguments, scope permissions per call, and avoid exposing shell/file/network primitives directly to agents.`,scan:K({shouldScan:e=>G(e.relativePath)&&Tl.test(e.relativePath)&&wl.test(e.content)&&$c.test(e.content),pattern:Cl,requireAll:[$c],ignoreStringLiterals:!0,message:`An agent-callable tool appears to expose network, filesystem, shell, or code-execution capability.`})}),Dl=U({id:`artifact-baas-authority-surface`,title:`BaaS authority map shipped in browser artifact`,severity:`warn`,recommendation:`Client BaaS config is often public, but shipped collection names plus owner, role, tenant, or admin fields give attackers a precise authorization map. Verify rules/RLS enforce every boundary server-side.`,scan:K({shouldScan:e=>nl(e.relativePath,e.isGeneratedBundle),pattern:/\b(?:collection\s*\(\s*["'](?:boosts|sessions|sessions_admin|users|orgs|candidateJobs|conversations|documents|profiles)|from\s*\(\s*["'](?:users|profiles|documents|organizations|memberships)|creatorID|creatorId|providerId|ghostOrg|ownerId|orgId|tenantId|workspaceId|isAdmin|SuperAdmin)\b/i,requireAll:[/\b(?:initializeApp|firebase|firestore|getFirestore)\b[\s\S]{0,700}\b(?:apiKey|authDomain|projectId|databaseURL|storageBucket)\b|\b(?:apiKey|authDomain|projectId|databaseURL|storageBucket)\b[\s\S]{0,700}\b(?:firebase|firestore|getFirestore|initializeApp)\b|\bcreateClient\b[\s\S]{0,700}\b(?:supabase|SUPABASE_URL)\b|\b(?:supabase|SUPABASE_URL)\b[\s\S]{0,700}\bcreateClient\b/i],message:`A browser artifact exposes Firebase/Supabase config together with sensitive collections or authorization fields.`})}),Ol=new Set([`auth`,`getSession`,`getServerSession`,`getUser`,`requireAuth`,`checkAuth`,`verifyAuth`,`authenticate`,`currentUser`,`getAuth`,`validateSession`]),kl=/^auth(?:n|z|ed|enticate[ds]?|enticating|entication|orize[ds]?|orizing|orization|orizer)?$/,Al=new Set([`signedin`,`loggedin`,`signin`]),jl=new Set([`require`,`ensure`,`assert`,`verify`,`validate`,`check`,`protect`,`enforce`,`guard`,`gate`,`restrict`,`is`,`has`,`can`,`must`]),Ml=new Set([`get`,`fetch`,`load`,`read`,`resolve`,`retrieve`,`use`]),Nl=new Set([`current`,`my`,`own`]),Pl=new Set([`session`,`sessions`,`login`,`admin`,`admins`,`superadmin`,`superuser`,`role`,`roles`,`permission`,`permissions`,`jwt`,`identity`,`principal`,`credential`,`credentials`]),Fl=new Set([`user`,`users`,`account`,`accounts`,`token`,`tokens`,`access`,`me`,`viewer`,`caller`,`subject`,`scope`,`scopes`]),Il=new Set([`getUser`]),Ll=/(?:^|[._])(?:auth|authn|authz|clerk|session|jwt|firebase|supabase|nextauth|kinde|workos|stytch|descope|cognito|propelauth|lucia)/i,Rl=[/^sk_live_/,/^sk_test_/,/^AKIA[0-9A-Z]{16}$/,/^ghp_[a-zA-Z0-9]{36}$/,/^gho_[a-zA-Z0-9]{36}$/,/^github_pat_/,/^glpat-/,/^xox[bporas]-/,/^sk-[a-zA-Z0-9]{32,}$/],zl=[/\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/,/\bAWS_SECRET_ACCESS_KEY\s*[:=]\s*["']?[A-Za-z0-9/+=]{35,}["']?/,/\bgithub_pat_[A-Za-z0-9_]{30,}\b/,/\bgh[pousr]_[A-Za-z0-9]{30,}\b/,/\bglpat-[A-Za-z0-9_-]{20,}\b/,/\bxox[baprs]-[A-Za-z0-9-]{20,}\b/,/\bsk_(?:live|test)_[A-Za-z0-9]{16,}\b/,/\brk_(?:live|test)_[A-Za-z0-9]{16,}\b/,/\bsk-[A-Za-z0-9_-]{32,}\b/,/\bsk-ant-api\d{2}-[A-Za-z0-9_-]{20,}\b/,/\blin_(?:api|oauth)_[A-Za-z0-9]{20,}\b/,/\bvercel_[A-Za-z0-9]{20,}\b/,/\bsntrys_[A-Za-z0-9_-]{20,}\b/,/\bkey-[a-f0-9]{32}\b/i,/\bnpm_[A-Za-z0-9]{30,}\b/,/\bSG\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}\b/,/https:\/\/hooks\.slack\.com\/services\/T[A-Z0-9]+\/B[A-Z0-9]+\/[A-Za-z0-9]+/,/https:\/\/discord(?:app)?\.com\/api\/webhooks\/\d+\/[A-Za-z0-9_-]+/,/\bsb_secret_[A-Za-z0-9_]{20,}\b/,/\bservice_role\b/i,/"private_key"\s*:\s*"-----BEGIN PRIVATE KEY-----/,/-----BEGIN (?:RSA |EC |OPENSSH |DSA )?PRIVATE KEY-----/,/\b(?:postgres|mysql|mongodb(?:\+srv)?|redis):\/\/[^:\s/@]+:(?!(?:pass(?:word)?|my[a-z]*pass(?:word)?|mysecretpassword|myusername|postgres|mysql|redis|root|admin|minioadmin|secret|example|changeme|change_me|test|guest|placeholder|default|user(?:name)?|x{3,}|\*{2,}|\$\{[^}]*\}|\$[A-Z_]+|<[^>]*>|%[\w.]+%|\{\{[^}]*\}\})@)[^@\s/]+@(?!(?:localhost|127\.0\.0\.1|0\.0\.0\.0|host\.docker\.internal)(?:[:/\s]|$))[^\s:/@]*\./i],Bl=/\beyJ[A-Za-z0-9_-]{8,}\.eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{16,}\b/,Vl=/\b(?:NEXT_PUBLIC|VITE|REACT_APP|EXPO_PUBLIC)_[A-Z0-9_]*(?:SECRET|TOKEN|PASSWORD|PRIVATE|DATABASE_URL|SERVICE_ROLE|AWS_ACCESS_KEY|AWS_SECRET)[A-Z0-9_]*\b/i,Hl=/\b(?:process\s*\.\s*env|import\s*\.\s*meta\s*\.\s*env|window\.__[A-Z0-9_]*ENV[A-Z0-9_]*__|__[A-Z0-9_]*ENV[A-Z0-9_]*__)\b/,Ul=/\b(?:(?:process|window)\s*(?:\/[*/]|<!--|-->|\.\s*(?:\/[*/]|<!--|-->))|import\s*(?:\/[*/]|<!--|-->|\.\s*(?:\/[*/]|<!--|-->|meta\s*(?:\/[*/]|<!--|-->|\.\s*(?:\/[*/]|<!--|-->)))))/,Wl=/\b(?:DATABASE_URL|AWS_SECRET_ACCESS_KEY|AWS_ACCESS_KEY_ID|MAILGUN_API_KEY|SALESFORCE_CLIENT_SECRET|OKTA_CLIENT_SECRET|SESSION_SECRET|COOKIE_SECRET|PRIVATE_KEY|SERVICE_ROLE)\b/,Gl=/(?:SENTRY_DSN|PUBLIC_KEY|PUBLISHABLE|ANON_KEY|POSTHOG_(?:PROJECT_)?TOKEN|POSTHOG_KEY|TLDRAW_LICENSE_KEY|CLERK_PUBLISHABLE_KEY|ALGOLIA_SEARCH_KEY|GC_API_KEY|GOOGLE_MAPS_API_KEY|MAPBOX_TOKEN|MIXPANEL_TOKEN|FACEBOOK_CLIENT_TOKEN|(?:NEXT_PUBLIC|VITE|REACT_APP|EXPO_PUBLIC)_(?:DISABLE|ENABLE|ALLOW|REQUIRE)_)|(?:TOKEN|SECRET|PASSWORD|PRIVATE)_(?:KIND|TYPE|URL|URI|ENDPOINT|HEADER|NAME)$/i,Kl=[/^appl_/,/^goog_/,/^amzn_/,/^strp_/,/^pk_(?:live|test)_/,/^sb_publishable_/,/^phc_/,/^public-token-(?:live|test)-/,/^pk\.eyJ/],ql=[/^[\s._\-*\u2022xX]{8,}$/,/(?:\.{3,}|\u2026|[*\u2022]{3,})/,/(?:^|[_\-\s])(?:your|redacted|masked|placeholder|replace[_\-\s]?me|changeme)(?:$|[_\-\s])/i,/<[^>]*(?:auth|credential|key|password|secret|token|your|redacted|placeholder|masked)[^>]*>/i,/\[[^\]]*(?:auth|credential|key|password|secret|token|your|redacted|placeholder|masked)[^\]]*\]/i,/\{[^}]*(?:auth|credential|key|password|secret|token|your|redacted|placeholder|masked)[^}]*\}/i],Jl=[/(?:^|[_\-\s])(?:example|sample|dummy)(?:$|[_\-\s])/i],Yl=/(?:placeholder|example|sample|dummy|masked|redacted|mask)/i,Xl=/(?:api_?key|secret|token|password|credential|auth(?!or(?!i[sz])))/i,Zl=/(?:^|\/)[^/]+\.config\.[cm]?[jt]s$/,Ql=/(?:^|\/)(?:\.[a-z-]+rc|[a-z-]+\.rc)\.[cm]?[jt]s$/,$l=/(?:^|\/)[^/]+\.(?:test|spec|stories|story|fixture|fixtures)\.[cm]?[jt]sx?$/,eu=/(?:^|\/)[^/]+\.server\.[cm]?[jt]sx?$/,tu=/(?:^|\/)(?:middleware|proxy|route)\.[cm]?[jt]sx?$/,nu=/(?:^|\/)pages\/api\/.+\.[cm]?[jt]sx?$/,ru=/(?:^|\/)[^/]+\.(?:client|browser|web)\.[cm]?[jt]sx?$/,iu=/(?:^|\/)(?:src\/)?(?:main|index|[Aa]pp|client)\.[cm]?[jt]sx?$/,au=new Set([`backend`,`functions`,`lambdas`,`lambda`,`middleware`,`server`,`servers`]),ou=new Set([`api`,`backend`,`edge`,`function`,`functions`,`lambda`,`lambdas`,`server`,`servers`,`worker`,`workers`]),su=new Set([`__fixtures__`,`__mocks__`,`__tests__`,`fixtures`,`mocks`,`test`,`tests`]),cu=new Set([`bin`,`config`,`configs`,`script`,`scripts`,`tooling`,`tools`]),lu=new Set([`components`,`features`,`hooks`,`pages`,`ui`,`views`,`widgets`]),uu=new Set(`alert.modal.label.text.title.name.id.url.path.route.page.param.field.column.header.placeholder.prefix.description.type.icon.class.style.variant.event.action.status.state.mode.flag.option.config.message.error.display.view.component.element.container.wrapper.button.link.input.select.dialog.menu.form.step.index.count.length.role.scope.context.provider.ref.handler.query.schema.constant`.split(`.`)),du=new Set([`start`,`end`]),q=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),fu=new RegExp(Vl.source,`gi`),pu=e=>{for(let t of e.matchAll(fu)){let e=t[0]??``;if(!Gl.test(e))return new RegExp(q(e))}},mu=e=>Hl.test(e)&&Wl.test(e),hu=/\.(?:[cm]?[jt]sx?)$/i,gu=/\/\/|\/\*|<!--/,_u=new Set([`\r`,`
|
|
9
|
+
`,`\u2028`,`\u2029`]),vu=e=>{let t=0;for(;t<e.length;){let n=e.indexOf(`-->`,t);if(n===-1)return!1;let r=n-1;for(;r>=0&&!_u.has(e[r]??``)&&e[r]?.trim()===``;)--r;if(r<0||_u.has(e[r]??``))return!0;t=n+3}return!1},yu=(t,n)=>{if(!hu.test(t)||!n.startsWith(`#!`)&&!gu.test(n)&&!vu(n))return n;try{let r=e(t,n,{astType:`ts`,lang:Ht(t)});if(r.errors.some(e=>e.severity===`Error`))return;let i=n.search(/[\r\n\u2028\u2029]/),a=[...n.startsWith(`#!`)?[{start:0,end:i===-1?n.length:i}]:[],...r.comments];if(a.length===0)return n;let o=[],s=0;for(let e of a)o.push(n.slice(s,e.start)),o.push(n.slice(e.start,e.end).replace(/[^\r\n\u2028\u2029]/g,` `)),s=e.end;return o.push(n.slice(s)),o.join(``)}catch{return}},bu=(e,t,n)=>{if(Yc.test(e.relativePath)||!nl(e.relativePath,e.isGeneratedBundle))return[];let r=t(e.content);if(r===void 0)return[];let i=Rc(e.content,r);return[{message:n,line:i.line,column:i.column}]},xu=`A browser artifact contains server-secret environment names or a full environment dump shape.`,Su=e=>pu(e)??(mu(e)?Wl:void 0),Cu=U({id:`artifact-env-leak`,title:`Server env leaked to browser artifact`,severity:`error`,recommendation:`Treat public env prefixes as publication, not secrecy; keep secret env vars server-only and rebuild after rotating leaked keys.`,scan:e=>{let t=!1,n=bu(e,e=>{let n=pu(e);if(n)return t=!0,n;if(Wl.test(e))return Hl.test(e)?(t=!0,Wl):Ul.test(e)?Wl:void 0},xu);if(n.length===0)return n;let r=t?n:bu(e,Su,xu),i=yu(e.relativePath,e.content);return i===void 0?n:i===e.content?r:bu({...e,content:i},Su,xu)}}),wu=U({id:`artifact-secret-leak`,title:`Secret shipped in browser artifact`,severity:`error`,recommendation:`Remove the secret from client bundles/static assets, rotate it, and route privileged service calls through server-only code.`,scan:e=>bu(e,e=>zl.find(t=>t.test(e)),`A browser-delivered artifact contains a secret-looking credential value.`)}),Tu=/(?:npm|pnpm|yarn|bun)\s+(?:install|ci)\b(?:(?!--ignore-scripts)[\s\S]){0,700}\bsecrets\.[A-Z0-9_]+|\bsecrets\.[A-Z0-9_]+(?:(?!--ignore-scripts)[\s\S]){0,700}(?:npm|pnpm|yarn|bun)\s+(?:install|ci)\b/i,Eu=/(?:npm|pnpm|yarn|bun)\s+(?:install|ci)\b/i,Du=/\bsecrets\.[A-Z0-9_]+/,Ou=/--ignore-scripts\b/,ku=`The build or install pipeline can execute package lifecycle code while CI secrets may be present.`,Au=e=>/(?:^|\/)\.github\/workflows\/[^/]+\.ya?ml$/i.test(e),ju=e=>{let t=e.split(`
|
|
10
|
+
`),n=[],r=[],i,a,o;for(let e=0;e<t.length;e+=1){let s=t[e],c=s.trim();if(c===``||c.startsWith(`#`))continue;let l=s.length-s.trimStart().length;if(i!==void 0&&l<=i&&(i=void 0,a=void 0,o=void 0),i===void 0){/^steps:\s*(?:#.*)?$/.test(c)?i=l:n.push(s);continue}if((c===`-`||c.startsWith(`- `))&&(a===void 0||l===a)){a=l,o={startLineIndex:e,lines:[s]},r.push(o);continue}o===void 0?n.push(s):o.lines.push(s)}let s=Du.test(n.join(`
|
|
11
|
+
`));for(let e of r){let t=e.lines.join(`
|
|
12
|
+
`);if(!Eu.test(t)||Ou.test(t)||!s&&!Du.test(t))continue;let n=Math.max(e.lines.findIndex(e=>Eu.test(e)),0),r=e.lines[n].search(Eu);return[{message:ku,line:e.startLineIndex+n+1,column:(r===-1?0:r)+1}]}return[]},Mu=K({shouldScan:e=>rl(e.relativePath)&&!e.relativePath.endsWith(`package.json`)&&!Au(e.relativePath),pattern:Tu,message:ku}),Nu=U({id:`build-pipeline-secret-boundary`,title:`Build pipeline runs code near secrets`,severity:`warn`,recommendation:`Run dependency installs with scripts disabled before exposing secrets, isolate untrusted build code, and move signing/deploy authority into a narrow privileged step.`,scan:e=>Au(e.relativePath)?ju(e.content):Mu(e)}),Pu=U({id:`clickjacking-redirect-risk`,title:`Redirect or frame boundary risk`,severity:`warn`,recommendation:"Allowlist redirect origins/paths, set `frame-ancestors` for privileged pages, and avoid URL-prefilled privileged dialogs.",scan:K({shouldScan:e=>G(e.relativePath)||rl(e.relativePath),pattern:/\bredirect\s*\((?!\s*(?:await\s+)?[\w$]*(?:safe|valid|sanitiz|allowlist|whitelist)[\w$]*\s*\()[^)'"`\n]*\b(?:searchParams\.get|nextUrl\.searchParams|returnTo|callbackUrl|continue|next)\b|<iframe\b[\s\S]{0,700}(?:\b(?:next=|continue=|redirect=|redirect_uri|userstoinvite|sharingaction|\.\.)|[?&](?:amp;)?role=)|frame-ancestors\s+(?:\*|'self'\s+\*)|X-Frame-Options["']?\s*:\s*["']?ALLOW/i,message:`Redirect or framing configuration may let attacker-controlled URLs chain into privileged UI or clickjacking.`})}),Fu=e=>/(?:^|\/)(?:tools?|scripts?)\/|(?:^|\/)management\/commands\/|(?:^|\/)(?:build|make|gulpfile|gruntfile)\.[cm]?[jt]s$/i.test(e),Iu=e=>al(e,Hc),Lu=String.raw`(?:req\.|request\.|params\.|query\.|body\.|searchParams|\$_(?:GET|POST|REQUEST))`,Ru=String.raw`(?:(?<![.\w$])(?:exec(?:Sync)?|system|passthru|proc_open|shell_exec)|\b(?:os\.system|subprocess\.(?:run|Popen|call)|(?:child_process|childProcess|cp)\.exec\w*))`,zu=String.raw`(?:(?<![.\w$])spawn(?:Sync)?|\b(?:child_process|childProcess|cp)\.spawn\w*)`,Bu=String.raw`['"](?:sh|bash|zsh|dash|ksh|cmd(?:\.exe)?|powershell(?:\.exe)?|pwsh)['"]`,Vu=String.raw`['"](?:-c|/c|-Command)['"]`,Hu=U({id:`command-execution-input-risk`,title:`Command execution uses caller-shaped input`,severity:`error`,recommendation:`Avoid shell execution for caller-controlled values. Use fixed commands, argument arrays, strict allowlists, and no shell interpolation.`,scan:K({shouldScan:e=>Iu(e.relativePath)&&!Fu(e.relativePath),pattern:[new RegExp(String.raw`${Ru}\s*\([^)]{0,220}(?:${Lu}|shell\s*=\s*true|f['"\`][^'"\`]*\{)`,`i`),new RegExp(String.raw`${zu}\s*\((?:[^,)]{0,120}?${Lu}|\s*${Bu}\s*,\s*\[\s*${Vu}\s*,[^\]]{0,220}${Lu}|(?=[^)]{0,220}shell\s*[:=]\s*true)[^)]{0,220}${Lu})`,`i`)],message:`Command execution appears to include request, query, body, or shell-interpolated input.`})}),Uu=U({id:`cors-cookie-trust-risk`,title:`Broad cookie or credentialed CORS trust`,severity:`warn`,recommendation:`Keep auth cookies host-only and HttpOnly, avoid credentialed CORS for less-trusted docs/vendor origins, and isolate documentation domains from app sessions.`,scan:K({shouldScan:e=>G(e.relativePath)||rl(e.relativePath),pattern:/Access-Control-Allow-Credentials["']?\s*[:,]\s*["']?true[\s\S]{0,700}Access-Control-Allow-Origin["']?\s*[:,]\s*["']?(?:\*|https:\/\/docs\.|https:\/\/.*mintlify)|\b(?:session|auth|token|jwt)[^=\n]{0,80}(?:=[^;\n]{0,120};[^=\n]{0,80})?\bDomain=\./i,message:`Credentialed CORS or broad auth-cookie scope can make a docs/custom-domain XSS become account compromise.`})}),Wu=(e,t)=>{let n=e[t],r=n===`(`?`)`:n===`{`?`}`:n===`[`?`]`:``;if(r===``)return-1;let i=0,a=null;for(let o=t;o<e.length;o+=1){let t=e[o];if(a!==null){t===`\\`?o+=1:t===a&&(a=null);continue}if(t===`"`||t===`'`||t==="`")a=t;else if(t===n)i+=1;else if(t===r&&(--i,i===0))return o}return-1},Gu=e=>`end`in e&&typeof e.end==`number`?e.end:-1,J=e=>`start`in e&&typeof e.start==`number`?e.start:-1,Ku=e=>{let t=D(e);for(;y(t,`SequenceExpression`);){let e=t.expressions.at(-1);if(!e)break;t=D(e)}return t},qu=e=>{if(e.kind!==`import`)return null;let t=e.declarationNode.parent;return y(t,`ImportDeclaration`)?t:null},Ju=e=>{let t=[],n=new Map;for(let r of e){let e=`${r.truthiness}:${r.nullishness}`,i=n.get(r.expression);i?.has(e)||(i?i.add(e):n.set(r.expression,new Set([e])),t.push(r))}return t},Yu=e=>y(e,`JSXElement`)||y(e,`JSXFragment`)||y(e,`ArrayExpression`)||y(e,`ObjectExpression`)||y(e,`ArrowFunctionExpression`)||y(e,`FunctionExpression`)||y(e,`ClassExpression`)||y(e,`NewExpression`)?{expression:e,truthiness:`truthy`,nullishness:`non-nullish`}:y(e,`Literal`)?e.value===null?{expression:e,truthiness:`falsy`,nullishness:`nullish`}:{expression:e,truthiness:e.value?`truthy`:`falsy`,nullishness:`non-nullish`}:y(e,`UnaryExpression`)&&e.operator===`void`?{expression:e,truthiness:`falsy`,nullishness:`nullish`}:{expression:e,truthiness:`unknown`,nullishness:`unknown`},Y=e=>{let t=Ku(e);if(y(t,`ConditionalExpression`)){let e=Y(t.test);return e.every(e=>e.truthiness===`truthy`)?Y(t.consequent):e.every(e=>e.truthiness===`falsy`)?Y(t.alternate):Ju([...Y(t.consequent),...Y(t.alternate)])}if(!y(t,`LogicalExpression`))return[Yu(t)];let n=Y(t.left),r=Y(t.right),i=[];for(let e of n){if(t.operator===`&&`){e.truthiness!==`truthy`&&i.push(e.truthiness===`falsy`?e:{...e,truthiness:`falsy`}),e.truthiness!==`falsy`&&i.push(...r);continue}if(t.operator===`||`){e.truthiness!==`falsy`&&i.push(e.truthiness===`truthy`?e:{...e,truthiness:`truthy`,nullishness:`non-nullish`}),e.truthiness!==`truthy`&&i.push(...r);continue}e.nullishness!==`nullish`&&i.push(e.nullishness===`non-nullish`?e:{...e,nullishness:`non-nullish`}),e.nullishness!==`non-nullish`&&i.push(...r)}return Ju(i)},Xu=e=>{let t=[],n=new Set;for(let r of Y(e))n.has(r.expression)||(n.add(r.expression),t.push(r.expression));return t},Zu=new Set([`assign`,`defineProperties`,`defineProperty`]),Qu=new Set([`defineProperty`,`set`]),$u=new WeakMap,ed=e=>{let t=P(e);for(;t.parent;){let e=t.parent;if(!y(e,`MemberExpression`)||e.object!==t)break;t=P(e)}return t},X=e=>{let t=e;for(;t;){if(v(t)||y(t,`Program`))return t;t=t.parent}return e},Z=(e,t)=>{if(y(e,`ReturnStatement`)||y(e,`ThrowStatement`)||y(e,`BreakStatement`)||t&&y(e,`ContinueStatement`))return!0;if(y(e,`BlockStatement`))return e.body.some(e=>Z(e,t));if(!y(e,`IfStatement`))return!1;if(y(e.test,`Literal`)){let n=e.test.value?e.consequent:e.alternate;return n?Z(n,t):!1}return!!(e.alternate&&Z(e.consequent,t)&&Z(e.alternate,t))},td=e=>Z(e,!0),nd=(e,t)=>{let n=t.indexOf(e);return n>0&&t.slice(0,n).some(td)},rd=(e,t)=>{let n=e;for(;n.parent&&n!==t;){let e=n.parent;if((y(e,`BlockStatement`)||y(e,`Program`))&&nd(n,e.body)||(y(e,`WhileStatement`)&&y(e.test,`Literal`)&&!e.test.value||y(e,`ForStatement`)&&e.test&&y(e.test,`Literal`)&&!e.test.value)&&e.body===n||y(e,`SwitchCase`)&&nd(n,e.consequent)||y(e,`IfStatement`)&&y(e.test,`Literal`)&&(e.test.value===!1&&e.consequent===n||e.test.value===!0&&e.alternate===n)||y(e,`ConditionalExpression`)&&y(e.test,`Literal`)&&(e.test.value===!1&&e.consequent===n||e.test.value===!0&&e.alternate===n)||y(e,`LogicalExpression`)&&e.right===n&&y(e.left,`Literal`)&&(e.operator===`&&`&&!e.left.value||e.operator===`||`&&e.left.value))return!0;n=e}return!1},id=(e,t)=>{let n=e;for(;n.parent&&n!==t;){let e=n.parent;if(y(e,`IfStatement`)&&(!y(e.test,`Literal`)||e.test.value===!0&&e.alternate===n||e.test.value===!1&&e.consequent===n)||y(e,`ConditionalExpression`)&&(!y(e.test,`Literal`)||e.test.value===!0&&e.alternate===n||e.test.value===!1&&e.consequent===n)||y(e,`LogicalExpression`)&&e.right===n&&(!y(e.left,`Literal`)||e.operator===`&&`&&!e.left.value||e.operator===`||`&&e.left.value)||y(e,`DoWhileStatement`)&&!(e.body===n&&y(e.test,`Literal`)&&!e.test.value)||y(e,`ForStatement`)||y(e,`ForInStatement`)||y(e,`ForOfStatement`)&&e.right!==n||y(e,`WhileStatement`)||y(e,`SwitchCase`)||y(e,`CatchClause`)||y(e,`TryStatement`)&&e.block===n||(y(e,`CallExpression`)||y(e,`MemberExpression`))&&e.optional)return!0;n=e}return!1},ad=(e,t)=>{let n=D(e);if(y(n,`Literal`))return!1;if(y(n,`Identifier`)){if(t.isGlobalReference(n)&&(n.name===`undefined`||n.name===`NaN`||n.name===`Infinity`))return!1;let e=t.symbolFor(n);return e?e.kind===`var`||e.kind===`function`||e.kind===`parameter`||e.kind===`import`?!1:J(e.declarationNode)>J(n):!0}if(y(n,`ArrayExpression`))return n.elements.some(e=>e?y(e,`SpreadElement`)?!0:ad(e,t):!1);if(y(n,`ObjectExpression`))return n.properties.length>0;if(y(n,`TemplateLiteral`))return n.expressions.length>0;if(y(n,`UnaryExpression`)){let e=D(n.argument);return n.operator===`typeof`&&y(e,`Identifier`)&&!t.symbolFor(e)?!1:ad(e,t)?!0:n.operator===`void`||n.operator===`typeof`||n.operator===`!`?!1:!(y(e,`Literal`)&&(typeof e.value==`number`||typeof e.value==`string`))}return!0},od=(e,t,n)=>{let r=e;for(;r.parent&&r.parent!==t;)r=r.parent;let i=t.body.findIndex(e=>e===r);return r.parent!==t||i<=0?!1:t.body.slice(0,i).some(e=>y(e,`EmptyStatement`)?!1:y(e,`ExpressionStatement`)?ad(e.expression,n):y(e,`VariableDeclaration`)?e.declarations.some(e=>!y(e.id,`Identifier`)||!!(e.init&&ad(e.init,n))):!0)},sd=(e,t)=>y(e,`AwaitExpression`)?ad(e.argument,t):!1,cd=(e,t,n)=>{let r=e;for(;r.parent&&r!==t;){let t=r.parent;if(y(t,`IfStatement`)&&(!y(t.test,`Literal`)||t.test.value===!0&&t.alternate===r||t.test.value===!1&&t.consequent===r)||y(t,`ConditionalExpression`)&&(!y(t.test,`Literal`)||t.test.value===!0&&t.alternate===r||t.test.value===!1&&t.consequent===r)||y(t,`LogicalExpression`)&&t.right===r&&(!y(t.left,`Literal`)||t.operator===`&&`&&!t.left.value||t.operator===`||`&&t.left.value)||y(t,`WhileStatement`)&&(!y(t.test,`Literal`)||!t.test.value)||y(t,`ForStatement`)&&t.test&&(!y(t.test,`Literal`)||!t.test.value)||y(t,`ForInStatement`)||y(t,`ForOfStatement`)||y(t,`SwitchCase`)||y(t,`CatchClause`)||y(t,`TryStatement`)&&t.block===r&&y(r,`BlockStatement`)&&(od(e,r,n)||sd(e,n))||(y(t,`CallExpression`)||y(t,`MemberExpression`))&&t.optional)return!0;r=t}return!1},ld=(e,t)=>{let n=e;for(;n;){if(n===t)return!0;n=n.parent}return!1},ud=(e,t)=>{let n=e;for(;n.parent&&n!==t;){let e=n.parent;if(y(e,`IfStatement`)&&(!y(e.test,`Literal`)||e.test.value===!0&&e.alternate===n||e.test.value===!1&&e.consequent===n)||y(e,`ConditionalExpression`)&&(!y(e.test,`Literal`)||e.test.value===!0&&e.alternate===n||e.test.value===!1&&e.consequent===n)||y(e,`LogicalExpression`)&&e.right===n&&(!y(e.left,`Literal`)||e.operator===`&&`&&!e.left.value||e.operator===`||`&&e.left.value)||y(e,`ForStatement`)||y(e,`ForInStatement`)||y(e,`ForOfStatement`)||y(e,`WhileStatement`)||y(e,`SwitchCase`)||y(e,`CatchClause`)||y(e,`TryStatement`)&&e.block===n||(y(e,`CallExpression`)||y(e,`MemberExpression`))&&e.optional)return n;n=e}return null},dd=e=>y(e,`AwaitExpression`)||y(e,`YieldExpression`)?e.argument?Gu(e.argument):Gu(e):y(e,`ForOfStatement`)?Gu(e.right):J(e),fd=(e,t,n)=>{if(J(t)<dd(e))return!1;let r=ud(e,n);return!!(r&&ld(t,r))},pd=e=>{let t=$u.get(e);if(t)return t;let n=(t,n,r)=>{let i=D(t);if(!y(i,`MemberExpression`))return!1;let a=D(i.object);return!!(y(a,`Identifier`)&&a.name===n&&e.isGlobalReference(a)&&r.has(j(i)??``))},r=e=>{let t=D(e);if(!y(t,`ObjectExpression`))return null;let n=new Set;for(let e of t.properties){if(!y(e,`Property`))return null;let t=M(e,{allowComputedString:!0});if(t===null)return null;n.add(t)}return n},i=e=>{let t=ed(e),i=t.parent;if(i){if(y(i,`AssignmentExpression`)&&i.left===t||y(i,`UpdateExpression`)&&i.argument===t||y(i,`UnaryExpression`)&&i.operator===`delete`){if(!y(t,`MemberExpression`))return null;let e=j(t);return e===null?null:new Set([e])}if(!(!y(i,`CallExpression`)||i.arguments[0]!==t)){if(n(i.callee,`Object`,Zu)){let e=D(i.callee);if(!y(e,`MemberExpression`))return;let t=j(e);if(t===`assign`){let e=i.arguments.slice(1).map(r);return e.some(e=>e===null)?null:new Set(e.flatMap(e=>[...e??[]]))}if(t===`defineProperties`){let e=i.arguments[1];return e?r(e):null}let n=i.arguments[1];return n&&y(n,`Literal`)&&typeof n.value==`string`?new Set([n.value]):null}if(n(i.callee,`Reflect`,Qu)){let e=i.arguments[1];return e&&y(e,`Literal`)&&typeof e.value==`string`?new Set([e.value]):null}}}},a=e=>{let t=P(e),n=t.parent;if(y(n,`ForOfStatement`)&&n.right===t)return n.await||Z(n.body,!1);let r=n;if(!y(r,`MemberExpression`)||r.object!==t||j(r)!==`next`)return!1;let i=P(r);return!!(y(i.parent,`CallExpression`)&&i.parent.callee===i)},o=e=>{let t=P(e),n=t.parent;return y(n,`ForOfStatement`)&&!n.await&&n.right===t&&!Z(n.body,!1)?!0:!!(y(n,`SpreadElement`)&&n.parent&&!y(n.parent,`ObjectExpression`))},s=e=>{let t=P(e),n=t.parent;if(!y(n,`ForOfStatement`)||n.await||n.right!==t||Z(n.body,!1))return[];let r=X(n.body),i=new Set;return k(n.body,e=>{if(X(e)!==r||!y(e,`BreakStatement`))return;let a=e;if(e.label){for(;a?.parent;){let t=a.parent;if(y(t,`LabeledStatement`)&&t.label.name===e.label.name){ld(n,t.body)&&i.add(t);return}a=t}return}for(;a?.parent;){let e=a.parent;if(y(e,`ForStatement`)||y(e,`ForInStatement`)||y(e,`ForOfStatement`)||y(e,`WhileStatement`)||y(e,`DoWhileStatement`)||y(e,`SwitchStatement`)){y(e,`ForOfStatement`)&&e.right===t&&i.add(e);return}a=e}}),[...i]},c=t=>{let n=D(t.callee),r=null;if(v(n))r=n;else if(y(n,`Identifier`)){let t=N(n,e);if(t?.kind===`function`&&v(t.declarationNode))r=t.declarationNode;else if(t?.kind===`const`&&t.initializer){let e=D(t.initializer);v(e)&&(r=e)}}return r&&v(r)?r:null},l=e=>{let t=c(e);return!t||!v(t)?null:t.generator?a(e)||o(e)?t:null:t},u=[],d=new Map;k(e.rootScope.node,t=>{if(y(t,`CallExpression`)){let e=X(t),n=l(t);n&&!rd(t,e)&&u.push({argumentCall:t,call:t,conditionalExitTargets:v(n)&&n.generator?s(t):[],owner:e,targetOwner:n,yieldCount:v(n)&&n.generator&&a(t)?1:null})}if(!y(t,`Identifier`))return;let n=i(t);if(n===void 0)return;let r=N(t,e);if(!r)return;let o=X(t);if(rd(t,o))return;let c=d.get(r.id)??[];c.push({node:t,owner:o,propertyNames:n,symbolId:r.id}),d.set(r.id,c)});let f=t=>{let n=X(t),r=J(t),i=new Set,a=(e,t)=>{for(let n of u)n.owner!==e||J(n.call)>=t||i.has(n.targetOwner)||(i.add(n.targetOwner),a(n.targetOwner,1/0))};return a(n,r),y(n,`Program`)||a(e.rootScope.node,1/0),i},p=e=>{if(y(e,`Program`))return 1/0;let t=u.find(t=>y(t.owner,`Program`)&&t.targetOwner===e);return t?J(t.call):1/0},m=new Map;for(let e of u){let t=m.get(e.owner)??[];t.push(e),m.set(e.owner,t)}let h=new WeakMap,ee=(e,t)=>{let n=h.get(e)?.get(t);if(n!==void 0)return n;let r=[e],i=new Set,a=!1;for(;r.length>0;){let e=r.pop();if(!(!e||i.has(e))){if(e===t){a=!0;break}i.add(e);for(let t of m.get(e)??[])r.push(t.targetOwner)}}let o=h.get(e)??new WeakMap;return o.set(t,a),h.set(e,o),a},te=(e,t)=>{let n=new Set,r=e;for(;r?.parent&&r!==t;){let t=r.parent,i=y(t,`DoWhileStatement`)&&y(t.test,`Literal`)&&!t.test.value,a=y(t,`ForStatement`)||y(t,`ForInStatement`)||y(t,`ForOfStatement`)||y(t,`WhileStatement`)||y(t,`DoWhileStatement`)?t.body:null,o=e;for(;a&&y(a,`BlockStatement`)&&o&&o.parent!==a;)o=o.parent??null;let s=a&&y(a,`BlockStatement`)&&o?a.body.findIndex(e=>e===o):-1,c=!!(a&&y(a,`BlockStatement`)&&s>=0&&a.body.slice(s+1).some(e=>Z(e,!1)));a&&!i&&!c&&n.add(t),r=t}return n},g=(e,t,n)=>{let r=te(e,n);return r.size===0?!1:[...te(t,n)].some(e=>r.has(e))},ne=new WeakMap,re=e=>{let t=ne.get(e);if(t)return t;let n=new Map;for(let t of u){if(!ee(t.targetOwner,e))continue;let r=n.get(t.owner)??[];r.push(t),n.set(t.owner,r)}return ne.set(e,n),n},ie=(e,t)=>{let n=re(e),r=re(t);for(let[e,t]of n){let n=r.get(e);if(n){for(let r of t)for(let t of n)if(r!==t&&(J(r.call)<J(t.call)||v(e)||g(r.call,t.call,e)))return!0}}return!1},ae=e=>{let t=X(e);if(y(t,`Program`))return!1;let n=u.filter(e=>y(e.owner,`Program`)&&ee(e.targetOwner,t));return n.length===0?!1:n.length!==1||n[0]?.targetOwner!==t},oe=e=>{let t=ed(e.node),n=t.parent;return!!(y(t,`Identifier`)&&n&&(y(n,`AssignmentExpression`)&&n.left===t||y(n,`UpdateExpression`)&&n.argument===t))},se=(t,n)=>{let r=D(t);if(y(r,`Identifier`)){let t=N(r,e);return t&&n.has(t.id)?n.get(t.id)??!1:null}if(y(r,`SequenceExpression`)){let e=r.expressions.at(-1);return e?se(e,n):null}if(y(r,`ConditionalExpression`)){let e=se(r.consequent,n),t=se(r.alternate,n);return e===null&&t===null?null:e===null||t===null?!0:e||t}if(y(r,`LogicalExpression`)){let e=se(r.left,n),t=se(r.right,n);return e===null?t===null?null:!0:r.operator===`&&`?t:e}return null},ce=(e,t)=>{let n=ed(e.node).parent;if(!n||!y(n,`AssignmentExpression`)){t.delete(e.symbolId);return}let r=t.get(e.symbolId)??!1,i=null;n.operator===`||=`||n.operator===`??=`?i=r:(n.operator===`=`||n.operator===`&&=`)&&(i=se(n.right,t));let a=id(e.node,e.owner);i===null?a?t.set(e.symbolId,!0):t.delete(e.symbolId):t.set(e.symbolId,a&&r||i)},le=(t,n)=>{if(!v(t.targetOwner))return n;let r=new Map(n);for(let[i,a]of t.targetOwner.params.entries()){let o=y(a,`AssignmentPattern`)?a.left:a;if(!y(o,`Identifier`))continue;let s=t.argumentCall.arguments[i],c=s&&!y(s,`SpreadElement`)?D(s):null,l=null;if(y(a,`AssignmentPattern`)&&(!c||y(c,`Identifier`)&&c.name===`undefined`&&e.isGlobalReference(c)||y(c,`UnaryExpression`)&&c.operator===`void`)&&y(a,`AssignmentPattern`)?l=D(a.right):c&&(l=c),!y(l,`Identifier`))continue;let u=N(l,e);if(!u||!n.has(u.id))continue;let d=e.symbolFor(o);d&&r.set(d.id,n.get(u.id)??!1)}return r},ue=(t,n)=>{if(!v(t.targetOwner))return{conditionalSuspensions:[],conditionalStartIndex:1/0,cutoffIndex:1/0};let r=new Set;t.targetOwner.async&&(r.add(`AwaitExpression`),r.add(`ForOfStatement`));let i=t.conditionalExitTargets.some(e=>!n||!ld(n,e));(t.yieldCount!==null||i)&&r.add(`YieldExpression`);let a=[],o=1/0,s=1/0,c=0;return k(t.targetOwner.body,n=>{if(X(n)!==t.targetOwner||rd(n,t.targetOwner)||!(r.has(n.type)&&(!y(n,`ForOfStatement`)||n.await)))return;let l=y(n,`YieldExpression`)&&n.argument?D(n.argument):null;if(y(n,`YieldExpression`)&&n.delegate&&l&&(y(l,`ArrayExpression`)&&l.elements.length===0||y(l,`Literal`)&&l.value===``))return;let u=dd(n);if(y(n,`YieldExpression`)){if(c+=1,i&&c>=1){o=Math.min(o,u);return}if(t.yieldCount===null||c>t.yieldCount)return}cd(n,t.targetOwner,e)?(a.push(n),o=Math.min(o,u)):s=Math.min(s,u)}),{conditionalSuspensions:a,conditionalStartIndex:Math.min(o,s),cutoffIndex:s}},de=(e,t,n)=>{let r=(e,t,i)=>{if(t.has(e.targetOwner))return!1;let a=new Set(t);a.add(e.targetOwner);let o=new Map(le(e,i)),s=ue(e),c=[...[...o.keys()].flatMap(e=>d.get(e)??[]).filter(t=>t.owner===e.targetOwner).map(e=>({event:e,index:J(e.node)})),...u.filter(t=>t.owner===e.targetOwner).map(e=>({call:e,index:J(e.call)}))].sort((e,t)=>e.index-t.index);for(let t of c){if(t.index>=s.cutoffIndex)break;let i=`event`in t?t.event.node:t.call.call;if(!s.conditionalSuspensions.some(t=>fd(t,i,e.targetOwner))){if(`event`in t){if(!o.has(t.event.symbolId))continue;if(oe(t.event)){ce(t.event,o);continue}if(n===null||t.event.propertyNames===null||t.event.propertyNames.has(n))return!0;continue}if(r(t.call,a,o))return!0}}return!1};return r(e,new Set,t)},fe={getEventsBefore:(t,n)=>{let r=[],i=(e,t,a,o,s,c,l)=>{if(s.has(e))return;let f=new Set(s);f.add(e);let p=new Map(l),m=[...[...p.keys()].flatMap(e=>d.get(e)??[]).filter(t=>t.owner===e).map(e=>({event:e,index:J(e.node)})),...u.filter(t=>t.owner===e).map(e=>({call:e,index:J(e.call)}))].sort((e,t)=>e.index-t.index);for(let s of m){if(s.index>=t)break;let l=`event`in s?s.event.node:s.call.call;if(o.some(t=>fd(t,l,e)))continue;if(`event`in s){if(!p.has(s.event.symbolId))continue;let e=!!(c||p.get(s.event.symbolId)||id(s.event.node,s.event.owner)||s.index>a);if(oe(s.event)){ce(s.event,p);continue}r.push({isConditional:e,node:s.event.node});continue}let u=ue(s.call,n);i(s.call.targetOwner,u.cutoffIndex,u.conditionalStartIndex,u.conditionalSuspensions,f,c||id(s.call.call,s.call.owner)||s.index>a,le(s.call,p))}},a=X(n),o=new Map([[t.id,!1]]);return y(a,`Program`)||i(e.rootScope.node,p(a),1/0,[],new Set,!1,o),i(a,J(n),1/0,[],new Set,!1,o),r},getOutermostTarget:ed,isGlobalNamespaceMethod:n,isExecutionOrderAmbiguous:ae,isMutationOrderAmbiguous:(e,t,n)=>{let r=X(t),i=J(t);if((d.get(e.id)??[]).some(e=>n!==null&&e.propertyNames!==null&&!e.propertyNames.has(n)?!1:e.owner===r?J(e.node)>=i&&(v(r)||g(e.node,t,r)):y(e.owner,`Program`)?(re(r).get(e.owner)??[]).some(t=>g(e.node,t.call,e.owner)):ee(e.owner,r)||ie(e.owner,r)))return!0;let a=new Map([[e.id,!1]]);return u.some(e=>e.owner===r&&J(e.call)>=i&&g(e.call,t,r)&&de(e,a,n))},isMutatedBefore:(e,t,n)=>{let r=d.get(e.id);if(!r)return!1;let i=J(t),a=X(t),o=f(t);return r.some(e=>n!==null&&e.propertyNames!==null&&!e.propertyNames.has(n)?!1:e.owner===a?J(e.node)<i:y(e.owner,`Program`)&&!y(a,`Program`)?J(e.node)<p(a):o.has(e.owner))}};return $u.set(e,fe),fe},md=(e,t)=>t===`katex`?e===`katex`||e.startsWith(`katex/`):e===t,hd=(e,t,n)=>{let r=D(e);if(!y(r,`CallExpression`))return!1;let i=D(r.callee),a=r.arguments[0];return!!(y(i,`Identifier`)&&i.name===`require`&&n.isGlobalReference(i)&&a&&y(a,`Literal`)&&typeof a.value==`string`&&md(a.value,t))},gd=(e,t)=>{if(e.kind!==`ts-import-equals`)return!1;let n=e.declarationNode;if(!y(n,`TSImportEqualsDeclaration`))return!1;let r=n.moduleReference;return!!(y(r,`TSExternalModuleReference`)&&y(r.expression,`Literal`)&&typeof r.expression.value==`string`&&md(r.expression.value,t))},_d=(e,t)=>{let n=D(e);return!!(y(n,`AwaitExpression`)&&y(n.argument,`ImportExpression`)&&y(n.argument.source,`Literal`)&&typeof n.argument.source.value==`string`&&md(n.argument.source.value,t))},vd=(e,t,n,r,i)=>{let a=N(D(e),i),o=pd(i);if(!a||o.isExecutionOrderAmbiguous(r)||o.isMutationOrderAmbiguous(a,r,n)||o.isMutatedBefore(a,r,n))return null;let s=qu(a);if(typeof s?.source.value==`string`&&md(s.source.value,t))return y(a.declarationNode,`ImportDefaultSpecifier`)||y(a.declarationNode,`ImportNamespaceSpecifier`)||A(a.declarationNode)===`default`?a:null;if(gd(a,t))return a;if(a.kind!==`const`||!a.initializer)return null;let c=D(a.initializer);return hd(c,t,i)||y(c,`MemberExpression`)&&j(c)===`default`&&(hd(c.object,t,i)||_d(c.object,t))||_d(c,t)?a:null},yd=(e,t,n,r,i)=>{let a=N(D(e),i);if(!a)return null;let o=qu(a),s=pd(i);return typeof o?.source.value!=`string`||!md(o.source.value,t)||A(a.declarationNode)!==n||s.isExecutionOrderAmbiguous(r)||s.isMutationOrderAmbiguous(a,r,null)||s.isMutatedBefore(a,r,null)?null:a},bd=(e,t,n)=>vd(e,`katex`,`renderToString`,t,n)!==null||hd(e,`katex`,n),xd=(e,t,n)=>{if(yd(e,`katex`,`renderToString`,t,n))return!0;let r=D(e);if(!y(r,`Identifier`))return!1;let i=n.referenceFor(r)?.resolvedSymbol;if(!i||i.kind!==`const`||!i.initializer||pd(n).isMutatedBefore(i,t,null))return!1;let a=D(i.initializer),o=i.bindingIdentifier.parent;return y(o,`Property`)&&M(o,{allowComputedString:!0})===`renderToString`?bd(a,i.declarationNode,n):y(a,`MemberExpression`)&&j(a)===`renderToString`&&bd(a.object,i.declarationNode,n)?!0:y(a,`Identifier`)?xd(a,i.declarationNode,n):!1},Sd=(e,t)=>{let n=D(e);if(y(n,`Identifier`)){if(!/katex/i.test(n.name))return!1;let e=t.referenceFor(n)?.resolvedSymbol;return!!(e&&e.kind!==`parameter`&&e.kind!==`let`)}if(!y(n,`MemberExpression`)||j(n)!==`renderToString`)return!1;let r=D(n.object);if(!y(r,`Identifier`)||!/katex/i.test(r.name))return!1;let i=t.referenceFor(r)?.resolvedSymbol;if(!i)return!1;if(i.kind===`import`){if(!md(String(qu(i)?.source.value??``),`katex`))return!0;let e=pd(t);return e.isExecutionOrderAmbiguous(n)||e.isMutationOrderAmbiguous(i,n,`renderToString`)?!1:e.isMutatedBefore(i,n,`renderToString`)}if(i.kind===`parameter`||i.kind===`let`||i.kind===`var`)return!0;if(i.kind!==`const`||!i.initializer)return!1;let a=D(i.initializer);if(y(a,`ObjectExpression`))return!0;if(y(a,`CallExpression`)){let e=D(a.callee);return y(e,`Identifier`)&&e.name===`require`}return y(a,`AwaitExpression`)&&y(a.argument,`ImportExpression`)},Cd=(e,t)=>{let n=D(e);if(!y(n,`ObjectExpression`))return null;let r;for(let e of n.properties){if(!y(e,`Property`)){r=null;continue}let n=M(e,{allowComputedString:!0});if(n===null){r=null;continue}n===t&&(r=e.kind===`init`?e.value:null)}return r},wd=e=>{let t=D(e);if(!y(t,`ObjectExpression`))return null;for(let e of t.properties){if(!y(e,`Property`))return null;let t=M(e,{allowComputedString:!0});if(t===null||t===`get`||t===`set`)return null}return Cd(t,`value`)},Td=new WeakMap,Ed=(e,t)=>{let n=D(e);return y(n,`Identifier`)?n.name===`undefined`&&t.isGlobalReference(n):y(n,`Literal`)&&!n.value},Dd=(e,t,n)=>{let r=wd(t);return r===null?`trusted`:r===void 0?e:Ed(r,n)?`untrusted`:`trusted`},Od=(e,t)=>e===t?e:e===`trusted`||t===`trusted`?`trusted`:e===`unsupported`||t===`unsupported`?`unsupported`:`untrusted`,kd=(e,t,n,r)=>{let i=pd(n),a=i.getOutermostTarget(t),o=a.parent;if(!o)return`unsupported`;if(y(o,`AssignmentExpression`)&&o.left===a){if(!y(a,`MemberExpression`))return`unsupported`;let t=j(a);return t===null?`trusted`:t===`trust`?Ed(o.right,n)?`untrusted`:`trusted`:e}if(y(o,`UnaryExpression`)&&o.operator===`delete`){if(!y(a,`MemberExpression`))return`unsupported`;let t=j(a);return t===null?`trusted`:t===`trust`?`absent`:e}if(y(o,`UpdateExpression`)){if(!y(a,`MemberExpression`))return`unsupported`;let t=j(a);return t===`trust`||t===null?`trusted`:e}if(!y(o,`CallExpression`)||o.arguments[0]!==a)return`unsupported`;if(i.isGlobalNamespaceMethod(o.callee,`Object`,Zu)){let t=D(o.callee);if(!y(t,`MemberExpression`))return`unsupported`;let i=j(t);if(i===`assign`){let t=e;for(let e of o.arguments.slice(1)){let i=Ad(e,e,n,new Set(r));i!==`absent`&&(t=i)}return t}if(i===`defineProperties`){let t=o.arguments[1];if(!t)return`unsupported`;let r=Cd(t,`trust`);return r===null?`trusted`:r===void 0?e:Dd(e,r,n)}let a=o.arguments[1];if(!a||!y(a,`Literal`)||typeof a.value!=`string`)return`trusted`;if(a.value!==`trust`)return e;let s=o.arguments[2];return s?Dd(e,s,n):`unsupported`}if(i.isGlobalNamespaceMethod(o.callee,`Reflect`,Qu)){let t=D(o.callee);if(!y(t,`MemberExpression`))return`unsupported`;let r=j(t),i=o.arguments[1];if(!i||!y(i,`Literal`)||typeof i.value!=`string`)return`trusted`;if(i.value!==`trust`)return e;let a=o.arguments[2];return a?r===`defineProperty`?Dd(e,a,n):Ed(a,n)?`untrusted`:`trusted`:`unsupported`}return`unsupported`},Ad=(e,t,n,r)=>{if(e===void 0)return`absent`;let i=D(e);if(y(i,`Identifier`)){if(i.name===`undefined`&&n.isGlobalReference(i))return`absent`;let e=N(i,n);if(!e||e.kind!==`const`||!e.initializer||r.has(e.id))return`unsupported`;let a=new Set(r);a.add(e.id);let o=pd(n);if(o.isMutationOrderAmbiguous(e,t,`trust`))return`unsupported`;let s=Ad(e.initializer,t,n,a);for(let r of o.getEventsBefore(e,t)){let e=kd(s,r.node,n,a);s=r.isConditional?Od(s,e):e}return s}if(!y(i,`ObjectExpression`))return`unsupported`;let a=`absent`;for(let e of i.properties){if(y(e,`SpreadElement`)){let t=Ad(e.argument,e.argument,n,new Set(r));t!==`absent`&&(a=t===`unsupported`?`trusted`:t);continue}if(!y(e,`Property`)){a=`trusted`;continue}let t=M(e,{allowComputedString:!0});if(t===null){a=`trusted`;continue}t===`trust`&&(a=Ed(e.value,n)?`untrusted`:`trusted`)}return a},jd=(e,t,n)=>{let r=Td.get(e),i=new Map(r);for(let[e,n]of t)i.set(e,n);Td.set(e,i);try{return n()}finally{r?Td.set(e,r):Td.delete(e)}},Md=(e,t,n,r)=>{let i=e?D(e):void 0;if(i&&y(i,`Identifier`)){let e=n.referenceFor(i)?.resolvedSymbol,t=e?Td.get(n)?.get(e.id):void 0;if(t)return t}let a=Ad(e,t,n,r);return{isSafe:a===`absent`||a===`untrusted`}},Nd={containsKatex:!1,isConclusive:!0,isSafe:!0,isSafeInAttributeContext:!0},Pd={containsKatex:!1,isConclusive:!0,isSafe:!0,isSafeInAttributeContext:!1},Q={containsKatex:!1,isConclusive:!1,isSafe:!1,isSafeInAttributeContext:!1},Fd={containsKatex:!0,isConclusive:!1,isSafe:!1,isSafeInAttributeContext:!1},Id={containsKatex:!0,isConclusive:!0,isSafe:!1,isSafeInAttributeContext:!1},Ld=new WeakMap,Rd=new WeakMap,zd=(e,t,n)=>{Ld.set(e,t),Rd.set(e,n)},Bd=e=>({containsKatex:e.some(e=>e.containsKatex),isConclusive:e.every(e=>e.isSafe)?e.filter(e=>e.containsKatex).every(e=>e.isConclusive):e.some(e=>e.containsKatex&&e.isConclusive&&!e.isSafe)||e.some(e=>e.containsKatex&&e.isConclusive)&&e.some(e=>!e.containsKatex&&!e.isSafe),isSafe:e.every(e=>e.isSafe),isSafeInAttributeContext:e.every(e=>e.isSafeInAttributeContext)}),Vd=(e,t)=>{let n=D(e);if(!y(n,`ObjectExpression`))return{isKnown:!1,value:null};let r=!0,i=null;for(let e of n.properties){if(!y(e,`Property`)){r=!1,i=null;continue}let n=M(e,{allowComputedString:!0});n===null?(r=!1,i=null):n===t&&(r=!0,i=e.value)}return{isKnown:r,value:i}},Hd=(e,t)=>{let n=D(e);if(y(n,`Identifier`)){let e=N(n,t);return!!(e&&e.kind===`import`&&qu(e)?.source.value===`react`&&A(e.declarationNode)===`useMemo`)}if(!y(n,`MemberExpression`)||j(n)!==`useMemo`)return!1;let r=N(D(n.object),t);return!!(r&&r.kind===`import`&&qu(r)?.source.value===`react`&&(y(r.declarationNode,`ImportDefaultSpecifier`)||y(r.declarationNode,`ImportNamespaceSpecifier`)||A(r.declarationNode)===`default`))},Ud=(e,t)=>{let n=e=>{let r=D(e);if(y(r,`Identifier`)){let e=N(r,t);return!e||e.kind!==`const`||!e.initializer||e.references.some(e=>e.flag!==`read`)?null:n(e.initializer)}return!y(r,`Literal`)||!(`regex`in r)||!r.regex?null:r.regex},r=e=>{let t=D(e);if(!v(t))return null;if(!y(t.body,`BlockStatement`))return t.body;if(t.body.body.length!==1)return null;let n=t.body.body[0];return n&&y(n,`ReturnStatement`)?n.argument:null},i=e=>{let n=D(e);if(!v(n)||n.params.length!==1)return!1;let i=n.params[0],a=r(n);if(!i||!y(i,`Identifier`)||!a||!y(a,`MemberExpression`)||!a.computed||!y(D(a.property),`Identifier`))return!1;let o=D(a.property);if(t.referenceFor(o)?.resolvedSymbol!==t.symbolFor(i)||!y(D(a.object),`Identifier`))return!1;let s=N(D(a.object),t);if(!s||s.kind!==`const`||!s.initializer||s.references.some(e=>e.flag!==`read`))return!1;let c=Vd(s.initializer,`<`);if(!c.isKnown||!c.value||!y(D(c.value),`Literal`))return!1;let l=D(c.value);return y(l,`Literal`)?typeof l.value==`string`&&!l.value.includes(`<`)&&!l.value.includes(`$`):!1},a=D(e),o=!1;for(;y(a,`CallExpression`);){let e=D(a.callee);if(!y(e,`MemberExpression`))return!1;let t=j(e);if(t!==`replace`&&t!==`replaceAll`)return!1;let r=a.arguments[0],s=a.arguments[1];if(!r||!s||!(y(s,`Literal`)&&typeof s.value==`string`&&!s.value.includes(`<`)&&!s.value.includes(`$`))&&!i(s))return!1;let c=n(r),l=t===`replaceAll`&&y(r,`Literal`)&&r.value===`<`,u=!!c?.flags.includes(`g`)&&(c?.pattern===`<`||/^\[[^\]]*<[^\]]*\]$/.test(c?.pattern??``));(l||u)&&(o=!0),a=D(e.object)}return!o||!y(a,`Identifier`)?!1:t.referenceFor(a)?.resolvedSymbol?.kind===`parameter`},Wd=(e,t)=>{let n=D(e.callee);return y(n,`MemberExpression`)&&j(n)===`sanitize`&&(vd(n.object,`dompurify`,`sanitize`,e,t)||vd(n.object,`isomorphic-dompurify`,`sanitize`,e,t))?Pd:y(n,`MemberExpression`)&&j(n)===`escape`&&vd(n.object,`html-escaper`,`escape`,e,t)||yd(n,`html-escaper`,`escape`,e,t)?Nd:yd(n,`dompurify`,`sanitize`,e,t)||yd(n,`isomorphic-dompurify`,`sanitize`,e,t)?Pd:null},Gd=(e,t)=>{if(!t.isSafe)return null;let n=D(e.callee);if(!y(n,`MemberExpression`))return null;let r=j(n);if((r===`trim`||r===`trimEnd`||r===`trimStart`)&&e.arguments.length===0)return t;if(r!==`replace`&&r!==`replaceAll`)return null;let i=e.arguments[1];return!i||!y(i,`Literal`)||typeof i.value!=`string`||i.value.includes(`<`)?null:{containsKatex:t.containsKatex,isConclusive:t.isConclusive,isSafe:!0,isSafeInAttributeContext:t.isSafeInAttributeContext&&!/[&>"']/.test(i.value)}},Kd=e=>{let t=e.toLowerCase();for(let e of[`script`,`style`,`textarea`,`title`])if(t.lastIndexOf(`<${e}`)>t.lastIndexOf(`</${e}`))return`raw-text`;let n=e.lastIndexOf(`<`);if(n<=e.lastIndexOf(`>`))return`text`;let r=e.slice(n+1),i=null;for(let e=0;e<r.length;e+=1){let t=r[e];(t===`"`||t===`'`)&&r[e-1]!==`\\`&&(i===t?i=null:i===null&&(i=t))}return i===null?`unsafe-tag`:`attribute`},qd=(e,t,n,r)=>{let i=e.expressions.map(e=>$(e,t,new Set(n),r)),a=``,o=!0;for(let t=0;t<i.length;t+=1){a+=e.quasis[t]?.value.raw??``;let n=Kd(a),r=i[t]??Q;n===`text`?o&&=r.isSafe:n===`attribute`?o&&=r.isSafeInAttributeContext:o=!1}return{containsKatex:i.some(e=>e.containsKatex),isConclusive:o?i.filter(e=>e.containsKatex).every(e=>e.isConclusive):i.some(e=>e.containsKatex&&e.isConclusive&&!e.isSafe)||i.some(e=>e.containsKatex&&e.isConclusive)&&i.some(e=>!e.containsKatex&&!e.isSafe),isSafe:o,isSafeInAttributeContext:!1}},Jd=(e,t)=>{let n=e;for(;n.parent&&n!==t;){let e=n.parent;if(y(e,`BlockStatement`)){let t=e.body.findIndex(e=>e===n);if(t>0&&e.body.slice(0,t).some(e=>I(e)))return!0}if(y(e,`SwitchCase`)){let t=e.consequent.findIndex(e=>e===n);if(t>0&&e.consequent.slice(0,t).some(e=>I(e)))return!0}if(y(e,`IfStatement`)&&y(e.test,`Literal`)){let t=e.alternate,r=e.consequent,i=!!e.test.value;if(!i&&r===n||i&&t===n)return!0}if(y(e,`WhileStatement`)&&e.body===n){let t=e.test;if(y(t,`Literal`)&&!t.value)return!0}if(y(e,`ForStatement`)&&e.body===n){let t=e.test;if(t&&y(t,`Literal`)&&!t.value)return!0}n=e}return!1},Yd=(e,t,n,r=new Map)=>{if(!v(e))return Q;if(!y(e.body,`BlockStatement`))return $(e.body,t,n,r);let i=e.body,a=[];return k(i,e=>{if(e!==i&&v(e))return!1;if(y(e,`ReturnStatement`))return Jd(e,i)||a.push(e.argument?$(e.argument,t,new Set(n),r):Nd),!1}),a.length===0?Nd:Bd(a)},Xd=(e,t,n,r,i=new Map)=>{if(!v(e))return Q;let a=[];if(!y(e.body,`BlockStatement`))a.push(e.body);else{let t=e.body;k(t,e=>{if(e!==t&&v(e))return!1;y(e,`ReturnStatement`)&&e.argument&&!Jd(e,t)&&a.push(e.argument)})}return a.length===0?Q:Bd(a.map(e=>{let a=Vd(e,t);if(a.isKnown&&a.value!==null)return $(a.value,n,new Set(r),i);let o=D(e);return y(o,`CallExpression`)?$d(o,n,t)??Q:Q}))},Zd=(e,t)=>{let n=D(e);if(!y(n,`Identifier`))return null;let r=N(n,t);if(!r||r.references.some(e=>e.flag!==`read`))return null;if(r.kind===`function`&&v(r.declarationNode))return{functionNode:r.declarationNode,symbol:r};if(r.kind!==`const`||!r.initializer)return null;let i=D(r.initializer);return v(i)?{functionNode:i,symbol:r}:null},Qd=(e,t,n,r)=>{let i=new Map;if(!v(e))return i;let a=(e,t)=>e===void 0||y(e,`Identifier`)&&e.name===`undefined`&&t.isGlobalReference(e)||y(e,`UnaryExpression`)&&e.operator===`void`,o=(e,t,n,a)=>a?jd(r,i,()=>Md(e,t,n,new Set)):Md(e,t,n,new Set);for(let[s,c]of e.params.entries()){let e=t.arguments[s],l=y(c,`AssignmentPattern`)&&a(e,n),u=l&&y(c,`AssignmentPattern`)?c.right:e,d=l?r:n,f=l?c:t,p=y(c,`AssignmentPattern`)?c.left:c;if(y(p,`Identifier`)){let e=r.symbolFor(p);if(!e||e.references.some(e=>e.flag!==`read`))continue;i.set(e.id,o(u,f,d,l));continue}if(!(!y(p,`ObjectPattern`)||!u))for(let e of p.properties){if(!y(e,`Property`))continue;let t=M(e,{allowComputedString:!0});if(t===null)continue;let n=Vd(u,t),s=y(e.value,`AssignmentPattern`)?e.value.left:e.value;if(!y(s,`Identifier`))continue;let c=r.symbolFor(s);if(!n.isKnown||!c||c.references.some(e=>e.flag!==`read`))continue;let l=y(e.value,`AssignmentPattern`)&&(n.value===null||a(n.value??void 0,d)),p=l&&y(e.value,`AssignmentPattern`)?e.value.right:n.value??void 0,m=l?r:d,h=l?e:f;i.set(c.id,o(p,h,m,l))}}return i},$d=(e,t,n)=>{let r=D(e.callee);if(!y(r,`Identifier`))return null;let i=N(r,t);if(!i||i.kind!==`import`)return null;let a=qu(i),o=A(i.declarationNode),s=Ld.get(t),c=a?.source.value,l=Rd.get(t)??0;if(!s||typeof c!=`string`||!o||l>=2)return null;let u=Fn(s,c,o);if(!u||!v(u.functionNode))return null;let d=Ie(u.programNode);return zd(d,u.filePath,l+1),jd(d,Qd(u.functionNode,e,t,d),()=>n?Xd(u.functionNode,n,d,new Set):Yd(u.functionNode,d,new Set))},ef=(e,t,n,r)=>{if(!y(e,`CallExpression`))return Q;let i=D(e.callee);if(y(i,`MemberExpression`)&&j(i)===`get`){let e=D(i.object);if(y(e,`Identifier`)){let i=N(e,t),a=i?.initializer?D(i.initializer):null,o=a&&y(a,`NewExpression`)?D(a.callee):null;if(i?.kind===`const`&&a&&y(a,`NewExpression`)&&y(o,`Identifier`)&&o.name===`Map`&&t.isGlobalReference(o)&&!n.has(i.id)){let e=new Set(n);e.add(i.id);let a=[],o=!1;for(let n of i.references){let i=n.identifier.parent;if(n.flag!==`read`||!i||!y(i,`MemberExpression`)||i.object!==n.identifier){o=!0;break}let s=j(i);if(s===`size`)continue;let c=i.parent;if(!c||!y(c,`CallExpression`)||c.callee!==i){o=!0;break}if(![`get`,`has`,`keys`,`values`,`entries`,`clear`,`delete`].includes(s??``)){if(s!==`set`||!c.arguments[1]){o=!0;break}a.push($(c.arguments[1],t,new Set(e),r))}}if(!o&&a.length>0)return Bd(a)}}}if(y(i,`MemberExpression`)&&j(i)===`renderToString`&&bd(i.object,e,t)||xd(i,e,t))return{containsKatex:!0,isConclusive:!0,isSafe:Md(e.arguments[1],e,t,new Set).isSafe,isSafeInAttributeContext:!1};let a=$d(e,t);if(a?.containsKatex)return a;let o=Zd(i,t);if(o&&!n.has(o.symbol.id)){let i=new Set(n);i.add(o.symbol.id);let a=e.arguments.map(e=>{let i=D(e);return v(i)?Yd(i,t,new Set(n),r):$(i,t,new Set(n),r)}),s=new Map,c=!1;if(v(o.functionNode))for(let[e,n]of o.functionNode.params.entries()){if(!y(n,`Identifier`))continue;let r=t.symbolFor(n),i=a[e],o=r?.references.every(e=>e.flag===`read`);r&&i&&o&&s.set(r.id,i),i?.containsKatex&&r&&!o&&(c=!0)}let l=jd(t,Qd(o.functionNode,e,t,t),()=>Yd(o.functionNode,t,i,s));return!a.some(e=>e.containsKatex)||l.containsKatex?l:c?Fd:Id}if(Sd(i,t))return{containsKatex:!0,isConclusive:!0,isSafe:!1,isSafeInAttributeContext:!1};if(y(i,`MemberExpression`)){let a=$(i.object,t,new Set(n),r);if(a.containsKatex)return Gd(e,a)||(a.isConclusive?{containsKatex:!0,isConclusive:!0,isSafe:!1,isSafeInAttributeContext:!1}:Fd)}let s=Wd(e,t);if(s)return s;if(Ud(e,t))return Pd;if(Hd(i,t)){let i=e.arguments[0];if(!i)return Q;let a=D(i);if(v(a))return Yd(a,t,new Set(n),r);let o=Zd(a,t);if(!o||n.has(o.symbol.id))return Q;let s=new Set(n);return s.add(o.symbol.id),Yd(o.functionNode,t,s,r)}return e.arguments.some(e=>{let i=D(e);return(v(i)?Yd(i,t,new Set(n),r):$(i,t,new Set(n),r)).containsKatex})?Fd:Q},tf=(e,t)=>{let n=Ku(e);if(y(n,`Literal`))return!!n.value;if(y(n,`Identifier`)&&(n.name===`undefined`||n.name===`NaN`)&&t.isGlobalReference(n))return!1;if(y(n,`TemplateLiteral`)){let e=ka(n);return e===null?null:!!e}if(y(n,`ArrayExpression`)||y(n,`ObjectExpression`)||y(n,`ArrowFunctionExpression`)||y(n,`FunctionExpression`)||y(n,`ClassExpression`)||y(n,`NewExpression`)||y(n,`JSXElement`)||y(n,`JSXFragment`))return!0;if(y(n,`UnaryExpression`)){if(n.operator===`void`)return!1;if(n.operator===`typeof`)return!0;if(n.operator===`!`){let e=tf(n.argument,t);return e===null?null:!e}}return null},$=(e,t,n,r=new Map)=>{let i=D(e);if(y(i,`Literal`)||y(i,`UnaryExpression`)&&i.operator===`void`)return Nd;if(y(i,`Identifier`)){if((i.name===`undefined`||i.name===`NaN`)&&t.isGlobalReference(i))return Nd;let e=t.referenceFor(i)?.resolvedSymbol,a=e?r.get(e.id):void 0;if(a)return a;if(!e||n.has(e.id))return Q;let o=new Set(n);if(o.add(e.id),e.kind===`let`||e.kind===`var`){let n=[];e.initializer&&n.push(e.initializer);for(let t of e.references){if(t.flag===`read`)continue;let e=sa(t.identifier);if(!e)return Q;n.push(e)}return n.length===0?Q:Bd(n.map(e=>$(e,t,new Set(o),r)))}return e.kind!==`const`||!e.initializer?Q:$(e.initializer,t,o,r)}if(y(i,`CallExpression`))return ef(i,t,n,r);if(y(i,`MemberExpression`)){let e=j(i),a=D(i.object);if(e&&y(a,`Identifier`)){let i=t.referenceFor(a)?.resolvedSymbol,o=i?.initializer?D(i.initializer):null;if(i?.kind===`const`&&o&&y(o,`CallExpression`)){if(Hd(o.callee,t)){let i=o.arguments[0],a=i?D(i):null;if(a&&v(a)){let i=Xd(a,e,t,new Set(n),r);if(i.containsKatex)return i}}let i=$d(o,t,e);if(i?.containsKatex)return i}}return Q}if(y(i,`TemplateLiteral`))return qd(i,t,n,r);if(y(i,`ConditionalExpression`)){let e=tf(i.test,t);return e===null?Bd([$(i.consequent,t,new Set(n),r),$(i.alternate,t,new Set(n),r)]):$(e?i.consequent:i.alternate,t,new Set(n),r)}if(y(i,`LogicalExpression`)){let e=i.operator===`??`?null:tf(i.left,t);if(e!==null)return $(i.operator===`&&`?e?i.right:i.left:e?i.left:i.right,t,new Set(n),r);let a=Xu(i);if(a.length===1)return $(a[0]??i,t,new Set(n),r);let o=[i.left,i.right].map(e=>$(e,t,new Set(n),r));return{...i.operator===`&&`?o[1]??Q:Bd(a.map(e=>$(e,t,new Set(n),r))),containsKatex:o.some(e=>e.containsKatex)}}if(y(i,`BinaryExpression`)&&i.operator===`+`)return Bd([$(i.left,t,new Set(n),r),$(i.right,t,new Set(n),r)]);if(y(i,`SequenceExpression`)){let e=i.expressions.at(-1);return e?$(e,t,n,r):Q}return Q},nf=e=>{let t=null;if(y(e,`JSXAttribute`)&&y(e.name,`JSXIdentifier`)&&e.name.name===`dangerouslySetInnerHTML`&&y(e.value,`JSXExpressionContainer`)&&y(e.value.expression,`ObjectExpression`)&&(t=e.value.expression),y(e,`Property`)&&M(e,{allowComputedString:!0})===`dangerouslySetInnerHTML`&&y(D(e.value),`ObjectExpression`)&&(t=D(e.value)),!y(t,`ObjectExpression`))return null;let n=null;for(let e of t.properties){if(y(e,`SpreadElement`)){n=null;continue}if(!y(e,`Property`)){n=null;continue}let t=M(e,{allowComputedString:!0});if(t===null){n=null;continue}t===`__html`&&(n=e.value)}return n},rf=(e,t)=>{let n=Ut({filename:t,sourceText:e});if(n===null)return[];let r=Ie(n);zd(r,t,0);let i=[];return k(n,e=>{let t=nf(e);if(t===null)return;let n=$(t,r,new Set);if(!n.containsKatex)return;let a=J(e),o=Gu(e);a<0||o<0||i.push({endIndex:o,proof:n,startIndex:a})}),i},af=/dangerouslySetInnerHTML|(?:\.(?:inner|outer)HTML|\[\s*["'](?:inner|outer)HTML["']\s*\])\s*[+]?=(?!=)|\.insertAdjacentHTML\s*\(|\bdocument\.write(?:ln)?\s*\(|\.(?:createContextualFragment|setHTMLUnsafe)\s*\(/,of=/(?:__html\s*:|(?:\.(?:inner|outer)HTML|\[\s*["'](?:inner|outer)HTML["']\s*\])\s*[+]?=(?!=)|\.insertAdjacentHTML\s*\(\s*[^,]*,|\bdocument\.write(?:ln)?\s*\(|\.(?:createContextualFragment|setHTMLUnsafe)\s*\()\s*([\s\S]*)/,sf=/searchParams|query|params|request|req\.|response\.|result\.|data\.|await|fetch|props\.|children|content|html|body|text|message|markup|\blocation\b|document\.cookie|\breferrer\b|\blocalStorage\b|\bsessionStorage\b|URLSearchParams|window\.name/i,cf=/^(?:"(?:\\.|[^"\\\n])*"|'(?:\\.|[^'\\\n])*'|`[^`$]*`)\s*(?:\/\/[^\n]*)?\s*(?:[;,})\n]|$)/,lf=/^[A-Z][A-Z0-9_]*\s*(?:\/\/[^\n]*)?\s*(?:[;,})\n]|$)/,uf=/^[\w$]+(?:\??\.[\w$]+)*\??\.(?:inner|outer)HTML\b/,df=/\b(?:DOMPurify|sanitize\w*|purify|(?:escape|encode)[A-Za-z]*(?:Html|HTML|Entit\w*)|insane|xss)\b|(?<!un)safe|(?<!un)saniti[sz]/i,ff=/[:=]\s*[^\n;]*\b(?:DOMPurify\b|sanitize\w*\s*\(|purify\w*\s*\()/i,pf=/=\s*[\w$.?[\]]*\.(?:inner|outer)HTML\s*(?:[;,)\n]|$)/,mf=/process\.env/,hf=/\b(?:t|i18n|translate|formatMessage|intl)\s*[.(]/,gf=/^(?:[\w$.]+\.)?(?:toHtml|render[A-Za-z]*(?:Html|HTML)|renderToString|renderToStaticMarkup|codeToHtml|codeToHast|highlight[A-Za-z]*)\s*\(/,_f=/\b(?:shiki|prism|hljs|highlightjs|getHighlighter|codeToHtml|codeToHast|refractor|lowlight|starry-night)\b|highlight\.js/i,vf=/[:=]\s*[^\n;]*(?:\b(?:katex|shiki|hljs|prism|mermaid)\b|hast-util-to-html|renderHtmlFromRichText|(?:toHtml|render[A-Za-z]*(?:Html|HTML)|renderToString|renderToStaticMarkup|codeToHtml|codeToHast)\s*\()/i,yf=/\b(?:(?:katex|shiki|hljs|prism|mermaid|highlighter)[\w$]*\.(?:render\w*|highlight\w*|codeTo(?:Html|Hast))|(?:toHtml|render(?:Html|HTML)[A-Za-z]*|render[A-Za-z]*(?:Html|HTML)|renderToString|renderToStaticMarkup|codeToHtml|codeToHast|highlight[A-Za-z]*))\s*\(/i,bf=/^[\w$]+\s*(?:[;,})\n]|$)/,xf=/^[\w$]+\s*(?:\|\||\?\?)\s*(?:"[^"\n]*"|'[^'\n]*'|`[^`$]*`)\s*(?:[;,})\n]|$)/,Sf=/^[\w$]+(?:\.[\w$]+|\[[^\]]*\])+\s*(?:[;,})\n]|$)/,Cf=/<style\b[^<>]*$/,wf=/(?:^|\/)emails(?:\/|$)|email[-_.]templates?(?:\/|$)|RawHtml|[A-Za-z]*[Ee]mail[A-Za-z]*\.(?:t|j)sx?/i,Tf=/(?:^|\/)\.[\w-]+\//,Ef=/(?<!un)saniti[sz]e?d?[\w-]*\.[cm]?[jt]sx?$/i,Df=/(?:^|[^\w$.])([\w$]+(?:\.[\w$]+)*)(?:(?:\.(?:inner|outer)HTML|\[\s*["'](?:inner|outer)HTML["']\s*\])\s*[+]?=(?!=)|\.insertAdjacentHTML\s*\()/,Of=/\b(?:appendChild|append|prepend|before|after|replaceWith|replaceChild|replaceChildren|insertBefore|insertAdjacentElement)\s*\(/,kf=5e3,Af=e=>{if(!e.startsWith("`"))return null;let t=e.indexOf("`",1);if(t<0||t>kf)return null;let n=e.slice(1,t).match(/\$\{[^}]*\}/g);return n===null?``:n.join(` `)},jf=(e,t,n)=>{let r=Rf(e,t,n);return r===null?null:n.slice(r.initializerStartIndex,r.initializerStartIndex+kf)},Mf=e=>{if(!/^["']/.test(e))return!1;let t=e.replace(/"(?:\\.|[^"\\\n])*"|'(?:\\.|[^'\\\n])*'/g,``),n=t.search(/[;,})\]]/),r=n>=0?t.slice(0,n):t;return/^[\s+]*$/.test(r)},Nf=(e,t)=>{let n=t.includes(`createElement`),r=t.includes(`createHTMLDocument`);if(!n&&!r)return!1;let i=q(e),a=q(e.split(`.`)[0]??e);if(RegExp(`\\b${a}\\s*=\\s*[^\\n;]*(?:getElementById|querySelector|getElementsBy|\\.current\\b|document\\.(?:body|head|documentElement))`).test(t))return!1;if(n&&(RegExp(`${i}\\s*=\\s*document\\.createElement\\(\\s*["'\`]template["'\`]`).test(t)||RegExp(`${a}\\s*=\\s*[^\\n;]*\\bcreateElement\\(\\s*["'\`](?:style|textarea)["'\`]`).test(t))||r&&RegExp(`${a}\\s*=\\s*[^\\n;]*\\bcreateHTMLDocument\\s*\\(`).test(t))return!0;if(!n||!RegExp(`${a}\\s*=\\s*[^\\n;]*\\bcreateElement\\s*\\(`).test(t))return!1;let o=RegExp(`${Of.source}[^)]*\\b${a}\\b`),s=RegExp(`\\breturn\\b[^\\n]*\\b${a}\\b(?!\\s*\\.\\s*(?:textContent|innerText|innerHTML|outerHTML))`);return o.test(t)||s.test(t)?!1:RegExp(`\\b${a}\\.(?:textContent|innerText|querySelector|querySelectorAll|children|childNodes)\\b`).test(t)},Pf=e=>{let t=[],n=``,r=0,i=null;for(let a=0;a<e.length;a+=1){let o=e[a];if(i!==null){n+=o,o===i&&e[a-1]!==`\\`&&(i=null);continue}if(o===`"`||o===`'`||o==="`"){i=o,n+=o;continue}if(o===`(`||o===`[`||o===`{`?r+=1:(o===`)`||o===`]`||o===`}`)&&--r,o===`+`&&r===0&&e[a-1]!==`+`&&e[a+1]!==`+`){t.push(n),n=``;continue}n+=o}return t.push(n),t},Ff=e=>{let t=e.replace(/[;}]\s*$/,``).trim();if(!t.includes(`+`))return!1;let n=Pf(t).map(e=>e.trim()).filter(e=>e.length>0);return n.length<2?!1:n.every(e=>{let t=e.replace(/\(\s*([\w$]+(?:\??\.[\w$]+)*)\s+as\s+[^)]*\)/g,`$1`);return uf.test(t)?!sf.test(t.replace(uf,``)):!1})},If=(e,t)=>{let n=0,r=null;for(let i=t;i<e.length;i+=1){let t=e[i];if(r!==null){t===r&&e[i-1]!==`\\`&&(r=null);continue}if(t===`"`||t===`'`||t==="`"){r=t;continue}if(t===`{`&&(n+=1),t===`}`&&(--n,n===0))return i}return e.length},Lf=(e,t)=>{let n=[],r=null,i=!1,a=!1;for(let o=0;o<t;o+=1){let t=e[o],s=e[o+1];if(i){t===`
|
|
13
|
+
`&&(i=!1);continue}if(a){t===`*`&&s===`/`&&(a=!1,o+=1);continue}if(r!==null){t===r&&e[o-1]!==`\\`&&(r=null);continue}if(t===`/`&&s===`/`){i=!0,o+=1;continue}if(t===`/`&&s===`*`){a=!0,o+=1;continue}if(t===`"`||t===`'`||t==="`"){r=t;continue}t===`{`&&n.push(o),t===`}`&&n.pop()}let o=n.at(-1);return o===void 0?e.length:If(e,o)},Rf=(e,t,n)=>{let r=RegExp(`(const|let|var)\\s+${q(e)}\\s*(?::[^=\\n]*)?=\\s*([^;\\n]+)`,`g`),i=null,a=-1;for(let e of n.matchAll(r)){let r=e.index;if(r===void 0||r>=t||r<=a||Lf(n,r)<t)continue;a=r;let o=e[2];o!==void 0&&(i={declarationIndex:r,initializer:o,initializerStartIndex:r+e[0].length-o.length,isImmutable:e[1]===`const`})}return i},zf=(e,t,n,r)=>{if(t.isImmutable)return!0;let i=r.slice(t.initializerStartIndex+t.initializer.length,n);return!RegExp(`(?:^|[^\\w$.])${q(e)}\\s*=(?!=)`).test(i)},Bf=(e,t,n)=>{if(!/highlight/i.test(e))return!1;let r=e.match(/^([\w$]+)/)?.[1];if(r===void 0)return!1;let i=Rf(r,n,t);return i===null?/highlighted/i.test(e)||_f.test(t):zf(r,i,n,t)&&yf.test(i.initializer)},Vf=(e,t,n,r=new Set)=>{let i=e.trim(),a=Pf(i);if(a.length>1)return a.every(e=>Vf(e,t,n,r));let o=[...i.matchAll(/\$\{([^}]*)\}/g)].flatMap(e=>e[1]===void 0?[]:[e[1]]);if(o.length>1)return o.every(e=>Vf(e,t,n,r));let s=i.match(/^([\w$]+)(?:(?:\??\.[\w$]+)|(?:\[\s*(?:"[^"\n]*"|'[^'\n]*'|\d+)\s*\]))*$/)?.[1];if(s&&!r.has(s)){let e=Rf(s,n,t);if(e&&zf(s,e,n,t)){let n=new Set(r);return n.add(s),Vf(e.initializer,t,e.initializerStartIndex,n)}}return!!(cf.test(`${i};`)||lf.test(`${i};`)||df.test(i)||mf.test(i)||hf.test(i)||gf.test(i)||Bf(i,t,n))},Hf=(e,t,n,r,i=new Set)=>{let a=e.trim().match(/^([\w$]+)$/)?.[1];if(!a)return!1;if(a===t)return!0;if(i.has(a))return!1;let o=Rf(a,n,r);if(!o?.isImmutable)return!1;let s=new Set(i);return s.add(a),Hf(o.initializer,t,o.initializerStartIndex,r,s)},Uf=(e,t,n)=>{let r=[/function\s+([\w$]+)\s*\(([^)]*)\)\s*\{/g,/(?:const|let|var)\s+([\w$]+)\s*=\s*(?:async\s*)?\(([^)]*)\)\s*=>\s*\{/g],i=null,a=-1;for(let o of r)for(let r of n.matchAll(o)){let o=r.index;if(o===void 0||o>=t||o<a)continue;let s=If(n,o+r[0].lastIndexOf(`{`));if(s<t)continue;let c=(r[2]??``).split(`,`).findIndex(t=>t.trim().match(/^(?:\.\.\.)?([\w$]+)/)?.[1]===e);if(c<0)continue;a=o;let l=r[1]??``;i={bodyEndIndex:s,declarationNameIndex:o+r[0].indexOf(l),functionName:l,parameterIndex:c}}return i},Wf=e=>{let t=[],n=0,r=0,i=null;for(let a=0;a<e.length;a+=1){let o=e[a];if(i!==null){o===i&&e[a-1]!==`\\`&&(i=null);continue}if(o===`"`||o===`'`||o==="`"){i=o;continue}(o===`(`||o===`[`||o===`{`)&&(r+=1),(o===`)`||o===`]`||o===`}`)&&--r,o===`,`&&r===0&&(t.push(e.slice(n,a).trim()),n=a+1)}return t.push(e.slice(n).trim()),t},Gf=(e,t,n,r=new Set)=>{let i=e.trim().match(/^([\w$]+)$/)?.[1];if(i===void 0||r.has(i))return!1;if(Uf(i,t,n)!==null)return!0;let a=Rf(i,t,n);if(!a||!zf(i,a,t,n))return!1;let o=new Set(r);return o.add(i),Gf(a.initializer,a.initializerStartIndex,n,o)},Kf=(e,t,n,r,i)=>{let a=e.trim();if(Vf(a,t,n))return!1;let o=a.match(/^([\w$]+)(?:\.|\s*(?:[;,})\n]|$))/)?.[1];if(o===void 0)return sf.test(a);if(r.has(o))return!1;r.add(o);let s=Rf(o,n,t),c=Uf(o,n,t);if(s!==null&&(c===null||s.declarationIndex>c.declarationNameIndex))return zf(o,s,n,t)&&Vf(s.initializer,t,s.initializerStartIndex)?!1:!zf(o,s,n,t)||Kf(s.initializer,t,s.initializerStartIndex,r,i)?!0:Gf(s.initializer,s.initializerStartIndex,t)?!1:sf.test(a);if(c!==null&&c.functionName.length>0){let e=RegExp(`\\b${q(c.functionName)}\\s*\\(`,`g`),n=!1,s=!0;for(let a of t.matchAll(e)){if(a.index===c.declarationNameIndex||i.has(a.index))continue;let e=a.index+a[0].lastIndexOf(`(`),l=Wu(t,e);if(l<0)continue;let u=Wf(t.slice(e+1,l))[c.parameterIndex];if(u===void 0||a.index>=c.declarationNameIndex&&a.index<=c.bodyEndIndex&&Hf(u,o,a.index,t))continue;n=!0,s&&=Vf(u,t,a.index);let d=new Set(r);d.delete(o);let f=new Set(i);if(f.add(a.index),Kf(u,t,a.index,d,f))return!0}return n?!s&&sf.test(a):sf.test(a)}return sf.test(a)},qf=U({id:`dangerous-html-sink`,title:`HTML injection sink with dynamic content`,severity:`warn`,recommendation:`Prefer rendering structured React nodes. If HTML is required, sanitize with a well-reviewed sanitizer and keep the trust boundary close to the sink.`,scan:e=>{if(e.isGeneratedBundle||!G(e.relativePath)||wf.test(e.relativePath)||Tf.test(e.relativePath)||Ef.test(e.relativePath)||!af.test(e.content))return[];let t=rf(e.content,e.absolutePath),n=[],r=e.content.split(`
|
|
14
|
+
`);for(let i=0;i<r.length;i+=1){let a=r[i]??``;if(!af.test(a))continue;let o=a.slice(0,a.search(af)).replace(/"[^"]*"|'[^']*'|`[^`]*`/g,``);if(/(?:^|[^:])\/\//.test(o)||/^\s*[/*]/.test(a))continue;let s=r.slice(i,i+1+4).join(`
|
|
15
|
+
`),c=of.exec(s);if(c===null)continue;let l=(c[1]??``).trimStart(),u=l.slice(0,300),d=u.search(/[;}]/),f=d>=0?u.slice(0,d+1):u,p=r.slice(0,i).join(`
|
|
16
|
+
`).length+ +(i>0)+a.search(af),m=t.find(e=>p>=e.startIndex&&p<e.endIndex)?.proof;if(m?.isConclusive&&m.isSafe)continue;let h=m?.isConclusive===!0;if(cf.test(f)||lf.test(f))continue;if(uf.test(f)&&!f.includes(`+`)){let e=f.replace(uf,``);if(!sf.test(e))continue}if(Ff(f))continue;let ee=of.exec(r.slice(i,i+1+60).join(`
|
|
17
|
+
`))?.[1]?.trimStart(),te=Af(ee??l),g=bf.test(f)||Sf.test(f)||xf.test(f)?f.match(/^[\w$]+/)?.[0]:void 0;if(te===null&&g!==void 0&&bf.test(f)&&Uf(g,p,e.content)===null){let t=jf(g,p,e.content);if(t!==null){if(Mf(t))continue;te=Af(t)}}if(te===``)continue;let ne=te??f,re=Pf(ne).length>1||(te?.match(/\$\{/g)?.length??0)>1;if(!h&&!re&&df.test(ne)||!re&&mf.test(ne)||!re&&hf.test(ne)||!h&&!Kf(ne,e.content,p,new Set,new Set)||!h&&gf.test(f)||!h&&Bf(f,e.content,p))continue;if(g!==void 0){let t=q(g),n=Rf(g,p,e.content),r=n?.initializer;if(!(r!==void 0&&(Pf(r).length>1||(r.match(/\$\{/g)?.length??0)>1))){let i=RegExp(`\\b${t}\\b\\s*${vf.source}`,`i`);if(!h&&(r===void 0?i.test(e.content):n!==null&&zf(g,n,p,e.content)&&yf.test(r)))continue;let a=RegExp(`\\b${t}\\b\\s*${ff.source}`,`i`);if(!h&&(r===void 0?a.test(e.content):n!==null&&zf(g,n,p,e.content)&&ff.test(`=${r}`)))continue}if(RegExp(`\\b${t}\\b\\s*${pf.source}`).test(e.content)||RegExp(`highlight[\\w$]*\\s*\\.map\\(\\s*(?:async\\s+)?\\(?\\s*${t}\\b`,`i`).test(e.content)&&_f.test(e.content))continue}if(Sf.test(f)){let t=f.match(/\.([\w$]+)\s*(?:[;,})\n]|$)/)?.[1];if(t!==void 0&&RegExp(`\\b${q(t)}\\s*:\\s*${hf.source}`).test(e.content))continue}let ie=Df.exec(a),ae=ie?.[1]??ie?.[2];if(ae!==void 0&&Nf(ae,e.content))continue;let oe=r.slice(Math.max(0,i-5),i+1).join(`
|
|
18
|
+
`).slice(0,-a.length+a.search(af));Cf.test(oe)||n.push({message:`HTML is injected from a dynamic-looking source, which can become XSS if the value is user-controlled or unsanitized.`,line:i+1,column:a.search(/\S/)+1})}return n}}),Jf=e=>!(!G(e)||Wc.test(e)||Kc.test(e)),Yf=/firebase|firestore|supabase|\b(?:setDoc|addDoc)\s*\(/i,Xf=U({id:`firebase-client-owned-authz-field`,title:`Client writes authorization field`,severity:`error`,recommendation:`Derive authority fields on the server or enforce them in Firebase/Supabase rules; never trust client-provided owner, org, or role values.`,scan:K({shouldScan:e=>Jf(e.relativePath)&&(Yf.test(e.content)||Yf.test(e.relativePath)),pattern:/(?:\b(?:setDoc|updateDoc|addDoc)\s*\(|(?:\b(?:firebase|firestore|getFirestore)\b|\bcollection\s*\(|\.collection\s*\()[\s\S]{0,500}\.(?:set|update|add)\s*\()(?:[^;'"`]|'[^'\n]*'|"[^"\n]*"|`[^`]*`){0,700}\b(?:ownerId|ownerID|creatorId|creatorID|providerId|providerID|orgId|orgID|tenantId|tenantID|workspaceId|workspaceID|ghostOrg|role|roles|isAdmin)\b/i,message:`Client code writes an ownership, tenant, or role field that should be server-owned and immutable.`})}),Zf=U({id:`firebase-permissive-rules`,title:`Permissive Firebase security rule`,severity:`error`,recommendation:"Bind every read/write to `request.auth.uid`, immutable ownership, and tenant membership instead of treating sign-in as authorization.",scan:K({shouldScan:e=>ul(e.relativePath),pattern:/allow\s+(?:read|write|create|update|delete|list|get|read,\s*write)\s*:\s*if\s+(?:true|request\.auth\s*!=\s*null)\s*;?/i,message:`Firebase rules grant broad access to everyone or to any signed-in user, which is the Chattr/Firewreck failure mode.`})}),Qf=U({id:`firebase-query-filter-as-auth`,title:`Firestore query filter used as authorization`,severity:`warn`,recommendation:"Make sure Firestore rules compare the requested document against `request.auth.uid` and trusted membership data.",scan:K({shouldScan:e=>Jf(e.relativePath),pattern:/\.where\s*\(\s*["'](?:uid|userId|userID|ownerId|ownerID|orgId|orgID|tenantId|tenantID|role)["']\s*,\s*["']==["']/i,message:`Firestore query code filters by an auth-shaped field; filtering is not authorization unless rules enforce the same boundary.`})}),$f=/api\.github\.com|github\.com|gitlab\.com|bitbucket\.org/gi,ep=/\$\{([^}]*)\}/g,tp=/\b(?:params|searchParams|query|req|request|input|payload)\s*[.[]|\buntrusted|\bdecodeURI\w*/,np=/encodeURIComponent\s*\(/,rp=/^\s*[\w$]+\.toString\(\)\s*$/,ip=U({id:`git-provider-url-injection-risk`,title:`Git provider URL built from interpolation`,severity:`warn`,recommendation:`Validate owner, repo, org, and branch identifiers against strict slugs and build URLs with URL/path encoders instead of raw interpolation.`,scan:e=>{if(!G(e.relativePath))return[];let t=[];for(let n of e.content.matchAll($f)){let r=e.content.slice(n.index,n.index+200),i=r.indexOf("`"),a=i>=0?r.slice(0,i):r;if(!Array.from(a.matchAll(ep)).some(e=>{let t=e[1]??``;return tp.test(t)&&!np.test(t)&&!rp.test(t)}))continue;let o=W(e.content,n.index);t.push({message:`GitHub/GitLab/Bitbucket URL construction interpolates path components that may be attacker-controlled.`,line:o.line,column:o.column});break}return t}}),ap=/child_process|childProcess|execa|subprocess|Deno\.run/,op=/(?:\b(?:eval|new\s+Function|vm\.runIn\w*)|(?<![.\w$])(?:exec(?:File)?(?:Sync)?|spawn(?:Sync)?)|\b(?:child_process|childProcess|cp)\.(?:exec|spawn)\w*)\s*\([^;]{0,200}(?<!["'])\b(?:exif|metadata|manifest|preset|plugin|upload|drop(?:ped|s)?\b|archive|zip|unzip|untar)(?!\w*["'])/,sp=/(?:\b(?:eval|new\s+Function|vm\.runIn\w*)|\b(?:child_process|childProcess|cp)\.(?:exec|spawn)\w*)\s*\([^;]{0,200}(?<!["'])\b(?:exif|metadata|manifest|preset|plugin|upload|drop(?:ped|s)?\b|archive|zip|unzip|untar)(?!\w*["'])/,cp=`Imported metadata, uploads, or plugin manifests appear to reach code execution.`,lp=K({shouldScan:()=>!0,pattern:op,ignoreStringLiterals:!0,message:cp}),up=K({shouldScan:()=>!0,pattern:sp,ignoreStringLiterals:!0,message:cp}),dp=U({id:`import-metadata-execution-risk`,title:`Imported metadata reaches code execution`,severity:`error`,recommendation:`Parse imported metadata as data with strict schemas; do not evaluate EXIF, manifests, presets, dropped files, or archives.`,scan:e=>G(e.relativePath)?ap.test(e.content)?lp(e):up(e):[]}),fp=/createHash\s*\(\s*["'](?:md5|sha1)["']|\bmd5\s*\(/gi,pp=/\b(?:password|token|secret|signature|signing|auth|credential|session|cookie|csrf|api.?key)\b/i,mp=/(?<!cipher\.)\bcreate(?:Cipher|Decipher)\s*\(/,hp=/\bcreate(?:Cipher|Decipher)iv\s*\(\s*["'](?:des|des3|des-?ede3?|rc4|rc2|bf|blowfish)\b/i,gp=/\b(?:DES|RC4|Blowfish)\b/,_p=/\b(?:cipher|decipher|encrypt|decrypt|crypto)\b/i,vp=/[A-Za-z_$][\w$.]{0,100}signature[\w$]*(?:\([^)]*\))?\s*(?:===?|!==?)\s*[A-Za-z_$][\w$.]*(?:\([^)]*\))?|[A-Za-z_$][\w$.]{0,100}(?:\([^)]*\))?\s*(?:===?|!==?)\s*[A-Za-z_$][\w$.]{0,100}signature[\w$]*(?:\([^)]*\))?/i,yp=/(?:===?|!==?)\s*[A-Z](?:[a-z]|[A-Z0-9_]*\b(?!\s*[.(]))|^[A-Z](?:[a-z]|[A-Z0-9_]*\b(?!\s*[.(]))[\w$.]*(?:\([^)]*\))?\s*(?:===?|!==?)/,bp=/signature(?:Method|Type|Status|Algorithm|Kind|Mode|Version)\b/i,xp=/(?:===?|!==?)\s*(?:true|false|null|undefined)\b/,Sp=/\.(?:length|size|byteLength)\s*(?:===?|!==?)|\.(?:length|size|byteLength)\s*$/,Cp=/\bcrypto\b|createH(?:mac|ash)|createSign|createVerify|\bsubtle\b|\bhmac\b|\bdigest\b|\bsha-?(?:1|256|384|512)\b|\bmd5\b|\bwebhook|x-(?:hub-)?signature/i,wp=/\.[cm]?[jt]sx$/i,Tp=/timingSafeEqual|timing.?safe/i,Ep=/gravatar|digest[-_ ]?auth|oauth[-_ ]?1|pkcs#?12|smime|\b_id\b|\betag\b|checksum|cache[-_ ]?key|fingerprint/i,Dp=/token|secret|password|nonce|salt|csrf|credential|otp/i,Op=/(?:focus|render|refresh|remount|redraw|animation|layout|cache|update)[-_]?nonce/i,kp=/Math\.random\s*\(/g,Ap=/createHash|md5|cipher|encrypt|decrypt|crypto|signature|Math\.random/i,jp=(e,t,n,r)=>{for(let i of e.matchAll(t)){let t=e.slice(Math.max(0,i.index-250),i.index+250);if(n.test(t)&&!r?.test(t))return i.index}return-1},Mp=(e,t,n,r)=>{for(let i of e.matchAll(t)){let t=e.lastIndexOf(`
|
|
19
|
+
`,i.index)+1,a=e.indexOf(`
|
|
20
|
+
`,i.index),o=a<0?e.length:a,s=e.slice(t,o);if(!r.test(s)&&n.test(s))return i.index}return-1},Np=U({id:`insecure-crypto-risk`,title:`Weak cryptography in security context`,severity:`warn`,recommendation:"Use modern primitives, `crypto.randomBytes` / Web Crypto randomness, and timing-safe comparisons for signatures, digests, tokens, and auth material.",scan:e=>{if(!G(e.relativePath)||Jc.test(e.relativePath)||Ep.test(e.relativePath)||!Ap.test(e.content))return[];let t=Sl(e),n=jp(t,fp,pp,Ep);if(n<0&&(n=t.search(hp)),n<0&&(n=t.search(mp)),n<0&&_p.test(t)&&(n=t.search(gp)),n<0&&!Tp.test(t)&&!wp.test(e.relativePath)&&Cp.test(t)){let e=vp.exec(t);e!==null&&!yp.test(e[0])&&!bp.test(e[0])&&!xp.test(e[0])&&!Sp.test(e[0])&&(n=e.index)}if(n<0&&(n=Mp(t,kp,Dp,Op)),n<0)return[];let r=W(t,n);return[{message:`Code uses weak hashes, deprecated ciphers, timing-unsafe comparisons, or Math.random in a security-shaped context.`,line:r.line,column:r.column}]}}),Pp=`(?<![A-Za-z0-9])(?:session|sess|sid|connect\\.sid|auth|jwt|access[_-]?token|refresh[_-]?token|id[_-]?token)(?![A-Za-z0-9])`,Fp=`[\`"'][^\`"']*?${Pp}[^\`"']*[\`"']`,Ip=RegExp(`(?:\\.cookies\\.set|cookies\\(\\s*\\)\\.set|\\.cookie)\\s*\\(\\s*${Fp}`,`gi`),Lp=/httpOnly\s*:\s*false\b/i,Rp=/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|`(?:[^`\\]|\\.)*`/g,zp=e=>{let t=e.split(``),n=0,r=null;for(;n<e.length;){let i=e[n];if(r!==null){if(i===`\\`){n+=2;continue}i===r?r=null:i!==`
|
|
21
|
+
`&&(t[n]=` `),n+=1;continue}(i===`"`||i===`'`||i==="`")&&(r=i),n+=1}return t.join(``)},Bp=/cookie\s*:\s*\{/gi,Vp=RegExp(`document\\.cookie\\s*=\\s*[\`"'][^\`"'=;]*?${Pp}[^\`"'=;]*=`,`gi`),Hp=e=>{if(e.trim().length===0)return 0;let t=0,n=null,r=1;for(let i=0;i<e.length;i+=1){let a=e[i];if(n!==null){a===`\\`?i+=1:a===n&&(n=null);continue}a===`"`||a===`'`||a==="`"?n=a:a===`(`||a===`[`||a===`{`?t+=1:a===`)`||a===`]`||a===`}`?--t:a===`,`&&t===0&&(r+=1)}return r},Up=(e,t,n,r,i)=>{t.lastIndex=0;for(let a=t.exec(e);a!==null;a=t.exec(e)){if(!r(a.index,a[0]))continue;let t=W(e,a.index);i.push({message:n,line:t.line,column:t.column})}},Wp=U({id:`insecure-session-cookie`,title:`Auth cookie missing HttpOnly protection`,severity:`warn`,recommendation:"Set auth/session cookies server-side with `httpOnly: true`, `secure: true`, and `sameSite`. Cookies set via `document.cookie` or with `httpOnly: false` are readable by any XSS payload and can be stolen.",scan:e=>{if(!G(e.relativePath))return[];let t=Sl(e);if(!/cookie/i.test(t))return[];let n=[],r=`An auth/session cookie is exposed to JavaScript (set via document.cookie, with httpOnly: false, or without cookie options), letting an XSS payload steal it.`;Ip.lastIndex=0;for(let e=Ip.exec(t);e!==null;e=Ip.exec(t)){let i=e.index+e[0].lastIndexOf(`(`),a=Wu(t,i);if(a<0)continue;let o=t.slice(i+1,a),s=Hp(o)<3,c=o.replace(Rp,``);if(!s&&!Lp.test(c))continue;let l=W(t,e.index);n.push({message:r,line:l.line,column:l.column})}let i=zp(t);Bp.lastIndex=0;for(let e=Bp.exec(i);e!==null;e=Bp.exec(i)){let t=e.index+e[0].length-1,a=Wu(i,t),o=a>=0?i.slice(t,a):i.slice(t,t+400);if(!Lp.test(o))continue;let s=W(i,e.index);n.push({message:r,line:s.line,column:s.column})}return Up(t,Vp,r,()=>!0,n),n}}),Gp=/\b(?:alg|algorithms?)\s*:\s*\[?\s*["'`]none["'`]/gi,Kp=(e,t)=>{let n=null,r=[];for(let i=0;i<t;i+=1){let t=e[i];if(n==="`"){t===`\\`?i+=1:t==="`"?n=null:t===`$`&&e[i+1]===`{`&&(r.push(0),n=null,i+=1);continue}if(n!==null){t===`\\`?i+=1:t===n&&(n=null);continue}if(t===`"`||t===`'`||t==="`")n=t;else if(r.length>0){let e=r.length-1;t===`{`?r[e]+=1:t===`}`&&(r[e]===0?(r.pop(),n="`"):--r[e])}}return n!==null},qp=U({id:`jwt-insecure-verification`,title:`JWT verified with the 'none' algorithm`,severity:`error`,recommendation:"Never accept the `none` algorithm; it disables signature verification and lets any forged token through. Pin the real algorithm(s) explicitly (`jwt.verify(token, key, { algorithms: ['RS256'] })`).",scan:e=>{if(!G(e.relativePath))return[];let t=Sl(e);if(!/\bjwt\b|jsonwebtoken|\bjose\b/i.test(t))return[];let n=[];Gp.lastIndex=0;for(let e=Gp.exec(t);e!==null;e=Gp.exec(t)){if(Kp(t,e.index))continue;let r=W(t,e.index);n.push({message:`JWT is configured with the 'none' algorithm, which disables signature verification, so any forged token is accepted.`,line:r.line,column:r.column})}return n}}),Jp=/PRIVATE KEY|SSH_PRIVATE_KEY|GPG_PRIVATE_KEY|DEPLOY_KEY|SIGNING_KEY/i,Yp=U({id:`key-lifecycle-risk`,title:`Long-lived key material in repository`,severity:`error`,committedFilesOnly:!0,recommendation:`Remove private keys from source, rotate exposed credentials, prefer short-lived deploy credentials, and document revocation/expiry for release keys.`,scan:K({shouldScan:e=>!Gc.test(e.relativePath)&&!Yc.test(e.relativePath)&&Jp.test(e.content),pattern:/(?<!(?:placeholder|example|sample|dummy|fake)[\s\S]{0,40})-----BEGIN (?:RSA |EC |OPENSSH |DSA )?PRIVATE KEY-----(?:\s|\\r|\\n)*[A-Za-z0-9+/=][A-Za-z0-9+/=\s]{38,}(?![^-]{0,160}\.\.\.)|\b(?:SSH_PRIVATE_KEY|GPG_PRIVATE_KEY|DEPLOY_KEY|SIGNING_KEY)\b\s*[:=]\s*["'][^"'\n]{16,}["']/i,message:`Private or long-lived release key material appears in the repository.`})}),Xp=U({id:`local-rpc-native-bridge-risk`,title:`Weak localhost native bridge boundary`,severity:`warn`,recommendation:`Use exact origin allowlists after URL parsing, per-request nonces, narrow methods, and never expose install/update commands to arbitrary web pages.`,scan:K({shouldScan:e=>G(e.relativePath),pattern:/\b(?:127\.0\.0\.1|localhost|Access-Control-Allow-Origin|websocket|WebSocket)\b[\s\S]{0,700}(?:\b(?:UpdateApp|InstallApp|child_process)\b|(?<![.\w$])(?:exec(?:File)?(?:Sync)?|spawn(?:Sync)?)\s*\()/i,message:`Code appears to bridge browser code to localhost/native capabilities with weak origin or update/install checks.`})}),Zp=/\bfrom\s+["']@modelcontextprotocol\/sdk[^"']*["']|\bMcpServer\b|\bMcpAgent\b/,Qp=/@modelcontextprotocol\/sdk|\bMcpServer\b|\bMcpAgent\b/,$p=/\bserver\.\s*tool\s*\(|\bregisterTool\s*\(|\bsetRequestHandler\s*\(\s*CallToolRequestSchema/,em=/\b(?:tool|registerTool|setRequestHandler)\b/,tm=U({id:`mcp-tool-capability-risk`,title:`MCP tool exposes dangerous capability`,severity:`warn`,recommendation:`MCP tool calls run with the connecting client's authority. Validate inputs, enforce per-tool authorization, and avoid raw filesystem/shell/network access where possible.`,scan:K({shouldScan:e=>G(e.relativePath)&&Qp.test(e.content)&&em.test(e.content)&&$c.test(e.content),pattern:$p,requireAll:[Zp,$c],ignoreStringLiterals:!0,message:`An MCP tool/resource/prompt handler appears to expose file, shell, network, or code-execution capability.`})}),nm=U({id:`mdx-ssr-execution-risk`,title:`Server-rendered MDX can execute code`,severity:`warn`,recommendation:`Use a constrained compiler for untrusted content, disable expressions/raw HTML, sandbox renderers, and avoid caching attacker-controlled output across tenants.`,scan:K({shouldScan:e=>G(e.relativePath),pattern:/(?:@mdx-js\/mdx|next-mdx-remote|\b(?:MDXRemote|compileMDX|evaluateMdx)\b)[\s\S]{0,700}\b(?:repo\b|customer|tenant|user[-_]?(?:content|markdown|mdx|input|provided|generated|submitted)|untrusted|searchParams|req\.|request\.|fetch\s*\(|prisma\.|db\.|database|rehypeRaw|allowDangerousHtml)/i,message:`MDX/markdown rendering code may evaluate user or repository content during SSR or static generation.`})}),rm=U({id:`nosql-injection-risk`,title:`NoSQL query accepts operator-shaped input`,severity:`warn`,recommendation:"Coerce scalar fields before querying, reject operator keys from client input, and avoid `$where` or request-derived regexes.",scan:K({shouldScan:e=>al(e.relativePath,Uc),pattern:/\$where\s*['"]?\s*:\s*(?:f?['"`][^'"`]{0,200}\$\{|function|f['"])|\.find\s*\(\s*JSON\.parse\s*\(\s*(?:req|request)\.|\.aggregate\s*\(\s*\[?\s*\{[^}]{0,400}\$where|\bnew\s+RegExp\s*\(\s*(?:req|request)\.|\$regex['"]?\s*:\s*(?:req|request)\./i,message:"Code appears to pass raw JSON, regex, or `$where` style input into a NoSQL query."})}),im=[...zl.filter(e=>!e.test(`service_role`)),Bl],am=U({id:`package-metadata-secret`,title:`Secret-like package metadata`,severity:`warn`,recommendation:`Keep secrets out of package metadata and generated reports; they are often published to registries, logs, or browser artifacts.`,scan:e=>{if(!e.relativePath.endsWith(`package.json`))return[];let t=pu(e.content)??im.find(t=>t.test(e.content));if(t===void 0)return[];let n=Rc(e.content,t);return[{message:`Package metadata contains secret-like values or public env secret names.`,line:n.line,column:n.column}]}}),om=U({id:`path-traversal-risk`,title:`Filesystem path uses caller input`,severity:`warn`,recommendation:`Resolve paths against a fixed base directory, reject traversal after normalization, and map user-visible identifiers to server-owned paths.`,scan:K({shouldScan:e=>G(e.relativePath)&&!Fu(e.relativePath),pattern:/\b(?:readFile|readFileSync|writeFile|writeFileSync)\s*\(\s*(?:req\.|request\.|params\.|query\.|body\.|parsed\.|`[^`]*(?<![-./\w$'"`])(?:req\.|request\.|params\.|query\.|body\.))|\bpath\.(?:join|resolve)\s*\([^)]*(?<![-./\w$'"`])(?<!basename\(\s{0,4})(?:req\.|request\.|params\.|query\.|body\.|parsed\.)/,message:`Filesystem access appears to use request, query, params, or body data as part of the path.`})}),sm=/\b(?:repoUrl|updateUrl|UpdateApp|InstallApp|auto.?updater?|installer|curl(?!\s+(?:-T\b|--upload-file\b))|wget)\b[\s\S]{0,250}(?:\.(?:zip|exe|dmg|appimage|msi|deb|rpm)\b|\.tar\.gz\b|\|\s*(?:bash|sh)\b)/i,cm=/sha(?:256|512|1)sum|--checksum|checksum=|EXPECTED_SHA|gpg\s+--verify|\.sha(?:256|512)\b/i,lm=/\b(?:child_process|childProcess|execa|os\.system|subprocess\.|Deno\.run|autoUpdater|electron-updater)\b|\b(?:exec(?:File)?(?:Sync)?|spawn(?:Sync)?)\s*\(/,um=/.\/\.github\/workflows\//i,dm=/(?:^|\/)[\w-]+[.@-]\d+\.\d+\.\d+(?:[-.][\w.]+)?\//,fm=e=>rl(e)&&!um.test(e)&&!dm.test(e)&&!Jc.test(e),pm=U({id:`plugin-update-trust-risk`,title:`Plugin or updater trust boundary risk`,severity:`warn`,recommendation:`Require signed updates/plugins, pin trusted repositories, verify hashes before execution, and keep custom repository installs behind explicit warnings.`,scan:e=>{if(!G(e.relativePath)&&!fm(e.relativePath))return[];let t=Sl(e);if(!sm.test(t)||cm.test(t)||Vc.test(e.relativePath)&&!lm.test(t))return[];let n=Rc(t,sm);return[{message:`Code appears to download, install, update, or execute plugin/updater content across a trust boundary.`,line:n.line,column:n.column}]}}),mm=/origin(?!al)|\.source\s*[!=]==?/i,hm=/\b(?:event|e|evt|msg|message)\.data\b/,gm=/\b(?:const|let|var)\s+[^;=]*=\s*$/,_m=/port\d?\b|worker|channel|broadcast|socket|\bws\b|\bsse\b|eventsource|^_?self\.|^source\./i,vm=String.raw`=\s*new\s+(?:EventSource|WebSocket|Worker|SharedWorker|BroadcastChannel|MessageChannel)\b`,ym=(e,t)=>{let n=/^[\w$]+/.exec(e)?.[0];return n===void 0?!1:RegExp(`(?<![\\w$.])${q(n)}\\s*${vm}`).test(t)},bm=/worker/i,xm=(e,t)=>{let n=J(t),r=Gu(t);return n<0||r<0?``:e.slice(n,r)},Sm=(e,t)=>{if(t.type===`CallExpression`){let n=_(t.callee)?xm(e,t.callee):``;if(!n.endsWith(`addEventListener`))return null;let r=t.arguments[0];return _(r)&&r.type===`Literal`&&r.value===`message`?n:null}if(t.type===`AssignmentExpression`&&_(t.left)){let n=xm(e,t.left);return n.endsWith(`.onmessage`)?n:null}return null},Cm=U({id:`postmessage-origin-risk`,title:`postMessage handler without origin check`,severity:`warn`,recommendation:"Validate `event.origin` against an exact allowlist before using `event.data`, especially when an iframe or parent window can be attacker-controlled.",scan:e=>{if(!G(e.relativePath)||bm.test(e.relativePath))return[];let t=e.content.includes(`onmessage`),n=e.content.includes(`addEventListener`)&&(e.content.includes(`message`)||e.content.includes(`\\`));if(!t&&!n)return[];let r=Ut({filename:e.absolutePath,sourceText:e.content,shouldAttachParentReferences:!1});if(r===null)return[];let i=[];return k(r,t=>{let n=Sm(e.content,t);if(n===null||_m.test(n)||ym(n,e.content))return;let r=xm(e.content,t),a=r.search(hm);if(a<0)return;let o=r.search(mm);if(o>=0&&(gm.test(r.slice(0,a))||o<a))return;let s=W(e.content,J(t));i.push({message:`A message event handler reads cross-window messages without an obvious origin check.`,line:s.line,column:s.column})}),i}}),wm=/(?:^|\/)(?:locales?|i18n|lang|langs|translations?)\//i,Tm=/(?:^|\/)(?:\.env(?:\.[^/]*)?|(?:debug|crash|trace|stack[-_]?trace|report|dump|phpinfo)(?:[-_.][^/]*)?\.(?:txt|log|json|html?)|[^/]+\.log)$/i,Em=e=>nl(e,Zc.test(e))&&!wm.test(e)&&Tm.test(e),Dm=U({id:`public-debug-artifact`,title:`Public debug artifact`,severity:`warn`,recommendation:`Remove debug artifacts from public output; logs and dumps often reveal source paths, internal routes, tokens, or environment snapshots.`,scan:e=>{if(!Em(e.relativePath))return[];let t={message:`A browser-reachable debug, log, dump, report, or env artifact is present.`,line:1,column:1};return[zl.some(t=>t.test(e.content))?{...t,severity:`error`}:t]}}),Om=/(?:^|\/)docs?\//i,km=U({id:`public-env-secret-name`,title:`Secret-like public env variable`,severity:`warn`,recommendation:`Public env prefixes are inlined into browser bundles. Rename public values to non-secret names, and keep tokens, passwords, private keys, and service-role credentials server-only.`,scan:e=>{if(!Jf(e.relativePath)||Om.test(e.relativePath))return[];let t=pu(e.content);if(t===void 0)return[];let n=Rc(e.content,t);return[{message:`Client code references a public env variable whose name looks like a secret or privileged credential.`,line:n.line,column:n.column}]}}),Am=`(?:"[^"\\n]{0,200}"|'[^'\\n]{0,200}'|\`[^\`$]{0,200}\`)`,jm=`\\s*\\(?\\s*(?:${Am}|(?:[\\w\$]+(?:\\.[\\w\$]+)*\\.escape(?:Id|Literal|Identifier)|(?:[\\w\$]+\\.)*(?:connection|conn|client|pool|db|mysql|sqlstring|knex)\\.escape)\\s*\\([^()]{0,200}\\))\\s*\\)?`,Mm=U({id:`raw-sql-injection-risk`,title:`Raw SQL built outside parameter binding`,severity:`warn`,recommendation:`Keep user input in driver parameters or ORM bind variables. Avoid unsafe/raw SQL helpers and string interpolation for queries.`,scan:K({shouldScan:e=>Iu(e.relativePath),pattern:[/\$queryRawUnsafe\s*\(/,/\$executeRawUnsafe\s*\(/,/\bPrisma\.raw\s*\((?!\s*(?:["'][^"'\n]*["']\s*[,)]|`[^`$]*`))/,/\bsql\.\s*(?:raw|unsafe)\s*\((?!\s*(?:["'][^"'\n]*["']\s*[,)]|`[^`$]*`))/,/\b(?:client|pool|conn)\.query\s*\(\s*['"`]\s*(?:SELECT|INSERT|UPDATE|DELETE)\b[^)]{0,400}\$\{(?!\s*[\w$.]*(?:sanitiz|escape|quote)[\w$]*\s*\()/i,RegExp(`\\.query\\s*\\(\\s*${Am}(?:\\s*\\+${jm})*\\s*\\+(?!${jm})`,`i`),/\.(?:where|orderBy|having)Raw\s*\((?!\s*(?:["'][^"'\n]*["']\s*[,)]|`[^`$]*`))/,/\bcursor\.execute\s*\(\s*f['"]/,/\bcursor\.execute\s*\(\s*(?:"[^"]{0,400}"|'[^']{0,400}')\s*(?:%|\.format\s*\(|\+)/,/\b(?:engine|session)\.execute\s*\(\s*(?:text\s*\(\s*)?f['"]/,/\$[\w]+->(?:query|exec|prepare|executeQuery|executeStatement|createQuery|createNativeQuery)\s*\(\s*(?:"[^"]{0,400}"|'[^']{0,400}')\s*\.\s*\$/,/mysqli_query\s*\(\s*[^,]+,\s*(?:"[^"]{0,400}"|'[^']{0,400}')\s*\.\s*\$/],message:`Code uses a raw SQL escape hatch or string-built query shape that can bypass parameter binding.`})}),Nm=e=>Bc.test(e)||/(?:^|\/)\.npmrc$/.test(e)||/(?:^|\/)[^/]*(?:credential|credentials|service-account|serviceAccount|firebase-admin|google-service-account|gcp-service-account)[^/]*\.(?:json|env|pem|key)$/i.test(e),Pm=e=>/(?:^|\/)\.env(?:\.[^./]+)*\.(?:example|sample|template|dist|defaults?)$|(?:^|\/)[^/]*(?:example|sample|template)[^/]*\.(?:env|json|pem|key)$/i.test(e),Fm=U({id:`repository-secret-file`,title:`Secret file checked into repository`,severity:`error`,committedFilesOnly:!0,recommendation:`Remove committed env files, service-account credentials, npm auth tokens, and webhook URLs; rotate exposed values and keep only redacted examples in source.`,scan:e=>{if(!Nm(e.relativePath)||Pm(e.relativePath)||Gc.test(e.relativePath))return[];let t=zl.find(t=>t.test(e.content))??pu(e.content);if(t===void 0)return[];let n=Rc(e.content,t);return[{message:`A repository credential/config file contains secret-looking values.`,line:n.line,column:n.column}]}}),Im=`(?:req|request|ctx\\.req|ctx\\.request)\\.(?:body|query|params)|await\\s+(?:req|request)\\.json\\(\\s*\\)`,Lm=U({id:`request-body-mass-assignment`,title:`Request input spread without field allowlist`,severity:`warn`,recommendation:"Assign explicit, allowlisted fields (or validate with a strict schema and no `.passthrough()`) instead of spreading/merging request input. Otherwise the client can set ownership, role, or price columns (mass assignment) or pollute the prototype.",scan:K({shouldScan:e=>G(e.relativePath),pattern:[RegExp(`\\.\\.\\.\\s*(?:${Im})`,`i`),RegExp(`(?:Object\\.assign\\s*\\(|_\\.(?:merge|mergeWith|defaultsDeep)\\s*\\(|(?:^|[^.\\w])(?:merge|defaultsDeep)\\s*\\()[\\s\\S]{0,80}?(?:${Im})`,`i`)],message:`Request input is spread or merged into an object without a field allowlist, enabling mass assignment (client-set owner/role/price fields) or prototype pollution.`})}),Rm=U({id:`secret-in-fallback`,title:`Hardcoded secret fallback for env var`,severity:`error`,recommendation:"Remove the literal fallback and fail closed (throw when the variable is unset). The hardcoded value is a committed secret, and the `??`/`||` default makes the app run with it in any environment that forgot to set the var.",scan:K({shouldScan:e=>G(e.relativePath),pattern:/\bprocess\.env\.(?!(?:(?:(?:NEXT|EXPO|GATSBY|NUXT|REACT_APP|VITE)_)?PUBLIC_[A-Z0-9_]*(?<!_SECRET)(?<!_PRIVATE_KEY)(?<!_PASSWORD)(?<!_PASSWD)|[A-Z0-9_]*(?:PUBLISHABLE|ANON)_KEY)(?![A-Z0-9_]))[A-Z][A-Z0-9_]*(?:SECRET|TOKEN|PASSWORD|PASSWD|PRIVATE_KEY|API_?KEY|APIKEY|ACCESS_KEY|CLIENT_SECRET|CREDENTIAL|SIGNING_KEY|ENCRYPTION_KEY|WEBHOOK_SECRET|SERVICE_ROLE)[A-Z0-9_]*(?<!_(?:NAME|HEADER|ENDPOINT|URL|URI|ID|PREFIX|SUFFIX|PARAM|PARAMS|FIELD|ISSUER|AUDIENCE|ALGORITHM|ALG|REGION|BUCKET|HOST|HOSTNAME|PORT|PATH|VERSION|SCOPE|TYPE|FORMAT|EXPIRY|TTL))\s*(?:\?\?|\|\|)\s*(["'`])(?![0-9]+["'`])(?![a-z][a-z0-9]*(?:[_-][a-z0-9]+)*[_-](?:token|secret|key|password|passwd|credential)s?["'`])(?![\w-]{0,12}0{8,}["'`])(?!test test test test test test test test test test test junk["'`])(?!(?:changeme|change[_-]?me|placeholder|your[_-]|example|sample|dummy|development|local|todo|replace[_-]?me|https?:\/\/|x{3,}|\*{3,}))[^"'`\n]{8,}\1/i,message:`A secret env var has a hardcoded string fallback: the literal is a committed secret and the app fails open (uses it) when the variable is unset.`})}),zm=(e,t)=>{if(!y(e,`Program`))return!1;for(let n of e.body){if(!y(n,`ExpressionStatement`)||n.directive===void 0)return!1;if(n.directive===t)return!0}return!1},Bm=(e,t=`source.tsx`)=>{let n=Ut({filename:t,sourceText:e,shouldAttachParentReferences:!1});return n===null?!1:zm(n,`use server`)},Vm=K({shouldScan:e=>Jf(e.relativePath),pattern:/\b(?:ownerId|ownerID|creatorId|creatorID|userId|userID|uid|providerId|providerID|orgId|orgID|tenantId|tenantID|teamId|teamID|workspaceId|workspaceID|ghostOrg|role|roles|isAdmin|admin)\b/,requireAll:[/\b(?:supabase\b|\.from\s*\(\s*["'][^"']+["']\s*\))[\s\S]{0,700}\b(?:insert|upsert|update)\s*\(\s*(?:\{|\[?\s*\{)[\s\S]{0,700}\b(?:ownerId|creatorId|userId|orgId|tenantId|role|isAdmin)\b/i],message:`Client Supabase code appears to write user, tenant, owner, or role fields that should be enforced by RLS.`}),Hm=U({id:`supabase-client-owned-authz-field`,title:`Client writes Supabase authorization field`,severity:`error`,recommendation:"Use RLS policies based on `auth.uid()` and server-owned membership rows; do not trust client-provided owner, org, or role columns.",scan:e=>{let t=Vm(e);return t.length===0?t:Bm(e.content,e.relativePath)?[]:t}}),Um=e=>/(?:^|\/)supabase\/(?:migrations|schemas)\//.test(e),Wm=e=>e.endsWith(`.sql`)||Um(e),Gm=/^\$[A-Za-z_]?\w*\$/,Km=new Set([`do`,`plpgsql`,`sql`,`plpython3u`,`plpythonu`,`plperl`,`plperlu`,`plv8`]),qm=(e,t)=>{let n=t-1;for(;n>=0&&/\s/.test(e[n]??``);)--n;let r=n;for(;r>=0&&/[A-Za-z0-9_]/.test(e[r]??``);)--r;return e.slice(r+1,n+1).toLowerCase()},Jm=(e,t,n,r)=>{let i=n,a=!1;for(;i<r;){let n=e[i];if(n===`;`){a=!1,i+=1;continue}if(/[A-Za-z_]/.test(n)){let t=i;for(;t<r&&/[A-Za-z0-9_]/.test(e[t]??``);)t+=1;e.slice(i,t).toLowerCase()===`execute`&&(a=!0),i=t;continue}if(n===`'`){let n=a;for(n||(t[i]=` `),i+=1;i<r;){if(e[i]===`'`){if(e[i+1]===`'`){n||(t[i]=` `,t[i+1]=` `),i+=2;continue}n||(t[i]=` `),i+=1;break}!n&&e[i]!==`
|
|
22
|
+
`&&(t[i]=` `),i+=1}continue}if(n===`"`){for(i+=1;i<r;){if(e[i]===`"`){if(e[i+1]===`"`){i+=2;continue}i+=1;break}i+=1}continue}if(n===`-`&&e[i+1]===`-`){for(;i<r&&e[i]!==`
|
|
23
|
+
`;)t[i]=` `,i+=1;continue}if(n===`/`&&e[i+1]===`*`){for(;i<r;){if(e[i]===`*`&&e[i+1]===`/`){t[i]=` `,t[i+1]=` `,i+=2;break}e[i]!==`
|
|
24
|
+
`&&(t[i]=` `),i+=1}continue}i+=1}},Ym=e=>{let t=e.split(``),n=0;for(;n<e.length;){let r=e[n];if(r===`-`&&e[n+1]===`-`){for(;n<e.length&&e[n]!==`
|
|
25
|
+
`;)t[n]=` `,n+=1;continue}if(r===`/`&&e[n+1]===`*`){for(;n<e.length;){if(e[n]===`*`&&e[n+1]===`/`){t[n]=` `,t[n+1]=` `,n+=2;break}e[n]!==`
|
|
26
|
+
`&&(t[n]=` `),n+=1}continue}if(r===`'`){for(t[n]=` `,n+=1;n<e.length;){if(e[n]===`'`){if(e[n+1]===`'`){t[n]=` `,t[n+1]=` `,n+=2;continue}t[n]=` `,n+=1;break}e[n]!==`
|
|
27
|
+
`&&(t[n]=` `),n+=1}continue}if(r===`$`){let r=Gm.exec(e.slice(n));if(r!==null){let i=r[0],a=e.indexOf(i,n+i.length),o=a<0?e.length:a+i.length,s=qm(e,n);if(Km.has(s))Jm(e,t,n+i.length,o);else for(let r=n;r<o;r+=1)e[r]!==`
|
|
28
|
+
`&&(t[r]=` `);n=o;continue}}if(r===`"`){for(n+=1;n<e.length;){if(e[n]===`"`){if(e[n+1]===`"`){n+=2;continue}n+=1;break}n+=1}continue}n+=1}return t.join(``)},Xm=/disable\s+row\s+level\s+security/i,Zm=/auth\.role\(\)\s*=\s*["']service_role["']/i,Qm=/create\s+policy/gi,$m=/;|create\s+policy/i,eh=/\b(?:using|with\s+check)\s*\(\s*true\s*\)/i,th=/\bfor\s+select\b/i,nh=/\bto\s+([\s\S]+?)(?=\s+(?:using|with\s+check|as|for)\b|;|$)/i,rh=new Set([`service_role`,`postgres`,`supabase_admin`]),ih=e=>{let t=nh.exec(e);if(t===null)return!1;let n=t[1].split(`,`).map(e=>e.trim().replace(/["'`]/g,``).toLowerCase()).filter(Boolean);return n.length>0&&n.every(e=>rh.has(e))},ah=(e,t)=>Zm.test(t)?!0:!eh.test(e)||th.test(e)?!1:!ih(e),oh=U({id:`supabase-rls-policy-risk`,title:`Permissive Supabase RLS policy`,severity:`error`,recommendation:"Keep public-read policies explicit, but gate inserts, updates, deletes, and service-role bypasses behind `auth.uid()` plus trusted tenant membership.",scan:e=>{if(!Wm(e.relativePath))return[];let t=Ym(e.content),n=t.search(Xm);Qm.lastIndex=0;for(let r=Qm.exec(t);r!==null;r=Qm.exec(t)){let i=r.index+r[0].length,a=t.slice(i).search($m),o=a<0?t.length:i+a;if(ah(t.slice(r.index,o),e.content.slice(r.index,o))){(n<0||r.index<n)&&(n=r.index);break}}if(n<0)return[];let{line:r,column:i}=W(t,n);return[{message:`Supabase policy SQL disables RLS, permits writes broadly, or references a service-role bypass.`,line:r,column:i}]}}),sh=/create\s+(?:unlogged\s+)?table\s+(?:if\s+not\s+exists\s+)?(?!["`]?(?:auth|storage|realtime|vault|extensions|graphql|graphql_public|pgbouncer|net|supabase_functions|supabase_migrations|cron|pgsodium|pgmq|information_schema|pg_catalog|pg_temp|private|internal)["`]?\s*\.)(?:["`]?public["`]?\s*\.\s*)?["`]?([A-Za-z_][\w$]*)["`]?(?:\s*\(|\s+as\b)/gi,ch=/alter\s+table\s+(?:if\s+exists\s+)?(?:only\s+)?(?:["`]?public["`]?\s*\.\s*)?["`]?([A-Za-z_][\w$]*)["`]?\s+(?:force\s+)?enable\s+row\s+level\s+security/gi,lh=/\benable\s+row\s+level\s+security\b/gi,uh=e=>{let t=new Map,n=0;for(let r of e.matchAll(ch)){let e=r[1];e!==void 0&&(n+=1,t.set(e.toLowerCase(),r.index))}return{lastEnableIndexByTable:t,staticEnableCount:n}},dh=(e,t)=>(e.match(lh)?.length??0)>t,fh=U({id:`supabase-table-missing-rls`,title:`Supabase table created without Row Level Security`,severity:`error`,recommendation:"Enable RLS in the same migration (`alter table <name> enable row level security;`) and add `auth.uid()`-scoped policies for select/insert/update/delete. A public table without RLS is fully readable and writable with the public anon key.",scan:e=>{if(!Um(e.relativePath))return[];let t=Ym(e.content);if(!/create\s+(?:unlogged\s+)?table/i.test(t))return[];let n=[],{lastEnableIndexByTable:r,staticEnableCount:i}=uh(t);if(dh(t,i))return[];sh.lastIndex=0;for(let e=sh.exec(t);e!==null;e=sh.exec(t)){let i=e[1];if(i===void 0)continue;let a=r.get(i.toLowerCase());if(a!==void 0&&a>=e.index)continue;let o=W(t,e.index);n.push({message:`Supabase migration creates a public table but never enables Row Level Security, leaving every row exposed to the anon key.`,line:o.line,column:o.column})}return n}}),ph=U({id:`svg-filter-clickjacking-risk`,title:`SVG-filtered iframe clickjacking primitive`,severity:`warn`,recommendation:"Avoid filtering cross-origin iframes. Use `frame-ancestors` on sensitive pages and keep SVG filters away from embedded privileged UI.",scan:K({shouldScan:e=>G(e.relativePath),pattern:/<iframe\b(?:=>|[^>]){0,300}\bfilter\s*:\s*["']?url\(#|filter\s*:\s*url\(#[\s\S]{0,700}<iframe\b|<fe(?:DisplacementMap|ColorMatrix|Composite|Tile|Morphology)\b[\s\S]{0,700}<iframe\b/i,message:`An iframe is rendered through an SVG/CSS filter, which can support advanced clickjacking or visual exfiltration tricks.`})}),mh=e=>G(e)?Wc.test(e)?!0:/(?:^|\/)(?:middleware|route)\.[cm]?[jt]sx?$/.test(e):!1,hh=U({id:`tenant-static-proxy-risk`,title:`Tenant-controlled static asset proxy`,severity:`warn`,recommendation:`Bind tenant identity to the trusted host or authenticated org, canonicalize after decoding, reject traversal, and never let one tenant choose another tenant's asset prefix.`,scan:K({shouldScan:e=>mh(e.relativePath),pattern:/\b(?:fetch|path\.join|getObject\w*|GetObjectCommand|getSignedUrl|createReadStream)\s*\([^;]{0,200}(?:\$\{[^}]{0,100}\b(?:tenant|subdomain|workspace|hostPattern|(?<!\.)organization(?:Id|Slug)?)\b|\b(?:tenant|subdomain|workspace)(?:Id|Slug|Name)?\b\s*[,)+\].])/i,message:`Route code appears to compose tenant or subdomain input into a static/CDN/object-store fetch path.`})}),gh=[/dangerouslySetInnerHTML\s*=\s*\{\{\s*__html\s*:[\s\S]{0,300}?\bJSON\.stringify\s*\(/gi,/<script\b[^>]*>(?:(?!<\/script>)[\s\S]){0,300}?\bJSON\.stringify\s*\(/gi],_h=/\$\{|["'`]\s*\+\s*$/,vh=/^\s*\{(?!\{)/,yh=/"(?:[^"\\\n]|\\.)*"|'(?:[^'\\\n]|\\.)*'/g,bh=/\b(?:true|false|null)\b|[\d.]+(?:e[+-]?\d+)?/gi,xh=e=>{if(e.includes("`")||e.includes("${"))return!1;let t=e.replace(yh,``).replace(bh,``);return!/[A-Za-z_$]/.test(t)},Sh=/^[\s)]*\.replace\s*\([^)]*(?:\\u003[cC]|<|<)/,Ch=/(?:\b(?:escapeHtml|escapeJSON|escapeJson|htmlEscape|jsesc)|(?<![.\w])(?:serialize|serializeJavascript|devalue|uneval|superjson))\s*\(\s*$/i,wh=/\bJSON\.stringify\s*\($/i,Th=U({id:`unsafe-json-in-html`,title:`Unescaped JSON in HTML or script sink`,severity:`warn`,recommendation:'JSON.stringify does not HTML-escape, so a `<\/script>` (or `<`) in the data breaks out and becomes XSS. Use an HTML-safe serializer (serialize-javascript, devalue) or escape `<`, `>`, and `&`, or pass data via a JSON `<script type="application/json">` read with JSON.parse.',scan:e=>{if(!G(e.relativePath))return[];let t=Sl(e);if(!t.includes(`JSON.stringify`))return[];let n=[],r=new Set;for(let[e,i]of gh.entries()){i.lastIndex=0;for(let a=i.exec(t);a!==null;a=i.exec(t)){let i=a[0].replace(wh,``);if(Ch.test(i))continue;if(e===1){let e=t.indexOf(`>`,a.index),n=a[0].search(/\bJSON\.stringify\s*\($/i);if(e>=0&&n>=0){let r=t.slice(e+1,a.index+n);if(!_h.test(r)||vh.test(r))continue}}let o=a.index+a[0].length-1,s=Wu(t,o);if(s>=0){let e=t.slice(s+1,s+1+160);if(Sh.test(e)||xh(t.slice(o+1,s)))continue}if(r.has(a.index))continue;r.add(a.index);let c=W(t,a.index);n.push({message:"JSON.stringify is embedded in HTML/script markup without HTML-escaping; data containing `<\/script>` or `<` breaks out and becomes XSS.",line:c.line,column:c.column})}}return n}}),Eh=/(?:(?<![.\w$])fetch|\baxios\.\s*(?:get|post|put|delete|head)|\bgot|\bgot\.\s*(?:get|post))\s*\(\s*([^,)]+)/,Dh=/\b(?:url|targetUrl|callbackUrl|redirectUrl|webhookUrl|companyUrl|websiteUrl|domainUrl|imageUrl|fetchUrl|next|return_to|returnTo|destination|location)\b/i,Oh=/\breq\.|\brequest\.(?:query|body|params|nextUrl)|\bsearchParams\b|\bparams\.|\bbody\.|\bquery\./,kh=/\bredirect\s*:\s*["'](?:manual|error)["']/,Ah=/\b(params|body|query)\./g,jh=(e,t)=>RegExp(`(?:const|let|var)\\s+${e}\\s*(?::[^=;\\n]{0,80})?=\\s*new\\s+URLSearchParams\\b`).test(t),Mh=(e,t)=>{let n=e.replace(Ah,(e,n)=>jh(n,t)?``:e);return Oh.test(n)},Nh=(e,t)=>{if(Mh(e,t))return!0;let n=/^[\w$]+$/.exec(e.trim());if(n===null)return!1;let r=RegExp(`(?:const|let|var)[^=;\\n]{0,80}\\b${n[0]}\\b[^=;\\n]{0,80}=([^;\\n]*)`,`g`);for(let e of t.matchAll(r)){let n=e[1]??``;if(/\breq\.|\brequest\.|\bsearchParams\b|\$_(?:GET|POST|REQUEST)/.test(n)||Mh(n,t))return!0}return!1},Ph=U({id:`untrusted-redirect-following`,title:`Server fetch follows redirects for caller-shaped URL`,severity:`warn`,recommendation:'Use `redirect: "manual"` or equivalent and re-validate every redirect target before following it to avoid SSRF redirect bypasses.',scan:e=>{if(!mh(e.relativePath)||!Eh.test(e.content))return[];let t=[],n=e.content.split(`
|
|
29
|
+
`);for(let r=0;r<n.length;r+=1){let i=n[r]??``,a=i.match(Eh),o=a?.[1]??``;if(!a||!Dh.test(o)||!Nh(o,e.content))continue;let s=n.slice(r,r+5).join(`
|
|
30
|
+
`);kh.test(s)||t.push({message:`Server-side fetch code appears to follow redirects for a URL shaped like caller-controlled input.`,line:r+1,column:i.search(/\S/)+1})}return t}}),Fh=U({id:`url-prefilled-privileged-action`,title:`URL pre-fills a privileged action`,severity:`warn`,recommendation:`Require server-side validation and explicit confirmation for URL-sourced invite, role, permission, redirect, or sharing parameters.`,scan:K({shouldScan:e=>Jf(e.relativePath),pattern:/(?<!(?:safe|valid|sanitiz|relativ|allowlist|whitelist|parse|normaliz)[\w$]*\(\s*(?:new\s+)?(?:[\w$]+\s*\.\s*){0,4})\b(?:searchParams|useSearchParams\s*\(\s*\)|URLSearchParams\s*\([^)]{0,120}\))(?:[?!])?\.get(?:All)?\s*\(\s*["'](?:userstoinvite|role|permission|sharingaction|invite|admin|next|continue|returnTo|redirect_uri|callbackUrl)["']|\bsearchParams\.(?:userstoinvite|role|permission|sharingaction|invite|admin|returnTo|redirect_uri|callbackUrl)\b/i,message:`Client code reads sensitive action state from the URL, which can pre-fill invites, roles, redirects, or sharing flows with attacker values.`})}),Ih=/(?:^|\/)[^/]*webhook[^/]*\/|(?:^|\/)[^/]*webhook[^/]*\.[cm]?[jt]s$|\bwebhook\b/i,Lh=/\b(?:export\s+(?:async\s+)?function\s+POST|export\s+const\s+(?:POST|handler|webhook)|webhookHandler|webhookRoute)\b/i,Rh=RegExp(`verifySignature|verify.*signature|verify\\w*(?:Webhook|Auth)|constructEvent|createHmac|timingSafeEqual|svix|webhookSecret|stripe\\.webhooks|["'][\\w-]*signature["']|\\b[A-Za-z]{0,40}(?:verif|valid|check|assert|authenticat|compare|guard)[A-Za-z]{0,40}(?:secret|signature|hmac|webhook|digest)[A-Za-z]{0,40}\\s*\\(`,`i`),zh=/webhook[\s_-]?ur[il]\w*/gi,Bh=/process\.env\.\w*WEBHOOK_URL|\b(?:send|post|dispatch|publish|notify)\w*Webhook/,Vh=/\b(?:req|request)\b/,Hh=/\/\/[^\n]*|\/\*[\s\S]*?\*\/|"(?:\\.|[^"\\\n])*"|'(?:\\.|[^'\\\n])*'|`(?:\\.|[^`\\])*`/g,Uh=U({id:`webhook-signature-risk`,title:`Webhook handler lacks signature verification`,severity:`warn`,recommendation:`Verify provider signatures before parsing or acting on webhook bodies. Use provider SDK helpers or HMAC verification with timing-safe comparison.`,scan:K({shouldScan:e=>{if(!G(e.relativePath)||Bh.test(e.content))return!1;let t=e.content.replace(Hh,``).replace(zh,``);return Ih.test(e.relativePath)||Ih.test(t)},pattern:Lh,requireAll:[Vh],suppressWhen:Rh,message:`Webhook handler code does not show an obvious signature verification step.`})}),Wh=/\.[cm]?[jt]sx?$/i,Gh=/\.d\.[cm]?[jt]s$/i,Kh=/\.mdx$/i,qh=/\.html?$/i,Jh=new Set([`.angular`,`.astro`,`.cache`,`.contentlayer`,`.docusaurus`,`.expo`,`.git`,`.next`,`.nuxt`,`.output`,`.svelte-kit`,`.turbo`,`.vercel`,`build`,`coverage`,`dist`,`node_modules`,`out`,`storybook-static`]),Yh=new WeakMap,Xh=e=>{let t=Yh.get(e);if(t)return t;let n=Ie(e);return Yh.set(e,n),n},Zh=e=>{let t=[],n=[],a=[e],o=!1;for(;a.length>0;){let e=a.pop();if(!e)continue;let s;try{s=r.readdirSync(e,{withFileTypes:!0})}catch{return null}for(let r of s){let s=i.join(e,r.name),c=Jh.has(r.name)||r.name.startsWith(`.`)&&r.name!==`.dumi`&&r.name!==`.storybook`;if(!(r.isSymbolicLink()&&c)){if(r.isSymbolicLink())return null;if(r.isDirectory()){if(c)continue;a.push(s);continue}if(!(!r.isFile()||Ac(s))){if(Kh.test(r.name)){o=!0;continue}if(qh.test(r.name)){n.push(Wi(s));continue}Wh.test(r.name)&&(Gh.test(r.name)||t.push(Wi(s)))}}}}return{sourceFilePaths:t,htmlFilePaths:n,hasOpaqueMdxConsumerSurface:o}},Qh=(e,t)=>{for(let n of e){let e;try{e=r.readFileSync(n,`utf8`)}catch{return!0}for(let n of t)if(e.includes(`"${n}"`)||e.includes(`'${n}'`))return!0}return!1},$h=e=>{if(y(e,`ImportDeclaration`))return fc(e)?null:typeof e.source.value==`string`?e.source.value:null;if(y(e,`ExportNamedDeclaration`))return e.exportKind===`type`||dc(e.specifiers,`ExportSpecifier`,`exportKind`)?null:e.source&&typeof e.source.value==`string`?e.source.value:null;if(y(e,`ExportAllDeclaration`))return e.exportKind===`type`?null:typeof e.source.value==`string`?e.source.value:null;if(y(e,`ImportExpression`))return y(e.source,`Literal`)&&typeof e.source.value==`string`?e.source.value:null;if(y(e,`CallExpression`)&&y(e.callee,`Identifier`)&&e.callee.name===`require`&&e.arguments.length===1){let t=e.arguments[0];return t&&y(t,`Literal`)&&typeof t.value==`string`?t.value:null}return null},eg=(e,t,n,r)=>{k(e.programNode,i=>{let a=$h(i);if(!a)return;let o=An(e.filePath,a);if(!o){r.add(a);return}let s=Wi(o);n.set(i,s);let c=t.get(s)??new Set;c.add(e),t.set(s,c)})},tg=({rootDirectory:e,currentFilePath:t,currentProgramNode:n,currentScopes:r,requiredModuleSources:i=[],knownModuleSources:a})=>{if(i.length>0&&a!==void 0&&!i.some(e=>a.includes(e)))return null;let o=Zh(e);if(!o||i.length>0&&a===void 0&&!Qh(o.sourceFilePaths,i))return null;let s=new Map;for(let e of o.sourceFilePaths){if(e===t){s.set(e,{filePath:e,programNode:n,scopes:r});continue}let i=Gt(e);if(!i||!y(i,`Program`))return null;s.set(e,{filePath:e,programNode:i,scopes:Xh(i)})}let c=new Map,l=new WeakMap,u=new Set;for(let e of s.values())eg(e,c,l,u);return{modulesByFilePath:s,htmlFilePaths:o.htmlFilePaths,consumerModulesByFilePath:c,resolvedSourcePathByNode:l,unresolvedRuntimeSources:u,hasOpaqueMdxConsumerSurface:o.hasOpaqueMdxConsumerSurface}},ng=e=>{if(!e)return null;let t=D(e);return!y(t,`Literal`)||typeof t.value!=`boolean`?null:t.value},rg=(e,t,n={})=>{let r=n.maximumConstAliases===void 0?4:n.maximumConstAliases,i=n.shouldFoldStaticConditions??!1,a=n.shouldKeepKnownValues??!1,o=[],s=[{expression:e,remainingConstAliases:r,resolvingSymbols:new Set}];for(;s.length>0;){let e=s.pop();if(!e)continue;let n=D(e.expression);if(y(n,`Literal`)){if(typeof n.value!=`string`){if(a)continue;return null}o.push(n.value);continue}if(y(n,`TemplateLiteral`)){let e=ka(n);if(e===null){if(a)continue;return null}o.push(e);continue}if(y(n,`ConditionalExpression`)){let t=i?ng(n.test):null;if(t!==null){s.push({expression:t?n.consequent:n.alternate,remainingConstAliases:e.remainingConstAliases,resolvingSymbols:e.resolvingSymbols});continue}s.push({expression:n.alternate,remainingConstAliases:e.remainingConstAliases,resolvingSymbols:new Set(e.resolvingSymbols)}),s.push({expression:n.consequent,remainingConstAliases:e.remainingConstAliases,resolvingSymbols:new Set(e.resolvingSymbols)});continue}if(a&&y(n,`LogicalExpression`)&&(n.operator===`??`||n.operator===`||`)){s.push({expression:n.right,remainingConstAliases:e.remainingConstAliases,resolvingSymbols:new Set(e.resolvingSymbols)}),s.push({expression:n.left,remainingConstAliases:e.remainingConstAliases,resolvingSymbols:new Set(e.resolvingSymbols)});continue}if(y(n,`Identifier`)){let r=t.referenceFor(n)?.resolvedSymbol;if(!r||r.kind!==`const`||!r.initializer||!y(r.declarationNode,`VariableDeclarator`)||r.declarationNode.id!==r.bindingIdentifier||e.remainingConstAliases===0||e.resolvingSymbols.has(r)){if(a)continue;return null}e.resolvingSymbols.add(r),s.push({expression:r.initializer,remainingConstAliases:e.remainingConstAliases===null?null:e.remainingConstAliases-1,resolvingSymbols:e.resolvingSymbols});continue}if(!a)return null}return o.length>0?o:null},ig=(e,t,n={})=>rg(e,t,n),ag=(e,t)=>rg(e,t,{shouldKeepKnownValues:!0}),og=(e,t,n,r,i=!1)=>{let a=e.value;return a?y(a,`Literal`)?typeof a.value==`string`?[a.value]:null:y(a,`JSXExpressionContainer`)?ig(a.expression,t,{maximumConstAliases:n,shouldFoldStaticConditions:r,shouldKeepKnownValues:i}):null:null},sg=(e,t)=>og(e,t,4,!1),cg=(e,t)=>og(e,t,null,!0),lg=(e,t)=>og(e,t,4,!1,!0),ug=(e,t)=>{let n=i.relative(t,e);return n===``||!n.startsWith(`..${i.sep}`)&&n!==`..`&&!i.isAbsolute(n)},dg={attribute:null,expression:null,isPresent:!1,isUnknown:!1},fg={attribute:null,expression:null,isPresent:!1,isUnknown:!0},pg=(e,t,n)=>{for(let r=e.properties.length-1;r>=0;--r){let i=e.properties[r];if(!i)return fg;if(y(i,`SpreadElement`)){if(!y(i.argument,`ObjectExpression`))return fg;let e=pg(i.argument,t,n);if(e.isPresent||e.isUnknown)return e;continue}if(!y(i,`Property`))return fg;let a=M(i,{allowComputedString:!0});if(!a)return fg;if((n?a:a.toLowerCase())===t)return{attribute:null,expression:i.value,isPresent:!0,isUnknown:!1}}return dg},mg=(e,t,n=!0)=>{let r=n?t:t.toLowerCase();for(let t=e.length-1;t>=0;--t){let i=e[t];if(!i)return fg;if(y(i,`JSXSpreadAttribute`)){if(!y(i.argument,`ObjectExpression`))return fg;let e=pg(i.argument,r,n);if(e.isPresent||e.isUnknown)return e;continue}if(!y(i,`JSXAttribute`))continue;let a=Io(i.name);if((n?a:a?.toLowerCase())===r)return{attribute:i,expression:null,isPresent:!0,isUnknown:!1}}return dg},hg=/(?<attributeName>[^\s"'<>/=]+)(?:\s*=\s*(?:"(?<doubleQuoted>[^"]*)"|'(?<singleQuoted>[^']*)'|(?<unquoted>[^\s"'=<>`]+)))?/g,gg=/<!--[\s\S]*?-->|(?<skippedContentOpeningTag><(?<skippedContentTag>script|style|textarea|title|xmp|iframe|noembed|noframes|plaintext|template)\b(?:"[^"]*"|'[^']*'|[^'"<>])*?>)[\s\S]*?(?:<\/\k<skippedContentTag>\s*>|$)|(?<openingTag><[A-Za-z][\w:-]*(?:"[^"]*"|'[^']*'|[^'"<>])*>)/gi,_g=new Map,vg=(e,t,n)=>{if(!e.isPresent)return;let r=e.attribute?lg(e.attribute,t):e.expression?ag(e.expression,t):null;for(let e of r??[]){let t=e?.trim();t&&n.add(t)}},yg=(e,t,n)=>{for(let r of e.properties){if(y(r,`SpreadElement`)){y(r.argument,`ObjectExpression`)&&yg(r.argument,t,n);continue}if(y(r,`Property`)&&M(r,{allowComputedString:!0})?.toLowerCase()===`id`)for(let e of ag(r.value,t)??[]){let t=e.trim();t&&n.add(t)}}},bg=e=>{let t=e.parent;for(y(t,`JSXElement`)&&t.openingElement===e&&(t=t.parent);t;){if(y(t,`JSXElement`)&&$o(t.openingElement)===`template`)return!0;t=t.parent}return!1},xg=(e,t,n)=>{k(e,e=>{if(!y(e,`JSXOpeningElement`)||bg(e))return;let r=mg(e.attributes,`id`,!1);if(r.isUnknown){for(let r of e.attributes)vg(mg([r],`id`,!1),t,n),y(r,`JSXSpreadAttribute`)&&y(r.argument,`ObjectExpression`)&&yg(r.argument,t,n);return}vg(r,t,n)})},Sg=(e,t)=>{for(let n of e.matchAll(gg)){let e=n.groups?.skippedContentOpeningTag??n.groups?.openingTag;if(e)for(let n of e.matchAll(hg)){if(n.groups?.attributeName?.toLowerCase()!==`id`)continue;let e=n.groups?.doubleQuoted??n.groups?.singleQuoted??n.groups?.unquoted??``;e.trim()&&t.add(e.trim())}}},Cg=e=>{if(!i.isAbsolute(e.currentFilePath))return null;let t=e.configuredRootDirectory?Wi(e.configuredRootDirectory):null;return!t||!ug(e.currentFilePath,t)?null:t},wg=()=>{_g.clear()},Tg=e=>{let t=new Set;xg(e.currentProgramNode,e.currentScopes,t);let n=Cg(e);if(!n)return t;if(_g.has(n)){let e=_g.get(n);return e?new Set([...e,...t]):null}let i=tg({rootDirectory:n,currentFilePath:Wi(e.currentFilePath),currentProgramNode:e.currentProgramNode,currentScopes:e.currentScopes});if(!i)return _g.set(n,null),null;let a=new Set;for(let e of i.modulesByFilePath.values())xg(e.programNode,e.scopes,a);try{for(let e of i.htmlFilePaths)Sg(r.readFileSync(e,`utf8`),a)}catch{return _g.set(n,null),null}return _g.set(n,a),new Set([...a,...t])},Eg=()=>{Mn(),vt(),mn(),wg(),kn()},Dg=e=>zc.test(e)||Bc.test(e),Og=e=>{let t=Zc.test(e);return Nm(e)||Wm(e)||ul(e)||rl(e)?{bucket:`priority`,isGeneratedBundleByName:t}:nl(e,t)?{bucket:`artifact`,isGeneratedBundleByName:t}:Dg(e)?{bucket:`other`,isGeneratedBundleByName:t}:null},kg=(e,t)=>t||Dg(e)||rl(e)||Nm(e),Ag=[`nextjs`,`astro`,`vite`,`cra`,`remix`,`gatsby`,`expo`,`react-native`,`tanstack-start`,`preact`,`unknown`];export{Ku as $,v as $i,Ti as $n,$n as $r,os as $t,om as A,nt as Ai,ga as An,$r as Ar,ou as At,dp as B,Xe as Bi,Xi as Bn,zr as Br,ll as Bt,Lm as C,c as Ca,E as Ci,L as Cn,li as Cr,nu as Ct,Dm as D,ut as Di,Ca as Dn,di as Dr,au as Dt,km as E,o as Ea,ct as Ei,Sa as En,ci as Er,du as Et,Xp as F,Qe as Fi,ia as Fn,ti as Fr,Ql as Ft,qf as G,Be as Gi,Wi as Gn,Ur as Gr,bc as Gt,Qf as H,Re as Hi,P as Hn,Vr as Hr,Nc as Ht,Yp as I,et as Ii,ea as In,Jr as Ir,ql as It,pd as J,$e as Ji,zi as Jn,kr as Jr,uc as Jt,wd as K,qe as Ki,Li as Kn,Hr as Kr,dc as Kt,qp as L,Ke as Li,ra as Ln,Yr as Lr,Xl as Lt,rm as M,Ge as Mi,sa as Mn,Gr as Mr,$l as Mt,nm as N,Ye as Ni,oa as Nn,Kr as Nr,cu as Nt,Cm as O,rt as Oi,I as On,qr as Or,tu as Ot,tm as P,Ze as Pi,aa as Pn,Zr as Pr,Zl as Pt,qu as Q,y as Qi,_i as Qn,er as Qr,Hs as Qt,Wp as R,Ue as Ri,ta as Rn,Xr as Rr,Dl as Rt,Rm as S,h as Sa,xt as Si,ja as Sn,ui as Sr,uu as St,Mm as T,s as Ta,st as Ti,wa as Tn,xi as Tr,Yl as Tt,Zf as U,tt as Ui,Ji as Un,Br as Ur,Ac as Ut,ip as V,We as Vi,F as Vn,Lr as Vr,U as Vt,Xf as W,ze as Wi,qi as Wn,Wr,jc as Wt,Qu as X,Le as Xi,M as Xn,j as Xr,cc as Xt,Zu as Y,Ie as Yi,N as Yn,hr as Yr,sc as Yt,Xu as Z,_e as Zi,wi as Zn,tr as Zr,lc as Zt,ph as _,p as _a,jt as _i,ho as _n,Mi as _r,Kl as _t,Tg as a,de as aa,Pn as ai,Yo as an,Ai as ar,wu as at,Hm as b,u as ba,yt as bi,_o as bn,vi as br,lu as bt,cg as c,ie as ca,An as ci,Fo as cn,Ei as cr,Ol as ct,tg as d,ue as da,zt as di,vo as dn,mi as dr,Nl as dt,_ as ea,A as ei,ns as en,Si as er,J as et,Uh as f,se as fa,Rt as fi,z as fn,gi as fr,Al as ft,hh as g,m as ga,Mt as gi,mo as gn,yi as gr,Il as gt,Th as h,te as ha,Nt as hi,go as hn,ai as hr,Fl as ht,Eg as i,le as ia,In as ii,Xo as in,ki as ir,Nu as it,am as j,it as ji,ca as jn,Qr as jr,su as jt,pm as k,at as ki,_a as kn,ei as kr,eu as kt,sg as l,fe as la,pn as li,Mo as ln,si as lr,Ml as lt,Ph as m,pe as ma,Lt as mi,fo as mn,ni as mr,kl as mt,Og as n,he as na,Ln as ni,es as nn,hi as nr,Hu as nt,mg as o,ne as oa,Fn as oi,zo as on,Di as or,Cu as ot,Fh as p,ce as pa,D as pi,yo as pn,pi as pr,Pl as pt,Cd as q,Je as qi,Hi as qn,Ir as qr,fc as qt,kg as r,me as ra,k as ri,$o as rn,ji as rr,Pu as rt,ug as s,re as sa,O as si,Io as sn,Oi as sr,jl as st,Ag as t,ge as ta,Zn as ti,ts as tn,bi as tr,Uu as tt,ng as u,oe as ua,Gt as ui,bo as un,Ci as ur,Ll as ut,fh as v,ee as va,Ot as vi,uo as vn,ii as vr,iu as vt,Fm as w,l as wa,ft as wi,ka as wn,oi as wr,Rl as wt,zm as x,f as xa,bt as xi,Ua as xn,ri as xr,Jl as xt,oh as y,d as ya,kt as yi,po as yn,fi as yr,ru as yt,Np as z,He as zi,na as zn,Rr as zr,El as zt};
|
|
31
|
+
//# sourceMappingURL=capability-BAJBLwvF.js.map
|