@pobammer-ts/small-rules 2.5.2 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2,12 +2,12 @@ import{definePlugin as e,defineRule as t}from"oxlint-plugin-utilities";import n
2
2
  `&&--s;break}return[e.replaceText(n.init,i),e.removeRange([s,o.range[1]])]}function ar(e,t,n){let{sourceCode:r}=e;if(t.arguments.length===0){or(e,t,n);return}if(t.arguments.length>1){sr(e,t,n);return}cr(e,t,n,r)}function or(e,t,n){n.requireExplicitGenericOnNewArray&&(t.typeArguments!==void 0&&t.typeArguments!==null&&t.typeArguments.params.length>0||Qn(t,e.sourceCode)||e.report({messageId:`requireExplicitGenericOnNewArray`,node:t}))}function sr(e,t,n){let[r]=t.arguments;if(r===void 0||r.type!==`SpreadElement`&&n.environment===`roblox-ts`&&!er(r))return;let i=rr(t.arguments,e.sourceCode);if(!t.arguments.some(e=>e.type===`SpreadElement`)){e.report({fix(e){return e.replaceText(t,i)},messageId:`avoidConstructorEnumeration`,node:t});return}e.report({messageId:`avoidConstructorEnumeration`,node:t,suggest:[{fix(e){return e.replaceText(t,i)},messageId:`suggestArrayLiteral`}]})}function cr(e,t,n,r){let[i]=t.arguments;if(i===void 0)return;if(i.type===`SpreadElement`){lr(e,t,r.getText(i.argument));return}if(!er(i)){ur(e,t,n,r.getText(i));return}let a=`[${r.getText(i)}]`;e.report({fix(e){return e.replaceText(t,a)},messageId:`avoidSingleArgumentConstructor`,node:t})}function lr(e,t,n){e.report({messageId:`avoidSingleArgumentConstructor`,node:t,suggest:[{fix(e){return e.replaceText(t,`[...${n}]`)},messageId:`suggestArrayLiteral`}]})}function ur(e,t,n,r){n.environment!==`roblox-ts`&&e.report({messageId:`avoidLengthConstructorInStandard`,node:t,suggest:[{fix(e){return e.replaceText(t,`Array.from({ length: ${r} })`)},messageId:`suggestArrayFromLength`}]})}function dr(e,t,n){let r=t[n];if(r===void 0||!Me(r)||r.kind!==`const`&&r.kind!==`let`||r.declarations.length!==1)return;let[i]=r.declarations;if(i===void 0||!Kn(i.id)||i.init===null||!Ge(i.init)||!qn(e,i.init)||i.init.arguments.length>0||$n(Zn(i.id)))return;let a=i.id.name,o=fr(e,t,n+1,a);if(o.pushStatements.length!==0&&!nr(t,o.nextIndex,a))return{arrayIdentifierName:a,declarator:i,hasUnsafeArgument:o.hasUnsafeArgument,literalText:`[${o.argumentParts.join(`, `)}]`,pushStatements:o.pushStatements,statement:r}}function fr(e,t,n,r){let i=[],a=[],o=!1,s=n;for(;s<t.length;){let n=t[s];if(n===void 0||!Xe(n))break;let c=tr(n.expression,r);if(c===void 0||c.arguments.length===0)break;i.push(n),o=pr(e,c,a)||o,s+=1}return{argumentParts:a,hasUnsafeArgument:o,nextIndex:s,pushStatements:i}}function pr(e,t,n){let r=!1;for(let i of t.arguments){if(i.type===`SpreadElement`){r=!0,n.push(`...${e.getText(i.argument)}`);continue}I(i)||(r=!0),n.push(e.getText(i))}return r}const mr=t({create(e){let t=e.options?.[0],n=typeof t==`object`&&t?{...Gn,...t}:{...Gn},{sourceCode:r}=e;function i(t){for(let n=0;n<t.length;n+=1){let i=dr(r,t,n);if(i!==void 0){if(!i.hasUnsafeArgument){e.report({fix(e){return ir(e,r,i.declarator,i.pushStatements,i.literalText)},messageId:`collapseArrayPushInitialization`,node:i.statement});continue}e.report({messageId:`collapseArrayPushInitialization`,node:i.statement,suggest:[{fix(e){return ir(e,r,i.declarator,i.pushStatements,i.literalText)},messageId:`suggestCollapseArrayPushInitialization`}]})}}}return{BlockStatement(e){i(e.body)},NewExpression(t){qn(r,t)&&ar(e,t,n)},Program(e){i(e.body)}}},meta:{docs:{description:`Disallow array constructor element forms and enforce roblox-ts-aware constructor patterns.`},fixable:`code`,hasSuggestions:!0,messages:{avoidConstructorEnumeration:`Do not use Array constructor enumeration arguments. Use an array literal instead.`,avoidLengthConstructorInStandard:`Length-based Array constructor is not allowed in standard mode. Prefer Array.from({ length: n }).`,avoidSingleArgumentConstructor:`Single-argument Array constructor form is not allowed here. Use an array literal instead.`,collapseArrayPushInitialization:`Collapse new Array<T>() + consecutive .push(...) calls into a single array literal initializer.`,requireExplicitGenericOnNewArray:`new Array() must use an explicit generic argument or a contextual Array<T>/ReadonlyArray<T> annotation.`,suggestArrayFromLength:`Replace with Array.from({ length: value }).`,suggestArrayLiteral:`Replace constructor form with an array literal.`,suggestCollapseArrayPushInitialization:`Collapse constructor + push sequence into a single array literal initializer.`},schema:[{additionalProperties:!1,properties:{environment:{default:`roblox-ts`,description:`Array constructor environment mode: 'roblox-ts' allows new Array(length); 'standard' reports it.`,enum:[`roblox-ts`,`standard`],type:`string`},requireExplicitGenericOnNewArray:{default:!0,description:`When true, zero-argument new Array() requires explicit generic type arguments or contextual array typing.`,type:`boolean`}},type:`object`}],type:`problem`}}),hr=new Set([`parent`,`range`,`loc`,`tokens`,`comments`]);function gr(e){return e.type===`Identifier`}function _r(e){return`type`in e&&typeof e.type==`string`}function vr(e,t){for(let n of Object.keys(e)){if(hr.has(n))continue;let r=Reflect.get(e,n);r!=null&&t.push(r)}}function yr(e,t){let n=[e];for(;n.length>0;){let e=n.pop();if(!(typeof e!=`object`||!e)){if(Array.isArray(e)){for(let t of e)n.push(t);continue}if(_r(e)){if(e.type===`Identifier`&&e.name===t)return!0;vr(e,n)}}}return!1}function br(e,t){let n=w(t.callee);return!gr(n)||n.name!==`Array`?!1:!ie(e,n,`Array`)}function xr(e,t,n){if(!Xe(e))return;let{expression:r}=e;if(!Se(r)||r.operator!==`=`)return;let{left:i}=r;if(!(M(i)&&i.computed))return;let{object:a,property:o}=i;if(!(!gr(a)||a.name!==t)&&!(!We(o)||o.value!==n))return{expression:r,statement:e}}function Sr(e,t,n){let r=t[n];if(r===void 0||!Me(r)||r.declarations.length!==1)return;let[i]=r.declarations;if(i===void 0||!k(i)||i.init===null)return;let{init:a}=i;if(!Ge(a)||a.arguments.length>0||!br(e,a)||!nt(i.id))return;let o=i.id.name,s=[],c=n+1,l=0;for(;c<t.length;){let e=t[c];if(e===void 0)break;let n=xr(e,o,l);if(n!==void 0){s.push(n),l+=1,c+=1;continue}if(yr(e,o))break;c+=1}if(s.length===0)return;let[u]=s,d=s.at(-1);if(!(u===void 0||d===void 0))return{assignments:s.map(t=>({statement:t.statement,valueText:e.getText(t.expression.right)})),declaration:r,declarator:i,firstAssignmentStatement:u.statement,lastAssignmentStatement:d.statement}}function Cr(e,t,n){let{declaration:r,declarator:i,assignments:a,firstAssignmentStatement:o,lastAssignmentStatement:s}=n,{init:c}=i;if(c===null)return[];let l=`[${a.map(e=>e.valueText).join(`, `)}]`,u=[e.replaceText(c,l)],[d]=r.range,[,f]=r.range,[p]=o.range,[,m]=s.range,h=t.text.slice(f,p);if(h.trim().length>0){let n=d;n>0&&t.text[n-1]===`
3
3
  `&&--n;let i=h;n===d&&i.startsWith(`
4
4
  `)&&(i=i.slice(1));let a=t.getText(r),o=t.getText(c),s=a.indexOf(o),u=s===-1?a:`${a.slice(0,s)}${l}${a.slice(s+o.length)}`;return[e.replaceTextRange([n,m],`${i}${u}`)]}let g=p;for(;g>f;){let e=t.text[g-1];if(e===` `||e===` `){--g;continue}e===`
5
- `&&--g;break}return u.push(e.removeRange([g,m])),u}const wr=t({create(e){let{sourceCode:t}=e;function n(n){let r=0;for(;r<n.length;){let i=Sr(t,n,r);if(i===void 0){r+=1;continue}e.report({fix(e){return Cr(e,t,i)},messageId:`preferArrayLiteral`,node:i.declaration}),r=n.indexOf(i.lastAssignmentStatement)+1}}return{BlockStatement(e){n(e.body)},Program(e){n(e.body)}}},meta:{docs:{description:`Disallow new Array<T>() followed by contiguous index assignments; use an array literal instead.`},fixable:`code`,messages:{preferArrayLiteral:`Use an array literal instead of new Array<T>() followed by index assignments.`},schema:[],type:`suggestion`}});function Tr(e){return typeof e!=`object`||!e?!1:`allowAutofix`in e?e.allowAutofix===void 0||typeof e.allowAutofix==`boolean`:!0}function Er(e,t,n){if(e.type!==t.type)return!1;switch(e.type){case`CallExpression`:return t.type===`CallExpression`&&n.getText(e)===n.getText(t);case`Identifier`:return t.type===`Identifier`&&e.name===t.name;case`Literal`:return t.type===`Literal`&&e.value===t.value&&e.raw===t.raw;case`MemberExpression`:return t.type===`MemberExpression`&&Dr(e,t,n);case`Super`:return t.type===`Super`;case`ThisExpression`:return t.type===`ThisExpression`;default:return!1}}function Dr(e,t,n){return e.computed!==t.computed||e.optional!==t.optional||!Er(e.object,t.object,n)?!1:e.computed?Or(e.property,t.property,n):kr(e.property,t.property)}function Or(e,t,n){return rt(e)&&rt(t)&&Er(e,t,n)}function kr(e,t){return e.type===`PrivateIdentifier`||t.type===`PrivateIdentifier`?e.type===`PrivateIdentifier`&&t.type===`PrivateIdentifier`&&e.name===t.name:t.type===`Identifier`&&e.type===`Identifier`&&e.name===t.name}function Ar(e,t){switch(e.type){case`Identifier`:case`ThisExpression`:return!0;case`Literal`:return t;case`MemberExpression`:return e.optional||!Ar(e.object,!1)?!1:e.computed?rt(e.property)?Ar(e.property,!0):!1:e.property.type===`Identifier`||e.property.type===`PrivateIdentifier`;default:return!1}}function jr(e){return Ar(e,!1)}function Mr(e){return e.type!==`CallExpression`||e.optional||e.arguments.length>0||e.callee.type!==`MemberExpression`||e.callee.optional||e.callee.computed||e.callee.property.type!==`Identifier`?!1:e.callee.property.name===`size`}function Nr(e,t,n){if(!(e.operator!==`=`||e.left.type!==`MemberExpression`||!e.left.computed)){if(n===`roblox-ts`&&Mr(e.left.property))return Er(e.left.object,e.left.property.callee.object,t)?e.left:void 0;if(n===`standard`){let{property:n}=e.left;if(n.type===`MemberExpression`&&!n.optional&&!n.computed&&n.property.type===`Identifier`&&n.property.name===`length`)return Er(e.left.object,n.object,t)?e.left:void 0}}}const Pr=t({create(e){let[t]=e.options,n=Tr(t)&&t.allowAutofix,r=t?.environment===`standard`?`standard`:`roblox-ts`,{sourceCode:i}=e;return{AssignmentExpression(t){let a=Nr(t,i,r);if(a===void 0)return;let o=t.parent.type===`ExpressionStatement`?t.parent:void 0;if(!(n&&o!==void 0&&jr(a.object))){e.report({messageId:`usePush`,node:t});return}let s=i.getText(a.object),c=i.getText(t.right);e.report({fix(e){return e.replaceText(o,`${s}.push(${c});`)},messageId:`usePush`,node:t})}}},meta:{docs:{description:`Disallow array append assignments using array[array.size()] = value (roblox-ts) or array[array.length] = value (standard) and prefer push-based appends.`},fixable:`code`,messages:{usePush:`Do not append with array[array.size()] = value or array[array.length] = value. Use array.push(value) instead.`},schema:[{additionalProperties:!1,properties:{allowAutofix:{default:!1,type:`boolean`},environment:{...mn,default:`roblox-ts`,description:`Array environment mode: 'roblox-ts' checks array[array.size()]; 'standard' checks array[array.length].`}},type:`object`}],type:`problem`}}),Fr=/^set[A-Z]/u;function L({callee:e}){if(e.type===`Identifier`)return e.name;if(e.type===`MemberExpression`&&e.property.type===`Identifier`)return e.property.name}function Ir(e){return Fr.test(e)}function Lr(e){let[t]=e.arguments;return t?.type===`ArrowFunctionExpression`||t?.type===`FunctionExpression`?t:void 0}function Rr(e,t){let n=[e];for(;n.length>0;){let e=n.pop();if(e===void 0)break;t(e),Br(e,n)}}function zr(e,t){t(e);for(let n of Object.values(e))Ur(n,e,t)}function Br(e,t){for(let n in e)se(n)||Vr(Reflect.get(e,n),e,t)}function Vr(e,t,n){if(!(typeof e!=`object`||!e||e===t.parent)){if(Array.isArray(e)){Hr(e,t,n);return}D(e)&&n.push(e)}}function Hr(e,t,n){for(let r=e.length-1;r>=0;--r){let i=e[r];i!==t.parent&&D(i)&&n.push(i)}}function Ur(e,t,n){if(Array.isArray(e)){for(let r of e)Ur(r,t,n);return}e===t.parent||!D(e)||zr(e,n)}function Wr(e){let{key:t}=e;if(t.type===`Identifier`)return t.name;if(t.type===`Literal`&&y(t.value))return t.value}function Gr(e){let{value:t}=e;if(t.type===`Identifier`)return t;if(t.type===`AssignmentPattern`&&t.left.type===`Identifier`)return t.left}function Kr(e){let t=0;return Rr(e,e=>{e.type!==`CallExpression`||e.callee.type!==`Identifier`||Ir(e.callee.name)&&(t+=1)}),t}function qr(e,t,n,r,i){if(t===void 0)return 0;if(t.type===`SpreadElement`)return 3;let a=w(t);return a.type===`ArrayExpression`?a.elements.length===0?1:i(e,a,n,r)?2:3:3}const Jr=new Set([`catch`,`finally`,`then`]);function Yr(e){let t=new Set;for(let n of e.body)n.type!==`MethodDefinition`||n.kind!==`method`||!n.value.async||n.key.type===`Identifier`&&t.add(n.key.name);return t}function Xr(e){return e.callee.type!==`MemberExpression`||e.callee.property.type!==`Identifier`?!1:Jr.has(e.callee.property.name)}function Zr({callee:e}){let t=w(e);return Fe(t)&&t.async}function Qr({callee:e},t){if(!(e.type!==`MemberExpression`||e.object.type!==`ThisExpression`||e.property.type!==`Identifier`))return t.has(e.property.name)?e.property.name:void 0}function $r(e){let{parent:t}=e;return t?.type!==`AssignmentExpression`||t.right!==e?!1:t.left.type===`MemberExpression`&&t.left.object.type===`ThisExpression`}function ei(e){let{parent:t}=e;if(!(t?.type!==`VariableDeclarator`||t.init!==e))return t.id.type===`Identifier`?t.id.name:void 0}function ti(e){return!Fe(e)||e.parent.type===`ParenthesizedExpression`&&e.parent.parent.type===`CallExpression`&&e.parent.parent.callee===e.parent?!1:e.parent.type!==`CallExpression`||e.parent.callee!==e}function ni(e,t){let n=e;for(;n!==t;){let{parent:e}=n;if(e===null)return!1;if(ti(e))return!0;n=e}return!1}function ri(e,t){let n=Qr(e,t);if(n===void 0||$r(e))return;if(e.parent.type===`ExpressionStatement`)return{data:{methodName:n},messageId:`unhandledAsyncCall`,node:e};let r=ei(e);if(r!==void 0)return{data:{variableName:r},messageId:`orphanedPromise`,node:e}}function ii(e,t){let n=[],r=0;function i(i){if(i!==e&&ni(i,e))return;if(i.type===`AwaitExpression`){n[r++]={messageId:`awaitInConstructor`,node:i};return}if(i.type!==`CallExpression`)return;Xr(i)&&(n[r++]={messageId:`promiseChainInConstructor`,node:i}),Zr(i)&&(n[r++]={messageId:`asyncIifeInConstructor`,node:i});let a=ri(i,t);a!==void 0&&(n[r++]=a)}return zr(e,i),n}const ai=t({create(e){function t(t){e.report({data:t.data,messageId:t.messageId,node:t.node})}return{"MethodDefinition[kind='constructor']"(e){if(e.value.type!==`FunctionExpression`||e.value.body?.type!==`BlockStatement`||e.parent.type!==`ClassBody`)return;let n=Yr(e.parent),r=e.value.body,i=ii(r,n);for(let e of i)t(e)}}},meta:{docs:{description:`Disallow asynchronous operations inside class constructors. Constructors return immediately, so async work causes race conditions, unhandled rejections, and incomplete object states.`},messages:{asyncIifeInConstructor:`Refactor this asynchronous operation outside of the constructor. Async IIFEs create unhandled promises and incomplete object state.`,awaitInConstructor:`Refactor this asynchronous operation outside of the constructor. Using 'await' in a constructor causes the class to be instantiated before the async operation completes.`,orphanedPromise:`Refactor this asynchronous operation outside of the constructor. Promise assigned to '{{variableName}}' is never consumed - errors will be silently swallowed.`,promiseChainInConstructor:`Refactor this asynchronous operation outside of the constructor. Promise chains (.then/.catch/.finally) in constructors lead to race conditions.`,unhandledAsyncCall:`Refactor this asynchronous operation outside of the constructor. Calling async method '{{methodName}}' without handling its result creates uncontrolled async behavior.`},schema:[],type:`problem`}}),oi=[`PlanckSystem`,`System`,`SystemFunction`,`SystemReturn`,`SystemTableLike`],si=new Set([`comments`,`loc`,`parent`,`range`,`tokens`]);function ci(e){if(e.type===`Identifier`)return e.name;if(e.type===`TSQualifiedName`)return ci(e.right)}function li(e,t){if(e==null)return!1;if(e.type===`TSTypeAnnotation`)return li(e.typeAnnotation,t);if(e.type!==`TSTypeReference`)return!1;let n=ci(e.typeName);return n!==void 0&&t.has(n)}function ui(e,t){for(let n of Object.keys(e)){if(si.has(n))continue;let r=Reflect.get(e,n);r!=null&&t.push(r)}}function di(e,t){let n=[e];for(;n.length>0;){let e=n.pop();if(!(typeof e!=`object`||!e)){if(Array.isArray(e)){for(let t of e)n.push(t);continue}D(e)&&t(e)!==!1&&ui(e,n)}}}function fi(e){if(e.type===`Property`)return e.computed?e.key.type===`Literal`&&typeof e.key.value==`string`?e.key.value:void 0:e.key.type===`Identifier`?e.key.name:void 0}function pi(e,t,n){for(let r of e.properties)if(!(fi(r)!==`system`||r.type!==`Property`)){if(N(r.value))n.add(r.value);else if(r.value.type===`Identifier`){let e=t.get(r.value.name);e!==void 0&&n.add(e)}}}function mi(e){if(e.callee.type===`Identifier`)return e.callee.name;if(e.callee.type===`MemberExpression`)return T(e.callee)}function hi(e,t){e.async||e.body===null||di(e.body,n=>N(n)&&n!==e&&n.async?!1:(n.type===`CallExpression`&&mi(n)?.endsWith(`Async`)===!0&&t(n),!0))}const gi=t({create(e){let t=e.options[0]?.additionalSystemTypeNames??[],n=new Set([...oi,...t]);return{"Program:exit"(t){let r=new Map,i=new Set,a=[];di(t,e=>{if(N(e)){e.id!==null&&r.set(e.id.name,e),li(e.returnType,n)&&i.add(e);return}if(e.type===`VariableDeclarator`&&e.id.type===`Identifier`){if(!li(e.id.typeAnnotation,n)||e.init===null)return;N(e.init)?i.add(e.init):e.init.type===`ObjectExpression`&&a.push(e.init);return}e.type===`TSSatisfiesExpression`&&li(e.typeAnnotation,n)&&e.expression.type===`ObjectExpression`&&a.push(e.expression)});for(let e of a)pi(e,r,i);for(let t of i)hi(t,t=>{e.report({messageId:`noAsyncInSystem`,node:t})})}}},meta:{docs:{description:`Disallow Async-suffixed calls in synchronous Planck system execution.`,recommended:!0},messages:{noAsyncInSystem:`Do not call an Async-suffixed function from a synchronous Planck system.`},schema:[{additionalProperties:!1,properties:{additionalSystemTypeNames:{items:{type:`string`},type:`array`,uniqueItems:!0}},type:`object`}],type:`problem`}}),_i=new Set([`useAsyncEffect`,`useEffect`,`useInsertionEffect`,`useLayoutEffect`,`useMountEffect`,`useReactiveEffect`,`useUnmountEffect`,`useUpdateEffect`]),vi=t({create(e){return{CallExpression(t){let n=L(t);if(n===void 0||!_i.has(n))return;let r=Lr(t);if(r===void 0)return;let i=Kr(r);i<3||e.report({data:{count:String(i)},messageId:`cascadingSetState`,node:t})}}},meta:{docs:{description:`Disallow effect hooks with many cascading state updates.`,recommended:!0},messages:{cascadingSetState:`{{count}} setState calls in a single useEffect — consider using useReducer or deriving state`},type:`problem`}});function yi(e){return Math.round(e>1?e:e*255)}function bi(e){return{reportUnknownComponents:typeof e==`object`&&e&&`reportUnknownComponents`in e?e.reportUnknownComponents===!0:!0}}function xi(e){let t=[],n=0,r=!0;for(let i of e){if(!We(i))return;let e=yi(i.value);t[n++]=e,e!==0&&(r=!1)}return[r,t]}const Si=t({create(e){let t=bi(e.options[0]);return{NewExpression(n){if(!Ie(n,`Color3`))return;let r=n.arguments;if(r.length===0)return;let i=xi(r);if(!i){t.reportUnknownComponents&&e.report({messageId:r.length<3?`useFromRGB`:`onlyZeroArgs`,node:n});return}if(r.length<3){let[t,r=0]=i[1];e.report({fix:e=>e.replaceText(n,`Color3.fromRGB(${t}, ${r}, 0)`),messageId:`useFromRGB`,node:n});return}i[0]||e.report({fix:e=>e.replaceText(n,`Color3.fromRGB(${i[1].join(`, `)})`),messageId:`onlyZeroArgs`,node:n})}}},meta:{docs:{description:`Ban new Color3(...) except new Color3() or new Color3(0, 0, 0). Use Color3.fromRGB() instead.`},fixable:`code`,messages:{onlyZeroArgs:`Use Color3.fromRGB() instead of new Color3(). new Color3() uses floats [0-1] and performs worse than Color3.fromRGB() which uses [0-255]. Only 'new Color3()' or 'new Color3(0, 0, 0)' are allowed.`,useFromRGB:`Use Color3.fromRGB() instead of new Color3(). new Color3() uses floats [0-1] and performs worse than Color3.fromRGB() which uses [0-255].`},schema:[{additionalProperties:!1,properties:{reportUnknownComponents:{default:!0,type:`boolean`}},type:`object`}],type:`problem`}});function Ci(e,t){let n=e.scan(t);return n===0?0:1-(1-e.probability)**n}function wi(e,t){let n=0;for(let r of e){let e=Ci(r,t);n=1-(1-n)*(1-e)}return n}function Ti(e,t){return wi(e,t)>=.9}function Ei(e,t){return t.some(t=>Ti(e,t))}function Di(e){return{probability:e,scan(e){for(let t=0;t<e.length-1;t+=1){let n=e.charAt(t),r=e.charAt(t+1);if(n===n.toLowerCase()&&r===r.toUpperCase()&&r!==r.toLowerCase())return 1}return 0}}}const Oi=/\s+/gu;function ki(e,t){if(t===``)return e.length+1;let n=0,r=0;for(;r<=e.length-t.length;){let i=e.indexOf(t,r);if(i===-1)break;n+=1,r=i+t.length}return n}function Ai(e,t){let n=t.map(e=>y(e)?{pattern:e,type:`string`}:{pattern:new RegExp(e.source,`gu`),type:`regexp`});return{probability:e,scan(e){let t=e.replace(Oi,``),r=0;for(let e of n){if(e.type===`string`){r+=ki(t,e.pattern);continue}e.pattern.lastIndex=0;let n=t.match(e.pattern);n&&(r+=n.length)}return r}}}const ji=/\s/u;function Mi(e,t){let n=new Set(t);return{probability:e,scan(e){for(let t=e.length-1;t>=0;--t){let r=e.charAt(t);if(n.has(r))return 1;if(!ji.test(r)&&r!==`*`&&r!==`/`)return 0}return 0}}}const Ni=/[ \t(),{}]/u;function Pi(e,t){let n=new Set(t);return{probability:e,scan(e){let t=e.split(Ni),r=0;for(let e of t)n.has(e)&&(r+=1);return r}}}const Fi=`public.abstract.class.implements.extends.return.throw.private.protected.enum.continue.assert.boolean.this.instanceof.interface.static.void.super.true.case:.let.const.var.async.await.break.yield.typeof.import.export`.split(`.`),Ii=[`++`,`||`,`&&`,`===`,`?.`,`??`],Li=[`for(`,`if(`,`while(`,`catch(`,`switch(`,`try{`,`else{`,`this.`,`window.`,/;\s+\/\//u,`import '`,`import "`,`require(`],Ri=[`}`,`;`,`{`];function zi(){return[Mi(.95,Ri),Pi(.7,Ii),Pi(.3,Fi),Ai(.95,Li),Di(.5)]}const Bi=new Set([`BreakStatement`,`ContinueStatement`,`LabeledStatement`]);function Vi(e){return Bi.has(e.type)}function Hi(e){return{comments:e,value:e.map(({value:e})=>e).join(`
6
- `)}}const Ui=zi();function Wi(e,t,n){let r=e.loc.start.line,i=t.loc.start.line;if(r+1!==i)return!1;let a=n.getTokenAfter(e);return!a||a.loc.start.line>i}function Gi(e,t){let n=[],r=0,i=[],a=0;for(let o of e)if(o.type===`Block`)a>0&&(n[r++]=Hi(i),i=[],a=0),n[r++]=Hi([o]);else if(a===0)i[a++]=o;else{let e=i.at(-1);e&&Wi(e,o,t)?i[a++]=o:(n[r++]=Hi(i),i=[o],a=1)}return a>0&&(n[r]=Hi(i)),n}const Ki=/\{/gu,qi=/\}/gu;function Ji(e){let t=(e.match(Ki)??[]).length-(e.match(qi)??[]).length;return t>0?e+`}`.repeat(t):t<0?`{`.repeat(-t)+e:e}function Yi(e){return Ei(Ui,e.split(`
7
- `))}function Xi(e){return e.type!==`ReturnStatement`&&e.type!==`ThrowStatement`?!1:e.argument?.type===`Identifier`}function Zi(e){return e.type===`UnaryExpression`&&(e.operator===`-`||e.operator===`+`)}function Qi(e){return e.type===`Literal`&&(y(e.value)||b(e.value))}function $i(e){return x(e)&&y(e.type)}function ea(e){let t=[],n=0;for(let r of e)$i(r)&&(t[n++]=r);return t}function ta(e,t){if(e.type!==`ExpressionStatement`)return!1;let{expression:n}=e;return n.type===`Identifier`||n.type===`SequenceExpression`||Zi(n)||Qi(n)||!t.trimEnd().endsWith(`;`)}function na(e,t){if(e.length!==1)return!1;let n=e.at(0);return n?Vi(n)||Xi(n)||ta(n,t):!1}const ra=[/A 'return' statement can only be used within a function body/u];function ia(e){for(let t of e){let e=!1;for(let n of ra)if(n.test(t.message)){e=!0;break}if(!e)return!1}return!0}function aa(e){return(e.errors.length===0||ia(e.errors))&&e.program.body.length>0}function oa(e,t){let n=o(t),r=u(`file${n||`.js`}`,e);if(aa(r))return r;if(n!==`.tsx`&&n!==`.jsx`){let t=u(`file.tsx`,e);if(aa(t))return t}}function sa(e,t){if(!Yi(e))return!1;let n=oa(e,t);return n?!na(ea(n.program.body),e):!1}function ca(e){let t=1;for(let n of e)n===`
8
- `&&(t+=1);return t}const la=t({create(e){let{maxLines:t=0}=e.options[0]??{};return{"Program:exit"(){let n=Gi(e.sourceCode.getAllComments(),e.sourceCode);for(let r of n){let n=r.value.trim();if(n===`}`||ca(r.value)<=t||!sa(Ji(n),e.filename))continue;let i=r.comments.at(0),a=r.comments.at(-1);i&&a&&e.report({loc:{end:a.loc.end,start:i.loc.start},messageId:`commentedCode`,suggest:[{desc:`Remove this commented out code`,fix(e){return e.removeRange([i.range[0],a.range[1]])}}]})}}}},meta:{docs:{description:`Disallow commented-out code`,recommended:!1},hasSuggestions:!0,messages:{commentedCode:`Commented-out code creates confusion about intent and clutters the codebase. Version control preserves history, making dead code comments unnecessary. Delete the commented code entirely. If needed later, retrieve it from git history.`},schema:[{additionalProperties:!1,properties:{maxLines:{default:0,description:`Maximum number of lines of commented code allowed without reporting. Default 0 means any commented code triggers an error.`,type:`number`}},type:`object`}],type:`suggestion`}});function R(e){return{constant:!0,value:e}}function ua(){return{constant:!1}}function da(e){return{constant:!0,value:e}}function fa(){return{constant:!1}}function pa(e){let t=new Set;if(!e?.loopExitCalls)return t;for(let n of e.loopExitCalls)ne(n)&&t.add(n);return t}function ma(e){let t=w(e);if(t.type===`Identifier`)return t.name;if(t.type!==`MemberExpression`)return;let n=ma(t.object);if(n===void 0||n.length===0)return;let r=T(t);if(!(r===void 0||r.length===0))return`${n}.${r}`}function ha(e,t){if(t.size===0)return!1;let n=ma(e.callee);return n===void 0||n.length===0?!1:t.has(n)}function ga(e,t){return z(e.type===`SpreadElement`?e.argument:e,t)}function z(e,t){if(t.size===0)return!1;let n=w(e);switch(n.type){case`ArrayExpression`:return _a(n,t);case`ArrowFunctionExpression`:case`ClassExpression`:case`FunctionExpression`:return!1;case`AssignmentExpression`:return z(n.right,t);case`AwaitExpression`:return z(n.argument,t);case`BinaryExpression`:return va(n,t);case`CallExpression`:return ya(n,t);case`ConditionalExpression`:return ba(n,t);case`LogicalExpression`:return xa(n,t);case`MemberExpression`:return Sa(n,t);case`NewExpression`:return Ca(n,t);case`SequenceExpression`:return n.expressions.some(e=>z(e,t));case`TaggedTemplateExpression`:return wa(n,t);case`TemplateLiteral`:return n.expressions.some(e=>z(e,t));case`UnaryExpression`:case`UpdateExpression`:return z(n.argument,t);case`YieldExpression`:return n.argument?z(n.argument,t):!1;default:return!1}}function _a(e,t){for(let n of e.elements)if(n!==null&&ga(n,t))return!0;return!1}function va(e,t){let{left:n}=e;return n.type!==`PrivateIdentifier`&&z(n,t)?!0:z(e.right,t)}function ya(e,t){return ha(e,t)||z(e.callee,t)?!0:e.arguments.some(e=>ga(e,t))}function ba(e,t){return z(e.test,t)||z(e.consequent,t)||z(e.alternate,t)}function xa(e,t){return z(e.left,t)||z(e.right,t)}function Sa(e,t){return z(e.object,t)?!0:e.computed&&z(e.property,t)}function Ca(e,t){return z(e.callee,t)?!0:e.arguments.some(e=>ga(e,t))}function wa(e,t){return z(e.tag,t)?!0:e.quasi.expressions.some(e=>z(e,t))}function Ta(e){let t=w(e);switch(t.type){case`ArrayExpression`:return R([]);case`ArrowFunctionExpression`:case`ClassExpression`:case`FunctionExpression`:return R(!0);case`Identifier`:return t.name===`undefined`?R(void 0):t.name===`NaN`?R(NaN):t.name===`Infinity`?R(1/0):ua();case`Literal`:return R(t.value);case`LogicalExpression`:return Ea(t);case`ObjectExpression`:return R({});case`SequenceExpression`:{let e=t.expressions.at(-1);return e?Ta(e):ua()}case`TemplateLiteral`:return t.expressions.length>0?ua():t.quasis.length===0?R(``):R(t.quasis[0]?.value.cooked??``);case`UnaryExpression`:return Da(t);default:return ua()}}function Ea(e){let t=Ta(e.left);return t.constant?e.operator===`&&`?t.value===!0?Ta(e.right):R(t.value):e.operator===`||`?t.value===!0?R(t.value):Ta(e.right):t.value===void 0?Ta(e.right):R(t.value):ua()}function Da(e){if(e.operator===`typeof`)return R(`string`);if(e.operator===`void`)return R(void 0);let t=Ta(e.argument);return t.constant?e.operator===`!`?R(!t.value):e.operator===`+`&&b(t.value)?R(t.value):e.operator===`-`&&b(t.value)?R(-t.value):e.operator===`~`&&b(t.value)?R(~t.value):ua():ua()}function B(e){let t=w(e);if(t.type===`ConditionalExpression`)return Oa(t);if(t.type===`LogicalExpression`)return ka(t);if(t.type===`SequenceExpression`){let e=t.expressions.at(-1);return e?B(e):fa()}let n=Ta(t);return n.constant?da(!!n.value):fa()}function Oa(e){let t=B(e.test);if(t.constant)return B(t.value===!0?e.consequent:e.alternate);let n=B(e.consequent),r=B(e.alternate);return n.constant&&r.constant&&n.value===r.value?n:fa()}function ka(e){let t=B(e.left);if(!t.constant)return fa();if(e.operator===`&&`)return t.value?B(e.right):da(!1);if(e.operator===`||`)return t.value===!0?da(!0):B(e.right);let n=Ta(e.left);return n.constant?n.value===void 0?B(e.right):da(!!n.value):fa()}const Aa=new Set([`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`WhileStatement`]);function ja(e){return Aa.has(e.type)}function Ma(e,t){let n=t;for(;n!==null;){if(n.type===`LabeledStatement`&&n.label.name===e)return n.body;if(n.type===`Program`)return;n=n.parent}}function Na(e,t){if(e.label)return Ma(e.label.name,e.parent)===t;let n=e.parent;for(;n!==null;){if(n.type===`Program`||N(n)||n.type===`SwitchStatement`)return!1;if(ja(n))return n===t;n=n.parent}return!1}function Pa(e,t){return e?e.type===`VariableDeclaration`?e.declarations.some(e=>e.init?z(e.init,t):!1):z(e,t):!1}function Fa(e,t){switch(e.type){case`DoWhileStatement`:case`WhileStatement`:return z(e.test,t);case`ForInStatement`:case`ForOfStatement`:return z(e.right,t);case`ForStatement`:return!!(Pa(e.init,t)||e.test&&z(e.test,t)||e.update&&z(e.update,t));default:return!1}}function V(e,t,n){switch(e.type){case`BlockStatement`:return e.body.some(e=>V(e,t,n));case`BreakStatement`:return Na(e,t);case`DoWhileStatement`:case`WhileStatement`:return Ia(e,t,n);case`ExpressionStatement`:return z(e.expression,n);case`ForInStatement`:case`ForOfStatement`:return La(e,t,n);case`ForStatement`:return Ra(e,t,n);case`IfStatement`:return za(e,t,n);case`LabeledStatement`:return V(e.body,t,n);case`ReturnStatement`:return!0;case`SwitchStatement`:return e.cases.some(e=>e.consequent.some(e=>V(e,t,n)));case`TryStatement`:return Ba(e,t,n);case`VariableDeclaration`:return e.declarations.some(e=>e.init?z(e.init,n):!1);case`WithStatement`:return Va(e,t,n);default:return!1}}function Ia(e,t,n){return z(e.test,n)?!0:V(e.body,t,n)}function La(e,t,n){return z(e.right,n)?!0:V(e.body,t,n)}function Ra(e,t,n){return Pa(e.init,n)||e.test&&z(e.test,n)||e.update&&z(e.update,n)?!0:V(e.body,t,n)}function za(e,t,n){return V(e.consequent,t,n)?!0:e.alternate?V(e.alternate,t,n):!1}function Ba(e,t,n){return!!(V(e.block,t,n)||e.handler&&V(e.handler.body,t,n)||e.finalizer&&V(e.finalizer,t,n))}function Va(e,t,n){return z(e.object,n)?!0:V(e.body,t,n)}function Ha(e,t,n){return e.constant?!e.value||!Fa(t,n)&&!V(t.body,t,n):!1}const Ua=t({create(e){let t=e.options?.[0],n=pa(typeof t==`object`&&t?t:void 0);function r(t){B(t).constant&&e.report({messageId:`unexpected`,node:t})}function i(t,r){Ha(B(r),t,n)&&e.report({messageId:`unexpected`,node:r})}return{ConditionalExpression(e){r(e.test)},DoWhileStatement(e){i(e,e.test)},ForStatement(e){e.test&&i(e,e.test)},IfStatement(e){r(e.test)},WhileStatement(e){i(e,e.test)}}},meta:{docs:{description:`Disallow constant conditions, but allow constant loops that include loop exits such as break, return, or configured calls.`},messages:{unexpected:`Unexpected constant condition.`},schema:[{additionalProperties:!1,properties:{loopExitCalls:{items:{minLength:1,type:`string`},type:`array`}},type:`object`}],type:`problem`}});function Wa(e){let n=`CallExpression[callee.type="Identifier"][callee.name="${e.name}"]`;return t({create(t){return{[n](n){t.report({messageId:e.messageId,node:n})}}},meta:{docs:{description:`Use ${e.alternative} instead of ${e.name}().`},messages:{[e.messageId]:e.message.replaceAll(`{{name}}`,e.name).replaceAll(`{{alternative}}`,e.alternative)},schema:[],type:`problem`}})}const Ga=Wa({alternative:`throw`,message:`Replace {{name}}(...) with {{alternative}}.`,messageId:`noError`,name:`error`});function Ka(e){let t=new Set;if(!e?.eventsImportPaths)return t;for(let n of e.eventsImportPaths)ne(n)&&t.add(n);return t}function qa(e){switch(e.type){case`ChainExpression`:case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSTypeAssertion`:return qa(e.expression);default:return e}}function Ja(e){let t=qa(e);if(t.type===`Identifier`)return t.name;if(t.type===`MemberExpression`)return Ja(t.object)}function Ya(e,t){let n=qa(e.callee);if(n.type!==`MemberExpression`||T(n)!==`connect`)return;let r=Ja(n.object);if(r===void 0||!t.has(r))return;let[i]=e.arguments;if(i)switch(i.type){case`ArrowFunctionExpression`:case`FunctionExpression`:return i;default:return}}function Xa(e,t){let n=qa(e.callee);if(n.type!==`MemberExpression`)return!1;let r=Ja(n);return r!==void 0&&t.has(r)}function Za(e,t){return e.has(t)?!1:(e.add(t),!0)}function Qa(e,t){return Za(t.playerValues,e)}function $a(e,t){return Za(t.playerContainers,e)}function H(e,t){switch(e.type){case`ArrayPattern`:{let n=!1;for(let r of e.elements)r&&(n=H(r,t)||n);return n}case`AssignmentPattern`:return H(e.left,t);case`Identifier`:return Qa(e.name,t);case`ObjectPattern`:{let n=!1;for(let r of e.properties){if(r.type===`RestElement`){n=H(r.argument,t)||n;continue}n=H(r.value,t)||n}return n}case`RestElement`:return H(e.argument,t);default:return!1}}function eo(e,t,n){return t===0?!1:e.type===`Identifier`?t===2?Qa(e.name,n):$a(e.name,n):H(e,n)}function to(e,t,n){return e.type===`MemberExpression`||t===0?!1:e.type===`ArrayPattern`||e.type===`AssignmentPattern`||e.type===`Identifier`||e.type===`ObjectPattern`||e.type===`RestElement`?e.type===`Identifier`?t===2?Qa(e.name,n):$a(e.name,n):H(e,n):!1}function U(e,t){let n=qa(e);switch(n.type){case`ArrayExpression`:return no(n,t);case`AssignmentExpression`:return U(n.right,t);case`ConditionalExpression`:return ro(n,t);case`Identifier`:return t.playerValues.has(n.name)?2:+!!t.playerContainers.has(n.name);case`MemberExpression`:return io(n,t);case`ObjectExpression`:return ao(n,t);case`SequenceExpression`:{let e=n.expressions.at(-1);return e===void 0?0:U(e,t)}default:return 0}}function no(e,t){for(let n of e.elements)if(n!==null&&U(n.type===`SpreadElement`?n.argument:n,t)!==0)return 1;return 0}function ro(e,t){let n=U(e.consequent,t);return n===U(e.alternate,t)?n:0}function io(e,t){return U(e.object,t)===1?2:0}function ao(e,t){for(let n of e.properties)if(U(n.type===`SpreadElement`?n.argument:n.value,t)!==0)return 1;return 0}function oo(e,t){if(e.type===`TSParameterProperty`){H(e.parameter,t);return}H(e,t)}const so=t({create(e){let t=Ka(e.options[0]),n=new Set,r=new WeakMap,i=[];function a(){let e=i.at(-1);if(e?.callbackState&&!(e.callbackDepth>0))return e.callbackState}function o(e){if(e.type!==`FunctionDeclaration`){let t=r.get(e);if(t){i.push({callbackDepth:0,callbackState:t});return}}let t=i.at(-1);if(!t?.callbackState){i.push({callbackDepth:0,callbackState:void 0});return}i.push({callbackDepth:t.callbackDepth+1,callbackState:t.callbackState})}function s(){i.pop()}return{ArrowFunctionExpression:o,"ArrowFunctionExpression:exit":s,AssignmentExpression(e){let t=a();if(!t||e.operator!==`=`)return;let n=U(e.right,t);n!==0&&to(e.left,n,t)},CallExpression(t){let i=Ya(t,n);if(i){let e={playerContainers:new Set,playerValues:new Set},[t]=i.params;t&&oo(t,e),r.set(i,e)}let o=a();if(!(o&&Xa(t,n)))return;let[s]=t.arguments;!s||s.type===`SpreadElement`||U(s,o)!==2||e.report({messageId:`preferFunctions`,node:t})},FunctionDeclaration:o,"FunctionDeclaration:exit":s,FunctionExpression:o,"FunctionExpression:exit":s,ImportDeclaration(e){let r=e.source.value;if(t.has(r))for(let t of e.specifiers){if(t.type===`ImportDefaultSpecifier`){t.local.name===`Events`&&n.add(t.local.name);continue}if(t.type===`ImportSpecifier`){if(t.imported.type===`Identifier`&&t.imported.name===`Events`){n.add(t.local.name);continue}t.imported.type===`Literal`&&t.imported.value===`Events`&&n.add(t.local.name)}}},VariableDeclarator(e){let t=a();if(!(t&&e.init))return;let n=U(e.init,t);n!==0&&eo(e.id,n,t)}}},meta:{docs:{description:`Disallow sending Events back to the same player inside an Events.connect callback; use Functions for request/response.`},messages:{preferFunctions:`Do not call Events for the same player inside an Events.connect callback. Use a Functions callback instead.`},schema:[{additionalProperties:!1,properties:{eventsImportPaths:{items:{minLength:1,type:`string`},type:`array`}},required:[`eventsImportPaths`],type:`object`}],type:`problem`}}),co=/^[A-Z]/u;function W(e){return co.test(e)}function lo(e){return e.type===`FunctionDeclaration`&&e.id!==null&&W(e.id.name)}function uo(e){return e.type===`CallExpression`?e.callee.type===`Identifier`?e.callee.name===`memo`:e.callee.type===`MemberExpression`&&e.callee.object.type===`Identifier`&&e.callee.object.name===`React`&&e.callee.property.type===`Identifier`&&e.callee.property.name===`memo`:!1}function fo({callee:e}){return e.type===`Identifier`?e.name===`forwardRef`||e.name===`memo`:e.type===`MemberExpression`&&e.object.type===`Identifier`&&e.object.name===`React`&&e.property.type===`Identifier`&&(e.property.name===`forwardRef`||e.property.name===`memo`)}function po({name:e}){return e.type===`JSXIdentifier`?e.name:e.name.name}function mo(e,t){for(let n of e.openingElement.attributes)if(n.type===`JSXAttribute`&&n.name.type===`JSXIdentifier`&&n.name.name===t)return!0;return!1}function ho(e,t){if(e.type!==`JSXIdentifier`)return!1;let n=e.name.charAt(0);return n!==``&&n===n.toLowerCase()||t.has(e.name)}function go(e){if(e.type===`BinaryExpression`)switch(e.operator){case`%`:case`*`:case`**`:case`+`:case`-`:case`/`:return go(e.left)&&go(e.right);default:return!1}return e.type===`Identifier`||e.type===`Literal`?!0:e.type===`MemberExpression`?!e.computed&&go(e.object):e.type===`ParenthesizedExpression`?go(e.expression):e.type===`TemplateLiteral`?e.expressions.length===0:e.type===`UnaryExpression`&&go(e.argument)}function _o(e,t){return e?.type===`CallExpression`&&e.callee.type===`Identifier`&&(y(t)?e.callee.name===t:t.has(e.callee.name))}function vo(e){return e.type===`VariableDeclarator`&&e.id.type===`Identifier`&&W(e.id.name)&&e.init!==null&&(e.init.type===`ArrowFunctionExpression`||e.init.type===`FunctionExpression`)}function yo(e){return e.loc.end.line-e.loc.start.line+1}function bo(e){if(!(e.type!==`FunctionDeclaration`||!lo(e)||e.id===null||e.body===null)&&D(e.id)&&`name`in e.id&&y(e.id.name))return{body:e.body,name:e.id.name,nameNode:e.id}}function xo(e){if(e.type!==`VariableDeclarator`||!vo(e)||e.init===null||!(`name`in e.id&&y(e.id.name))||e.init.type!==`ArrowFunctionExpression`&&e.init.type!==`FunctionExpression`||!D(e.init.body))return;let{name:t}=e.id;return{body:e.init.body,name:t,nameNode:e.id}}const So=t({create(e){function t(t,n,r){let i=yo(r);i<=300||e.report({data:{lineCount:String(i),name:n},messageId:`giantComponent`,node:t})}return{FunctionDeclaration(e){let n=bo(e);n!==void 0&&t(n.nameNode,n.name,n.body)},VariableDeclarator(e){let n=xo(e);n!==void 0&&t(n.nameNode,n.name,n.body)}}},meta:{docs:{description:`Report React components whose bodies exceed the configured size threshold.`,recommended:!0},messages:{giantComponent:`Component "{{name}}" is {{lineCount}} lines — consider breaking it into smaller focused components`},type:`problem`}}),Co=new Set([`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`]);function wo(e){if(e.type===`FunctionDeclaration`&&e.id!==null&&O(e.id.name))return e.id.name;if(e.type===`FunctionExpression`||e.type===`ArrowFunctionExpression`){let{parent:t}=e;if(t.type===`VariableDeclarator`&&t.id.type===`Identifier`&&O(t.id.name))return t.id.name;if(t.type===`Property`&&t.key.type===`Identifier`&&O(t.key.name)||t.type===`MethodDefinition`&&t.key.type===`Identifier`&&O(t.key.name))return t.key.name}}function To(e){let{parent:t}=e;if(t.type===`VariableDeclarator`&&t.id.type===`Identifier`&&O(t.id.name))return t.id.name;if(t.type===`AssignmentExpression`&&t.left.type===`Identifier`&&O(t.left.name))return t.left.name;let n;if(t.type===`ExportDefaultDeclaration`&&e.arguments.length>0){let[t]=e.arguments;t?.type===`FunctionExpression`&&t.id&&O(t.id.name)&&(n=t.id.name)}return n}function Eo(e){if(!He(e))return;let[t]=e.params;if(!t)return;let n;if(t.type===`ObjectPattern`&&(n=t),t.type===`AssignmentPattern`&&t.left.type===`ObjectPattern`&&(n=t.left),!n)return;let r=0;for(let e of n.properties)e.type===`Property`&&(r+=1);return r}function Do(e,t){return t?.type===`TSLiteralType`}function Oo(e,t){if(!He(e)||e.body===null)return{maxJsxDepth:0,nullLiterals:[],stateHookCount:0};let n=0,r=0,i=[],a=0;return Rr(e.body,o=>{if(!(Co.has(o.type)&&o!==e)){if(o.type===`JSXElement`||o.type===`JSXFragment`){a+=1,a>n&&(n=a);return}if(o.type===`CallExpression`){let e=L(o);e!==void 0&&e.length>0&&t.has(e)&&(r+=1)}o.type===`Literal`&&o.value===null&&!Do(o,o.parent)&&i.push(o)}}),{maxJsxDepth:n,nullLiterals:i,stateHookCount:r}}function ko(e){let t={enforceTargetLines:!0,ignoreComponents:[],maxDestructuredProps:5,maxLines:200,maxStateHooks:5,maxTsxNesting:3,stateHooks:[`useState`,`useReducer`,`useBinding`],targetLines:120};if(typeof e!=`object`||!e)return t;let n=e;return{enforceTargetLines:typeof n.enforceTargetLines==`boolean`?n.enforceTargetLines:t.enforceTargetLines,ignoreComponents:Array.isArray(n.ignoreComponents)?n.ignoreComponents:t.ignoreComponents,maxDestructuredProps:b(n.maxDestructuredProps)?n.maxDestructuredProps:t.maxDestructuredProps,maxLines:b(n.maxLines)?n.maxLines:t.maxLines,maxStateHooks:b(n.maxStateHooks)?n.maxStateHooks:t.maxStateHooks,maxTsxNesting:b(n.maxTsxNesting)?n.maxTsxNesting:t.maxTsxNesting,stateHooks:Array.isArray(n.stateHooks)?n.stateHooks:t.stateHooks,targetLines:b(n.targetLines)?n.targetLines:t.targetLines}}const Ao=t({create(e){let t=ko(e.options[0]),n=new Set(t.ignoreComponents),r=new Set(t.stateHooks),i=new WeakSet;function a(a,o){if(n.has(o)||i.has(a))return;i.add(a);let s=a.loc,c=s.end.line-s.start.line+1;c>t.maxLines?e.report({data:{lines:String(c),max:String(t.maxLines),name:o,target:String(t.targetLines)},messageId:`exceedsMaxLines`,node:a}):t.enforceTargetLines&&c>t.targetLines&&e.report({data:{lines:String(c),max:String(t.maxLines),name:o,target:String(t.targetLines)},messageId:`exceedsTargetLines`,node:a});let l=Eo(a);b(l)&&l>t.maxDestructuredProps&&e.report({data:{count:String(l),max:String(t.maxDestructuredProps),name:o},messageId:`tooManyProps`,node:a});let u=Oo(a,r);u.maxJsxDepth>t.maxTsxNesting&&e.report({data:{depth:String(u.maxJsxDepth),max:String(t.maxTsxNesting),name:o},messageId:`tsxNestingTooDeep`,node:a}),u.stateHookCount>t.maxStateHooks&&e.report({data:{count:String(u.stateHookCount),hooks:t.stateHooks.join(`, `),max:String(t.maxStateHooks),name:o},messageId:`tooManyStateHooks`,node:a});for(let t of u.nullLiterals)e.report({messageId:`nullLiteral`,node:t})}function o(e){let t=wo(e);t===void 0||t.length===0||a(e,t)}return{ArrowFunctionExpression:o,CallExpression(e){if(!fo(e))return;let[t]=e.arguments;if(!t||t.type!==`FunctionExpression`&&t.type!==`ArrowFunctionExpression`)return;let n=To(e),r=wo(t),i=n??r;i===void 0||i.length===0||a(t,i)},FunctionDeclaration(e){e.type===`FunctionDeclaration`&&o(e)},FunctionExpression(e){e.type===`FunctionExpression`&&o(e)}}},meta:{docs:{description:`Enforce React component size and complexity limits inspired by the 'Refactor God Component' checklist.`,recommended:!1},messages:{exceedsMaxLines:`Component '{{name}}' is {{lines}} lines; max allowed is {{max}}. Split into smaller components/hooks.`,exceedsTargetLines:`Component '{{name}}' is {{lines}} lines; target is {{target}} (max {{max}}). Consider extracting hooks/components.`,nullLiteral:"Avoid `null` in components; use `undefined` instead.",tooManyProps:`Component '{{name}}' destructures {{count}} props; max allowed is {{max}}. Group props or split the component.`,tooManyStateHooks:`Component '{{name}}' has {{count}} state hooks ({{hooks}}); max allowed is {{max}}. Extract cohesive state into a custom hook.`,tsxNestingTooDeep:`Component '{{name}}' has TSX nesting depth {{depth}}; max allowed is {{max}}. Extract child components.`},schema:[{additionalProperties:!1,properties:{enforceTargetLines:{default:!0,description:`Whether to report when exceeding targetLines (soft limit).`,type:`boolean`},ignoreComponents:{description:`Component names to ignore.`,items:{type:`string`},type:`array`},maxDestructuredProps:{default:5,description:`Maximum number of destructured props in a component parameter.`,type:`number`},maxLines:{default:200,description:`Hard maximum lines for a component.`,type:`number`},maxStateHooks:{default:5,description:`Maximum number of stateful hook calls in a component.`,type:`number`},maxTsxNesting:{default:3,description:`Maximum JSX/TSX nesting depth in a component.`,type:`number`},stateHooks:{default:[`useState`,`useReducer`,`useBinding`],description:`Hook names to count toward state complexity.`,items:{type:`string`},type:`array`},targetLines:{default:120,description:`Soft target lines for a component.`,type:`number`}},type:`object`}],type:`problem`}});function jo({callee:e}){if(e.type!==`CallExpression`)return!1;let t=e.callee;if(t.type!==`MemberExpression`)return!1;let{object:n}=t;return n.type===`Identifier`&&n.name===`Ianitor`}const Mo=t({create(e){let t=0;function n(){t+=1}function r(){--t}return{ArrowFunctionExpression:n,"ArrowFunctionExpression:exit":r,CallExpression(n){t===0||!jo(n)||e.report({messageId:`hoistIanitorValidator`,node:n})},FunctionDeclaration:n,"FunctionDeclaration:exit":r,FunctionExpression:n,"FunctionExpression:exit":r}},meta:{docs:{description:`Disallow Ianitor validator creation inside function bodies. Hoist to module scope to avoid recreating validators on every call.`,recommended:!0},messages:{hoistIanitorValidator:`Ianitor validator created inside function body is slow — hoist to module scope. Example: const validator = Ianitor.keyOf(ids);`},schema:[],type:`problem`}});function No(e){let t=w(e);if(t.type!==`CallExpression`)return!1;let n=w(t.callee);if(n.type!==`MemberExpression`||n.computed)return!1;let r=w(n.object);return r.type===`Identifier`&&r.name===`Ianitor`&&n.property.type===`Identifier`}function Po(e){for(let{node:t}of e.defs){if(t.type!==`VariableDeclarator`)continue;let{init:e}=t;if(e!==null&&No(e))return!0}return!1}function Fo(e,t){let n=w(e.callee);if(n.type===`CallExpression`)return No(n);if(n.type===`Identifier`){let r=E(t.getScope(e),n.name);return r!==void 0&&Po(r)}return!1}function Io(e){let t=!1;for(let n of e.properties)if(!(n.type!==`Property`||n.key.type!==`Identifier`)){if(n.key.name===`error`||n.key.name===`value`)return!1;n.key.name===`success`&&(t=!0)}return t}function Lo(e){for(let t of e.properties)if(t.type===`Property`&&t.key.type===`Identifier`&&t.key.name===`success`)return t.key}const Ro=t({create(e){let{sourceCode:t}=e,n=new Set,r=new Map;function i(e){let t=r.get(e);t!==void 0&&(t.referencedFully=!0)}return{CallExpression(e){for(let t of e.arguments)if(t.type===`Identifier`){let e=r.get(t.name);e!==void 0&&(e.referencedFully=!0)}},MemberExpression({computed:n,object:i,property:a}){if(n||a.type!==`Identifier`)return;let o=w(i);if(o.type===`CallExpression`&&a.name===`success`){Fo(o,t)&&e.report({messageId:`preferCreateGuard`,node:a});return}if(o.type===`Identifier`){let e=r.get(o.name);e!==void 0&&e.properties.add(a.name)}},"Program:exit"(){for(let[,{firstSuccessNode:t,properties:n,referencedFully:i}]of r)n.has(`success`)&&!n.has(`error`)&&!n.has(`value`)&&!i&&e.report({messageId:`preferCreateGuard`,node:t})},ReturnStatement({argument:e}){e?.type===`Identifier`&&i(e.name)},VariableDeclarator({id:i,init:a}){if(a===null)return;let o=w(a);if(o.type===`CallExpression`){if(i.type===`Identifier`&&No(o)){n.add(i.name);return}if(i.type===`ObjectPattern`&&Fo(o,t)&&Io(i)){let t=Lo(i);t!==void 0&&e.report({messageId:`preferCreateGuard`,node:t})}i.type===`Identifier`&&o.callee.type===`Identifier`&&n.has(o.callee.name)&&r.set(i.name,{firstSuccessNode:i,properties:new Set,referencedFully:!1})}}}},meta:{docs:{description:"Disallow accessing `.success` on Ianitor check results when the full result object is not needed."},messages:{preferCreateGuard:`Replace with Flamework.createGuard<T>(). Ianitor check results allocate a table on every call; Flamework.createGuard returns a plain boolean at runtime with zero allocation.`},schema:[],type:`suggestion`}}),zo=[`binding`];function Bo(e){if(e.type===`Identifier`)return e.name;if(e.type===`AssignmentPattern`&&e.left.type===`Identifier`)return e.left.name}function Vo({body:e},t){if(e.length!==1)return!1;let[n]=e;return n?.type!==`ReturnStatement`||n.argument?.type!==`Identifier`?!1:n.argument.name===t}function Ho(e){if(e.params.length!==1)return;let[t]=e.params;return t===void 0?void 0:Bo(t)}function Uo(e){if(e.type===`ArrowFunctionExpression`){let t=Ho(e);if(t===void 0)return!1;let{body:n}=e;switch(n.type){case`BlockStatement`:return Vo(n,t);case`Identifier`:return n.name===t;default:return!1}}if(e.type===`FunctionExpression`){let t=Ho(e);return t===void 0||e.body===null?!1:Vo(e.body,t)}return!1}function Wo(e){return L(e)===`joinBindings`}function Go(e){for(let t of e.defs){if(t.node.type!==`VariableDeclarator`)continue;let{init:e}=t.node;if(e?.type===`CallExpression`&&(L(e)===`useBinding`||Wo(e)||e.callee.type===`MemberExpression`&&T(e.callee)===`map`))return!0}return!1}function Ko(e,{object:t},n){if(t.type===`Identifier`){let r=t.name.toLowerCase();for(let e of n)if(r.includes(e.toLowerCase()))return!0;let i=E(e.getScope(t),t.name);if(i!==void 0&&Go(i))return!0}return t.type===`CallExpression`&&(t.callee.type===`MemberExpression`&&T(t.callee)===`map`||Wo(t))}const qo=t({create(e){let{sourceCode:t}=e,[n]=e.options,r=n?.bindingPatterns??zo;return{CallExpression(n){let{callee:i}=n;if(i.type!==`MemberExpression`||i.computed||i.property.type!==`Identifier`||T(i)!==`map`||n.arguments.length!==1)return;let[a]=n.arguments;if(a===void 0||a.type===`SpreadElement`||!Uo(a))return;let o=Ko(t,i,r);e.report({fix(e){return e.replaceText(n,t.getText(i.object))},messageId:o?`identityBindingMap`:`identityArrayMap`,node:n})}}},meta:{docs:{description:"Disallow pointless identity `.map()` calls that return the parameter unchanged"},fixable:`code`,messages:{identityArrayMap:"Pointless identity `.map()` call on Array. Use `table.clone(array)` or `[...array]` instead.",identityBindingMap:"Pointless identity `.map()` call on Binding. Use the original binding directly."},schema:[{additionalProperties:!1,properties:{bindingPatterns:{default:[...zo],description:`Variable name patterns to recognize as Bindings (case insensitive)`,items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}});function Jo(e){let{parent:t}=e;return t?.type===`ExpressionStatement`||t?.type===`ForStatement`&&t.update===e}const Yo=t({create(e){let[t]=e.options,n=Tr(t)&&t.allowAutofix,{sourceCode:r}=e;return{UpdateExpression(t){if(!Jo(t))return;let i=r.getText(t.argument),a=t.operator===`++`?`noIncrement`:`noDecrement`;if(!n){e.report({messageId:a,node:t});return}let o=t.operator===`++`?`${i} += 1`:`${i} -= 1`;e.report({fix(e){return e.replaceText(t,o)},messageId:a,node:t})}}},meta:{docs:{description:"Disallow standalone `++` and `--` statements.",recommended:!0},fixable:`code`,messages:{noDecrement:"Do not use standalone `--`. Use `-= 1` instead.",noIncrement:"Do not use standalone `++`. Use `+= 1` instead."},schema:[{additionalProperties:!1,properties:{allowAutofix:{default:!1,type:`boolean`}},type:`object`}],type:`suggestion`}});function Xo(e){return e.name.type===`JSXIdentifier`?e.name.name:void 0}function Zo(e){switch(e.type){case`ArrayExpression`:return`array`;case`ArrowFunctionExpression`:case`FunctionExpression`:return`function`;case`JSXElement`:case`JSXFragment`:return`JSX`;case`ObjectExpression`:return`object`;default:return}}const Qo=t({create(e){let t=new Set;return{JSXAttribute(n){if(n.value?.type!==`JSXExpressionContainer`||n.value.expression.type===`JSXEmptyExpression`)return;let r=n.parent;if(!he(r))return;let i=Xo(r);if(i===void 0||!t.has(i))return;let a=Zo(n.value.expression);a!==void 0&&e.report({data:{name:i,type:a},messageId:`inlineProperty`,node:n.value.expression})},VariableDeclarator(e){e.id.type===`Identifier`&&e.init!==null&&uo(e.init)&&t.add(e.id.name)}}},meta:{docs:{description:`Prevent inline properties from being passed to memoized components.`,recommended:!0},messages:{inlineProperty:`Inline {{type}} passed to memoized component "{{name}}" — new references cause unnecessary re-renders`},type:`problem`}}),$o={checkPrivate:!0,checkProtected:!0,checkPublic:!0};function es(e){return x(e)?{checkPrivate:typeof e.checkPrivate!=`boolean`||e.checkPrivate,checkProtected:typeof e.checkProtected!=`boolean`||e.checkProtected,checkPublic:typeof e.checkPublic!=`boolean`||e.checkPublic}:$o}function ts(e,t){if(e.static||e.kind!==`method`)return!1;let n=e.accessibility??`public`;return!(n===`private`&&!t.checkPrivate||n===`protected`&&!t.checkProtected||n===`public`&&!t.checkPublic)}function ns(e,t){if(t.has(e))return!1;if(t.add(e),e.type===`ThisExpression`||e.type===`Super`)return!0;if(!x(e))return!1;for(let n in e)if(Object.hasOwn(e,n)&&rs(e[n],t))return!0;return!1}function rs(e,t){if(Array.isArray(e)){for(let n of e)if(D(n)&&ns(n,t))return!0;return!1}return D(e)&&ns(e,t)}function is({value:e}){return e.type===`FunctionExpression`&&ns(e,new WeakSet)}function as(e){return e.key.type===`Identifier`?e.key.name:`unknown`}const os=t({create(e){let t=es(e.options[0]);return{MethodDefinition(n){!ts(n,t)||is(n)||e.report({data:{methodName:as(n)},messageId:`noInstanceMethodWithoutThis`,node:n})}}},meta:{docs:{description:`Detect instance methods that do not use 'this' and suggest converting them to standalone functions for better performance in roblox-ts.`},messages:{noInstanceMethodWithoutThis:`Method '{{methodName}}' does not use 'this' and creates unnecessary metatable overhead in roblox-ts. Convert it to a standalone function for better performance.`},schema:[{additionalProperties:!1,properties:{checkPrivate:{default:!0,description:`Check private methods (default: true)`,type:`boolean`},checkProtected:{default:!0,description:`Check protected methods (default: true)`,type:`boolean`},checkPublic:{default:!0,description:`Check public methods (default: true)`,type:`boolean`}},type:`object`}],type:`problem`}}),ss=[`Axes`,`BrickColor`,`CFrame`,`Color3`,`ColorSequence`,`ColorSequenceKeypoint`,`DateTime`,`Enum`,`Faces`,`NumberRange`,`NumberSequence`,`NumberSequenceKeypoint`,`PathWaypoint`,`PhysicalProperties`,`Ray`,`Rect`,`Region3`,`Region3int16`,`TweenInfo`,`UDim`,`UDim2`,`Vector2`,`Vector3`,`Vector3int16`,`Vector3int32`],cs=new Set([`!`,`+`,`-`,`typeof`,`void`,`~`]),ls=new Set(`ArrayExpression.ArrowFunctionExpression.AssignmentExpression.AwaitExpression.BinaryExpression.CallExpression.ChainExpression.ClassExpression.ConditionalExpression.FunctionExpression.Identifier.ImportExpression.Literal.LogicalExpression.MemberExpression.MetaProperty.NewExpression.ObjectExpression.ParenthesizedExpression.SequenceExpression.Super.TaggedTemplateExpression.TemplateLiteral.ThisExpression.TSAsExpression.TSInstantiationExpression.TSNonNullExpression.TSSatisfiesExpression.TSTypeAssertion.UnaryExpression.UpdateExpression.YieldExpression`.split(`.`));function us(e){return ls.has(e.type)}function G(e){return e.type===`module`||e.type===`global`}function ds(e){for(let t of e.defs)if(t.type===`ImportBinding`)return!0;return!1}function fs(e){return e.type===`Variable`}function ps(e){if(!fs(e))return;let t=e.node;if(t.type!==`VariableDeclarator`)return;let{parent:n}=t;if(!(n.type!==`VariableDeclaration`||n.kind!==`const`))return t.init??void 0}function ms(e,t){let n=E(e.getScope(t),t.name);if(!(n===void 0||!G(n.scope)))for(let e of n.defs){let t=ps(e);if(t!==void 0)return t}}function hs(e,t){let n=E(e.getScope(t),t.name);if(n!==void 0)for(let e of n.defs){let t=ps(e);if(t!==void 0)return t}}function gs(e,t,n){let r=w(t);if(n.has(r))return!1;if(n.add(r),r.type===`Identifier`&&r.name===`undefined`||r.type===`UnaryExpression`&&r.operator===`void`)return!0;if(r.type!==`Identifier`)return!1;let i=hs(e,r);return i!==void 0&&gs(e,i,n)}function _s(e,t,n,r){return t.type===`Identifier`?!0:us(t)?K(e,t,n,r):!1}function vs(e,t,n,r){let i=w(t);return i.type===`Identifier`?bs(e,i,n,r):i.type!==`MemberExpression`||!K(e,i.object,n,r)?!1:i.computed?K(e,i.property,n,r):i.property.type===`Identifier`}function ys(e,t,n,r,i){return vs(e,n,r,i)?t.every(t=>t.type!==`SpreadElement`&&K(e,t,r,i)):!1}function K(e,t,n,r){let i=w(t);if(n.has(i))return!1;switch(n.add(i),i.type){case`ArrayExpression`:return Cs(e,i,n,r);case`BinaryExpression`:case`LogicalExpression`:return us(i.left)?K(e,i.left,n,r)&&K(e,i.right,n,r):!1;case`CallExpression`:return ys(e,i.arguments,i.callee,n,r);case`ChainExpression`:return K(e,i.expression,n,r);case`ConditionalExpression`:return K(e,i.test,n,r)&&K(e,i.consequent,n,r)&&K(e,i.alternate,n,r);case`Identifier`:return bs(e,i,n,r);case`Literal`:return!0;case`MemberExpression`:return K(e,i.object,n,r)&&(!i.computed||_s(e,i.property,n,r));case`NewExpression`:return ys(e,i.arguments,i.callee,n,r);case`ObjectExpression`:return Ss(e,i,n,r);case`SequenceExpression`:return i.expressions.length>0&&i.expressions.every(t=>K(e,t,n,r));case`TemplateLiteral`:return i.expressions.length===0;case`UnaryExpression`:return cs.has(i.operator)&&K(e,i.argument,n,r);default:return!1}}function bs(e,t,n,r){let i=E(e.getScope(t),t.name);if(i===void 0)return r.staticGlobalFactories.has(t.name);if(!G(i.scope))return!1;if(ds(i))return!0;for(let t of i.defs){let i=ps(t);if(i!==void 0&&K(e,i,n,r))return!0}return!1}function xs(e){return e.type!==`PrivateIdentifier`&&e.type!==`Identifier`}function Ss(e,t,n,r){for(let i of t.properties)if(i.type!==`Property`||i.kind!==`init`||i.computed&&xs(i.key)&&!K(e,i.key,n,r)||!K(e,i.value,n,r))return!1;return!0}function Cs(e,{elements:t},n,r){for(let i of t)if(i===null||i.type===`SpreadElement`||!K(e,i,n,r))return!1;return!0}function ws(e){return e.type===`JSXIdentifier`?e.name:e.name.name}function Ts(e){return e===`nativeProperties`||e.endsWith(`NativeProperties`)}function Es(e){if(!(e.type!==`Variable`||e.node.type!==`VariableDeclarator`))return e.node.init??void 0}function Ds(e){let t=w(e);for(;t.type===`MemberExpression`;){let e=w(t.object);if(e.type===`Identifier`)return e;if(e.type!==`MemberExpression`)return;t=e}return t.type===`Identifier`?t:void 0}function Os(e,t){let n=w(t);if(n.type===`ObjectExpression`)return!0;let r=Ds(n);if(r===void 0)return!1;let i=E(e.getScope(r),r.name);return i===void 0?!1:ds(i)||G(i.scope)}function ks(e,t,n){let r=w(t);if(n.has(r))return;if(n.add(r),r.type===`ObjectExpression`)return r;if(r.type!==`Identifier`)return;let i=E(e.getScope(r),r.name);if(!(i===void 0||G(i.scope)))for(let t of i.defs){let r=Es(t);if(r===void 0)continue;let i=ks(e,r,n);if(i!==void 0)return i}}const As=t({create(e){let{sourceCode:t}=e;function n(n,r){for(let i of n.properties){if(i.type!==`SpreadElement`||!Os(t,i.argument))continue;let n=t.getText(i.argument);e.report({data:`propertyName`in r?{prop:r.propertyName,source:n}:{source:n},messageId:r.messageId,node:i})}}return{JSXAttribute(e){let r=ws(e.name);if(r===void 0||!Ts(r))return;let{value:i}=e;if(i?.type!==`JSXExpressionContainer`)return;let{expression:a}=i;if(a.type===`JSXEmptyExpression`)return;let o=ks(t,a,new Set);o!==void 0&&n(o,{messageId:`noNativePropertiesSpread`,propertyName:r})},JSXSpreadAttribute(e){let r=ks(t,e.argument,new Set);r!==void 0&&n(r,{messageId:`noElementSpread`})}}},meta:{docs:{description:`Disallow spreading static property bags into nativeProperties/*NativeProperties props and onto JSX elements via intermediate objects, because the spread creates a new copied table every render.`,recommended:!0},messages:{noElementSpread:`Spreading static property bag {{source}} through an intermediate object creates a new table every render. Inline the full object properties directly on the JSX element.`,noNativePropertiesSpread:`Spreading static property bag {{source}} into {{prop}} creates a new table every render. Pass it directly or inline the full object instead.`},schema:[],type:`problem`}});function js(e){return e.parent.type===`ExpressionStatement`?!0:e.parent.type!==`UnaryExpression`||e.parent.operator!==`void`?!1:e.parent.parent.type===`ExpressionStatement`}function Ms(e,t,n,r){if(bn(e,t))for(let t of e.specifiers){if(t.type===`ImportSpecifier`){ue(t.imported,`useMemo`)&&n.add(t.local.name);continue}r.add(t.local.name)}}const Ns=new Set([`Instance`]);function Ps(e){let t=x(e)&&S(e.constructors)?new Set(e.constructors):Ns,n=x(e)&&e.environment===`standard`?`standard`:`roblox-ts`,r=x(e)?e.maxHelperTraceDepth:void 0;return{constructors:t,environment:n,maxHelperTraceDepth:re(r)&&Number.isInteger(r)&&r>=0?r:4}}function Fs(e){return e?.type===`CallExpression`}function Is(e,t,n){let r=e.parent;for(;r!==null;){if(Fe(r)){let{parent:e}=r;if(Fs(e)&&e.arguments[0]===r){if(!fe(e,t,n)){r=e.parent;continue}return!0}}r=r.parent}return!1}function Ls(e,t,n,r,i){let a=r.get(e);if(a!==void 0)return a;if(i.has(e))return new Set;i.add(e);let o=new Set;for(let a of e.defs){let e=Rs(a,t,n,r,i);for(let t of e)o.add(t)}return i.delete(e),r.set(e,o),o}function Rs(e,t,n,r,i){if(e.type===`FunctionName`)return zs(e,n);if(e.type!==`Variable`)return new Set;let{node:a}=e;if(a.type!==`VariableDeclarator`||a.init===null)return new Set;let o=w(a.init);if(Fe(o))return Bs(o,n);if(o.type!==`Identifier`)return new Set;let s=E(t.getScope(o),o.name);return s===void 0?new Set:Ls(s,t,n,r,i)}function zs(e,t){let{node:n}=e;return n.type===`FunctionDeclaration`?Bs(n,t):new Set}function Bs(e,t){let n=t.get(e)?.id;return n===void 0?new Set:new Set([n])}function Vs(e,t,n,r){let i=E(t.getScope(e),e.name);return i===void 0?new Set:Ls(i,t,n,r,new Set)}function Hs(e,t,n,r){for(let i of t.values())for(let t of i.callIdentifiers){let a=Vs(t,e,n,r);for(let e of a)i.callees.add(e)}}function Us(e,t,n){let r=new Set(e),i=[];for(let t of e)i.push({depth:0,functionId:t});let a=0;for(;a<i.length;){let e=i[a];if(a+=1,e===void 0||e.depth>=n)continue;let o=t.get(e.functionId);if(o!==void 0)for(let t of o.callees)r.has(t)||(r.add(t),i.push({depth:e.depth+1,functionId:t}))}return r}function Ws(e,t,n,r,i){let a=new Set;for(let e of t){let t=r.get(e)?.id;t!==void 0&&a.add(t)}for(let t of n){let n=Vs(t,e,r,i);for(let e of n)a.add(e)}return a}const Gs=t({create(e){let t=Ps(e.options[0]);if(t.constructors.size===0)return{};let n=vn(t.environment),r=new Set,i=new Set,a=new Map,o=new Map,s=[],c=[],l=[],u=[],d=new Map,f=0;function p(e){let t=a.get(e);if(t!==void 0)return t;let n={callIdentifiers:[],callees:new Set,id:f};return f+=1,a.set(e,n),o.set(n.id,n),n}function m(e){let t=s.at(-1);if(t===void 0)return;let n=o.get(t);n!==void 0&&n.callIdentifiers.push(e)}function h(e){s.push(p(e).id)}function g(){s.pop()}return{ArrowFunctionExpression:h,"ArrowFunctionExpression:exit":g,CallExpression(e){if(e.callee.type===`Identifier`&&m(e.callee),!fe(e,r,i))return;let[t]=e.arguments;if(t!==void 0){if(t.type===`Identifier`){l.push(t);return}Fe(t)&&u.push(t)}},FunctionDeclaration:h,"FunctionDeclaration:exit":g,FunctionExpression:h,"FunctionExpression:exit":g,ImportDeclaration(e){Ms(e,n,r,i)},NewExpression(e){if(e.callee.type!==`Identifier`)return;let n=e.callee.name;t.constructors.has(n)&&c.push({constructorName:n,containingFunctionId:s.at(-1),isLexicallyInsideUseMemo:Is(e,r,i),node:e})},"Program:exit"(){Hs(e.sourceCode,o,a,d);let n=Us(Ws(e.sourceCode,u,l,a,d),o,t.maxHelperTraceDepth);for(let t of c){let r=t.containingFunctionId!==void 0&&n.has(t.containingFunctionId);(t.isLexicallyInsideUseMemo||r)&&e.report({data:{constructorName:t.constructorName},messageId:`noNewInUseMemo`,node:t.node})}}}},meta:{docs:{description:`Disallow configured constructor calls (default: new Instance) inside React useMemo callbacks.`},messages:{noNewInUseMemo:"Avoid creating '{{constructorName}}' with `new` inside useMemo. Create it outside the memo callback or use an effect/ref pattern."},schema:[{additionalProperties:!1,properties:{constructors:{description:`Constructor identifiers that should be disallowed inside useMemo callbacks.`,items:{type:`string`},type:`array`},environment:{default:`roblox-ts`,description:`The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.`,enum:[`roblox-ts`,`standard`],type:`string`},maxHelperTraceDepth:{default:4,description:`Maximum depth for tracing local helper function calls from useMemo callbacks. 0 disables helper traversal.`,minimum:0,type:`integer`}},type:`object`}],type:`problem`}}),Ks=Wa({alternative:`Log`,message:`{{name}}() is a raw output function lacking log levels, timestamps, and filtering. Production systems require structured logging for debugging and monitoring. Replace {{name}}(...) with {{alternative}}.`,messageId:`noPrint`,name:`print`});function qs(e,t){let n=t;for(;n;){if(n.set.has(e))return!0;n=n.upper}return!1}function Js(e){let t=new Map,n=new Set;for(let n of e.keys())t.set(n,0);function r(i,a){t.set(i,1),a.push(i);for(let o of e.get(i)??[]){let e=t.get(o);if(e===1){let e=a.lastIndexOf(o);for(let t=e;t<a.length;t+=1){let e=a[t];e!==void 0&&n.add(e)}}else e===0&&r(o,a)}a.pop(),t.set(i,2)}for(let n of e.keys())t.get(n)===0&&r(n,[]);return n}const Ys=t({create(e){let{sourceCode:t}=e,n=new Map,r=[],i=[],a=[],o=new Map;function s(e){r.push(e)}function c(){r.pop()}function l(){for(let e=r.length-1;e>=0;--e){let t=r[e];if(t!==void 0)return t}}function u(e){n.has(e)||n.set(e,new Set)}function d(){for(let e=a.length-1;e>=0;--e)if(a[e]!==void 0)return a[e]}return{ArrowFunctionExpression(){s(void 0)},"ArrowFunctionExpression:exit":c,CallExpression(e){let r=l();if(r===void 0)return;let a,s=!1;if(e.callee.type===`Identifier`?a=e.callee.name:e.callee.type===`MemberExpression`&&e.callee.object.type===`ThisExpression`&&e.callee.property.type===`Identifier`&&(a=e.callee.property.name,s=!0),a===void 0)return;let c=!1;if(s){let e=d();e!==void 0&&o.get(e)?.has(a)===!0&&(c=!0)}else{let n=t.getScope(e);c=qs(a,n)}c&&(n.get(r)?.add(a),i.push({callee:a,caller:r,node:e}))},ClassDeclaration(e){let t=e.id?.name;t!==void 0&&!o.has(t)&&o.set(t,new Set),a.push(t)},"ClassDeclaration:exit"(){a.pop()},FunctionDeclaration(e){let t=e.id?.name;t!==void 0&&t.length>0&&u(t),s(t)},"FunctionDeclaration:exit":c,FunctionExpression(e){e.id&&u(e.id.name);let{parent:t}=e;t?.type===`MethodDefinition`&&t.key.type===`Identifier`?s(t.key.name):s(void 0)},"FunctionExpression:exit":c,MethodDefinition(e){let t=d();e.key.type===`Identifier`&&t!==void 0&&(o.get(t)?.add(e.key.name),u(e.key.name))},"Program:exit"(){let t=Js(n);if(t.size!==0)for(let n of i)t.has(n.caller)&&t.has(n.callee)&&e.report({messageId:`noRecursive`,node:n.node})},VariableDeclarator(e){e.id.type===`Identifier`&&e.init!==null&&(e.init.type===`FunctionExpression`||e.init.type===`ArrowFunctionExpression`)&&(u(e.id.name),s(e.id.name))},"VariableDeclarator:exit"(e){e.id.type===`Identifier`&&e.init!==null&&(e.init.type===`FunctionExpression`||e.init.type===`ArrowFunctionExpression`)&&c()}}},meta:{messages:{noRecursive:`Recursion is not allowed (JPL Power of 10). Use iteration instead — a loop or explicit stack.`},schema:[{additionalProperties:!1,properties:{},type:`object`}]}}),Xs=new m({extensions:[`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`,`.json`,`.node`]}),Zs={found:!1};function Qs(e,t){if(!e.startsWith(`.`))return Zs;let{path:n}=Xs.sync(a(t),e);return n===void 0||n===``?Zs:{found:!0,path:n}}const $s=`uiaspectratioconstraint`,ec=new Set([`ButtonSpritesheet`,`GenericSpritesheet`,`LabelSpritesheet`]);function tc({openingElement:e}){let{name:t}=e;return t.type===`JSXIdentifier`?t.name:void 0}function nc(e){let t=!1;return Rr(e,e=>{t||e.type===`JSXElement`&&tc(e)===$s&&(t=!0)}),t}function rc(e){if(e.type===`FunctionDeclaration`)return e.id?.name;if(Fe(e)){let{parent:t}=e;if(t.type===`VariableDeclarator`&&t.id.type===`Identifier`)return t.id.name}}function ic(e){if(e.body.type!==`BlockStatement`)return w(e.body)}function ac(e){for(let t of e.defs){if(t.type!==`ImportBinding`)continue;let{parent:e}=t.node;if(e?.type===`ImportDeclaration`&&y(e.source.value))return e.source.value}}const oc=new Map;function sc(e,t){if(!e.startsWith(`.`))return!1;let n=Qs(e,t);if(!n.found)return!1;let r=oc.get(n.path);if(r!==void 0)return r;try{let e=f(n.path,`utf8`).includes(`<uiaspectratioconstraint`);return oc.set(n.path,e),e}catch{return oc.set(n.path,!1),!1}}function cc(e){for(let t of e.openingElement.attributes)if(!(t.type!==`JSXAttribute`||t.name.type!==`JSXIdentifier`||t.name.name!==`scaled`)&&t.value?.type===`JSXExpressionContainer`&&t.value.expression.type===`Literal`&&t.value.expression.value===!1)return!0;return!1}function lc(e){return e.type===`JSXElement`?tc(e)===$s:e.type===`JSXExpressionContainer`&&e.expression.type===`Identifier`&&e.expression.name===`UI_ASPECT_RATIO_CONSTRAINT`}function uc(e,t,n,r){if(t.has(e))return!0;if(n===void 0)return!1;let i=n.set.get(e);if(i===void 0||!ds(i))return!1;let a=ac(i);return a!==void 0&&(sc(a,r)||ec.has(e))}const dc=t({create(e){let{filename:t,sourceCode:n}=e,r=new Set,i=[],a;return{ArrowFunctionExpression(e){let t=rc(e),n=ic(e);t===void 0||n===void 0||n.type!==`JSXElement`&&n.type!==`JSXFragment`||nc(n)&&r.add(t)},FunctionDeclaration(e){let t=rc(e);if(t===void 0||e.body?.body.length!==1)return;let[n]=e.body.body;n?.type!==`ReturnStatement`||n.argument===null||nc(n.argument)&&r.add(t)},ImportDeclaration(e){a??=e},JSXElement(e){i.push(e)},"Program:exit"(){let o;a!==void 0&&(o=n.getScope(a));for(let n of i){let i=tc(n);if(i!==void 0&&!(!uc(i,r,o,t)||cc(n)))for(let t of n.children)lc(t)&&e.report({messageId:`redundantAspectRatioConstraint`,node:t})}}}},meta:{docs:{description:`Disallow redundant uiaspectratioconstraint children inside components that already manage their own aspect ratio internally.`},messages:{redundantAspectRatioConstraint:`This component already renders a uiaspectratioconstraint internally. Passing one as a child is redundant and will cause layout issues.`},schema:[],type:`problem`}}),fc=new Set([`JSXElement`,`ReactElement`,`ReactNode`]),pc=new Set([`ChainExpression`,`ParenthesizedExpression`,`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]),mc=/^use[A-Z]/u;function hc(e){return mc.test(e)}function gc(e){if(e?.type!==`TSTypeReference`)return!1;let{typeName:t}=e;return t.type===`Identifier`?fc.has(t.name):t.type===`TSQualifiedName`&&fc.has(t.right.name)}function _c({returnType:e}){return e?.typeAnnotation??void 0}function vc(e){if(e.type===`ArrowFunctionExpression`&&(e.body.type===`JSXElement`||e.body.type===`JSXFragment`))return!0;if(e.body===null)return!1;let t=!1;return zr(e.body,e=>{if(t||e.type!==`ReturnStatement`)return;let{argument:n}=e;n!==null&&(n.type===`JSXElement`||n.type===`JSXFragment`)&&(t=!0)}),t}function yc({parent:e}){return e.type===`CallExpression`||e.type===`JSXExpressionContainer`||e.type===`ArrayExpression`}function bc(e){if(!(e.parent?.type!==`VariableDeclarator`||e.parent.id.type!==`Identifier`))return e.parent.id.name}function xc(e){return e.type===`Identifier`?e.name:void 0}function Sc(e){let t=e;for(;t!==void 0&&pc.has(t.type);)t=t.parent??void 0;return t}function Cc(e){let t=Sc(e.parent??void 0);return t?.type===`Property`&&wc(t.value)===e}function wc(e){let t=e;for(;Tc(t);)t=t.expression;return t}function Tc(e){return pc.has(e.type)}function Ec(e,t){if(t.type===`FunctionDeclaration`){let n=e.getDeclaredVariables(t);return n.length>0?n[0]:void 0}let{parent:n}=t;if(n?.type!==`VariableDeclarator`)return;let r=e.getDeclaredVariables(n);return r.length>0?r[0]:void 0}function Dc(e,t){let n=Ec(t,e);if(n===void 0)return!1;let r=!1;for(let e of n.references)if(!e.isWrite()&&(r=!0,!Cc(e.identifier)))return!1;return r}const Oc=t({create(e){let t=0;function n(t,n){e.report({data:{functionName:n},messageId:`noRenderHelper`,node:t})}function r(r){let{parent:i}=r,a=bc(r);if(a!==void 0&&W(a)){--t;return}if(t>0||yc(r)||i.type!==`VariableDeclarator`)return;let o=xc(i.id);if(o===void 0||W(o)||hc(o)||Dc(r,e.sourceCode))return;let s=ce(i.id),c=s!==void 0&&gc(s.typeAnnotation),l=gc(_c(r));(c||l||vc(r))&&n(i,o)}return{ArrowFunctionExpression(e){let n=bc(e);n!==void 0&&W(n)&&(t+=1)},"ArrowFunctionExpression:exit":r,FunctionDeclaration({id:e}){e!==null&&W(e.name)&&(t+=1)},"FunctionDeclaration:exit"(r){if(r.id===null)return;let i=r.id.name;if(W(i)){--t;return}t>0||hc(i)||Dc(r,e.sourceCode)||(gc(_c(r))||vc(r))&&n(r,i)},FunctionExpression(e){let n=bc(e);n!==void 0&&W(n)&&(t+=1)},"FunctionExpression:exit":r}},meta:{docs:{description:`Disallow non-component functions that return JSX or React elements.`},messages:{noRenderHelper:`Convert render helper '{{functionName}}' to a React component. Functions that return JSX should be PascalCase components, not camelCase helpers.`},schema:[],type:`suggestion`}}),kc=h({"message?":`string | undefined`,object:`string`,properties:h(`string[]`).readonly()}).readonly(),Ac=h({"allowFiles?":h(`string[]`).readonly().or(`undefined`),"checkComputed?":`boolean | undefined`,restrictions:kc.array().readonly()}).readonly(),jc={matchBase:!0},Mc={dot:!0,magicalBraces:!0};function Nc(e){return e.replaceAll(`\\`,`/`)}function Pc(e){let t=Nc(e);if(!s(e))return[t];let n=Nc(l(process.cwd(),e));return n.length===0||n.startsWith(`..`)?[t]:[t,n]}function Fc(e,t){let n=new g(e,t),r=n.hasMagic();return{hasMagic:r,matches:r?e=>n.match(e):t=>t===e}}function Ic(e){let t=new Set,n=[],r=0;for(let i of e){let e=Fc(i,Mc);e.hasMagic?n[r++]=e.matches:t.add(i)}return e=>t.has(e)||n.some(t=>t(e))}function Lc(e){return{matchesObject:Fc(e.object,Mc).matches,matchesProperty:Ic(e.properties),message:e.message}}function Rc(e){let[t]=e.options;if(!Ac.allows(t))return{checkComputed:!0,isAllowedFile:!1,restrictions:[]};let{allowFiles:n,checkComputed:r,restrictions:i}=t,a=Pc(e.filename),o=n?.some(e=>a.some(t=>_(t,e,jc)))??!1;return{checkComputed:r??!0,isAllowedFile:o,restrictions:i.map(Lc)}}const zc=t({create(e){let{checkComputed:t,isAllowedFile:n,restrictions:r}=Rc(e);function i(i,a){if(n||!M(i)||i.computed&&!t||i.object.type!==`Identifier`)return;let o=T(i);if(o!==void 0){for(let t of r)if(t.matchesObject(i.object.name)&&t.matchesProperty(o)){t.message===void 0?e.report({data:{object:i.object.name,property:o},messageId:`restricted`,node:a}):e.report({data:{message:t.message},messageId:`restrictedCustom`,node:a});return}}}return{AssignmentExpression(e){i(e.left,e)},UpdateExpression(e){i(e.argument,e)}}},meta:{docs:{description:`Disallow assignment to restricted object properties.`,recommended:!0},messages:{restricted:`Assignment to '{{object}}.{{property}}' is not permitted.`,restrictedCustom:`{{message}}`},schema:[{additionalProperties:!1,properties:{allowFiles:{items:{type:`string`},type:`array`},checkComputed:{default:!0,type:`boolean`},restrictions:{items:{additionalProperties:!1,properties:{message:{type:`string`},object:{type:`string`},properties:{items:{type:`string`},minItems:1,type:`array`}},required:[`object`,`properties`],type:`object`},type:`array`}},required:[`restrictions`],type:`object`}],type:`problem`}}),Bc=/\.spec\.(?:ts|tsx)$/u,Vc=t({createOnce(e){return{Program(t){let{filename:n}=e;n&&Bc.test(n)&&e.report({messageId:`noSpecFileExtension`,node:t})}}},meta:{docs:{description:`Disallow the .spec.{ts,tsx} file extension for test files. Use .test.{ts,tsx} instead.`,recommended:!0},messages:{noSpecFileExtension:`Test files must use .test.ts or .test.tsx instead of .spec.ts or .spec.tsx. Rename this file to use the .test extension.`},schema:[],type:`problem`}}),Hc=`Fragment`;function Uc(e){return e.parent?.type===`ImportDeclaration`?e.parent:void 0}function Wc(e,t){if(e.type!==`ImportBinding`)return!1;let n=Uc(e.node);return n!==void 0&&t.has(n.source.value)}function Gc(e,t){if(e===void 0)return!1;for(let n of e.defs)if(Wc(n,t)&&(n.node.type===`ImportDefaultSpecifier`||n.node.type===`ImportNamespaceSpecifier`))return!0;return!1}function Kc(e,t,n){if(e===void 0)return!1;for(let r of e.defs)if(Wc(r,n)&&r.node.type===`ImportSpecifier`&&pe(r.node)===t)return!0;return!1}function qc(e,t,n){let{callee:r}=t;return r.type===`Identifier`?Kc(E(e.getScope(r),r.name),`createElement`,n):r.type!==`MemberExpression`||r.computed||T(r)!==`createElement`||r.object.type!==`Identifier`?!1:Gc(E(e.getScope(r.object),r.object.name),n)}function Jc(e){return e.type===`Literal`&&y(e.value)}function Yc(e,t){if(ds(e))return O(t)||t===Hc;if(!G(e.scope)||!O(t)&&t!==Hc)return!1;for(let t of e.defs){if(t.type===`FunctionName`||t.type===`ClassName`)return!0;if(t.type!==`Variable`||t.node.type!==`VariableDeclarator`)continue;let e=t.node.init??void 0;if(e!==void 0&&(Fe(e)||e.type===`ClassExpression`))return!0}return!1}function Xc(e,t,n){let r=E(e.getScope(t),t.name);return Kc(r,Hc,n)?!0:r!==void 0&&Yc(r,t.name)}function Zc(e){let t=e;for(;;){if(t.computed)return;if(t.object.type===`Identifier`)return t.object;if(t.object.type!==`MemberExpression`)return;t=t.object}}function Qc(e){if(e.computed)return;let t=T(e);if(t!==void 0)return e.object.type===`MemberExpression`&&Qc(e.object)===void 0?void 0:t}function $c(e,t,n){let r=Zc(t);if(r===void 0)return!1;let i=Qc(t);if(i===void 0)return!1;let a=E(e.getScope(r),r.name);return Gc(a,n)&&i===Hc?!0:a===void 0||!ds(a)?!1:O(i)}function el(e,t,n){return t.type===`SpreadElement`?!1:Jc(t)?!0:t.type===`Identifier`?Xc(e,t,n):t.type===`MemberExpression`&&$c(e,t,n)}const tl=t({create(e){let t=yn(e.options[0]),{sourceCode:n}=e;return{CallExpression(r){if(!qc(n,r,t))return;let[i]=r.arguments;i!==void 0&&el(n,i,t)&&e.report({messageId:`useJsx`,node:r})}}},meta:{docs:{description:`Require JSX for static React.createElement calls.`,recommended:!0},messages:{useJsx:`Use JSX instead of static React.createElement calls.`},schema:[{additionalProperties:!1,properties:{environment:mn},type:`object`}],type:`problem`}});function nl(e,t){let n=w(t);if(n.type!==`CallExpression`||n.optional)return!1;let r=w(n.callee);if(r.type!==`MemberExpression`||r.optional||T(r)!==`create`)return!1;let i=w(r.object);return i.type!==`Identifier`||i.name!==`table`?!1:!ie(e,i,`table`)}function rl(e,t){let n=w(t);if(n.type!==`NewExpression`||n.arguments.length!==1&&n.arguments.length!==2)return!1;let r=w(n.callee);return r.type!==`Identifier`||r.name!==`Array`?!1:!ie(e,r,`Array`)}const il=t({create(e){return{CallExpression(t){if(t.optional)return;let n=w(t.callee);if(n.type!==`MemberExpression`||n.optional||T(n)!==`map`)return;let r=w(n.object);(nl(e.sourceCode,r)||rl(e.sourceCode,r))&&e.report({messageId:`avoidConstructThenMap`,node:t})}}},meta:{docs:{description:`Disallow map(...) directly on table.create(...) and new Array(...) constructor patterns in roblox-ts.`},messages:{avoidConstructThenMap:`Do not map directly on table.create(...) or new Array(...). Allocate first, then write by index in a loop.`},schema:[],type:`suggestion`}});function al(e){let{callee:t}=e;if(t.type!==`MemberExpression`||T(t)!==`await`||t.object.type!==`CallExpression`)return!1;let n=t.object.callee;return n.type!==`MemberExpression`||n.object.type!==`Identifier`||n.object.name!==`Promise`?!1:T(n)===`delay`}const ol=t({createOnce(e){return{CallExpression(t){if(al(t)){e.report({messageId:`noPromiseDelayAwait`,node:t});return}let{callee:n}=t;n.type===`MemberExpression`&&(n.object.type!==`Identifier`||n.object.name!==`task`||T(n)===`wait`&&e.report({messageId:`noTaskWait`,node:t}))}}},meta:{docs:{description:`Disallow task.wait() calls.`},messages:{noPromiseDelayAwait:`Do not use Promise.delay(...).await() in tests. Advance deterministic schedulers or wait for the actual condition instead.`,noTaskWait:`Do not use task.wait() in tests. Advance deterministic schedulers or wait for the actual condition instead.`},schema:[],type:`problem`}}),sl=t({createOnce(e){return{JSXAttribute(t){t.name.type!==`JSXIdentifier`||!t.name.name.startsWith(`_`)||e.report({data:{propName:t.name.name},messageId:`noUnderscoreReactProp`,node:t.name})}}},meta:{docs:{description:`Ban React property names that begin with an underscore in JSX.`},messages:{noUnderscoreReactProp:`React prop '{{propName}}' starts with '_'. Remove the leading underscore from the prop name.`},schema:[],type:`problem`}}),cl=/@(?:link|linkcode|linkplain|see)\s+\{?(?<identifier>\w+)/gu,ll=/\{@(?:link|linkcode|linkplain|see)\s+(?<identifier>\w+)/gu,ul=/[@{](?:type|typedef|param|returns?|template|augments|extends|implements)\s+(?<annotation>[^}]*)/gu,dl=/\b(?<identifier>\w+)\b/gu;function fl(e){return e.type===`ImportDefaultSpecifier`||e.type===`ImportNamespaceSpecifier`||e.type===`ImportSpecifier`}function pl(e){let t=new Set;for(let n of e)n.type===`Block`&&(ml(n.value,t),hl(n.value,t));return t}function ml(e,t){for(let n of[cl,ll])for(let r of e.matchAll(n)){let e=r.groups?.identifier;e!==void 0&&t.add(e)}}function hl(e,t){for(let n of e.matchAll(ul)){let e=n.groups?.annotation;if(e!==void 0)for(let n of e.matchAll(dl)){let e=n.groups?.identifier;e!==void 0&&t.add(e)}}}function gl(e,t,n,r){if(t.specifiers.length===1)return r.remove(t);let i=e.getTokenAfter(n);if(t.specifiers[0]===n&&i?.value===`,`){let t=e.getTokenBefore(n);if(t!==null)return[r.removeRange([t.range[1],n.range[0]]),r.remove(n),r.remove(i)]}if(i?.value===`,`)return r.removeRange([n.range[0],i.range[1]]);let a=e.getTokenBefore(n);return a?.value===`,`?r.removeRange([a.range[0],n.range[1]]):r.remove(n)}const _l=t({create(e){let{sourceCode:t}=e,n=e.options[0]?.checkJSDoc??!0,r=n?pl(t.getAllComments()):new Set,i=[],a;return{ImportDeclaration(e){a??=e;for(let t of e.specifiers)fl(t)&&i.push({identifierName:t.local.name,parent:e,specifier:t})},"Program:exit"(){if(a===void 0)return;let o=t.getScope(a);for(let{identifierName:a,parent:s,specifier:c}of i){let i=o.set.get(a);i!==void 0&&i.references.length>0||n&&r.has(a)||e.report({data:{identifierName:a},fix(e){return gl(t,s,c,e)},messageId:`unusedImport`,node:c})}}}},meta:{docs:{description:`Disallow unused imports`},fixable:`code`,messages:{unusedImport:`Import '{{identifierName}}' is defined but never used.`},schema:[{additionalProperties:!1,properties:{checkJSDoc:{default:!0,description:`Check if imports are referenced in JSDoc comments`,type:`boolean`}},type:`object`}],type:`problem`}}),vl=t({create(e){let t=new Set,n=new Set,r=yn(e.options[0]);return{CallExpression(r){fe(r,t,n)&&js(r)&&e.report({messageId:`unusedUseMemo`,node:r})},ImportDeclaration(e){Ms(e,r,t,n)}}},meta:{docs:{description:`Disallow standalone useMemo calls that ignore the memoized value.`,recommended:!0},messages:{unusedUseMemo:`useMemo results must be used. Standalone useMemo calls add overhead without preserving a value.`},schema:[{additionalProperties:!1,properties:{environment:{default:`roblox-ts`,enum:[`roblox-ts`,`standard`],type:`string`}},type:`object`}],type:`problem`}});function yl(e){if(e.body===null)return;if(e.body.type!==`BlockStatement`)return e.body;if(e.body.body.length!==1)return;let[t]=e.body.body;if(t?.type===`ReturnStatement`)return t.argument??void 0}const bl=t({create(e){return{CallExpression(t){if(!_o(t,`useMemo`))return;let n=Lr(t);if(n===void 0)return;let r=yl(n);r===void 0||!go(r)||e.report({messageId:`simpleMemo`,node:t})}}},meta:{docs:{description:`Disallow useMemo for expressions that are already trivial to compute.`,recommended:!0},messages:{simpleMemo:`useMemo wrapping a trivially cheap expression - memo overhead exceeds the computation`},type:`problem`}}),xl=/^[A-Z][A-Z0-9_]*$/u,Sl={staticGlobalFactories:new Set(ss)},Cl=[String.raw`^Array\b`,String.raw`^Object\b`,String.raw`^Map\b`,String.raw`^Set\b`,String.raw`^WeakMap\b`,String.raw`^WeakSet\b`];function wl(e){let t=[],n=0,r=[e];for(;r.length>0;){let e=r.pop();if(e===void 0)break;e.type!==`global`&&(t[n++]=e);for(let t of e.childScopes)r.push(t)}return t}function Tl(e){return Fe(e)||e.type===`ClassExpression`}const El=new Set([`ArrayExpression`,`ObjectExpression`,`JSXElement`,`JSXFragment`]);function Dl(e,t,n){if(El.has(e.type))return!0;if(e.type!==`CallExpression`&&e.type!==`NewExpression`)return!1;let r=n.getText(e.callee);for(let e of t)if(e.test(r))return!0;return!1}function Ol(e){return e.type===`Program`||e.type===`BlockStatement`}function kl(e){switch(e.type){case`ChainExpression`:case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:return kl(e.expression);case`Identifier`:return e.name;case`MemberExpression`:return kl(e.object);default:return}}function q(e,t){switch(e.type){case`ArrayExpression`:return Al(e,t);case`BinaryExpression`:case`LogicalExpression`:return jl(e,t);case`CallExpression`:case`NewExpression`:return Ml(e,t);case`ChainExpression`:return q(e.expression,t);case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:return q(e.expression,t);case`ConditionalExpression`:return Nl(e,t);case`MemberExpression`:return Pl(e,t);case`ObjectExpression`:return Fl(e,t);case`SequenceExpression`:return!1;case`SpreadElement`:return!1;case`TemplateLiteral`:return Il(e.expressions,t);case`UnaryExpression`:return q(e.argument,t);default:return!0}}function Al(e,t){for(let n of e.elements)if(n===null||!q(n,t))return!1;return!0}function jl(e,t){return q(e.left,t)&&q(e.right,t)}function Ml(e,t){let n=kl(e.callee);return n===void 0||!t.has(n)||!q(e.callee,t)?!1:Il(e.arguments,t)}function Nl(e,t){return q(e.test,t)&&q(e.consequent,t)&&q(e.alternate,t)}function Pl(e,t){return q(e.object,t)&&(!e.computed||q(e.property,t))}function Fl(e,t){for(let n of e.properties)if(n.type!==`Property`||n.computed&&!q(n.key,t)||!q(n.value,t))return!1;return!0}function Il(e,t){for(let n of e)if(!q(n,t))return!1;return!0}function Ll(e,t){return t.type===`Literal`||K(e,t,new Set,Sl)&&q(t,Sl.staticGlobalFactories)}function Rl(e,t){let n=t;for(;n.type===`ParenthesizedExpression`;)n=n.expression;return e.getText(n)}function zl(e,t){let{parent:n}=e;if(n==null||!Ol(n))return!1;let{body:r}=n;for(let n=0;n<r.length;n+=1)if(r[n]===e)return r[n+1]===t;return!1}function Bl(e,t){let[n]=t.range;for(;n>0;){let t=e[n-1];if(t===` `||t===` `){--n;continue}break}let[,r]=t.range,i=r;for(;i<e.length;){let t=e[i];if(t===`
9
- `||t===`\r`){i+=1;continue}break}return[n,i]}function Vl(e){let t=e.parent,n=e;for(;t!=null;){if(k(t)&&t.init===n)return t;n=t,t=t.parent}}const Hl=t({create(e){let{sourceCode:t}=e,[n]=e.options,r=(n?.ignoreCallPatterns??Cl).map(e=>new RegExp(e,`u`));function i(e){if(t.getCommentsInside(e).length>0)return!0;let n=e.loc?.start.line,r=e.loc?.end.line;if(n===void 0||r===void 0)return!1;for(let r of t.getCommentsBefore(e)){let e=r.loc?.end.line;if(e===n||e===n-1)return!0}for(let n of t.getCommentsAfter(e)){let e=n.loc?.start.line;if(e===r||e===r+1)return!0}return!1}function a(e,n){let r,i=0;for(let e of n.references)e.isReadOnly()&&(i+=1,r=e);if(!(i!==1||r===void 0||r.from!==e||t.getScope(r.identifier)!==e))return r}function o(e,n){let{name:i}=n;if(!xl.test(i))return;let[o]=n.defs;if(o?.type!==`Variable`)return;let s=o.node;if(!(k(s)&&nt(s.id))||s.init===null)return;let c=o.parent;if(c===null||!Me(c)||c.kind!==`const`||c.declarations.length!==1||Ne(c.parent))return;let l=s.init;if(Tl(l)||Dl(l,r,t))return;let u=a(e,n);if(u===void 0||!nt(u.identifier))return;let d=Vl(u.identifier);if(d===void 0)return;let f=d.parent;if(!(!Me(f)||f.kind!==`const`))return{declarationNode:c,enclosingDeclaration:f,initializer:l,name:i,referenceIdentifier:u.identifier,reportNode:s.id}}function s(n){let r=[];for(let a of n.variables){let s=o(n,a);if(s===void 0)continue;let c=zl(s.declarationNode,s.enclosingDeclaration),l=Ll(t,s.initializer),u=q(s.initializer,Sl.staticGlobalFactories);if(!((c||l)&&u&&!i(s.declarationNode))){e.report({data:{name:s.name},messageId:`uselessConstantNoFix`,node:s.reportNode});continue}r.push({declarationNode:s.declarationNode,initializerText:Rl(t,s.initializer),name:s.name,referenceIdentifier:s.referenceIdentifier,reportNode:s.reportNode})}c(r)}function c(n){let[r]=n;r!==void 0&&e.report({data:{name:r.name,names:n.map(e=>e.name).join(`, `)},fix(e){let r=[],i=0;for(let t of n)r[i++]=e.replaceText(t.referenceIdentifier,t.initializerText);for(let a of n)r[i++]=e.removeRange(Bl(t.text,a.declarationNode));return r},messageId:n.length===1?`uselessConstant`:`uselessConstants`,node:r.reportNode})}return{"Program:exit"(e){let n=wl(t.getScope(e));for(let e of n)s(e)}}},meta:{docs:{description:`Disallow constants that do not add value.`,recommended:!0},fixable:`code`,messages:{uselessConstant:`Constant '{{name}}' is only referenced once in the same scope. Inline it directly, or move it to a higher scope if reference stability is needed.`,uselessConstantNoFix:`Constant '{{name}}' is only referenced once in the same scope. It cannot be auto-inlined because the initializer is not safely movable or the declaration has attached comments. Inline it manually, or move it to a higher scope if reference stability is needed.`,uselessConstants:`Constants '{{names}}' are only referenced once in the same scope. Inline them directly, or move them to a higher scope if reference stability is needed.`},schema:[{additionalProperties:!1,properties:{ignoreCallPatterns:{default:[...Cl],items:{type:`string`},type:`array`}},type:`object`}],type:`problem`}});var Ul={AdGui:{Archivable:{type:`bool`,value:!0}},AdPortal:{Archivable:{type:`bool`,value:!0}},AlignOrientation:{AlignType:{enumType:`AlignType`,type:`Enum`,value:`AllAxes`},Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Enabled:{type:`bool`,value:!0},MaxAngularVelocity:{type:`number`,value:`inf`},MaxTorque:{type:`number`,value:1e4},Mode:{enumType:`OrientationAlignmentMode`,type:`Enum`,value:`TwoAttachment`},PrimaryAxisOnly:{type:`bool`,value:!1},ReactionTorqueEnabled:{type:`bool`,value:!1},Responsiveness:{type:`number`,value:10},RigidityEnabled:{type:`bool`,value:!1},Visible:{type:`bool`,value:!1}},AlignPosition:{ApplyAtCenterOfMass:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},ForceLimitMode:{enumType:`ForceLimitMode`,type:`Enum`,value:`Magnitude`},ForceRelativeTo:{enumType:`ActuatorRelativeTo`,type:`Enum`,value:`World`},MaxAxesForce:{type:`Vector3`,value:[1e4,1e4,1e4]},MaxForce:{type:`number`,value:1e4},MaxVelocity:{type:`number`,value:`inf`},Mode:{enumType:`PositionAlignmentMode`,type:`Enum`,value:`TwoAttachment`},Position:{type:`Vector3`,value:[0,0,0]},ReactionForceEnabled:{type:`bool`,value:!1},Responsiveness:{type:`number`,value:10},RigidityEnabled:{type:`bool`,value:!1},Visible:{type:`bool`,value:!1}},AngularVelocity:{AngularVelocity:{type:`Vector3`,value:[0,0,0]},Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},MaxTorque:{type:`number`,value:0},ReactionTorqueEnabled:{type:`bool`,value:!1},RelativeTo:{enumType:`ActuatorRelativeTo`,type:`Enum`,value:`World`},Visible:{type:`bool`,value:!1}},Animation:{Archivable:{type:`bool`,value:!0}},AnimationConstraint:{AngularDamping:{type:`number`,value:1},AngularStrength:{type:`number`,value:1},Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},IsKinematic:{type:`bool`,value:!1},LinearDamping:{type:`number`,value:1},LinearStrength:{type:`number`,value:1},MaxForce:{type:`number`,value:1e4},MaxTorque:{type:`number`,value:1e4},Transform:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Visible:{type:`bool`,value:!1}},AnimationController:{Archivable:{type:`bool`,value:!0}},AnimationGraphDefinition:{Archivable:{type:`bool`,value:!0},Loop:{type:`bool`,value:!0},Priority:{enumType:`AnimationPriority`,type:`Enum`,value:`Action`}},AnimationNodeDefinition:{Archivable:{type:`bool`,value:!0},NodeType:{enumType:`AnimationNodeType`,type:`Enum`,value:`InvalidNode`}},Animator:{Archivable:{type:`bool`,value:!0},PreferLodEnabled:{type:`bool`,value:!0}},ArcHandles:{Archivable:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0}},Attachment:{Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Visible:{type:`bool`,value:!1}},AudioAnalyzer:{Archivable:{type:`bool`,value:!0},SpectrumEnabled:{type:`bool`,value:!0},WindowSize:{enumType:`AudioWindowSize`,type:`Enum`,value:`Medium`}},AudioChannelMixer:{Archivable:{type:`bool`,value:!0},Layout:{enumType:`AudioChannelLayout`,type:`Enum`,value:`Stereo`}},AudioChannelSplitter:{Archivable:{type:`bool`,value:!0},Layout:{enumType:`AudioChannelLayout`,type:`Enum`,value:`Stereo`}},AudioChorus:{Archivable:{type:`bool`,value:!0},Bypass:{type:`bool`,value:!1},Depth:{type:`number`,value:.44999998807907104},Mix:{type:`number`,value:.8500000238418579},Rate:{type:`number`,value:5}},AudioCompressor:{Archivable:{type:`bool`,value:!0},Attack:{type:`number`,value:.10000000149011612},Bypass:{type:`bool`,value:!1},MakeupGain:{type:`number`,value:0},Ratio:{type:`number`,value:40},Release:{type:`number`,value:.10000000149011612},Threshold:{type:`number`,value:-40}},AudioDeviceInput:{AccessType:{enumType:`AccessModifierType`,type:`Enum`,value:`Deny`},Archivable:{type:`bool`,value:!0},Muted:{type:`bool`,value:!1},Volume:{type:`number`,value:1}},AudioDeviceOutput:{Archivable:{type:`bool`,value:!0}},AudioDistortion:{Archivable:{type:`bool`,value:!0},Bypass:{type:`bool`,value:!1},Level:{type:`number`,value:.5}},AudioEcho:{Archivable:{type:`bool`,value:!0},Bypass:{type:`bool`,value:!1},DelayTime:{type:`number`,value:1},DryLevel:{type:`number`,value:0},Feedback:{type:`number`,value:.5},RampTime:{type:`number`,value:0},WetLevel:{type:`number`,value:0}},AudioEmitter:{AcousticSimulationEnabled:{type:`bool`,value:!0},Archivable:{type:`bool`,value:!0},AudioInteractionGroup:{type:`string`,value:``},DiffractionEnabled:{enumType:`SimulationMode`,type:`Enum`,value:`Default`},OcclusionEnabled:{enumType:`SimulationMode`,type:`Enum`,value:`Default`},PositionType:{enumType:`EmitterPositionType`,type:`Enum`,value:`Parent`},ReverbEnabled:{enumType:`SimulationMode`,type:`Enum`,value:`Default`},SimulationFidelity:{enumType:`AudioSimulationFidelity`,type:`Enum`,value:`Automatic`}},AudioEqualizer:{Archivable:{type:`bool`,value:!0},Bypass:{type:`bool`,value:!1},HighGain:{type:`number`,value:0},LowGain:{type:`number`,value:0},MidGain:{type:`number`,value:0}},AudioFader:{Archivable:{type:`bool`,value:!0},Bypass:{type:`bool`,value:!1},Volume:{type:`number`,value:1}},AudioFilter:{Archivable:{type:`bool`,value:!0},Bypass:{type:`bool`,value:!1},FilterType:{enumType:`AudioFilterType`,type:`Enum`,value:`Peak`},Frequency:{type:`number`,value:2e3},Gain:{type:`number`,value:0},Q:{type:`number`,value:.7070000171661377}},AudioFlanger:{Archivable:{type:`bool`,value:!0},Bypass:{type:`bool`,value:!1},Depth:{type:`number`,value:.44999998807907104},Mix:{type:`number`,value:.8500000238418579},Rate:{type:`number`,value:5}},AudioGate:{Archivable:{type:`bool`,value:!0},Attack:{type:`number`,value:.009999999776482582},Bypass:{type:`bool`,value:!1},Release:{type:`number`,value:.10000000149011612}},AudioLimiter:{Archivable:{type:`bool`,value:!0},Bypass:{type:`bool`,value:!1},MaxLevel:{type:`number`,value:0},Release:{type:`number`,value:.009999999776482582}},AudioListener:{AcousticSimulationEnabled:{type:`bool`,value:!0},Archivable:{type:`bool`,value:!0},AudioInteractionGroup:{type:`string`,value:``},DiffractionEnabled:{enumType:`SimulationMode`,type:`Enum`,value:`Default`},OcclusionEnabled:{enumType:`SimulationMode`,type:`Enum`,value:`Default`},PositionType:{enumType:`ListenerPositionType`,type:`Enum`,value:`Parent`},ReverbEnabled:{enumType:`SimulationMode`,type:`Enum`,value:`Default`},SimulationFidelity:{enumType:`AudioSimulationFidelity`,type:`Enum`,value:`Automatic`}},AudioPitchShifter:{Archivable:{type:`bool`,value:!0},Bypass:{type:`bool`,value:!1},Pitch:{type:`number`,value:1.25},WindowSize:{enumType:`AudioWindowSize`,type:`Enum`,value:`Medium`}},AudioPlayer:{Archivable:{type:`bool`,value:!0},AutoLoad:{type:`bool`,value:!0},AutoPlay:{type:`bool`,value:!1},Looping:{type:`bool`,value:!1},PlaybackSpeed:{type:`number`,value:1},TimePosition:{type:`number`,value:0},Volume:{type:`number`,value:1}},AudioRecorder:{Archivable:{type:`bool`,value:!0}},AudioReverb:{Archivable:{type:`bool`,value:!0},Bypass:{type:`bool`,value:!1},DecayRatio:{type:`number`,value:.5},DecayTime:{type:`number`,value:1.5},Density:{type:`number`,value:1},Diffusion:{type:`number`,value:1},DryLevel:{type:`number`,value:0},EarlyDelayTime:{type:`number`,value:.019999999552965164},HighCutFrequency:{type:`number`,value:2e4},LateDelayTime:{type:`number`,value:.03999999910593033},LowShelfFrequency:{type:`number`,value:250},LowShelfGain:{type:`number`,value:0},ReferenceFrequency:{type:`number`,value:5e3},WetLevel:{type:`number`,value:-6}},AudioSpeechToText:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!1},Text:{type:`string`,value:``}},AudioTextToSpeech:{Archivable:{type:`bool`,value:!0},Looping:{type:`bool`,value:!1},Pitch:{type:`number`,value:0},PlaybackSpeed:{type:`number`,value:1},Speed:{type:`number`,value:1},Text:{type:`string`,value:``},TimePosition:{type:`number`,value:0},VoiceId:{type:`string`,value:``},Volume:{type:`number`,value:1}},AudioTremolo:{Archivable:{type:`bool`,value:!0},Bypass:{type:`bool`,value:!1},Depth:{type:`number`,value:1},Duty:{type:`number`,value:.5},Frequency:{type:`number`,value:5},Shape:{type:`number`,value:0},Skew:{type:`number`,value:0},Square:{type:`number`,value:0}},AuroraScript:{Archivable:{type:`bool`,value:!0}},AvatarAbilityRules:{Archivable:{type:`bool`,value:!0}},AvatarAccessoryRules:{Archivable:{type:`bool`,value:!0}},AvatarAnimationRules:{Archivable:{type:`bool`,value:!0}},AvatarBodyRules:{Archivable:{type:`bool`,value:!0}},AvatarClothingRules:{Archivable:{type:`bool`,value:!0}},AvatarCollisionRules:{Archivable:{type:`bool`,value:!0}},AvatarRules:{Archivable:{type:`bool`,value:!0}},BallSocketConstraint:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},LimitsEnabled:{type:`bool`,value:!1},Radius:{type:`number`,value:.15000000596046448},Restitution:{type:`number`,value:0},TwistLimitsEnabled:{type:`bool`,value:!1},TwistLowerAngle:{type:`number`,value:-45},TwistUpperAngle:{type:`number`,value:45},UpperAngle:{type:`number`,value:45},Visible:{type:`bool`,value:!1}},Beam:{Archivable:{type:`bool`,value:!0},Brightness:{type:`number`,value:1},CurveSize0:{type:`number`,value:0},CurveSize1:{type:`number`,value:0},Enabled:{type:`bool`,value:!0},FaceCamera:{type:`bool`,value:!1},LightEmission:{type:`number`,value:0},LightInfluence:{type:`number`,value:0},Segments:{type:`number`,value:10},TextureLength:{type:`number`,value:1},TextureMode:{enumType:`TextureMode`,type:`Enum`,value:`Stretch`},TextureSpeed:{type:`number`,value:1},Width0:{type:`number`,value:1},Width1:{type:`number`,value:1},ZOffset:{type:`number`,value:0}},BillboardGui:{Active:{type:`bool`,value:!1},AlwaysOnTop:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},Brightness:{type:`number`,value:1},ClipsDescendants:{type:`bool`,value:!1},DistanceLowerLimit:{type:`number`,value:0},DistanceUpperLimit:{type:`number`,value:-1},Enabled:{type:`bool`,value:!0},ExtentsOffset:{type:`Vector3`,value:[0,0,0]},ExtentsOffsetWorldSpace:{type:`Vector3`,value:[0,0,0]},LightInfluence:{type:`number`,value:0},MaxDistance:{type:`number`,value:`inf`},ResetOnSpawn:{type:`bool`,value:!0},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},Size:{type:`UDim2`,value:[0,0,0,0]},SizeOffset:{type:`Vector2`,value:[0,0]},StudsOffset:{type:`Vector3`,value:[0,0,0]},StudsOffsetWorldSpace:{type:`Vector3`,value:[0,0,0]},ZIndexBehavior:{enumType:`ZIndexBehavior`,type:`Enum`,value:`Global`}},BlockMesh:{Archivable:{type:`bool`,value:!0},Offset:{type:`Vector3`,value:[0,0,0]},Scale:{type:`Vector3`,value:[1,1,1]},VertexColor:{type:`Vector3`,value:[1,1,1]}},BloomEffect:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Intensity:{type:`number`,value:.4000000059604645},Size:{type:`number`,value:24},Threshold:{type:`number`,value:.949999988079071}},BlurEffect:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Size:{type:`number`,value:24}},BodyAngularVelocity:{AngularVelocity:{type:`Vector3`,value:[0,2,0]},Archivable:{type:`bool`,value:!0},MaxTorque:{type:`Vector3`,value:[4e3,4e3,4e3]},P:{type:`number`,value:1250}},BodyColors:{Archivable:{type:`bool`,value:!0},HeadColor3:{type:`Color3`,value:[.9921569228172302,.917647123336792,.5529412031173706]},LeftArmColor3:{type:`Color3`,value:[.9921569228172302,.917647123336792,.5529412031173706]},LeftLegColor3:{type:`Color3`,value:[.05098039656877518,.4117647409439087,.6745098233222961]},RightArmColor3:{type:`Color3`,value:[.9921569228172302,.917647123336792,.5529412031173706]},RightLegColor3:{type:`Color3`,value:[.05098039656877518,.4117647409439087,.6745098233222961]},TorsoColor3:{type:`Color3`,value:[.1568627506494522,.49803924560546875,.27843138575553894]}},BodyForce:{Archivable:{type:`bool`,value:!0},Force:{type:`Vector3`,value:[0,1,0]}},BodyGyro:{Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},D:{type:`number`,value:500},MaxTorque:{type:`Vector3`,value:[4e5,0,4e5]},P:{type:`number`,value:3e3}},BodyPartDescription:{Archivable:{type:`bool`,value:!0},AssetId:{type:`number`,value:0},BodyPart:{enumType:`BodyPart`,type:`Enum`,value:`Head`},Color:{type:`Color3`,value:[0,0,0]},HeadShape:{type:`string`,value:``}},BodyPosition:{Archivable:{type:`bool`,value:!0},D:{type:`number`,value:1250},MaxForce:{type:`Vector3`,value:[4e3,4e3,4e3]},P:{type:`number`,value:1e4},Position:{type:`Vector3`,value:[0,50,0]}},BodyThrust:{Archivable:{type:`bool`,value:!0},Force:{type:`Vector3`,value:[0,1,0]},Location:{type:`Vector3`,value:[0,0,0]}},BodyVelocity:{Archivable:{type:`bool`,value:!0},MaxForce:{type:`Vector3`,value:[4e3,4e3,4e3]},P:{type:`number`,value:1250},Velocity:{type:`Vector3`,value:[0,2,0]}},Bone:{Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Visible:{type:`bool`,value:!1}},BoolValue:{Archivable:{type:`bool`,value:!0},Value:{type:`bool`,value:!1}},BoxHandleAdornment:{AdornCullingMode:{enumType:`AdornCullingMode`,type:`Enum`,value:`Automatic`},AlwaysOnTop:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},Shading:{enumType:`AdornShading`,type:`Enum`,value:`Default`},Size:{type:`Vector3`,value:[1,1,1]},SizeRelativeOffset:{type:`Vector3`,value:[0,0,0]},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:-1}},BrickColorValue:{Archivable:{type:`bool`,value:!0}},CFrameValue:{Archivable:{type:`bool`,value:!0},Value:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]}},Camera:{Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,20,20,1,0,0,0,.7071068286895752,.7071068286895752,0,-.7071068286895752,.7071068286895752]},CameraType:{enumType:`CameraType`,type:`Enum`,value:`Fixed`},FieldOfView:{type:`number`,value:70},FieldOfViewMode:{enumType:`FieldOfViewMode`,type:`Enum`,value:`Vertical`},Focus:{type:`CFrame`,value:[0,0,-5,1,0,0,0,1,0,0,0,1]},HeadLocked:{type:`bool`,value:!0},HeadScale:{type:`number`,value:1},VRTiltAndRollEnabled:{type:`bool`,value:!1}},CanvasGroup:{Active:{type:`bool`,value:!1},AnchorPoint:{type:`Vector2`,value:[0,0]},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},AutomaticSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},BackgroundColor3:{type:`Color3`,value:[.6392157077789307,.6352941393852234,.6470588445663452]},BackgroundTransparency:{type:`number`,value:0},BorderColor3:{type:`Color3`,value:[.10588235408067703,.16470588743686676,.2078431397676468]},BorderMode:{enumType:`BorderMode`,type:`Enum`,value:`Outline`},BorderSizePixel:{type:`number`,value:1},ClipsDescendants:{type:`bool`,value:!0},Draggable:{type:`bool`,value:!1},GroupColor3:{type:`Color3`,value:[1,1,1]},GroupTransparency:{type:`number`,value:0},InputSink:{enumType:`InputSink`,type:`Enum`,value:`None`},Interactable:{type:`bool`,value:!0},LayoutOrder:{type:`number`,value:0},Position:{type:`UDim2`,value:[0,0,0,0]},Rotation:{type:`number`,value:0},Selectable:{type:`bool`,value:!1},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},SelectionOrder:{type:`number`,value:0},Size:{type:`UDim2`,value:[0,0,0,0]},SizeConstraint:{enumType:`SizeConstraint`,type:`Enum`,value:`RelativeXY`},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:1}},CharacterMesh:{Archivable:{type:`bool`,value:!0},BodyPart:{enumType:`BodyPart`,type:`Enum`,value:`Head`},OverlayTextureId:{type:`number`,value:0}},ChorusSoundEffect:{Archivable:{type:`bool`,value:!0},Depth:{type:`number`,value:.15000000596046448},Enabled:{type:`bool`,value:!0},Mix:{type:`number`,value:.5},Priority:{type:`number`,value:0},Rate:{type:`number`,value:.5}},ClickDetector:{Archivable:{type:`bool`,value:!0},MaxActivationDistance:{type:`number`,value:32}},Color3Value:{Archivable:{type:`bool`,value:!0},Value:{type:`Color3`,value:[0,0,0]}},ColorCorrectionEffect:{Archivable:{type:`bool`,value:!0},Brightness:{type:`number`,value:0},Contrast:{type:`number`,value:0},Enabled:{type:`bool`,value:!0},Saturation:{type:`number`,value:0},TintColor:{type:`Color3`,value:[1,1,1]}},ColorGradingEffect:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},TonemapperPreset:{enumType:`TonemapperPreset`,type:`Enum`,value:`Default`}},CompositeValueCurve:{Archivable:{type:`bool`,value:!0},CurveType:{enumType:`CompositeValueCurveType`,type:`Enum`,value:`NumberRange`}},CompressorSoundEffect:{Archivable:{type:`bool`,value:!0},Attack:{type:`number`,value:.10000000149011612},Enabled:{type:`bool`,value:!0},GainMakeup:{type:`number`,value:0},Priority:{type:`number`,value:0},Ratio:{type:`number`,value:40},Release:{type:`number`,value:.10000000149011612},Threshold:{type:`number`,value:-40}},ConeHandleAdornment:{AdornCullingMode:{enumType:`AdornCullingMode`,type:`Enum`,value:`Automatic`},AlwaysOnTop:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},Height:{type:`number`,value:2},Hollow:{type:`bool`,value:!1},Radius:{type:`number`,value:.5},Shading:{enumType:`AdornShading`,type:`Enum`,value:`Default`},SizeRelativeOffset:{type:`Vector3`,value:[0,0,0]},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:-1}},Configuration:{Archivable:{type:`bool`,value:!0}},CornerWedgePart:{Anchored:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},AudioCanCollide:{type:`bool`,value:!0},BackParamA:{type:`number`,value:-.5},BackParamB:{type:`number`,value:.5},BackSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},BackSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},BottomParamA:{type:`number`,value:-.5},BottomParamB:{type:`number`,value:.5},BottomSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},BottomSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},CanCollide:{type:`bool`,value:!0},CanQuery:{type:`bool`,value:!0},CanTouch:{type:`bool`,value:!0},CastShadow:{type:`bool`,value:!0},CollisionGroup:{type:`string`,value:`Default`},CollisionGroupId:{type:`number`,value:0},Color:{type:`Color3`,value:[163,162,165]},EnableFluidForces:{type:`bool`,value:!0},FrontParamA:{type:`number`,value:-.5},FrontParamB:{type:`number`,value:.5},FrontSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},FrontSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},LeftParamA:{type:`number`,value:-.5},LeftParamB:{type:`number`,value:.5},LeftSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},LeftSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Locked:{type:`bool`,value:!1},Massless:{type:`bool`,value:!1},Material:{enumType:`Material`,type:`Enum`,value:`Plastic`},MaterialVariant:{type:`string`,value:``},PivotOffset:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Reflectance:{type:`number`,value:0},RightParamA:{type:`number`,value:-.5},RightParamB:{type:`number`,value:.5},RightSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},RightSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},RootPriority:{type:`number`,value:0},RotVelocity:{type:`Vector3`,value:[0,0,0]},Size:{type:`Vector3`,value:[2,2,2]},TopParamA:{type:`number`,value:-.5},TopParamB:{type:`number`,value:.5},TopSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},TopSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Transparency:{type:`number`,value:0},Velocity:{type:`Vector3`,value:[0,0,0]}},CurveAnimation:{Archivable:{type:`bool`,value:!0},Loop:{type:`bool`,value:!0},Priority:{enumType:`AnimationPriority`,type:`Enum`,value:`Action`}},CustomLog:{Archivable:{type:`bool`,value:!0}},CylinderHandleAdornment:{AdornCullingMode:{enumType:`AdornCullingMode`,type:`Enum`,value:`Automatic`},AlwaysOnTop:{type:`bool`,value:!1},Angle:{type:`number`,value:360},Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},Height:{type:`number`,value:1},InnerRadius:{type:`number`,value:0},Radius:{type:`number`,value:1},Shading:{enumType:`AdornShading`,type:`Enum`,value:`Default`},SizeRelativeOffset:{type:`Vector3`,value:[0,0,0]},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:-1}},CylinderMesh:{Archivable:{type:`bool`,value:!0},Offset:{type:`Vector3`,value:[0,0,0]},Scale:{type:`Vector3`,value:[1,1,1]},VertexColor:{type:`Vector3`,value:[1,1,1]}},CylindricalConstraint:{ActuatorType:{enumType:`ActuatorType`,type:`Enum`,value:`None`},AngularActuatorType:{enumType:`ActuatorType`,type:`Enum`,value:`None`},AngularLimitsEnabled:{type:`bool`,value:!1},AngularResponsiveness:{type:`number`,value:45},AngularRestitution:{type:`number`,value:0},AngularSpeed:{type:`number`,value:0},AngularVelocity:{type:`number`,value:0},Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},InclinationAngle:{type:`number`,value:0},LimitsEnabled:{type:`bool`,value:!1},LinearResponsiveness:{type:`number`,value:45},LowerAngle:{type:`number`,value:-45},LowerLimit:{type:`number`,value:0},MotorMaxAcceleration:{type:`number`,value:`inf`},MotorMaxAngularAcceleration:{type:`number`,value:5e5},MotorMaxForce:{type:`number`,value:0},MotorMaxTorque:{type:`number`,value:0},Restitution:{type:`number`,value:0},RotationAxisVisible:{type:`bool`,value:!1},ServoMaxForce:{type:`number`,value:0},ServoMaxTorque:{type:`number`,value:0},Size:{type:`number`,value:.15000000596046448},SoftlockAngularServoUponReachingTarget:{type:`bool`,value:!1},SoftlockServoUponReachingTarget:{type:`bool`,value:!1},Speed:{type:`number`,value:0},TargetAngle:{type:`number`,value:0},TargetPosition:{type:`number`,value:0},UpperAngle:{type:`number`,value:45},UpperLimit:{type:`number`,value:5},Velocity:{type:`number`,value:0},Visible:{type:`bool`,value:!1}},Decal:{Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[1,1,1]},Face:{enumType:`NormalId`,type:`Enum`,value:`Front`},Rotation:{type:`number`,value:0},Transparency:{type:`number`,value:0},UVOffset:{type:`Vector2`,value:[0,0]},UVScale:{type:`Vector2`,value:[1,1]},ZIndex:{type:`number`,value:1}},DepthOfFieldEffect:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},FarIntensity:{type:`number`,value:.75},FocusDistance:{type:`number`,value:.05000000074505806},InFocusRadius:{type:`number`,value:10},NearIntensity:{type:`number`,value:.75}},DigitsRigDescription:{Archivable:{type:`bool`,value:!0},Index1TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Index2TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Index3TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},IndexRange:{type:`Vector3`,value:[0,0,0]},IndexSize:{type:`number`,value:0},Middle1TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Middle2TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Middle3TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},MiddleRange:{type:`Vector3`,value:[0,0,0]},MiddleSize:{type:`number`,value:0},Pinky1TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Pinky2TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Pinky3TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},PinkyRange:{type:`Vector3`,value:[0,0,0]},PinkySize:{type:`number`,value:0},Ring1TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Ring2TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Ring3TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},RingRange:{type:`Vector3`,value:[0,0,0]},RingSize:{type:`number`,value:0},Side:{enumType:`DigitsRigDescriptionSide`,type:`Enum`,value:`None`},Thumb1TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Thumb2TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Thumb3TposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},ThumbRange:{type:`Vector3`,value:[0,0,0]},ThumbSize:{type:`number`,value:0}},DistortionSoundEffect:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Level:{type:`number`,value:.75},Priority:{type:`number`,value:0}},DoubleConstrainedValue:{Archivable:{type:`bool`,value:!0},MaxValue:{type:`number`,value:1},MinValue:{type:`number`,value:0}},DragDetector:{ApplyAtCenterOfMass:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},DragFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},DragStyle:{enumType:`DragDetectorDragStyle`,type:`Enum`,value:`TranslatePlane`},Enabled:{type:`bool`,value:!0},GamepadModeSwitchKeyCode:{enumType:`KeyCode`,type:`Enum`,value:`ButtonR1`},KeyboardModeSwitchKeyCode:{enumType:`KeyCode`,type:`Enum`,value:`LeftControl`},MaxActivationDistance:{type:`number`,value:32},MaxDragAngle:{type:`number`,value:0},MaxDragTranslation:{type:`Vector3`,value:[0,0,0]},MaxForce:{type:`number`,value:1e7},MaxTorque:{type:`number`,value:1e4},MinDragAngle:{type:`number`,value:0},MinDragTranslation:{type:`Vector3`,value:[0,0,0]},Orientation:{type:`Vector3`,value:[0,180,90]},PermissionPolicy:{enumType:`DragDetectorPermissionPolicy`,type:`Enum`,value:`Everybody`},ResponseStyle:{enumType:`DragDetectorResponseStyle`,type:`Enum`,value:`Physical`},Responsiveness:{type:`number`,value:10},RunLocally:{type:`bool`,value:!1},TrackballRadialPullFactor:{type:`number`,value:1},TrackballRollFactor:{type:`number`,value:1},VRSwitchKeyCode:{enumType:`KeyCode`,type:`Enum`,value:`ButtonL2`}},Dragger:{Archivable:{type:`bool`,value:!0}},EchoSoundEffect:{Archivable:{type:`bool`,value:!0},Delay:{type:`number`,value:1},DryLevel:{type:`number`,value:0},Enabled:{type:`bool`,value:!0},Feedback:{type:`number`,value:.5},Priority:{type:`number`,value:0},WetLevel:{type:`number`,value:0}},EqualizerSoundEffect:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},HighGain:{type:`number`,value:0},LowGain:{type:`number`,value:-20},MidGain:{type:`number`,value:-10},Priority:{type:`number`,value:0}},EulerRotationCurve:{Archivable:{type:`bool`,value:!0},RotationOrder:{enumType:`RotationOrder`,type:`Enum`,value:`XYZ`}},ExplorerFilter:{Archivable:{type:`bool`,value:!0}},FaceControls:{Archivable:{type:`bool`,value:!0}},FileMesh:{Archivable:{type:`bool`,value:!0},Offset:{type:`Vector3`,value:[0,0,0]},Scale:{type:`Vector3`,value:[1,1,1]},VertexColor:{type:`Vector3`,value:[1,1,1]}},Fire:{Archivable:{type:`bool`,value:!0},Color:{type:`Color3`,value:[.9254902601242065,.545098066329956,.27450981736183167]},Enabled:{type:`bool`,value:!0},Heat:{type:`number`,value:9},SecondaryColor:{type:`Color3`,value:[.545098066329956,.3137255012989044,.21568629145622253]},Size:{type:`number`,value:5},TimeScale:{type:`number`,value:1}},FlangeSoundEffect:{Archivable:{type:`bool`,value:!0},Depth:{type:`number`,value:.44999998807907104},Enabled:{type:`bool`,value:!0},Mix:{type:`number`,value:.8500000238418579},Priority:{type:`number`,value:0},Rate:{type:`number`,value:5}},FloatCurve:{Archivable:{type:`bool`,value:!0}},FloorWire:{Archivable:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},CycleOffset:{type:`number`,value:0},StudsBetweenTextures:{type:`number`,value:4},TextureSize:{type:`Vector2`,value:[1,1]},Transparency:{type:`number`,value:0},Velocity:{type:`number`,value:2},Visible:{type:`bool`,value:!0},WireRadius:{type:`number`,value:.0625}},Folder:{Archivable:{type:`bool`,value:!0}},ForceField:{Archivable:{type:`bool`,value:!0},Visible:{type:`bool`,value:!0}},Frame:{Active:{type:`bool`,value:!1},AnchorPoint:{type:`Vector2`,value:[0,0]},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},AutomaticSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},BackgroundColor3:{type:`Color3`,value:[.6392157077789307,.6352941393852234,.6470588445663452]},BackgroundTransparency:{type:`number`,value:0},BorderColor3:{type:`Color3`,value:[.10588235408067703,.16470588743686676,.2078431397676468]},BorderMode:{enumType:`BorderMode`,type:`Enum`,value:`Outline`},BorderSizePixel:{type:`number`,value:1},ClipsDescendants:{type:`bool`,value:!1},Draggable:{type:`bool`,value:!1},InputSink:{enumType:`InputSink`,type:`Enum`,value:`None`},Interactable:{type:`bool`,value:!0},LayoutOrder:{type:`number`,value:0},Position:{type:`UDim2`,value:[0,0,0,0]},Rotation:{type:`number`,value:0},Selectable:{type:`bool`,value:!1},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},SelectionOrder:{type:`number`,value:0},Size:{type:`UDim2`,value:[0,0,0,0]},SizeConstraint:{enumType:`SizeConstraint`,type:`Enum`,value:`RelativeXY`},Style:{enumType:`FrameStyle`,type:`Enum`,value:`Custom`},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:1}},GeneratedFolder:{Archivable:{type:`bool`,value:!0}},Handles:{Archivable:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},Style:{enumType:`HandlesStyle`,type:`Enum`,value:`Resize`},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0}},HapticEffect:{Archivable:{type:`bool`,value:!0},Looped:{type:`bool`,value:!1},Position:{type:`Vector3`,value:[0,0,0]},Radius:{type:`number`,value:3},Type:{enumType:`HapticEffectType`,type:`Enum`,value:`UIClick`}},Highlight:{Archivable:{type:`bool`,value:!0},DepthMode:{enumType:`HighlightDepthMode`,type:`Enum`,value:`AlwaysOnTop`},Enabled:{type:`bool`,value:!0},FillColor:{type:`Color3`,value:[1,0,0]},FillTransparency:{type:`number`,value:.5},OutlineColor:{type:`Color3`,value:[1,1,1]},OutlineTransparency:{type:`number`,value:0}},HingeConstraint:{ActuatorType:{enumType:`ActuatorType`,type:`Enum`,value:`None`},AngularResponsiveness:{type:`number`,value:45},AngularSpeed:{type:`number`,value:0},AngularVelocity:{type:`number`,value:0},Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},LimitsEnabled:{type:`bool`,value:!1},LowerAngle:{type:`number`,value:-45},MotorMaxAcceleration:{type:`number`,value:5e5},MotorMaxTorque:{type:`number`,value:0},Radius:{type:`number`,value:.15000000596046448},Restitution:{type:`number`,value:0},ServoMaxTorque:{type:`number`,value:0},SoftlockServoUponReachingTarget:{type:`bool`,value:!1},TargetAngle:{type:`number`,value:0},UpperAngle:{type:`number`,value:45},Visible:{type:`bool`,value:!1}},Humanoid:{Archivable:{type:`bool`,value:!0},AutoJumpEnabled:{type:`bool`,value:!0},AutoRotate:{type:`bool`,value:!0},AutomaticScalingEnabled:{type:`bool`,value:!0},BreakJointsOnDeath:{type:`bool`,value:!0},CollisionType:{enumType:`HumanoidCollisionType`,type:`Enum`,value:`OuterBox`},DisplayDistanceType:{enumType:`HumanoidDisplayDistanceType`,type:`Enum`,value:`Viewer`},DisplayName:{type:`string`,value:``},EvaluateStateMachine:{type:`bool`,value:!0},HealthDisplayDistance:{type:`number`,value:100},HealthDisplayType:{enumType:`HumanoidHealthDisplayType`,type:`Enum`,value:`DisplayWhenDamaged`},HipHeight:{type:`number`,value:0},JumpHeight:{type:`number`,value:7.199999809265137},JumpPower:{type:`number`,value:50},MaxHealth:{type:`number`,value:100},MaxSlopeAngle:{type:`number`,value:89},NameDisplayDistance:{type:`number`,value:100},NameOcclusion:{enumType:`NameOcclusion`,type:`Enum`,value:`OccludeAll`},RequiresNeck:{type:`bool`,value:!0},RigType:{enumType:`HumanoidRigType`,type:`Enum`,value:`R6`},UseJumpPower:{type:`bool`,value:!0},WalkSpeed:{type:`number`,value:16}},HumanoidController:{Archivable:{type:`bool`,value:!0}},HumanoidDescription:{Archivable:{type:`bool`,value:!0},BodyTypeScale:{type:`number`,value:.30000001192092896},ClimbAnimation:{type:`number`,value:0},DepthScale:{type:`number`,value:1},Face:{type:`number`,value:0},FallAnimation:{type:`number`,value:0},GraphicTShirt:{type:`number`,value:0},HeadScale:{type:`number`,value:1},HeightScale:{type:`number`,value:1},IdleAnimation:{type:`number`,value:0},JumpAnimation:{type:`number`,value:0},MoodAnimation:{type:`number`,value:0},Pants:{type:`number`,value:0},ProportionScale:{type:`number`,value:1},RunAnimation:{type:`number`,value:0},Shirt:{type:`number`,value:0},StaticFacialAnimation:{type:`bool`,value:!1},SwimAnimation:{type:`number`,value:0},UseAvatarSettings:{type:`bool`,value:!1},WalkAnimation:{type:`number`,value:0},WidthScale:{type:`number`,value:1}},HumanoidRigDescription:{Archivable:{type:`bool`,value:!0},ChestRangeMax:{type:`Vector3`,value:[0,0,0]},ChestRangeMin:{type:`Vector3`,value:[0,0,0]},ChestSize:{type:`number`,value:0},ChestTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},HeadBaseRangeMax:{type:`Vector3`,value:[0,0,0]},HeadBaseRangeMin:{type:`Vector3`,value:[0,0,0]},HeadBaseSize:{type:`number`,value:0},HeadBaseTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},LeftAnkleRangeMax:{type:`Vector3`,value:[0,0,0]},LeftAnkleRangeMin:{type:`Vector3`,value:[0,0,0]},LeftAnkleSize:{type:`number`,value:0},LeftAnkleTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},LeftClavicleRangeMax:{type:`Vector3`,value:[0,0,0]},LeftClavicleRangeMin:{type:`Vector3`,value:[0,0,0]},LeftClavicleSize:{type:`number`,value:0},LeftClavicleTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},LeftElbowRangeMax:{type:`Vector3`,value:[0,0,0]},LeftElbowRangeMin:{type:`Vector3`,value:[0,0,0]},LeftElbowSize:{type:`number`,value:0},LeftElbowTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},LeftHipRangeMax:{type:`Vector3`,value:[0,0,0]},LeftHipRangeMin:{type:`Vector3`,value:[0,0,0]},LeftHipSize:{type:`number`,value:0},LeftHipTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},LeftKneeRangeMax:{type:`Vector3`,value:[0,0,0]},LeftKneeRangeMin:{type:`Vector3`,value:[0,0,0]},LeftKneeSize:{type:`number`,value:0},LeftKneeTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},LeftShoulderRangeMax:{type:`Vector3`,value:[0,0,0]},LeftShoulderRangeMin:{type:`Vector3`,value:[0,0,0]},LeftShoulderSize:{type:`number`,value:0},LeftShoulderTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},LeftToeBaseRangeMax:{type:`Vector3`,value:[0,0,0]},LeftToeBaseRangeMin:{type:`Vector3`,value:[0,0,0]},LeftToeBaseSize:{type:`number`,value:0},LeftToeBaseTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},LeftWristRangeMax:{type:`Vector3`,value:[0,0,0]},LeftWristRangeMin:{type:`Vector3`,value:[0,0,0]},LeftWristSize:{type:`number`,value:0},LeftWristTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},NeckRangeMax:{type:`Vector3`,value:[0,0,0]},NeckRangeMin:{type:`Vector3`,value:[0,0,0]},NeckSize:{type:`number`,value:0},NeckTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},RightAnkleRangeMax:{type:`Vector3`,value:[0,0,0]},RightAnkleRangeMin:{type:`Vector3`,value:[0,0,0]},RightAnkleSize:{type:`number`,value:0},RightAnkleTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},RightClavicleRangeMax:{type:`Vector3`,value:[0,0,0]},RightClavicleRangeMin:{type:`Vector3`,value:[0,0,0]},RightClavicleSize:{type:`number`,value:0},RightClavicleTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},RightElbowRangeMax:{type:`Vector3`,value:[0,0,0]},RightElbowRangeMin:{type:`Vector3`,value:[0,0,0]},RightElbowSize:{type:`number`,value:0},RightElbowTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},RightHipRangeMax:{type:`Vector3`,value:[0,0,0]},RightHipRangeMin:{type:`Vector3`,value:[0,0,0]},RightHipSize:{type:`number`,value:0},RightHipTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},RightKneeRangeMax:{type:`Vector3`,value:[0,0,0]},RightKneeRangeMin:{type:`Vector3`,value:[0,0,0]},RightKneeSize:{type:`number`,value:0},RightKneeTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},RightShoulderRangeMax:{type:`Vector3`,value:[0,0,0]},RightShoulderRangeMin:{type:`Vector3`,value:[0,0,0]},RightShoulderSize:{type:`number`,value:0},RightShoulderTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},RightToeBaseRangeMax:{type:`Vector3`,value:[0,0,0]},RightToeBaseRangeMin:{type:`Vector3`,value:[0,0,0]},RightToeBaseSize:{type:`number`,value:0},RightToeBaseTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},RightWristRangeMax:{type:`Vector3`,value:[0,0,0]},RightWristRangeMin:{type:`Vector3`,value:[0,0,0]},RightWristSize:{type:`number`,value:0},RightWristTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},RootRangeMax:{type:`Vector3`,value:[0,0,0]},RootRangeMin:{type:`Vector3`,value:[0,0,0]},RootSize:{type:`number`,value:0},RootTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},SpineRangeMax:{type:`Vector3`,value:[0,0,0]},SpineRangeMin:{type:`Vector3`,value:[0,0,0]},SpineSize:{type:`number`,value:0},SpineTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},WaistRangeMax:{type:`Vector3`,value:[0,0,0]},WaistRangeMin:{type:`Vector3`,value:[0,0,0]},WaistSize:{type:`number`,value:0},WaistTposeAdjustment:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]}},IKControl:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},EndEffectorOffset:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Offset:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Priority:{type:`number`,value:0},SmoothTime:{type:`number`,value:.05000000074505806},Type:{enumType:`IKControlType`,type:`Enum`,value:`Transform`},Weight:{type:`number`,value:1}},ImageButton:{Active:{type:`bool`,value:!0},AnchorPoint:{type:`Vector2`,value:[0,0]},Archivable:{type:`bool`,value:!0},AutoButtonColor:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},AutomaticSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},BackgroundColor3:{type:`Color3`,value:[.6392157077789307,.6352941393852234,.6470588445663452]},BackgroundTransparency:{type:`number`,value:0},BorderColor3:{type:`Color3`,value:[.10588235408067703,.16470588743686676,.2078431397676468]},BorderMode:{enumType:`BorderMode`,type:`Enum`,value:`Outline`},BorderSizePixel:{type:`number`,value:1},ClipsDescendants:{type:`bool`,value:!1},Draggable:{type:`bool`,value:!1},ImageColor3:{type:`Color3`,value:[1,1,1]},ImageRectOffset:{type:`Vector2`,value:[0,0]},ImageRectSize:{type:`Vector2`,value:[0,0]},ImageTransparency:{type:`number`,value:0},InputSink:{enumType:`InputSink`,type:`Enum`,value:`None`},Interactable:{type:`bool`,value:!0},LayoutOrder:{type:`number`,value:0},Modal:{type:`bool`,value:!1},Position:{type:`UDim2`,value:[0,0,0,0]},ResampleMode:{enumType:`ResamplerMode`,type:`Enum`,value:`Default`},Rotation:{type:`number`,value:0},ScaleType:{enumType:`ScaleType`,type:`Enum`,value:`Stretch`},Selectable:{type:`bool`,value:!0},Selected:{type:`bool`,value:!1},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},SelectionOrder:{type:`number`,value:0},Size:{type:`UDim2`,value:[0,0,0,0]},SizeConstraint:{enumType:`SizeConstraint`,type:`Enum`,value:`RelativeXY`},SliceCenter:{type:`Rect`,value:[0,0,0,0]},SliceScale:{type:`number`,value:1},Style:{enumType:`ButtonStyle`,type:`Enum`,value:`Custom`},TileSize:{type:`UDim2`,value:[1,0,1,0]},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:1}},ImageHandleAdornment:{AdornCullingMode:{enumType:`AdornCullingMode`,type:`Enum`,value:`Automatic`},AlwaysOnTop:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Color3:{type:`Color3`,value:[.9490196704864502,.9529412388801575,.9529412388801575]},Size:{type:`Vector2`,value:[1,1]},SizeRelativeOffset:{type:`Vector3`,value:[0,0,0]},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:-1}},ImageLabel:{Active:{type:`bool`,value:!1},AnchorPoint:{type:`Vector2`,value:[0,0]},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},AutomaticSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},BackgroundColor3:{type:`Color3`,value:[.6392157077789307,.6352941393852234,.6470588445663452]},BackgroundTransparency:{type:`number`,value:0},BorderColor3:{type:`Color3`,value:[.10588235408067703,.16470588743686676,.2078431397676468]},BorderMode:{enumType:`BorderMode`,type:`Enum`,value:`Outline`},BorderSizePixel:{type:`number`,value:1},ClipsDescendants:{type:`bool`,value:!1},Draggable:{type:`bool`,value:!1},ImageColor3:{type:`Color3`,value:[1,1,1]},ImageRectOffset:{type:`Vector2`,value:[0,0]},ImageRectSize:{type:`Vector2`,value:[0,0]},ImageTransparency:{type:`number`,value:0},InputSink:{enumType:`InputSink`,type:`Enum`,value:`None`},Interactable:{type:`bool`,value:!0},LayoutOrder:{type:`number`,value:0},Position:{type:`UDim2`,value:[0,0,0,0]},ResampleMode:{enumType:`ResamplerMode`,type:`Enum`,value:`Default`},Rotation:{type:`number`,value:0},ScaleType:{enumType:`ScaleType`,type:`Enum`,value:`Stretch`},Selectable:{type:`bool`,value:!1},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},SelectionOrder:{type:`number`,value:0},Size:{type:`UDim2`,value:[0,0,0,0]},SizeConstraint:{enumType:`SizeConstraint`,type:`Enum`,value:`RelativeXY`},SliceCenter:{type:`Rect`,value:[0,0,0,0]},SliceScale:{type:`number`,value:1},TileSize:{type:`UDim2`,value:[1,0,1,0]},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:1}},InputAction:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Type:{enumType:`InputActionType`,type:`Enum`,value:`Bool`}},InputBinding:{Archivable:{type:`bool`,value:!0},Backward:{enumType:`KeyCode`,type:`Enum`,value:`Unknown`},ClampMagnitudeToOne:{type:`bool`,value:!0},Down:{enumType:`KeyCode`,type:`Enum`,value:`Unknown`},Forward:{enumType:`KeyCode`,type:`Enum`,value:`Unknown`},KeyCode:{enumType:`KeyCode`,type:`Enum`,value:`Unknown`},Left:{enumType:`KeyCode`,type:`Enum`,value:`Unknown`},PointerIndex:{type:`number`,value:0},PressedThreshold:{type:`number`,value:.5},PrimaryModifier:{enumType:`KeyCode`,type:`Enum`,value:`Unknown`},ReleasedThreshold:{type:`number`,value:.20000000298023224},ResponseCurve:{type:`number`,value:1},Right:{enumType:`KeyCode`,type:`Enum`,value:`Unknown`},Scale:{type:`number`,value:1},SecondaryModifier:{enumType:`KeyCode`,type:`Enum`,value:`Unknown`},Type:{enumType:`InputBindingType`,type:`Enum`,value:`Automatic`},Up:{enumType:`KeyCode`,type:`Enum`,value:`Unknown`},Vector2Scale:{type:`Vector2`,value:[1,1]},Vector3Scale:{type:`Vector3`,value:[1,1,1]}},InputContext:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Priority:{type:`number`,value:1e3},Sink:{type:`bool`,value:!1}},IntConstrainedValue:{Archivable:{type:`bool`,value:!0},MaxValue:{type:`number`,value:10},MinValue:{type:`number`,value:0}},IntValue:{Archivable:{type:`bool`,value:!0},Value:{type:`number`,value:0}},LineForce:{ApplyAtCenterOfMass:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},InverseSquareLaw:{type:`bool`,value:!1},Magnitude:{type:`number`,value:1e3},MaxForce:{type:`number`,value:`inf`},ReactionForceEnabled:{type:`bool`,value:!1},Visible:{type:`bool`,value:!1}},LineHandleAdornment:{AdornCullingMode:{enumType:`AdornCullingMode`,type:`Enum`,value:`Automatic`},AlwaysOnTop:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},Length:{type:`number`,value:5},SizeRelativeOffset:{type:`Vector3`,value:[0,0,0]},Thickness:{type:`number`,value:1},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:-1}},LinearVelocity:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},ForceLimitMode:{enumType:`ForceLimitMode`,type:`Enum`,value:`Magnitude`},ForceLimitsEnabled:{type:`bool`,value:!0},LineDirection:{type:`Vector3`,value:[1,0,0]},LineVelocity:{type:`number`,value:0},MaxAxesForce:{type:`Vector3`,value:[1e3,1e3,1e3]},MaxForce:{type:`number`,value:1e3},MaxPlanarAxesForce:{type:`Vector2`,value:[1e3,1e3]},PlaneVelocity:{type:`Vector2`,value:[0,0]},PrimaryTangentAxis:{type:`Vector3`,value:[1,0,0]},ReactionForceEnabled:{type:`bool`,value:!0},RelativeTo:{enumType:`ActuatorRelativeTo`,type:`Enum`,value:`World`},SecondaryTangentAxis:{type:`Vector3`,value:[0,1,0]},VectorVelocity:{type:`Vector3`,value:[0,0,0]},VelocityConstraintMode:{enumType:`VelocityConstraintMode`,type:`Enum`,value:`Vector`},Visible:{type:`bool`,value:!1}},LocalizationTable:{Archivable:{type:`bool`,value:!0},SourceLocaleId:{type:`string`,value:`en-us`}},MakeupDescription:{Archivable:{type:`bool`,value:!0},AssetId:{type:`number`,value:0},MakeupType:{enumType:`MakeupType`,type:`Enum`,value:`Face`},Order:{type:`number`,value:0}},MaterialVariant:{AlphaMode:{enumType:`AlphaMode`,type:`Enum`,value:`Opaque`},Archivable:{type:`bool`,value:!0},BaseMaterial:{enumType:`Material`,type:`Enum`,value:`Plastic`},EmissiveStrength:{type:`number`,value:1},EmissiveTint:{type:`Color3`,value:[1,1,1]},MaterialPattern:{enumType:`MaterialPattern`,type:`Enum`,value:`Regular`},StudsPerTile:{type:`number`,value:10}},MeshPart:{Anchored:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},AudioCanCollide:{type:`bool`,value:!0},BackParamA:{type:`number`,value:-.5},BackParamB:{type:`number`,value:.5},BackSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},BackSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},BottomParamA:{type:`number`,value:-.5},BottomParamB:{type:`number`,value:.5},BottomSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},BottomSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},CanCollide:{type:`bool`,value:!0},CanQuery:{type:`bool`,value:!0},CanTouch:{type:`bool`,value:!0},CastShadow:{type:`bool`,value:!0},CollisionGroup:{type:`string`,value:`Default`},CollisionGroupId:{type:`number`,value:0},Color:{type:`Color3`,value:[163,162,165]},DoubleSided:{type:`bool`,value:!1},EnableFluidForces:{type:`bool`,value:!0},FrontParamA:{type:`number`,value:-.5},FrontParamB:{type:`number`,value:.5},FrontSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},FrontSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},LeftParamA:{type:`number`,value:-.5},LeftParamB:{type:`number`,value:.5},LeftSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},LeftSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Locked:{type:`bool`,value:!1},Massless:{type:`bool`,value:!1},Material:{enumType:`Material`,type:`Enum`,value:`Plastic`},MaterialVariant:{type:`string`,value:``},PivotOffset:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Reflectance:{type:`number`,value:0},RenderFidelity:{enumType:`RenderFidelity`,type:`Enum`,value:`Automatic`},RightParamA:{type:`number`,value:-.5},RightParamB:{type:`number`,value:.5},RightSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},RightSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},RootPriority:{type:`number`,value:0},RotVelocity:{type:`Vector3`,value:[0,0,0]},Size:{type:`Vector3`,value:[4,1.2000000476837158,2]},TopParamA:{type:`number`,value:-.5},TopParamB:{type:`number`,value:.5},TopSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},TopSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Transparency:{type:`number`,value:0},Velocity:{type:`Vector3`,value:[0,0,0]}},Model:{Archivable:{type:`bool`,value:!0},LevelOfDetail:{enumType:`ModelLevelOfDetail`,type:`Enum`,value:`Automatic`},ModelStreamingMode:{enumType:`ModelStreamingMode`,type:`Enum`,value:`Default`}},Motor:{Archivable:{type:`bool`,value:!0},C0:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},C1:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},DesiredAngle:{type:`number`,value:0},Enabled:{type:`bool`,value:!0},MaxVelocity:{type:`number`,value:0}},Motor6D:{Archivable:{type:`bool`,value:!0},C0:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},C1:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},DesiredAngle:{type:`number`,value:0},Enabled:{type:`bool`,value:!0},MaxVelocity:{type:`number`,value:0}},MotorFeature:{Archivable:{type:`bool`,value:!0},FaceId:{enumType:`NormalId`,type:`Enum`,value:`Right`},InOut:{enumType:`InOut`,type:`Enum`,value:`Center`},LeftRight:{enumType:`LeftRight`,type:`Enum`,value:`Center`},TopBottom:{enumType:`TopBottom`,type:`Enum`,value:`Center`}},NoCollisionConstraint:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0}},Noise:{Archivable:{type:`bool`,value:!0}},NumberPose:{Archivable:{type:`bool`,value:!0},EasingDirection:{enumType:`PoseEasingDirection`,type:`Enum`,value:`In`},EasingStyle:{enumType:`PoseEasingStyle`,type:`Enum`,value:`Linear`},Value:{type:`number`,value:0},Weight:{type:`number`,value:1}},NumberValue:{Archivable:{type:`bool`,value:!0},Value:{type:`number`,value:0}},ObjectValue:{Archivable:{type:`bool`,value:!0}},Pants:{Archivable:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[1,1,1]}},Part:{Anchored:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},AudioCanCollide:{type:`bool`,value:!0},BackParamA:{type:`number`,value:-.5},BackParamB:{type:`number`,value:.5},BackSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},BackSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},BottomParamA:{type:`number`,value:-.5},BottomParamB:{type:`number`,value:.5},BottomSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Inlet`},BottomSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},CanCollide:{type:`bool`,value:!0},CanQuery:{type:`bool`,value:!0},CanTouch:{type:`bool`,value:!0},CastShadow:{type:`bool`,value:!0},CollisionGroup:{type:`string`,value:`Default`},CollisionGroupId:{type:`number`,value:0},Color:{type:`Color3`,value:[163,162,165]},EnableFluidForces:{type:`bool`,value:!0},FormFactor:{enumType:`FormFactor`,type:`Enum`,value:`Brick`},FrontParamA:{type:`number`,value:-.5},FrontParamB:{type:`number`,value:.5},FrontSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},FrontSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},LeftParamA:{type:`number`,value:-.5},LeftParamB:{type:`number`,value:.5},LeftSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},LeftSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Locked:{type:`bool`,value:!1},Massless:{type:`bool`,value:!1},Material:{enumType:`Material`,type:`Enum`,value:`Plastic`},MaterialVariant:{type:`string`,value:``},PivotOffset:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Reflectance:{type:`number`,value:0},RightParamA:{type:`number`,value:-.5},RightParamB:{type:`number`,value:.5},RightSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},RightSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},RootPriority:{type:`number`,value:0},RotVelocity:{type:`Vector3`,value:[0,0,0]},Shape:{enumType:`PartType`,type:`Enum`,value:`Block`},Size:{type:`Vector3`,value:[4,1.2000000476837158,2]},TopParamA:{type:`number`,value:-.5},TopParamB:{type:`number`,value:.5},TopSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Studs`},TopSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Transparency:{type:`number`,value:0},Velocity:{type:`Vector3`,value:[0,0,0]}},ParticleEmitter:{Acceleration:{type:`Vector3`,value:[0,0,0]},Archivable:{type:`bool`,value:!0},Brightness:{type:`number`,value:1},Drag:{type:`number`,value:0},EmissionDirection:{enumType:`NormalId`,type:`Enum`,value:`Top`},Enabled:{type:`bool`,value:!0},FlipbookBlendFrames:{type:`bool`,value:!0},FlipbookIncompatible:{type:`string`,value:`Particle texture must be 1024 by 1024 to use flipbooks.`},FlipbookLayout:{enumType:`ParticleFlipbookLayout`,type:`Enum`,value:`None`},FlipbookMode:{enumType:`ParticleFlipbookMode`,type:`Enum`,value:`Loop`},FlipbookSizeX:{type:`number`,value:1},FlipbookSizeY:{type:`number`,value:1},FlipbookStartRandom:{type:`bool`,value:!1},LightEmission:{type:`number`,value:0},LightInfluence:{type:`number`,value:0},LockedToPart:{type:`bool`,value:!1},Orientation:{enumType:`ParticleOrientation`,type:`Enum`,value:`FacingCamera`},Rate:{type:`number`,value:20},Shape:{enumType:`ParticleEmitterShape`,type:`Enum`,value:`Box`},ShapeInOut:{enumType:`ParticleEmitterShapeInOut`,type:`Enum`,value:`Outward`},ShapePartial:{type:`number`,value:1},ShapeStyle:{enumType:`ParticleEmitterShapeStyle`,type:`Enum`,value:`Volume`},SpreadAngle:{type:`Vector2`,value:[0,0]},TimeScale:{type:`number`,value:1},VelocityInheritance:{type:`number`,value:0},WindAffectsDrag:{type:`bool`,value:!1},ZOffset:{type:`number`,value:0}},Path2D:{Archivable:{type:`bool`,value:!0},Closed:{type:`bool`,value:!1},Color3:{type:`Color3`,value:[0,0,0]},Thickness:{type:`number`,value:1},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:1}},PitchShiftSoundEffect:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Octave:{type:`number`,value:1.25},Priority:{type:`number`,value:0}},PlaneConstraint:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Visible:{type:`bool`,value:!1}},PluginAction:{Archivable:{type:`bool`,value:!0}},PointLight:{Archivable:{type:`bool`,value:!0},Brightness:{type:`number`,value:1},Color:{type:`Color3`,value:[1,1,1]},Enabled:{type:`bool`,value:!0},Range:{type:`number`,value:8},Shadows:{type:`bool`,value:!1}},PrismaticConstraint:{ActuatorType:{enumType:`ActuatorType`,type:`Enum`,value:`None`},Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},LimitsEnabled:{type:`bool`,value:!1},LinearResponsiveness:{type:`number`,value:45},LowerLimit:{type:`number`,value:0},MotorMaxAcceleration:{type:`number`,value:`inf`},MotorMaxForce:{type:`number`,value:0},Restitution:{type:`number`,value:0},ServoMaxForce:{type:`number`,value:0},Size:{type:`number`,value:.15000000596046448},SoftlockServoUponReachingTarget:{type:`bool`,value:!1},Speed:{type:`number`,value:0},TargetPosition:{type:`number`,value:0},UpperLimit:{type:`number`,value:5},Velocity:{type:`number`,value:0},Visible:{type:`bool`,value:!1}},ProceduralModel:{Archivable:{type:`bool`,value:!0},LevelOfDetail:{enumType:`ModelLevelOfDetail`,type:`Enum`,value:`Automatic`},ModelStreamingMode:{enumType:`ModelStreamingMode`,type:`Enum`,value:`Default`},Size:{type:`Vector3`,value:[12,12,12]}},ProximityPrompt:{ActionText:{type:`string`,value:`Interact`},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},ClickablePrompt:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Exclusivity:{enumType:`ProximityPromptExclusivity`,type:`Enum`,value:`OnePerButton`},GamepadKeyCode:{enumType:`KeyCode`,type:`Enum`,value:`ButtonX`},HoldDuration:{type:`number`,value:0},KeyboardKeyCode:{enumType:`KeyCode`,type:`Enum`,value:`E`},MaxActivationDistance:{type:`number`,value:10},MaxIndicatorDistance:{type:`number`,value:0},ObjectText:{type:`string`,value:``},RequiresLineOfSight:{type:`bool`,value:!0},Style:{enumType:`ProximityPromptStyle`,type:`Enum`,value:`Default`},UIOffset:{type:`Vector2`,value:[0,0]}},PyramidHandleAdornment:{AdornCullingMode:{enumType:`AdornCullingMode`,type:`Enum`,value:`Automatic`},AlwaysOnTop:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},Height:{type:`number`,value:2},Shading:{enumType:`AdornShading`,type:`Enum`,value:`Default`},Sides:{type:`number`,value:4},Size:{type:`number`,value:1},SizeRelativeOffset:{type:`Vector3`,value:[0,0,0]},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:-1}},RayValue:{Archivable:{type:`bool`,value:!0}},RealtimeMedia:{Archivable:{type:`bool`,value:!0}},RelativeGui:{Archivable:{type:`bool`,value:!0}},RenderingTest:{Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},ComparisonDiffThreshold:{type:`number`,value:10},ComparisonMethod:{enumType:`RenderingTestComparisonMethod`,type:`Enum`,value:`psnr`},ComparisonPsnrThreshold:{type:`number`,value:50},Description:{type:`string`,value:``},FieldOfView:{type:`number`,value:70},PerfTest:{type:`bool`,value:!1},QualityAuto:{type:`bool`,value:!1},QualityLevel:{type:`number`,value:21},RenderingTestFrameCount:{type:`number`,value:20},ShouldSkip:{type:`bool`,value:!1},Ticket:{type:`string`,value:``},Timeout:{type:`number`,value:30}},ReverbSoundEffect:{Archivable:{type:`bool`,value:!0},DecayTime:{type:`number`,value:1.5},Density:{type:`number`,value:1},Diffusion:{type:`number`,value:1},DryLevel:{type:`number`,value:-6},Enabled:{type:`bool`,value:!0},Priority:{type:`number`,value:0},WetLevel:{type:`number`,value:0}},RigidConstraint:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Visible:{type:`bool`,value:!1}},RocketPropulsion:{Archivable:{type:`bool`,value:!0},CartoonFactor:{type:`number`,value:.699999988079071},MaxSpeed:{type:`number`,value:30},MaxThrust:{type:`number`,value:4e3},MaxTorque:{type:`Vector3`,value:[4e5,4e5,0]},TargetOffset:{type:`Vector3`,value:[0,0,0]},TargetRadius:{type:`number`,value:4},ThrustD:{type:`number`,value:.0010000000474974513},ThrustP:{type:`number`,value:5},TurnD:{type:`number`,value:500},TurnP:{type:`number`,value:3e3}},RodConstraint:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Length:{type:`number`,value:5},LimitAngle0:{type:`number`,value:90},LimitAngle1:{type:`number`,value:90},LimitsEnabled:{type:`bool`,value:!1},Thickness:{type:`number`,value:.10000000149011612},Visible:{type:`bool`,value:!1}},RopeConstraint:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Length:{type:`number`,value:5},Restitution:{type:`number`,value:0},Thickness:{type:`number`,value:.10000000149011612},Visible:{type:`bool`,value:!1},WinchEnabled:{type:`bool`,value:!1},WinchForce:{type:`number`,value:1e4},WinchResponsiveness:{type:`number`,value:45},WinchSpeed:{type:`number`,value:2},WinchTarget:{type:`number`,value:5}},Rotate:{Archivable:{type:`bool`,value:!0},C0:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},C1:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Enabled:{type:`bool`,value:!0}},RotateP:{Archivable:{type:`bool`,value:!0},BaseAngle:{type:`number`,value:0},C0:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},C1:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Enabled:{type:`bool`,value:!0}},RotateV:{Archivable:{type:`bool`,value:!0},BaseAngle:{type:`number`,value:0},C0:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},C1:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Enabled:{type:`bool`,value:!0}},RotationCurve:{Archivable:{type:`bool`,value:!0}},ScreenGui:{Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},ClipToDeviceSafeArea:{type:`bool`,value:!0},DisplayOrder:{type:`number`,value:0},Enabled:{type:`bool`,value:!0},ResetOnSpawn:{type:`bool`,value:!0},SafeAreaCompatibility:{enumType:`SafeAreaCompatibility`,type:`Enum`,value:`FullscreenExtension`},ScreenInsets:{enumType:`ScreenInsets`,type:`Enum`,value:`CoreUISafeInsets`},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},ZIndexBehavior:{enumType:`ZIndexBehavior`,type:`Enum`,value:`Global`}},ScrollingFrame:{Active:{type:`bool`,value:!1},AnchorPoint:{type:`Vector2`,value:[0,0]},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},AutomaticCanvasSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},AutomaticSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},BackgroundColor3:{type:`Color3`,value:[.6392157077789307,.6352941393852234,.6470588445663452]},BackgroundTransparency:{type:`number`,value:0},BorderColor3:{type:`Color3`,value:[.10588235408067703,.16470588743686676,.2078431397676468]},BorderMode:{enumType:`BorderMode`,type:`Enum`,value:`Outline`},BorderSizePixel:{type:`number`,value:1},CanvasPosition:{type:`Vector2`,value:[0,0]},CanvasSize:{type:`UDim2`,value:[0,0,2,0]},ClipsDescendants:{type:`bool`,value:!0},Draggable:{type:`bool`,value:!1},ElasticBehavior:{enumType:`ElasticBehavior`,type:`Enum`,value:`WhenScrollable`},HorizontalScrollBarInset:{enumType:`ScrollBarInset`,type:`Enum`,value:`None`},InputSink:{enumType:`InputSink`,type:`Enum`,value:`None`},Interactable:{type:`bool`,value:!0},LayoutOrder:{type:`number`,value:0},Position:{type:`UDim2`,value:[0,0,0,0]},Rotation:{type:`number`,value:0},ScrollBarImageColor3:{type:`Color3`,value:[1,1,1]},ScrollBarImageTransparency:{type:`number`,value:0},ScrollBarThickness:{type:`number`,value:12},ScrollingDirection:{enumType:`ScrollingDirection`,type:`Enum`,value:`XY`},ScrollingEnabled:{type:`bool`,value:!0},Selectable:{type:`bool`,value:!0},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!0},SelectionOrder:{type:`number`,value:0},Size:{type:`UDim2`,value:[0,0,0,0]},SizeConstraint:{enumType:`SizeConstraint`,type:`Enum`,value:`RelativeXY`},VerticalScrollBarInset:{enumType:`ScrollBarInset`,type:`Enum`,value:`None`},VerticalScrollBarPosition:{enumType:`VerticalScrollBarPosition`,type:`Enum`,value:`Right`},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:1}},Seat:{Anchored:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},AudioCanCollide:{type:`bool`,value:!0},BackParamA:{type:`number`,value:-.5},BackParamB:{type:`number`,value:.5},BackSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},BackSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},BottomParamA:{type:`number`,value:-.5},BottomParamB:{type:`number`,value:.5},BottomSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Inlet`},BottomSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},CanCollide:{type:`bool`,value:!0},CanQuery:{type:`bool`,value:!0},CanTouch:{type:`bool`,value:!0},CastShadow:{type:`bool`,value:!0},CollisionGroup:{type:`string`,value:`Default`},CollisionGroupId:{type:`number`,value:0},Color:{type:`Color3`,value:[163,162,165]},Disabled:{type:`bool`,value:!1},EnableFluidForces:{type:`bool`,value:!0},FormFactor:{enumType:`FormFactor`,type:`Enum`,value:`Brick`},FrontParamA:{type:`number`,value:-.5},FrontParamB:{type:`number`,value:.5},FrontSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},FrontSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},LeftParamA:{type:`number`,value:-.5},LeftParamB:{type:`number`,value:.5},LeftSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},LeftSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Locked:{type:`bool`,value:!1},Massless:{type:`bool`,value:!1},Material:{enumType:`Material`,type:`Enum`,value:`Plastic`},MaterialVariant:{type:`string`,value:``},PivotOffset:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Reflectance:{type:`number`,value:0},RightParamA:{type:`number`,value:-.5},RightParamB:{type:`number`,value:.5},RightSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},RightSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},RootPriority:{type:`number`,value:0},RotVelocity:{type:`Vector3`,value:[0,0,0]},Shape:{enumType:`PartType`,type:`Enum`,value:`Block`},Size:{type:`Vector3`,value:[4,1.2000000476837158,2]},TopParamA:{type:`number`,value:-.5},TopParamB:{type:`number`,value:.5},TopSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Studs`},TopSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Transparency:{type:`number`,value:0},Velocity:{type:`Vector3`,value:[0,0,0]}},SelectionBox:{Archivable:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},LineThickness:{type:`number`,value:.15000000596046448},SurfaceColor3:{type:`Color3`,value:[.05098039656877518,.4117647409439087,.6745098233222961]},SurfaceTransparency:{type:`number`,value:1},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0}},SelectionPartLasso:{Archivable:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0}},SelectionPointLasso:{Archivable:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},Point:{type:`Vector3`,value:[0,0,0]},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0}},SelectionSphere:{Archivable:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},SurfaceColor3:{type:`Color3`,value:[.05098039656877518,.4117647409439087,.6745098233222961]},SurfaceTransparency:{type:`number`,value:1},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0}},Shirt:{Archivable:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[1,1,1]}},ShirtGraphic:{Archivable:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[1,1,1]}},Sky:{Archivable:{type:`bool`,value:!0},CelestialBodiesShown:{type:`bool`,value:!0},MoonAngularSize:{type:`number`,value:11},SkyboxOrientation:{type:`Vector3`,value:[0,0,0]},StarCount:{type:`number`,value:3e3},SunAngularSize:{type:`number`,value:21}},Smoke:{Archivable:{type:`bool`,value:!0},Color:{type:`Color3`,value:[1,1,1]},Enabled:{type:`bool`,value:!0},Opacity:{type:`number`,value:.5},RiseVelocity:{type:`number`,value:1},Size:{type:`number`,value:1},TimeScale:{type:`number`,value:1}},Sound:{AcousticSimulationEnabled:{type:`bool`,value:!0},Archivable:{type:`bool`,value:!0},Looped:{type:`bool`,value:!1},PlayOnRemove:{type:`bool`,value:!1},PlaybackRegionsEnabled:{type:`bool`,value:!1},PlaybackSpeed:{type:`number`,value:1},Playing:{type:`bool`,value:!1},RollOffMaxDistance:{type:`number`,value:1e4},RollOffMinDistance:{type:`number`,value:10},RollOffMode:{enumType:`RollOffMode`,type:`Enum`,value:`Inverse`},TimePosition:{type:`number`,value:0},Volume:{type:`number`,value:.5}},SoundGroup:{Archivable:{type:`bool`,value:!0},Volume:{type:`number`,value:.5}},Sparkles:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},SparkleColor:{type:`Color3`,value:[.5647059082984924,.09803922474384308,1]},TimeScale:{type:`number`,value:1}},SpecialMesh:{Archivable:{type:`bool`,value:!0},MeshType:{enumType:`MeshType`,type:`Enum`,value:`Head`},Offset:{type:`Vector3`,value:[0,0,0]},Scale:{type:`Vector3`,value:[1,1,1]},VertexColor:{type:`Vector3`,value:[1,1,1]}},SphereHandleAdornment:{AdornCullingMode:{enumType:`AdornCullingMode`,type:`Enum`,value:`Automatic`},AlwaysOnTop:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},Radius:{type:`number`,value:1},Shading:{enumType:`AdornShading`,type:`Enum`,value:`Default`},SizeRelativeOffset:{type:`Vector3`,value:[0,0,0]},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:-1}},SpotLight:{Angle:{type:`number`,value:90},Archivable:{type:`bool`,value:!0},Brightness:{type:`number`,value:1},Color:{type:`Color3`,value:[1,1,1]},Enabled:{type:`bool`,value:!0},Face:{enumType:`NormalId`,type:`Enum`,value:`Front`},Range:{type:`number`,value:16},Shadows:{type:`bool`,value:!1}},SpringConstraint:{Archivable:{type:`bool`,value:!0},Coils:{type:`number`,value:3},Damping:{type:`number`,value:0},Enabled:{type:`bool`,value:!0},FreeLength:{type:`number`,value:1},LimitsEnabled:{type:`bool`,value:!1},MaxForce:{type:`number`,value:`inf`},MaxLength:{type:`number`,value:5},MinLength:{type:`number`,value:0},Radius:{type:`number`,value:.4000000059604645},Stiffness:{type:`number`,value:0},Thickness:{type:`number`,value:.10000000149011612},Visible:{type:`bool`,value:!1}},StringValue:{Archivable:{type:`bool`,value:!0},Value:{type:`string`,value:``}},StyleDerive:{Archivable:{type:`bool`,value:!0},Priority:{type:`number`,value:0}},StyleLink:{Archivable:{type:`bool`,value:!0}},StyleQuery:{Archivable:{type:`bool`,value:!0}},StyleRule:{Archivable:{type:`bool`,value:!0},Priority:{type:`number`,value:0},Selector:{type:`string`,value:``}},StyleSheet:{Archivable:{type:`bool`,value:!0}},SunRaysEffect:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Intensity:{type:`number`,value:.25},Spread:{type:`number`,value:1}},SurfaceAppearance:{AlphaMode:{enumType:`AlphaMode`,type:`Enum`,value:`Overlay`},Archivable:{type:`bool`,value:!0},Color:{type:`Color3`,value:[1,1,1]},EmissiveStrength:{type:`number`,value:1},EmissiveTint:{type:`Color3`,value:[1,1,1]},ResampleMode:{enumType:`ResamplerMode`,type:`Enum`,value:`Default`}},SurfaceGui:{Active:{type:`bool`,value:!0},AlwaysOnTop:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},Brightness:{type:`number`,value:1},CanvasSize:{type:`Vector2`,value:[800,600]},ClipsDescendants:{type:`bool`,value:!1},Enabled:{type:`bool`,value:!0},Face:{enumType:`NormalId`,type:`Enum`,value:`Front`},LightInfluence:{type:`number`,value:0},MaxDistance:{type:`number`,value:0},PixelsPerStud:{type:`number`,value:50},ResetOnSpawn:{type:`bool`,value:!0},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},SizingMode:{enumType:`SurfaceGuiSizingMode`,type:`Enum`,value:`FixedSize`},ToolPunchThroughDistance:{type:`number`,value:0},ZIndexBehavior:{enumType:`ZIndexBehavior`,type:`Enum`,value:`Global`},ZOffset:{type:`number`,value:0}},SurfaceLight:{Angle:{type:`number`,value:90},Archivable:{type:`bool`,value:!0},Brightness:{type:`number`,value:1},Color:{type:`Color3`,value:[1,1,1]},Enabled:{type:`bool`,value:!0},Face:{enumType:`NormalId`,type:`Enum`,value:`Front`},Range:{type:`number`,value:16},Shadows:{type:`bool`,value:!1}},TextBox:{Active:{type:`bool`,value:!0},AnchorPoint:{type:`Vector2`,value:[0,0]},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},AutomaticSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},BackgroundColor3:{type:`Color3`,value:[.6392157077789307,.6352941393852234,.6470588445663452]},BackgroundTransparency:{type:`number`,value:0},BorderColor3:{type:`Color3`,value:[.10588235408067703,.16470588743686676,.2078431397676468]},BorderMode:{enumType:`BorderMode`,type:`Enum`,value:`Outline`},BorderSizePixel:{type:`number`,value:1},ClearTextOnFocus:{type:`bool`,value:!0},ClipsDescendants:{type:`bool`,value:!1},Draggable:{type:`bool`,value:!1},InputSink:{enumType:`InputSink`,type:`Enum`,value:`None`},Interactable:{type:`bool`,value:!0},LayoutOrder:{type:`number`,value:0},LineHeight:{type:`number`,value:1},MaxVisibleGraphemes:{type:`number`,value:-1},MultiLine:{type:`bool`,value:!1},OpenTypeFeatures:{type:`string`,value:``},PlaceholderColor3:{type:`Color3`,value:[.5,.5,.5]},PlaceholderText:{type:`string`,value:``},Position:{type:`UDim2`,value:[0,0,0,0]},RichText:{type:`bool`,value:!1},Rotation:{type:`number`,value:0},Selectable:{type:`bool`,value:!0},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},SelectionOrder:{type:`number`,value:0},ShowNativeInput:{type:`bool`,value:!0},Size:{type:`UDim2`,value:[0,0,0,0]},SizeConstraint:{enumType:`SizeConstraint`,type:`Enum`,value:`RelativeXY`},Text:{type:`string`,value:`TextBox`},TextColor3:{type:`Color3`,value:[.10588236153125763,.16470588743686676,.20784315466880798]},TextDirection:{enumType:`TextDirection`,type:`Enum`,value:`Auto`},TextEditable:{type:`bool`,value:!0},TextScaled:{type:`bool`,value:!1},TextSize:{type:`number`,value:8},TextStrokeColor3:{type:`Color3`,value:[0,0,0]},TextStrokeTransparency:{type:`number`,value:1},TextTransparency:{type:`number`,value:0},TextTruncate:{enumType:`TextTruncate`,type:`Enum`,value:`None`},TextWrapped:{type:`bool`,value:!1},TextXAlignment:{enumType:`TextXAlignment`,type:`Enum`,value:`Center`},TextYAlignment:{enumType:`TextYAlignment`,type:`Enum`,value:`Center`},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:1}},TextButton:{Active:{type:`bool`,value:!0},AnchorPoint:{type:`Vector2`,value:[0,0]},Archivable:{type:`bool`,value:!0},AutoButtonColor:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},AutomaticSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},BackgroundColor3:{type:`Color3`,value:[.6392157077789307,.6352941393852234,.6470588445663452]},BackgroundTransparency:{type:`number`,value:0},BorderColor3:{type:`Color3`,value:[.10588235408067703,.16470588743686676,.2078431397676468]},BorderMode:{enumType:`BorderMode`,type:`Enum`,value:`Outline`},BorderSizePixel:{type:`number`,value:1},ClipsDescendants:{type:`bool`,value:!1},Draggable:{type:`bool`,value:!1},InputSink:{enumType:`InputSink`,type:`Enum`,value:`None`},Interactable:{type:`bool`,value:!0},LayoutOrder:{type:`number`,value:0},LineHeight:{type:`number`,value:1},MaxVisibleGraphemes:{type:`number`,value:-1},Modal:{type:`bool`,value:!1},OpenTypeFeatures:{type:`string`,value:``},Position:{type:`UDim2`,value:[0,0,0,0]},RichText:{type:`bool`,value:!1},Rotation:{type:`number`,value:0},Selectable:{type:`bool`,value:!0},Selected:{type:`bool`,value:!1},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},SelectionOrder:{type:`number`,value:0},Size:{type:`UDim2`,value:[0,0,0,0]},SizeConstraint:{enumType:`SizeConstraint`,type:`Enum`,value:`RelativeXY`},Style:{enumType:`ButtonStyle`,type:`Enum`,value:`Custom`},Text:{type:`string`,value:`Button`},TextColor3:{type:`Color3`,value:[.10588236153125763,.16470588743686676,.20784315466880798]},TextDirection:{enumType:`TextDirection`,type:`Enum`,value:`Auto`},TextScaled:{type:`bool`,value:!1},TextSize:{type:`number`,value:8},TextStrokeColor3:{type:`Color3`,value:[0,0,0]},TextStrokeTransparency:{type:`number`,value:1},TextTransparency:{type:`number`,value:0},TextTruncate:{enumType:`TextTruncate`,type:`Enum`,value:`None`},TextWrapped:{type:`bool`,value:!1},TextXAlignment:{enumType:`TextXAlignment`,type:`Enum`,value:`Center`},TextYAlignment:{enumType:`TextYAlignment`,type:`Enum`,value:`Center`},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:1}},TextGenerator:{Archivable:{type:`bool`,value:!0},Seed:{type:`number`,value:0},SystemPrompt:{type:`string`,value:``},Temperature:{type:`number`,value:.699999988079071},TopP:{type:`number`,value:.8999999761581421}},TextLabel:{Active:{type:`bool`,value:!1},AnchorPoint:{type:`Vector2`,value:[0,0]},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},AutomaticSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},BackgroundColor3:{type:`Color3`,value:[.6392157077789307,.6352941393852234,.6470588445663452]},BackgroundTransparency:{type:`number`,value:0},BorderColor3:{type:`Color3`,value:[.10588235408067703,.16470588743686676,.2078431397676468]},BorderMode:{enumType:`BorderMode`,type:`Enum`,value:`Outline`},BorderSizePixel:{type:`number`,value:1},ClipsDescendants:{type:`bool`,value:!1},Draggable:{type:`bool`,value:!1},InputSink:{enumType:`InputSink`,type:`Enum`,value:`None`},Interactable:{type:`bool`,value:!0},LayoutOrder:{type:`number`,value:0},LineHeight:{type:`number`,value:1},MaxVisibleGraphemes:{type:`number`,value:-1},OpenTypeFeatures:{type:`string`,value:``},Position:{type:`UDim2`,value:[0,0,0,0]},RichText:{type:`bool`,value:!1},Rotation:{type:`number`,value:0},Selectable:{type:`bool`,value:!1},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},SelectionOrder:{type:`number`,value:0},Size:{type:`UDim2`,value:[0,0,0,0]},SizeConstraint:{enumType:`SizeConstraint`,type:`Enum`,value:`RelativeXY`},Text:{type:`string`,value:`Label`},TextColor3:{type:`Color3`,value:[.10588236153125763,.16470588743686676,.20784315466880798]},TextDirection:{enumType:`TextDirection`,type:`Enum`,value:`Auto`},TextScaled:{type:`bool`,value:!1},TextSize:{type:`number`,value:8},TextStrokeColor3:{type:`Color3`,value:[0,0,0]},TextStrokeTransparency:{type:`number`,value:1},TextTransparency:{type:`number`,value:0},TextTruncate:{enumType:`TextTruncate`,type:`Enum`,value:`None`},TextWrapped:{type:`bool`,value:!1},TextXAlignment:{enumType:`TextXAlignment`,type:`Enum`,value:`Center`},TextYAlignment:{enumType:`TextYAlignment`,type:`Enum`,value:`Center`},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:1}},Texture:{Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},Color3:{type:`Color3`,value:[1,1,1]},Face:{enumType:`NormalId`,type:`Enum`,value:`Front`},OffsetStudsU:{type:`number`,value:0},OffsetStudsV:{type:`number`,value:0},Rotation:{type:`number`,value:0},StudsPerTileU:{type:`number`,value:2},StudsPerTileV:{type:`number`,value:2},Transparency:{type:`number`,value:0},UVOffset:{type:`Vector2`,value:[0,0]},UVScale:{type:`Vector2`,value:[1,1]},ZIndex:{type:`number`,value:1}},Tool:{Archivable:{type:`bool`,value:!0},CanBeDropped:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Grip:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},LevelOfDetail:{enumType:`ModelLevelOfDetail`,type:`Enum`,value:`Automatic`},ManualActivationOnly:{type:`bool`,value:!1},ModelStreamingMode:{enumType:`ModelStreamingMode`,type:`Enum`,value:`Default`},RequiresHandle:{type:`bool`,value:!0},ToolTip:{type:`string`,value:``}},Torque:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},RelativeTo:{enumType:`ActuatorRelativeTo`,type:`Enum`,value:`Attachment0`},Torque:{type:`Vector3`,value:[0,0,0]},Visible:{type:`bool`,value:!1}},TorsionSpringConstraint:{Archivable:{type:`bool`,value:!0},Coils:{type:`number`,value:8},Damping:{type:`number`,value:.009999999776482582},Enabled:{type:`bool`,value:!0},LimitEnabled:{type:`bool`,value:!1},LimitsEnabled:{type:`bool`,value:!1},MaxAngle:{type:`number`,value:45},MaxTorque:{type:`number`,value:`inf`},Radius:{type:`number`,value:.4000000059604645},Restitution:{type:`number`,value:0},Stiffness:{type:`number`,value:100},Visible:{type:`bool`,value:!1}},Trail:{Archivable:{type:`bool`,value:!0},Brightness:{type:`number`,value:1},Enabled:{type:`bool`,value:!0},FaceCamera:{type:`bool`,value:!1},Lifetime:{type:`number`,value:2},LightEmission:{type:`number`,value:0},LightInfluence:{type:`number`,value:0},MaxLength:{type:`number`,value:0},MinLength:{type:`number`,value:.10000000149011612},TextureLength:{type:`number`,value:1},TextureMode:{enumType:`TextureMode`,type:`Enum`,value:`Stretch`}},TremoloSoundEffect:{Archivable:{type:`bool`,value:!0},Depth:{type:`number`,value:1},Duty:{type:`number`,value:.5},Enabled:{type:`bool`,value:!0},Frequency:{type:`number`,value:5},Priority:{type:`number`,value:0}},TrussPart:{Anchored:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},AudioCanCollide:{type:`bool`,value:!0},BackParamA:{type:`number`,value:-.5},BackParamB:{type:`number`,value:.5},BackSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Universal`},BackSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},BottomParamA:{type:`number`,value:-.5},BottomParamB:{type:`number`,value:.5},BottomSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Universal`},BottomSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},CanCollide:{type:`bool`,value:!0},CanQuery:{type:`bool`,value:!0},CanTouch:{type:`bool`,value:!0},CastShadow:{type:`bool`,value:!0},CollisionGroup:{type:`string`,value:`Default`},CollisionGroupId:{type:`number`,value:0},Color:{type:`Color3`,value:[163,162,165]},EnableFluidForces:{type:`bool`,value:!0},FrontParamA:{type:`number`,value:-.5},FrontParamB:{type:`number`,value:.5},FrontSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Universal`},FrontSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},LeftParamA:{type:`number`,value:-.5},LeftParamB:{type:`number`,value:.5},LeftSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Universal`},LeftSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Locked:{type:`bool`,value:!1},Massless:{type:`bool`,value:!1},Material:{enumType:`Material`,type:`Enum`,value:`Plastic`},MaterialVariant:{type:`string`,value:``},PivotOffset:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Reflectance:{type:`number`,value:0},RightParamA:{type:`number`,value:-.5},RightParamB:{type:`number`,value:.5},RightSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Universal`},RightSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},RootPriority:{type:`number`,value:0},RotVelocity:{type:`Vector3`,value:[0,0,0]},Size:{type:`Vector3`,value:[2,2,2]},TopParamA:{type:`number`,value:-.5},TopParamB:{type:`number`,value:.5},TopSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Universal`},TopSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Transparency:{type:`number`,value:0},Velocity:{type:`Vector3`,value:[0,0,0]}},UIAspectRatioConstraint:{Archivable:{type:`bool`,value:!0},AspectRatio:{type:`number`,value:1},AspectType:{enumType:`AspectType`,type:`Enum`,value:`FitWithinMaxSize`},DominantAxis:{enumType:`DominantAxis`,type:`Enum`,value:`Width`}},UICorner:{Archivable:{type:`bool`,value:!0},BottomLeftRadius:{type:`UDim`,value:[0,8]},BottomRightRadius:{type:`UDim`,value:[0,8]},TopLeftRadius:{type:`UDim`,value:[0,8]},TopRightRadius:{type:`UDim`,value:[0,8]}},UIDragDetector:{Archivable:{type:`bool`,value:!0},BoundingBehavior:{enumType:`UIDragDetectorBoundingBehavior`,type:`Enum`,value:`Automatic`},DragAxis:{type:`Vector2`,value:[1,0]},DragRelativity:{enumType:`UIDragDetectorDragRelativity`,type:`Enum`,value:`Absolute`},DragRotation:{type:`number`,value:0},DragSpace:{enumType:`UIDragDetectorDragSpace`,type:`Enum`,value:`Parent`},DragStyle:{enumType:`UIDragDetectorDragStyle`,type:`Enum`,value:`TranslatePlane`},DragUDim2:{type:`UDim2`,value:[0,0,0,0]},Enabled:{type:`bool`,value:!0},MaxDragAngle:{type:`number`,value:0},MaxDragTranslation:{type:`UDim2`,value:[0,0,0,0]},MinDragAngle:{type:`number`,value:0},MinDragTranslation:{type:`UDim2`,value:[0,0,0,0]},ResponseStyle:{enumType:`UIDragDetectorResponseStyle`,type:`Enum`,value:`Offset`},SelectionModeDragSpeed:{type:`UDim2`,value:[0,300,0,300]},SelectionModeRotateSpeed:{type:`number`,value:90},UIDragSpeedAxisMapping:{enumType:`UIDragSpeedAxisMapping`,type:`Enum`,value:`XY`}},UIFlexItem:{Archivable:{type:`bool`,value:!0},FlexMode:{enumType:`UIFlexMode`,type:`Enum`,value:`None`},GrowRatio:{type:`number`,value:0},ItemLineAlignment:{enumType:`ItemLineAlignment`,type:`Enum`,value:`Automatic`},ShrinkRatio:{type:`number`,value:0}},UIGradient:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Offset:{type:`Vector2`,value:[0,0]},Rotation:{type:`number`,value:0},Scale:{type:`number`,value:1},TileMode:{enumType:`GradientTileMode`,type:`Enum`,value:`Clamp`},Type:{enumType:`GradientType`,type:`Enum`,value:`Linear`}},UIGridLayout:{Archivable:{type:`bool`,value:!0},CellPadding:{type:`UDim2`,value:[0,5,0,5]},CellSize:{type:`UDim2`,value:[0,100,0,100]},FillDirection:{enumType:`FillDirection`,type:`Enum`,value:`Horizontal`},FillDirectionMaxCells:{type:`number`,value:0},HorizontalAlignment:{enumType:`HorizontalAlignment`,type:`Enum`,value:`Left`},SortOrder:{enumType:`SortOrder`,type:`Enum`,value:`Name`},StartCorner:{enumType:`StartCorner`,type:`Enum`,value:`TopLeft`},VerticalAlignment:{enumType:`VerticalAlignment`,type:`Enum`,value:`Top`}},UIListLayout:{Archivable:{type:`bool`,value:!0},FillDirection:{enumType:`FillDirection`,type:`Enum`,value:`Vertical`},HorizontalAlignment:{enumType:`HorizontalAlignment`,type:`Enum`,value:`Left`},HorizontalFlex:{enumType:`UIFlexAlignment`,type:`Enum`,value:`None`},ItemLineAlignment:{enumType:`ItemLineAlignment`,type:`Enum`,value:`Automatic`},Padding:{type:`UDim`,value:[0,0]},SortOrder:{enumType:`SortOrder`,type:`Enum`,value:`Name`},VerticalAlignment:{enumType:`VerticalAlignment`,type:`Enum`,value:`Top`},VerticalFlex:{enumType:`UIFlexAlignment`,type:`Enum`,value:`None`},Wraps:{type:`bool`,value:!1}},UIPadding:{Archivable:{type:`bool`,value:!0},PaddingBottom:{type:`UDim`,value:[0,0]},PaddingLeft:{type:`UDim`,value:[0,0]},PaddingRight:{type:`UDim`,value:[0,0]},PaddingTop:{type:`UDim`,value:[0,0]}},UIPageLayout:{Animated:{type:`bool`,value:!0},Archivable:{type:`bool`,value:!0},Circular:{type:`bool`,value:!1},EasingDirection:{enumType:`EasingDirection`,type:`Enum`,value:`Out`},EasingStyle:{enumType:`EasingStyle`,type:`Enum`,value:`Back`},FillDirection:{enumType:`FillDirection`,type:`Enum`,value:`Horizontal`},GamepadInputEnabled:{type:`bool`,value:!0},HorizontalAlignment:{enumType:`HorizontalAlignment`,type:`Enum`,value:`Left`},Padding:{type:`UDim`,value:[0,0]},ScrollWheelInputEnabled:{type:`bool`,value:!0},SortOrder:{enumType:`SortOrder`,type:`Enum`,value:`Name`},TouchInputEnabled:{type:`bool`,value:!0},TweenTime:{type:`number`,value:1},VerticalAlignment:{enumType:`VerticalAlignment`,type:`Enum`,value:`Top`}},UIScale:{Archivable:{type:`bool`,value:!0},Scale:{type:`number`,value:1}},UIShadow:{Archivable:{type:`bool`,value:!0},BlurRadius:{type:`UDim`,value:[0,0]},Color:{type:`Color3`,value:[0,0,0]},Enabled:{type:`bool`,value:!0},Offset:{type:`UDim2`,value:[0,0,0,0]},Spread:{type:`UDim2`,value:[0,0,0,0]},Transparency:{type:`number`,value:0},ZIndex:{type:`number`,value:-1}},UISizeConstraint:{Archivable:{type:`bool`,value:!0},MaxSize:{type:`Vector2`,value:[`inf`,`inf`]},MinSize:{type:`Vector2`,value:[0,0]}},UIStroke:{ApplyStrokeMode:{enumType:`ApplyStrokeMode`,type:`Enum`,value:`Contextual`},Archivable:{type:`bool`,value:!0},BorderOffset:{type:`UDim`,value:[0,0]},BorderStrokePosition:{enumType:`BorderStrokePosition`,type:`Enum`,value:`Outer`},Color:{type:`Color3`,value:[0,0,0]},Enabled:{type:`bool`,value:!0},LineJoinMode:{enumType:`LineJoinMode`,type:`Enum`,value:`Round`},StrokeSizingMode:{enumType:`StrokeSizingMode`,type:`Enum`,value:`FixedSize`},Thickness:{type:`number`,value:1},Transparency:{type:`number`,value:0},ZIndex:{type:`number`,value:1}},UITableLayout:{Archivable:{type:`bool`,value:!0},FillDirection:{enumType:`FillDirection`,type:`Enum`,value:`Vertical`},FillEmptySpaceColumns:{type:`bool`,value:!1},FillEmptySpaceRows:{type:`bool`,value:!1},HorizontalAlignment:{enumType:`HorizontalAlignment`,type:`Enum`,value:`Left`},MajorAxis:{enumType:`TableMajorAxis`,type:`Enum`,value:`RowMajor`},Padding:{type:`UDim2`,value:[0,0,0,0]},SortOrder:{enumType:`SortOrder`,type:`Enum`,value:`Name`},VerticalAlignment:{enumType:`VerticalAlignment`,type:`Enum`,value:`Top`}},UITextSizeConstraint:{Archivable:{type:`bool`,value:!0},MaxTextSize:{type:`number`,value:100},MinTextSize:{type:`number`,value:1}},UniversalConstraint:{Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},LimitsEnabled:{type:`bool`,value:!1},MaxAngle:{type:`number`,value:45},Radius:{type:`number`,value:.20000000298023224},Restitution:{type:`number`,value:0},Visible:{type:`bool`,value:!1}},ValueCurve:{Archivable:{type:`bool`,value:!0}},Vector3Curve:{Archivable:{type:`bool`,value:!0}},Vector3Value:{Archivable:{type:`bool`,value:!0},Value:{type:`Vector3`,value:[0,0,0]}},VectorForce:{ApplyAtCenterOfMass:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},Enabled:{type:`bool`,value:!0},Force:{type:`Vector3`,value:[1e3,0,0]},RelativeTo:{enumType:`ActuatorRelativeTo`,type:`Enum`,value:`Attachment0`},Visible:{type:`bool`,value:!1}},VehicleSeat:{Anchored:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},AudioCanCollide:{type:`bool`,value:!0},BackParamA:{type:`number`,value:-.5},BackParamB:{type:`number`,value:.5},BackSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},BackSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},BottomParamA:{type:`number`,value:-.5},BottomParamB:{type:`number`,value:.5},BottomSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Inlet`},BottomSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},CanCollide:{type:`bool`,value:!0},CanQuery:{type:`bool`,value:!0},CanTouch:{type:`bool`,value:!0},CastShadow:{type:`bool`,value:!0},CollisionGroup:{type:`string`,value:`Default`},CollisionGroupId:{type:`number`,value:0},Color:{type:`Color3`,value:[163,162,165]},Disabled:{type:`bool`,value:!1},EnableFluidForces:{type:`bool`,value:!0},FrontParamA:{type:`number`,value:-.5},FrontParamB:{type:`number`,value:.5},FrontSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},FrontSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},HeadsUpDisplay:{type:`bool`,value:!0},LeftParamA:{type:`number`,value:-.5},LeftParamB:{type:`number`,value:.5},LeftSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},LeftSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Locked:{type:`bool`,value:!1},Massless:{type:`bool`,value:!1},Material:{enumType:`Material`,type:`Enum`,value:`Plastic`},MaterialVariant:{type:`string`,value:``},MaxSpeed:{type:`number`,value:25},PivotOffset:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Reflectance:{type:`number`,value:0},RightParamA:{type:`number`,value:-.5},RightParamB:{type:`number`,value:.5},RightSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},RightSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},RootPriority:{type:`number`,value:0},RotVelocity:{type:`Vector3`,value:[0,0,0]},Size:{type:`Vector3`,value:[4,1.2000000476837158,2]},Steer:{type:`number`,value:0},SteerFloat:{type:`number`,value:0},Throttle:{type:`number`,value:0},ThrottleFloat:{type:`number`,value:0},TopParamA:{type:`number`,value:-.5},TopParamB:{type:`number`,value:.5},TopSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Studs`},TopSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Torque:{type:`number`,value:10},Transparency:{type:`number`,value:0},TurnSpeed:{type:`number`,value:1},Velocity:{type:`Vector3`,value:[0,0,0]}},VelocityMotor:{Archivable:{type:`bool`,value:!0},C0:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},C1:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},CurrentAngle:{type:`number`,value:0},DesiredAngle:{type:`number`,value:0},Enabled:{type:`bool`,value:!0},MaxVelocity:{type:`number`,value:0}},VideoDisplay:{Active:{type:`bool`,value:!1},AnchorPoint:{type:`Vector2`,value:[0,0]},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},AutomaticSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},BackgroundColor3:{type:`Color3`,value:[.6392157077789307,.6352941393852234,.6470588445663452]},BackgroundTransparency:{type:`number`,value:0},BorderColor3:{type:`Color3`,value:[.10588235408067703,.16470588743686676,.2078431397676468]},BorderMode:{enumType:`BorderMode`,type:`Enum`,value:`Outline`},BorderSizePixel:{type:`number`,value:1},ClipsDescendants:{type:`bool`,value:!1},Draggable:{type:`bool`,value:!1},InputSink:{enumType:`InputSink`,type:`Enum`,value:`None`},Interactable:{type:`bool`,value:!0},LayoutOrder:{type:`number`,value:0},Position:{type:`UDim2`,value:[0,0,0,0]},ResampleMode:{enumType:`ResamplerMode`,type:`Enum`,value:`Default`},Rotation:{type:`number`,value:0},ScaleType:{enumType:`ScaleType`,type:`Enum`,value:`Stretch`},Selectable:{type:`bool`,value:!1},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},SelectionOrder:{type:`number`,value:0},Size:{type:`UDim2`,value:[0,0,0,0]},SizeConstraint:{enumType:`SizeConstraint`,type:`Enum`,value:`RelativeXY`},TileSize:{type:`UDim2`,value:[1,0,1,0]},VideoColor3:{type:`Color3`,value:[1,1,1]},VideoRectOffset:{type:`Vector2`,value:[0,0]},VideoRectSize:{type:`Vector2`,value:[0,0]},VideoTransparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:1}},VideoFrame:{Active:{type:`bool`,value:!1},AnchorPoint:{type:`Vector2`,value:[0,0]},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},AutomaticSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},BackgroundColor3:{type:`Color3`,value:[.6392157077789307,.6352941393852234,.6470588445663452]},BackgroundTransparency:{type:`number`,value:0},BorderColor3:{type:`Color3`,value:[.10588235408067703,.16470588743686676,.2078431397676468]},BorderMode:{enumType:`BorderMode`,type:`Enum`,value:`Outline`},BorderSizePixel:{type:`number`,value:1},ClipsDescendants:{type:`bool`,value:!1},Draggable:{type:`bool`,value:!1},InputSink:{enumType:`InputSink`,type:`Enum`,value:`None`},Interactable:{type:`bool`,value:!0},InternalVideoUsage:{enumType:`InternalVideoUsage`,type:`Enum`,value:`Default`},LayoutOrder:{type:`number`,value:0},Looped:{type:`bool`,value:!1},MaximumResolution:{enumType:`VideoSampleSize`,type:`Enum`,value:`Full`},Playing:{type:`bool`,value:!1},Position:{type:`UDim2`,value:[0,0,0,0]},RollOffMaxDistance:{type:`number`,value:1e4},RollOffMinDistance:{type:`number`,value:1},RollOffMode:{enumType:`RollOffMode`,type:`Enum`,value:`Inverse`},Rotation:{type:`number`,value:0},Selectable:{type:`bool`,value:!1},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},SelectionOrder:{type:`number`,value:0},Size:{type:`UDim2`,value:[0,0,0,0]},SizeConstraint:{enumType:`SizeConstraint`,type:`Enum`,value:`RelativeXY`},TimePosition:{type:`number`,value:0},Visible:{type:`bool`,value:!0},Volume:{type:`number`,value:1},ZIndex:{type:`number`,value:1}},VideoPlayer:{Archivable:{type:`bool`,value:!0},InternalVideoUsage:{enumType:`InternalVideoUsage`,type:`Enum`,value:`Default`},Looping:{type:`bool`,value:!1},MaximumResolution:{enumType:`VideoSampleSize`,type:`Enum`,value:`Full`},PlaybackSpeed:{type:`number`,value:1},TimePosition:{type:`number`,value:0},Volume:{type:`number`,value:1}},ViewportFrame:{Active:{type:`bool`,value:!1},Ambient:{type:`Color3`,value:[.7843137383460999,.7843137383460999,.7843137383460999]},AnchorPoint:{type:`Vector2`,value:[0,0]},Archivable:{type:`bool`,value:!0},AutoLocalize:{type:`bool`,value:!0},AutomaticSize:{enumType:`AutomaticSize`,type:`Enum`,value:`None`},BackgroundColor3:{type:`Color3`,value:[.6392157077789307,.6352941393852234,.6470588445663452]},BackgroundTransparency:{type:`number`,value:0},BorderColor3:{type:`Color3`,value:[.10588235408067703,.16470588743686676,.2078431397676468]},BorderMode:{enumType:`BorderMode`,type:`Enum`,value:`Outline`},BorderSizePixel:{type:`number`,value:1},ClipsDescendants:{type:`bool`,value:!1},Draggable:{type:`bool`,value:!1},ImageColor3:{type:`Color3`,value:[1,1,1]},ImageTransparency:{type:`number`,value:0},InputSink:{enumType:`InputSink`,type:`Enum`,value:`None`},Interactable:{type:`bool`,value:!0},LayoutOrder:{type:`number`,value:0},LightColor:{type:`Color3`,value:[.5490196347236633,.5490196347236633,.5490196347236633]},LightDirection:{type:`Vector3`,value:[-1,-1,-1]},Position:{type:`UDim2`,value:[0,0,0,0]},Rotation:{type:`number`,value:0},Selectable:{type:`bool`,value:!1},SelectionBehaviorDown:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorLeft:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorRight:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionBehaviorUp:{enumType:`SelectionBehavior`,type:`Enum`,value:`Escape`},SelectionGroup:{type:`bool`,value:!1},SelectionOrder:{type:`number`,value:0},Size:{type:`UDim2`,value:[0,0,0,0]},SizeConstraint:{enumType:`SizeConstraint`,type:`Enum`,value:`RelativeXY`},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:1}},WedgePart:{Anchored:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},AudioCanCollide:{type:`bool`,value:!0},BackParamA:{type:`number`,value:-.5},BackParamB:{type:`number`,value:.5},BackSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},BackSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},BottomParamA:{type:`number`,value:-.5},BottomParamB:{type:`number`,value:.5},BottomSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Inlet`},BottomSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},CanCollide:{type:`bool`,value:!0},CanQuery:{type:`bool`,value:!0},CanTouch:{type:`bool`,value:!0},CastShadow:{type:`bool`,value:!0},CollisionGroup:{type:`string`,value:`Default`},CollisionGroupId:{type:`number`,value:0},Color:{type:`Color3`,value:[163,162,165]},EnableFluidForces:{type:`bool`,value:!0},FormFactor:{enumType:`FormFactor`,type:`Enum`,value:`Brick`},FrontParamA:{type:`number`,value:-.5},FrontParamB:{type:`number`,value:.5},FrontSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},FrontSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},LeftParamA:{type:`number`,value:-.5},LeftParamB:{type:`number`,value:.5},LeftSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},LeftSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Locked:{type:`bool`,value:!1},Massless:{type:`bool`,value:!1},Material:{enumType:`Material`,type:`Enum`,value:`Plastic`},MaterialVariant:{type:`string`,value:``},PivotOffset:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Reflectance:{type:`number`,value:0},RightParamA:{type:`number`,value:-.5},RightParamB:{type:`number`,value:.5},RightSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},RightSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},RootPriority:{type:`number`,value:0},RotVelocity:{type:`Vector3`,value:[0,0,0]},Size:{type:`Vector3`,value:[4,1.2000000476837158,2]},TopParamA:{type:`number`,value:-.5},TopParamB:{type:`number`,value:.5},TopSurface:{enumType:`SurfaceType`,type:`Enum`,value:`Smooth`},TopSurfaceInput:{enumType:`InputType`,type:`Enum`,value:`NoInput`},Transparency:{type:`number`,value:0},Velocity:{type:`Vector3`,value:[0,0,0]}},Weld:{Archivable:{type:`bool`,value:!0},C0:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},C1:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Enabled:{type:`bool`,value:!0}},WeldConstraint:{Archivable:{type:`bool`,value:!0}},Wire:{Archivable:{type:`bool`,value:!0},SourceName:{type:`string`,value:`Output`},TargetName:{type:`string`,value:`Input`}},WireframeHandleAdornment:{AdornCullingMode:{enumType:`AdornCullingMode`,type:`Enum`,value:`Automatic`},AlwaysOnTop:{type:`bool`,value:!1},Archivable:{type:`bool`,value:!0},CFrame:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Color3:{type:`Color3`,value:[.05098039284348488,.4117647111415863,.6745098233222961]},Scale:{type:`Vector3`,value:[1,1,1]},SizeRelativeOffset:{type:`Vector3`,value:[0,0,0]},Thickness:{type:`number`,value:1},Transparency:{type:`number`,value:0},Visible:{type:`bool`,value:!0},ZIndex:{type:`number`,value:-1}},WorldModel:{Archivable:{type:`bool`,value:!0},LevelOfDetail:{enumType:`ModelLevelOfDetail`,type:`Enum`,value:`Automatic`},ModelStreamingMode:{enumType:`ModelStreamingMode`,type:`Enum`,value:`Default`}},WrapDeformer:{Archivable:{type:`bool`,value:!0},CageOrigin:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},ImportOrigin:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]}},WrapLayer:{Archivable:{type:`bool`,value:!0},AutoSkin:{enumType:`WrapLayerAutoSkin`,type:`Enum`,value:`Disabled`},BindOffset:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},CageOrigin:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Enabled:{type:`bool`,value:!0},ImportOrigin:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Order:{type:`number`,value:1},Puffiness:{type:`number`,value:1},ReferenceOrigin:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},ShrinkFactor:{type:`number`,value:0}},WrapTarget:{Archivable:{type:`bool`,value:!0},CageOrigin:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},ImportOrigin:{type:`CFrame`,value:[0,0,0,1,0,0,0,1,0,0,0,1]},Stiffness:{type:`number`,value:0}},WrapTextureTransfer:{Archivable:{type:`bool`,value:!0},UVMaxBound:{type:`Vector2`,value:[`-inf`,`-inf`]},UVMinBound:{type:`Vector2`,value:[`inf`,`inf`]}}};const Wl=Object.keys(Ul).length,Gl=new Set([`Name`,`Parent`]),Kl=new Set(Array.from(Gl,e=>e.toLowerCase())),ql=new Map(Object.entries(Ul).map(([e])=>[e.toLowerCase(),e]));function Jl(e){let t=new Map;for(let[n,r]of Object.entries(e)){if(!au(r))continue;let e=n.toLowerCase();t.has(e)||t.set(e,{propertyName:n,value:r})}return t}const Yl=new Map([[`TextLabel`,new Map([[`text`,{propertyName:`Text`,value:{type:`string`,value:``}}]])],[`UICorner`,new Map([[`cornerradius`,{propertyName:`CornerRadius`,value:{type:`UDim`,value:[0,0]}}]])]]),Xl=new Map(Object.entries(Ul).map(([e,t])=>[e,Jl(t)]));function Zl(e,t){return e.type===`Identifier`&&e.name===t}function Ql(e){return e.type===`Literal`&&typeof e.value==`boolean`}function $l(e){if(e.type!==`JSXIdentifier`)return;let t=ql.get(e.name.toLowerCase());if(!(t===void 0||e.name===t))return t}function eu(e){if(e.type===`JSXIdentifier`)return e.name}function tu(e){let{value:t}=e;if(t!==null){if(t.type===`Literal`)return t;if(!(t.type!==`JSXExpressionContainer`||t.expression.type===`JSXEmptyExpression`))return t.expression}}function nu(e,t){let n=t.toLowerCase(),r=Yl.get(e)?.get(n);if(r!==void 0)return r;let i=Xl.get(e);if(i!==void 0)return i.get(n)}function ru(e){return Kl.has(e.toLowerCase())}function iu(e){return b(e)||e===`inf`||e===`-inf`}function au(e){if(!(x(e)&&y(e.type)&&`value`in e))return!1;switch(e.type){case`bool`:return typeof e.value==`boolean`;case`CFrame`:return Array.isArray(e.value)&&e.value.length===12&&e.value.every(iu);case`Color3`:return Array.isArray(e.value)&&e.value.length===3&&e.value.every(b);case`Enum`:return y(e.enumType)&&y(e.value);case`number`:return iu(e.value);case`Rect`:case`UDim2`:return Array.isArray(e.value)&&e.value.length===4&&e.value.every(iu);case`string`:return y(e.value);case`UDim`:case`Vector2`:return Array.isArray(e.value)&&e.value.length===2&&e.value.every(iu);case`Vector3`:return Array.isArray(e.value)&&e.value.length===3&&e.value.every(iu)}return!1}function ou(e){let t=w(e);if(t.type!==`NewExpression`||!Zl(t.callee,`Instance`))return;let[n]=t.arguments;if(!(n===void 0||n.type===`SpreadElement`||!_e(n)))return n.value}function su(e,t,n=new WeakSet){if(Array.isArray(e)){for(let r of e)if(su(r,t,n))return!0;return!1}if(!x(e)||n.has(e))return!1;if(n.add(e),e.type===`Identifier`&&e.name===t)return!0;for(let r of Object.values(e))if(su(r,t,n))return!0;return!1}function cu(e){let t=[],n=e;for(;n.type===`MemberExpression`;){if(n.computed||n.property.type!==`Identifier`)return;t.unshift(n.property.name);let{object:e}=n;if(e.type===`Identifier`)return t.unshift(e.name),t;if(e.type!==`MemberExpression`)return;n=e}if(n.type===`Identifier`)return t.unshift(n.name),t}function lu(e){let t=cu(e);return t?.length===2&&t[0]===`math`&&t[1]===`huge`}function uu(e){return e===`inf`?1/0:e===`-inf`?-1/0:e}function du(e,t){return uu(e)===t}function fu(e,t){if(e.length!==t.length)return!1;for(let[n,r]of e.entries()){let e=t[n];if(r===void 0||e===void 0||!du(r,e))return!1}return!0}function J(e){if(We(e))return e.value;if(lu(e))return 1/0;if(e.type!==`UnaryExpression`||e.operator!==`+`&&e.operator!==`-`)return;let t=J(e.argument);if(t!==void 0)return e.operator===`+`?t:-t}function pu(e){if(e.length!==2)return;let[t,n]=e;if(!(t===void 0||n===void 0||t.type===`SpreadElement`||n.type===`SpreadElement`))return[t,n]}function mu(e){if(e.length!==3)return;let[t,n,r]=e;if(!(t===void 0||n===void 0||r===void 0||t.type===`SpreadElement`||n.type===`SpreadElement`||r.type===`SpreadElement`))return[t,n,r]}function hu(e){if(e.length!==4)return;let[t,n,r,i]=e;if(!(t===void 0||n===void 0||r===void 0||i===void 0||t.type===`SpreadElement`||n.type===`SpreadElement`||r.type===`SpreadElement`||i.type===`SpreadElement`))return[t,n,r,i]}function gu(e){if(e.type===`MemberExpression`){let t=cu(e);return t?.length===2&&t[0]===`Vector2`&&t[1]===`zero`?[0,0]:void 0}if(!(e.type!==`NewExpression`||!Zl(e.callee,`Vector2`)))return e.arguments.length===0?[0,0]:_u(e.arguments)}function _u(e){let t=pu(e);if(t===void 0)return;let[n,r]=t,i=J(n),a=J(r);if(!(i===void 0||a===void 0))return[i,a]}function vu(e){let t=mu(e);if(t===void 0)return;let[n,r,i]=t,a=J(n),o=J(r),s=J(i);if(!(a===void 0||o===void 0||s===void 0))return[a,o,s]}function yu(e){if(e.type===`MemberExpression`){let t=cu(e);return t?.length===2&&t[0]===`Vector3`&&t[1]===`zero`?[0,0,0]:void 0}if(!(e.type!==`NewExpression`||!Zl(e.callee,`Vector3`)))return e.arguments.length===0?[0,0,0]:vu(e.arguments)}function bu(e){if(!(e.type!==`NewExpression`||!Zl(e.callee,`UDim`)))return e.arguments.length===0?[0,0]:_u(e.arguments)}function xu(e){let t=hu(e);if(t===void 0)return;let[n,r,i,a]=t,o=J(n),s=J(r),c=J(i),l=J(a);if(!(o===void 0||s===void 0||c===void 0||l===void 0))return[o,s,c,l]}function Su(e){if(e.type===`CallExpression`){let t=cu(e.callee),n=_u(e.arguments);if(t===void 0||n===void 0)return;let[r,i]=n;return t.length===2&&t[0]===`UDim2`&&t[1]===`fromOffset`?[0,r,0,i]:t.length===2&&t[0]===`UDim2`&&t[1]===`fromScale`?[r,0,i,0]:void 0}if(!(e.type!==`NewExpression`||!Zl(e.callee,`UDim2`)))return e.arguments.length===0?[0,0,0,0]:xu(e.arguments)}function Cu(e){if(!(e.type!==`NewExpression`||!Zl(e.callee,`Rect`)))return e.arguments.length===0?[0,0,0,0]:xu(e.arguments)}function wu(e){let[t,n,r]=e,i=J(t),a=J(n),o=J(r);if(!(i===void 0||a===void 0||o===void 0))return[i,a,o]}function Tu(e){if(e.type===`CallExpression`){let t=cu(e.callee),n=mu(e.arguments);if(t?.length!==2||t[0]!==`Color3`||t[1]!==`fromRGB`||n===void 0)return;let r=wu(n);if(r===void 0)return;let[i,a,o]=r;return[Math.fround(i/255),Math.fround(a/255),Math.fround(o/255)]}if(e.type!==`NewExpression`||!Zl(e.callee,`Color3`))return;if(e.arguments.length===0)return[0,0,0];let t=mu(e.arguments);if(t!==void 0)return wu(t)}function Eu(e){if(e.type!==`NewExpression`||!Zl(e.callee,`CFrame`))return;if(e.arguments.length===0)return[0,0,0,1,0,0,0,1,0,0,0,1];let t=vu(e.arguments);if(t===void 0)return;let[n,r,i]=t;return[n,r,i,1,0,0,0,1,0,0,0,1]}function Du(e){let t=cu(e);if(t?.length!==3||t[0]!==`Enum`)return;let[,n,r]=t;if(!(n===void 0||r===void 0))return{enumType:n,value:r}}function Ou(e,t){switch(t.type){case`bool`:return Ql(e)&&e.value===t.value;case`CFrame`:{let n=Eu(e);return n!==void 0&&fu(t.value,n)}case`Color3`:{let n=Tu(e);return n!==void 0&&n[0]===t.value[0]&&n[1]===t.value[1]&&n[2]===t.value[2]}case`Enum`:{let n=Du(e);return n!==void 0&&n.enumType===t.enumType&&n.value===t.value}case`number`:{let n=J(e);return n!==void 0&&du(t.value,n)}case`Rect`:{let n=Cu(e);return n!==void 0&&fu(t.value,n)}case`string`:return _e(e)&&e.value===t.value;case`UDim`:{let n=bu(e);return n!==void 0&&fu(t.value,n)}case`UDim2`:{let n=Su(e);return n!==void 0&&fu(t.value,n)}case`Vector2`:{let n=gu(e);return n!==void 0&&fu(t.value,n)}case`Vector3`:{let n=yu(e);return n!==void 0&&fu(t.value,n)}default:return!1}}const ku=t({create(e){let{sourceCode:t}=e;function n(e){return t.getCommentsBefore(e).length>0||t.getCommentsAfter(e).length>0||t.getCommentsInside(e).length>0}function r(e){let r=t.getTokenBefore(e),i=t.getTokenAfter(e);if(n(e)||r!==null&&t.commentsExistBetween(r,e)||i!==null&&t.commentsExistBetween(e,i))return;let[a]=e.range;for(;a>0;){let e=t.text[a-1];if(e===` `||e===` `){--a;continue}break}return t=>t.removeRange([a,e.range[1]])}function i(e,r){if(e.attributes.some(e=>e.type===`JSXSpreadAttribute`))return;let i=t.getTokenBefore(r),a=t.getTokenAfter(r);if(i!==null&&!n(r)&&!t.commentsExistBetween(i,r)&&!(a!==null&&t.commentsExistBetween(r,a)))return e=>e.removeRange([i.range[1],r.range[1]])}function a(t,n,i){if(n.operator!==`=`||n.left.type!==`MemberExpression`||n.left.computed||n.left.object.type!==`Identifier`||n.left.property.type!==`Identifier`)return;let a=i.get(n.left.object.name);if(a===void 0)return;let o=n.left.property.name;if(ru(o))return;let s=nu(a.className,o);if(s===void 0||!Ou(n.right,s.value))return;let c=r(t);if(c===void 0){e.report({data:{className:a.className,propertyName:s.propertyName},messageId:`uselessDefault`,node:n.left});return}e.report({data:{className:a.className,propertyName:s.propertyName},fix:c,messageId:`uselessDefault`,node:n.left})}function o(e,t){for(let[n]of t)for(let r of e.arguments)if(r.type!==`SpreadElement`&&su(r,n)){t.delete(n);break}}function s(e,t){if(!(e.left.type!==`Identifier`&&e.left.type!==`MemberExpression`))for(let[n]of t)su(e.right,n)&&t.delete(n)}function c(e,t){if(e.argument!==null)for(let[n]of t)su(e.argument,n)&&t.delete(n)}function l(e){let t=new Map;for(let n of e)u(n,t)}function u(e,t){if(e.type===`ExpressionStatement`){d(e,t);return}if(e.type===`ReturnStatement`){c(e,t);return}e.type===`VariableDeclaration`&&f(e,t)}function d(e,t){let n=w(e.expression);if(n.type===`AssignmentExpression`){a(e,n,t),s(n,t);return}n.type===`CallExpression`&&o(n,t)}function f(e,t){if(e.kind===`const`)for(let n of e.declarations){if(n.id.type!==`Identifier`||n.init===null)continue;let e=ou(n.init);e!==void 0&&t.set(n.id.name,{className:e})}}return{BlockStatement(e){l(e.body)},JSXOpeningElement(t){let n=$l(t.name);if(n!==void 0)for(let r of t.attributes){if(r.type===`JSXSpreadAttribute`)continue;let a=eu(r.name);if(a===void 0||ru(a))continue;let o=nu(n,a);if(o===void 0)continue;let s=tu(r);if(!(r.value===null&&o.value.type===`bool`&&o.value.value)&&(s===void 0||!Ou(s,o.value)))continue;let c=i(t,r);if(c===void 0){e.report({data:{className:n,propertyName:o.propertyName},messageId:`uselessDefault`,node:r});continue}e.report({data:{className:n,propertyName:o.propertyName},fix:c,messageId:`uselessDefault`,node:r})}},Program(e){l(e.body)}}},meta:{docs:{description:`Scaffold for detecting useless default values across ${Wl} default-property classes.`},fixable:`code`,messages:{uselessDefault:`Remove "{{propertyName}}" from {{className}}. It already matches the default value.`},schema:[],type:`suggestion`}}),Au=[`useEffect`,`useLayoutEffect`,`useInsertionEffect`],ju=[`on`],Mu=[`useRef`],Nu=[`useState`,`useReducer`];function Pu(e){return e===void 0?{environment:`roblox-ts`,hooks:new Set(Au),propertyCallbackPrefixes:new Set(ju),refHooks:new Set(Mu),reportAdjustState:!0,reportDerivedState:!0,reportDuplicateDeps:!0,reportEffectChain:!0,reportEmptyEffect:!0,reportEventFlag:!0,reportEventSpecificLogic:!0,reportExternalStore:!0,reportInitializeState:!0,reportLogOnly:!0,reportMixedDerivedState:!0,reportNotifyParent:!0,reportPassRefToParent:!0,reportResetState:!0,stateHooks:new Set(Nu)}:{environment:hn(e.environment)?e.environment:`roblox-ts`,hooks:new Set(S(e.hooks)?e.hooks:Au),propertyCallbackPrefixes:new Set(S(e.propertyCallbackPrefixes)?e.propertyCallbackPrefixes:ju),refHooks:new Set(S(e.refHooks)?e.refHooks:Mu),reportAdjustState:e.reportAdjustState??!0,reportDerivedState:e.reportDerivedState??!0,reportDuplicateDeps:e.reportDuplicateDeps??!0,reportEffectChain:e.reportEffectChain??!0,reportEmptyEffect:e.reportEmptyEffect??!0,reportEventFlag:e.reportEventFlag??!0,reportEventSpecificLogic:e.reportEventSpecificLogic??!0,reportExternalStore:e.reportExternalStore??!0,reportInitializeState:e.reportInitializeState??!0,reportLogOnly:e.reportLogOnly??!0,reportMixedDerivedState:e.reportMixedDerivedState??!0,reportNotifyParent:e.reportNotifyParent??!0,reportPassRefToParent:e.reportPassRefToParent??!0,reportResetState:e.reportResetState??!0,stateHooks:new Set(S(e.stateHooks)?e.stateHooks:Nu)}}function Fu(e){if(!(e.type!==`MemberExpression`||e.computed||e.object.type!==`Identifier`||e.property.type!==`Identifier`))return{objectName:e.object.name,propertyName:e.property.name}}function Iu(e){if(!(e.type!==`MemberExpression`||e.computed||e.property.type!==`Identifier`))return e.property.name}function Lu(e,t,n,r){let{callee:i}=e;if(i.type===`Identifier`)return t.has(i.name);let a=Fu(i);return a!==void 0&&n.has(a.objectName)&&r.has(a.propertyName)}function Ru(e){if((e.type===`FunctionDeclaration`||e.type===`FunctionExpression`)&&e.id!==null)return e.id.name;let{parent:t}=e;if(t.type===`VariableDeclarator`&&t.id.type===`Identifier`)return t.id.name;if(`key`in t&&!(`computed`in t&&t.computed)&&D(t.key)&&t.key.type===`Identifier`)return t.key.name}function zu(e){return ne(e)&&e.startsWith(`use`)}function Bu(e){if(e.type===`ReturnStatement`)return e.argument===null;if(e.type!==`BlockStatement`||e.body.length!==1)return!1;let[t]=e.body;return t?.type===`ReturnStatement`&&t.argument===null}function Vu(e,t){`body`in e&&D(e.body)&&(e.body.type===`BlockStatement`?t.push(...e.body.body):t.push(e.body))}function Hu(e,t){if(e.type===`BlockStatement`){t.push(...e.body);return}if(e.type===`IfStatement`){t.push(e.consequent),e.alternate!==null&&t.push(e.alternate);return}if(e.type===`DoWhileStatement`||e.type===`ForInStatement`||e.type===`ForOfStatement`||e.type===`ForStatement`||e.type===`LabeledStatement`||e.type===`WhileStatement`||e.type===`WithStatement`){Vu(e,t);return}if(e.type===`SwitchStatement`){for(let n of e.cases)t.push(...n.consequent);return}e.type===`TryStatement`&&(t.push(...e.block.body),e.handler!==null&&t.push(...e.handler.body.body),e.finalizer!==null&&t.push(...e.finalizer.body))}function Uu(e){let t=[...e.body];for(;t.length>0;){let e=t.pop();if(e!==void 0)switch(e.type){case`ArrowFunctionExpression`:continue;case`FunctionDeclaration`:continue;case`FunctionExpression`:continue;case`ReturnStatement`:if(e.argument!==null)return!0;continue;case`DoWhileStatement`:case`ForInStatement`:case`ForOfStatement`:case`ForStatement`:case`BlockStatement`:case`IfStatement`:case`LabeledStatement`:case`SwitchStatement`:case`TryStatement`:case`WhileStatement`:case`WithStatement`:Hu(e,t);continue;default:continue}}return!1}function Wu(e){if(e.length===0)return e;let[t]=e;return t?.type!==`IfStatement`||t.alternate!==null||!Bu(t.consequent)?e:e.slice(1)}function Gu(e){return e.type===`ChainExpression`?e.expression:e}function Y(e){if(e.type!==`ExpressionStatement`)return;let t=Gu(e.expression);return t.type===`CallExpression`?t:void 0}function Ku(e,t){return e.callee.type===`Identifier`&&t.has(e.callee.name)}function qu(e){return e.type===`Literal`&&e.value===!1}function Ju(e){return e.type===`Literal`||e.type===`UnaryExpression`&&e.operator===`void`&&e.argument.type===`Literal`&&e.argument.value===0}function Yu(e){return e.type===`ArrayExpression`&&e.elements.length===0}function Xu(e){return e.type===`ObjectExpression`&&e.properties.length===0}function Zu(e){if(e.type===`Literal`){let{value:t}=e;return t===``||t===0||t===!1||t===null}return Ju(e)?!0:Yu(e)||Xu(e)}function Qu(e,t){let n=Y(e);if(n?.callee.type!==`Identifier`)return;let r=t.get(n.callee.name);if(r===void 0||n.arguments.length!==1)return;let[i]=n.arguments;if(!(i===void 0||!qu(i)))return r}function $u(e,t){let n=Y(e);if(!(n===void 0||Ku(n,t)))return n}function ed(e,t){return e.type===`UnaryExpression`&&e.operator===`!`&&e.argument.type===`Identifier`&&e.argument.name===t}function td(e,t){return e.type===`Identifier`&&e.name===t}function X(e){return e.type===`BlockStatement`?e.body:[e]}function nd(e,t,n){let[r,i,a]=e;if(r?.type!==`IfStatement`||r.alternate!==null||i===void 0||a===void 0)return;let o=Qu(i,t),s=Qu(a,t),c=Bu(r.consequent);if(o!==void 0&&s===void 0)return c&&ed(r.test,o)?$u(a,n)===void 0?void 0:o:void 0;if(!(s===void 0||o!==void 0)&&c&&ed(r.test,s))return $u(i,n)===void 0?void 0:s}function rd(e,t,n){if(e.type!==`IfStatement`||e.alternate!==null)return;let r=X(e.consequent),[i,a]=r;if(r.length!==2||i===void 0||a===void 0)return;let o=Qu(i,t),s=Qu(a,t);if(o!==void 0&&s===void 0)return td(e.test,o)?$u(a,n)===void 0?void 0:o:void 0;if(!(s===void 0||o!==void 0)&&td(e.test,s))return $u(i,n)===void 0?void 0:s}function id(e,t,n){if(e.length===3)return nd(e,t,n);if(e.length===1){let[r]=e;return r===void 0?void 0:rd(r,t,n)}}const ad=new Set([`ArrayExpression`,`BinaryExpression`,`CallExpression`,`ChainExpression`,`ConditionalExpression`,`Identifier`,`LogicalExpression`,`MemberExpression`,`ObjectExpression`,`PrivateIdentifier`,`TemplateLiteral`,`UnaryExpression`]);function od(e){return ad.has(e.type)}function sd(e,t){for(let n of e.elements)n!==null&&n.type!==`SpreadElement`&&t.push(n)}function cd(e,t){t.push(e.callee);for(let n of e.arguments)n.type!==`SpreadElement`&&t.push(n)}function ld(e,t){t.push(e.object),e.computed||t.push(e.property)}function ud(e,t){for(let n of e.properties)n.type===`Property`&&t.push(n.value)}function dd(e,t){switch(e.type){case`ArrayExpression`:sd(e,t);break;case`BinaryExpression`:case`LogicalExpression`:t.push(e.left,e.right);break;case`CallExpression`:cd(e,t);break;case`ChainExpression`:t.push(e.expression);break;case`ConditionalExpression`:t.push(e.test,e.consequent,e.alternate);break;case`MemberExpression`:ld(e,t);break;case`ObjectExpression`:ud(e,t);break;case`TemplateLiteral`:t.push(...e.expressions);break;case`UnaryExpression`:t.push(e.argument);break;default:}}function fd(e){let t=[e],n=new Set;for(;t.length>0;){let e=t.pop();if(!(e===void 0||n.has(e))){if(n.add(e),e.type===`Identifier`)return!0;dd(e,t)}}return!1}function pd(e,t){let n=0;for(let r of e){if(r.type===`IfStatement`){if(r.alternate!==null)return;let e=pd(X(r.consequent),t);if(e===void 0||e===0)return;n+=e;continue}let e=Y(r);if(e===void 0||!t(e))return;n+=1}return n>0?n:void 0}function md(e,t){return pd(e,e=>Ku(e,t)?e.arguments.some(e=>e.type!==`SpreadElement`&&fd(e)):!1)}function hd(e,t,n){return pd(e,e=>yd(e,t,n))}function gd(e,t){for(let n of t)if(e.startsWith(n))return!0;return!1}function _d(e){return e.type===`AssignmentPattern`?e.left:e}function vd(e,t,n,r){let i={functionId:n,isCustomHook:r,propertyCallbackIdentifiers:new Set,propertyObjectName:void 0},[a]=e.params;if(a===void 0)return i;let o=_d(a);if(o.type===`Identifier`)return i.propertyObjectName=o.name,i;if(o.type!==`ObjectPattern`)return i;for(let e of o.properties){if(e.type!==`Property`)continue;let n=Wr(e);if(n===void 0||!gd(n,t))continue;let r=Gr(e);r!==void 0&&i.propertyCallbackIdentifiers.add(r.name)}return i}function yd(e,t,n){let{callee:r}=e;if(r.type===`Identifier`)return t.propertyCallbackIdentifiers.has(r.name);let i=Fu(r);return i!==void 0&&t.propertyObjectName!==void 0&&i.objectName===t.propertyObjectName&&gd(i.propertyName,n)}function bd(e,t){let[,n]=e.arguments;if(n?.type!==`ArrayExpression`)return!1;for(let e of n.elements)if(e?.type===`Identifier`&&e.name===t)return!0;return!1}function xd(e){let t=new Set,[,n]=e.arguments;if(n?.type!==`ArrayExpression`)return t;for(let e of n.elements)e?.type===`Identifier`&&t.add(e.name);return t}function Sd(e){let[,t]=e.arguments;return t===void 0||t.type===`ArrayExpression`&&t.elements.length===0}function Cd(e,t){if(e.length===0)return!1;for(let n of e){if(n.type===`IfStatement`){if(n.alternate!==null||!Cd(X(n.consequent),t))return!1;continue}if(!t(n))return!1}return!0}function wd(e,t){let n=new Set;for(let r of e){if(r.type===`IfStatement`){let e=X(r.consequent);for(let r of wd(e,t))n.add(r);continue}let e=Y(r);e!==void 0&&Ku(e,t)&&e.callee.type===`Identifier`&&n.add(e.callee.name)}return n}function Td(e,t){let{callee:n}=e;if(n.type===`Identifier`)return t.has(n.name);let r=Fu(n);return r!==void 0&&t.has(r.objectName)}function Ed(e,t,n){for(let r of e){if(r.type===`IfStatement`){if(Ed(X(r.consequent),t,n))return!0;continue}let e=Y(r);if(e!==void 0&&!Ku(e,t)&&!Td(e,n))return!0}return!1}function Dd(e,t,n){return Cd(e,e=>{let r=Y(e);if(r===void 0||!Ku(r,t)||r.arguments.length!==1)return!1;let[i]=r.arguments;return i!==void 0&&n(i)})}function Od(e){return e.type===`Literal`&&typeof e.value!=`object`||Yu(e)||Xu(e)}function kd(e,t){return Dd(e,t,Zu)}function Ad(e,t){return Dd(e,t,Od)}function jd(e){return Cd(e,e=>{let t=Y(e);return t!==void 0&&Fu(t.callee)?.objectName===`console`})}const Md=new Set([`addEventListener`,`addListener`,`on`,`subscribe`]);function Nd(e){return e.some(e=>{let t=Y(e);if(t===void 0)return!1;let n=Iu(t.callee);return n!==void 0&&Md.has(n)})}function Pd(e,t){return e.type===`MemberExpression`&&!e.computed&&e.object.type===`Identifier`&&e.property.type===`Identifier`&&e.property.name===`current`&&t.has(e.object.name)}function Fd(e,t,n){return e.callee.type===`Identifier`&&n.has(e.callee.name)&&e.arguments.some(e=>Pd(e,t))}function Id(e,t,n){for(let r of e){if(r.type===`IfStatement`){if(Id(X(r.consequent),t,n))return!0;continue}let e=Y(r);if(e!==void 0&&Fd(e,t,n))return!0}return!1}function Ld(e){let t=new Set,n=new Set,r=od(e)?[e]:[];for(;r.length>0;){let e=r.pop();if(!(e===void 0||n.has(e))){if(n.add(e),e.type===`Identifier`){t.add(e.name);continue}od(e)&&dd(e,r)}}return t}function Rd(e){return e.alternate===null?[]:e.alternate.type===`BlockStatement`?e.alternate.body:[e.alternate]}function zd(e,t,n){return[...Ld(e.test)].some(e=>n.has(e)&&!t.has(e))}function Bd(e,t){return e.some(e=>{let n=Y(e);return n!==void 0&&Ku(n,t)})}function Vd(e,t,n,r){for(let i of e)if(i.type===`IfStatement`&&(zd(i,n,r)&&Bd(X(i.consequent),t)||Vd(Rd(i),t,n,r)))return!0;return!1}const Hd=new Set([`alert`,`confirm`,`display`,`hide`,`log`,`navigate`,`notify`,`post`,`prompt`,`redirect`,`report`,`send`,`show`,`submit`,`track`]);function Ud(e){let t=e.toLowerCase();for(let e of Hd)if(t.startsWith(e))return!0;return!1}function Wd(e,t){let n=Y(e);return n===void 0||Ku(n,t)?!1:n.callee.type===`Identifier`?Ud(n.callee.name):n.callee.type!==`MemberExpression`||n.callee.computed||n.callee.property.type!==`Identifier`?!1:Ud(n.callee.property.name)}function Gd(e,t){return[...Ld(e.test)].some(e=>t.has(e))}function Kd(e,t,n){for(let r of e)if(r.type===`IfStatement`&&(Gd(r,n)&&X(r.consequent).some(e=>Wd(e,t))||r.alternate!==null&&Kd(Rd(r),t,n)))return!0;return!1}function qd(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function Jd(e,t){return`${e}:${t}`}function Yd(e){if(e.body?.type===`BlockStatement`)return e.body}function Xd(e){return e.body.type===`BlockStatement`}function Zd(e){return e.body!==null}const Qd=new Set(`addEventListener.addListener.alert.analytics.cancelAnimationFrame.clearInterval.clearTimeout.confirm.debug.delete.error.fetch.get.info.log.navigate.navigateTo.notify.observe.patch.post.prompt.put.redirect.removeEventListener.removeListener.report.requestAnimationFrame.send.setInterval.setTimeout.showNotification.submit.subscribe.track.unobserve.unsubscribe.warn`.split(`.`)),$d=[`fetch`,`send`,`post`,`track`],ef=new Set([`addEventListener`,`addListener`,`cancelAnimationFrame`,`catch`,`clearInterval`,`clearTimeout`,`finally`,`observe`,`removeEventListener`,`removeListener`,`requestAnimationFrame`,`setInterval`,`setTimeout`,`subscribe`,`then`,`unobserve`,`unsubscribe`]),tf=[`log`,`fetch`,`send`,`track`,`report`,`show`,`navigate`,`submit`,`post`,`notify`];function nf(e){for(let t of tf)if(e.startsWith(t))return!0;return!1}function rf(e){return e.object.type===`Identifier`&&e.object.name===`console`&&e.property.type===`Identifier`&&(e.property.name===`log`||e.property.name===`warn`||e.property.name===`error`||e.property.name===`info`||e.property.name===`debug`)}function af(e){for(let t of $d)if(e.startsWith(t))return!0;return ef.has(e)}function of(e,t,n){let{callee:r}=e;return Ku(e,t)?!1:r.type===`Identifier`?n.has(r.name)?!1:Qd.has(r.name)||nf(r.name):r.type!==`MemberExpression`||r.computed||r.property.type!==`Identifier`||r.object.type===`Identifier`&&n.has(r.object.name)?!1:rf(r)||af(r.property.name)}function sf(e,t,n){for(let r of e){if(r.type===`IfStatement`){if(sf(X(r.consequent),t,n))return!0;continue}let e=Y(r);if(e!==void 0&&of(e,t,n))return!0}return!1}const cf=t({create(e){let t=Pu(e.options[0]),n=vn(t.environment),r=new Set,i=new Set,a=new Set,o=new Set,s=new Set,c=new Map,l=new Set,u=new Set,d=[],f=1,p=new Map,m=[];function h(e){return Lu(e,i,r,t.hooks)}function g(e){return Lu(e,a,r,t.stateHooks)}function _(e){return Lu(e,l,r,t.refHooks)}function v(e){if(e.init?.type!==`CallExpression`||!g(e.init)||e.id.type!==`ArrayPattern`)return;let{elements:t}=e.id;if(t.length<2)return;let[,n]=t;if(n==null||n.type!==`Identifier`)return;o.add(n.name);let[r]=t;r?.type===`Identifier`&&(s.add(r.name),c.set(n.name,r.name))}function ee(e){e.init?.type!==`CallExpression`||!_(e.init)||e.id.type!==`Identifier`||u.add(e.id.name)}function te(e){e.id.type!==`Identifier`||e.init===null||(e.init.type===`FunctionExpression`||e.init.type===`ArrowFunctionExpression`)&&p.set(e.id.name,e.init)}function y(e){let n=f;f+=1;let r=Ru(e);d.push(vd(e,t.propertyCallbackPrefixes,n,zu(r))),e.type===`FunctionDeclaration`&&e.id!==null&&p.set(e.id.name,e)}function b(){d.pop()}function x(e){return t.reportMixedDerivedState&&e.setterCalls.size>0&&e.hasNonSetter&&!e.hasReturnCleanup?!sf(e.statements,o,e.functionContext?.propertyCallbackIdentifiers??new Set):!1}function ne(e){let{coreStatements:n,dependencyIdentifiers:r,functionContext:i,hasNonSetter:a,hasReturnCleanup:l,node:d,statements:f}=e,p=t.reportEventFlag?id(f,c,o):void 0,m=[...r].some(e=>!(s.has(e)||o.has(e)));return[[t.reportEmptyEffect&&(f.length===0||f[0]!==void 0&&Bu(f[0])),`emptyEffect`],[t.reportInitializeState&&Sd(d)&&Ad(f,o),`initializeState`],[t.reportResetState&&kd(f,o)&&m,`resetState`],[p!==void 0&&bd(d,p),`eventFlag`],[t.reportEventSpecificLogic&&Kd(f,o,s),`eventSpecificLogic`],[t.reportAdjustState&&Vd(f,o,s,r)&&!a,`adjustState`],[t.reportDerivedState&&md(n,o)!==void 0,`derivedState`],[x(e),`mixedDerivedState`],[t.reportPassRefToParent&&i!==void 0&&Id(f,u,i.propertyCallbackIdentifiers),`passRefToParent`],[t.reportNotifyParent&&i!==void 0&&!i.isCustomHook&&hd(n,i,t.propertyCallbackPrefixes)!==void 0,`notifyParent`],[t.reportExternalStore&&Nd(f)&&l,`externalStore`],[t.reportLogOnly&&jd(f),`logOnly`]].find(([e])=>e)?.[1]}function S(t,n,r){let i=d.at(-1),a=Wu(n),s=xd(t),c=wd(n,o),l=Ed(n,o,i?.propertyCallbackIdentifiers??new Set),u=r!==void 0&&Uu(r);m.push({depIdentifiers:s,hasNonSetterSideEffect:l,hasReturnWithCleanup:u,node:t,ownerFunctionId:i?.functionId??0,setterCalls:c,statements:n});let f=ne({coreStatements:a,dependencyIdentifiers:s,functionContext:i,hasNonSetter:l,hasReturnCleanup:u,node:t,setterCalls:c,statements:n});f!==void 0&&e.report({messageId:f,node:t})}function C(){if(!t.reportEffectChain)return;let n=re();for(let t of m)if(!(t.hasNonSetterSideEffect||t.hasReturnWithCleanup))for(let r of t.depIdentifiers){let i=Jd(t.ownerFunctionId,r),a=n.get(i);if(a!==void 0&&w(a)){e.report({messageId:`effectChain`,node:t.node});return}}}function re(){let e=new Map;for(let[t,n]of m.entries())for(let r of n.setterCalls){let i=c.get(r);if(i===void 0)continue;let a=Jd(n.ownerFunctionId,i),o=e.get(a);o===void 0&&(o=new Set,e.set(a,o)),o.add(t)}return e}function w(e){return e.size!==0&&[...e].every(e=>{let t=m[e];return t!==void 0&&!t.hasNonSetterSideEffect&&!t.hasReturnWithCleanup})}function T(){if(!t.reportDuplicateDeps||m.length<2)return;let e=new Set;for(let t=0;t<m.length;t+=1){if(e.has(t))continue;let n=E(t,e);n.length<2||ie(n,e)}}function E(e,t){let n=m[e];if(n===void 0||n.depIdentifiers.size===0)return[];let r=[e];for(let i=e+1;i<m.length;i+=1){let e=m[i];t.has(i)||e!==void 0&&e.ownerFunctionId===n.ownerFunctionId&&qd(n.depIdentifiers,e.depIdentifiers)&&r.push(i)}return r}function ie(t,n){for(let r of t){n.add(r);let t=m[r];t!==void 0&&e.report({messageId:`duplicateDeps`,node:t.node})}}function ae(e,t){let n=p.get(t);if(n===void 0||n.async)return;let r=Yd(n);r!==void 0&&S(e,r.body.filter(e=>e.type!==`EmptyStatement`),r)}function oe(e,t){if(!t.async){if(t.type===`ArrowFunctionExpression`){if(!Xd(t))return;S(e,t.body.body.filter(e=>e.type!==`EmptyStatement`),t.body);return}Zd(t)&&S(e,t.body.body.filter(e=>e.type!==`EmptyStatement`),t.body)}}return{ArrowFunctionExpression:y,"ArrowFunctionExpression:exit":b,CallExpression(e){if(!h(e))return;let[t]=e.arguments;if(t!==void 0){if(t.type===`Identifier`){ae(e,t.name);return}He(t)&&oe(e,t)}},FunctionDeclaration:y,"FunctionDeclaration:exit":b,FunctionExpression:y,"FunctionExpression:exit":b,ImportDeclaration(e){xn(e,n,r,(e,n)=>{t.hooks.has(e)&&i.add(n),t.stateHooks.has(e)&&a.add(n),t.refHooks.has(e)&&l.add(n)})},"Program:exit"(){C(),T()},VariableDeclarator(e){v(e),ee(e),te(e)}}},meta:{docs:{description:`Disallow effects that only derive state, notify parent callbacks, reset state on prop changes, or route event side effects through state.`},messages:{adjustState:`This effect adjusts state when a prop changes. Adjust the state directly during rendering or restructure to avoid this need.`,derivedState:`This effect only derives state from properties or state. Compute the value during rendering instead of useEffect.`,duplicateDeps:`Multiple effects have identical dependency arrays. Combine them into a single effect for better performance.`,effectChain:`This effect is part of a chain of effects that only derive state from other effects. Consolidate the logic into event handlers or compute during rendering.`,emptyEffect:`This effect has an empty body and should be removed.`,eventFlag:`This effect only reacts to a state flag. Call the side effect directly in the event handler instead of toggling state.`,eventSpecificLogic:`This effect runs event-specific logic based on state. Move this logic to the event handler that triggers the state change.`,externalStore:"This effect subscribes to an external store and syncs to state. Use `useSyncExternalStore` instead.",initializeState:`This effect initializes state with a constant value. Pass the value as the useState initializer instead.`,logOnly:`This effect only contains console.log calls. Remove it (debug leftover) or move the logging to an event handler.`,mixedDerivedState:`This effect contains state setter calls that derive values from props or state mixed with other operations. Extract the setter calls and compute values during rendering.`,notifyParent:`This effect only notifies a parent via a property callback. Call the callback in the event handler instead of useEffect.`,passRefToParent:"This effect passes a ref to a parent callback. Use `forwardRef` or `useImperativeHandle` instead.",resetState:"This effect resets state when a prop changes. Pass a `key` prop to the component instead to reset all state automatically."},schema:[{additionalProperties:!1,properties:{environment:{default:`roblox-ts`,description:`The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.`,enum:[`roblox-ts`,`standard`],type:`string`},hooks:{default:[...Au],items:{type:`string`},type:`array`},propertyCallbackPrefixes:{default:[...ju],items:{type:`string`},type:`array`},refHooks:{default:[...Mu],description:`Ref hook names that return mutable ref objects.`,items:{type:`string`},type:`array`},reportAdjustState:{default:!0,type:`boolean`},reportDerivedState:{default:!0,type:`boolean`},reportDuplicateDeps:{default:!0,type:`boolean`},reportEffectChain:{default:!0,type:`boolean`},reportEmptyEffect:{default:!0,type:`boolean`},reportEventFlag:{default:!0,type:`boolean`},reportEventSpecificLogic:{default:!0,type:`boolean`},reportExternalStore:{default:!0,type:`boolean`},reportInitializeState:{default:!0,type:`boolean`},reportLogOnly:{default:!0,type:`boolean`},reportMixedDerivedState:{default:!0,type:`boolean`},reportNotifyParent:{default:!0,type:`boolean`},reportPassRefToParent:{default:!0,type:`boolean`},reportResetState:{default:!0,type:`boolean`},stateHooks:{default:[...Nu],description:`State hook names that return [value, setter] pairs.`,items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}});function lf(e){return x(e)&&y(e.dependencyMode)&&(e.dependencyMode===`empty-or-omitted`||e.dependencyMode===`aggressive`)?e.dependencyMode:`non-updating`}function uf(e){let t=x(e)&&S(e.staticGlobalFactories)?e.staticGlobalFactories:ss;return{dependencyMode:lf(e),environment:Sn(e),staticGlobalFactories:new Set(t)}}function df(e){return{staticGlobalFactories:e.staticGlobalFactories}}function ff(e){let t=Lr(e);if(t===void 0)return;let{body:n}=t;if(n===null)return;if(n.type!==`BlockStatement`)return n;if(n.body.length!==1)return;let[r]=n.body;return r?.type===`ReturnStatement`?r.argument??void 0:void 0}function pf(e,t){switch(t.dependencyMode){case`aggressive`:return!0;case`empty-or-omitted`:return e===0||e===1;case`non-updating`:return e===0||e===1||e===2;default:{let e=Error(`Unknown dependency mode: ${String(t.dependencyMode)}`);throw Error.captureStackTrace(e,pf),e}}}const mf=t({create(e){let t=uf(e.options[0]),n=df(t),r=vn(t.environment),i=new Set,a=new Set;return{CallExpression(r){if(!fe(r,i,a)||js(r)||r.arguments.length===0)return;let o=ff(r);if(o===void 0)return;let s=new Set;K(e.sourceCode,o,s,n)&&pf(qr(e.sourceCode,r.arguments[1],s,n,Cs),t)&&e.report({messageId:`uselessUseMemo`,node:r})},ImportDeclaration(e){Ms(e,r,i,a)}}},meta:{docs:{description:`Disallow useMemo calls that only wrap values static enough to live at module scope.`},messages:{uselessUseMemo:`useMemo is wrapping a static value. Move the value to module scope instead of paying hook overhead for no runtime benefit.`},schema:[{additionalProperties:!1,properties:{dependencyMode:{default:`non-updating`,enum:[`empty-or-omitted`,`non-updating`,`aggressive`],type:`string`},environment:{default:`roblox-ts`,enum:[`roblox-ts`,`standard`],type:`string`},staticGlobalFactories:{items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}}),hf=[`useSpring`];function gf(e){let t=!1,n=!1;for(let r of e.properties)if(!(r.type!==`Property`||r.computed||r.key.type!==`Identifier`)&&(r.key.name===`from`&&(t=!0),r.key.name===`to`&&(n=!0),t&&n))return!0;return!1}function _f(e,t,n){let r=w(t);if(r.type===`ObjectExpression`)return n(r);if(r.type!==`Identifier`)return!1;let i=E(e.getScope(r),r.name);if(i===void 0||!G(i.scope)||ds(i))return!1;for(let e of i.defs){let t=ps(e);if(t===void 0)continue;let r=w(t);if(r.type===`ObjectExpression`&&n(r))return!0}return!1}function vf(e,t){return _f(e,t,gf)}function yf(e,t,n,r){let i={staticGlobalFactories:r.staticGlobalFactories};return _f(e,t,t=>Ss(e,t,n,i))}function bf(e,t){return e===0||e===2||e===1&&t.treatEmptyDepsAsViolation}function xf({callee:e},t){if(e.type===`Identifier`)return t.springHooks.has(e.name);if(e.type===`MemberExpression`&&!e.computed){let{property:n}=e;if(n.type===`Identifier`)return t.springHooks.has(n.name)}return!1}const Sf=t({create(e){let[t]=e.options,n={springHooks:new Set(t?.springHooks??hf),staticGlobalFactories:new Set(t?.staticGlobalFactories??ss),treatEmptyDepsAsViolation:t?.treatEmptyDepsAsViolation??!0};return{CallExpression(t){if(!xf(t,n)||t.arguments.length===0)return;let[r]=t.arguments;if(r===void 0||r.type===`SpreadElement`)return;let i=new Set;if(!yf(e.sourceCode,r,i,n)||vf(e.sourceCode,r))return;let a=t.arguments.length>1?t.arguments[1]:void 0;bf(qr(e.sourceCode,a,i,n,Cs),n)&&e.report({messageId:`uselessSpring`,node:t})}}},meta:{docs:{description:`Disallow useSpring hooks whose config and dependencies are entirely static`},messages:{uselessSpring:`useSpring call has only static inputs and non-updating dependencies; replace it with a constant or remove the hook.`},schema:[{additionalProperties:!1,default:{staticGlobalFactories:[...ss],treatEmptyDepsAsViolation:!0},properties:{springHooks:{description:`Hook identifiers that should be treated as spring hooks`,items:{type:`string`},type:`array`},staticGlobalFactories:{default:[...ss],description:`Global factory identifiers that are treated as static constructors`,items:{type:`string`},type:`array`},treatEmptyDepsAsViolation:{default:!0,description:`Treat static config with an empty dependency array as a violation`,type:`boolean`}},type:`object`}],type:`suggestion`}}),Cf=Wa({alternative:`Log`,message:`{{name}}() is a raw output function lacking log levels, timestamps, and filtering. Production systems require structured logging for debugging and monitoring. Replace {{name}}(...) with {{alternative}}.`,messageId:`noWarn`,name:`warn`}),wf=t({create(e){return{ImportDeclaration(t){t.importKind!==`type`&&e.report({messageId:`onlyTypeImports`,node:t})}}},meta:{docs:{description:`Require all imports to be type-only imports. Benchmarks cannot import non-types because the benchmarker plugin will throw an error.`,recommended:!0},messages:{onlyTypeImports:"Benchmarks must use `import type` to avoid runtime imports that break the benchmarker plugin."},schema:[],type:`problem`}});function Tf(e){return!e.computed&&Ef(e.value)}function Ef(e){if(e===void 0)return!1;switch(e.type){case`ArrayExpression`:return e.elements.every(e=>e===null||e.type!==`SpreadElement`&&Ef(e));case`CallExpression`:return e.callee.type===`MemberExpression`&&Ef(e.callee.object);case`Literal`:return!0;case`MemberExpression`:return Ef(e.object);case`ObjectExpression`:return e.properties.every(e=>e.type!==`SpreadElement`&&Tf(e));default:return!1}}function Df(e){let t=e;for(;t.type===`MemberExpression`;){if(t.computed&&!Be(t.property))return!1;t=t.object}return!0}function Of(e){return e.type===`MethodDefinition`&&e.kind===`constructor`&&e.key.type===`Identifier`&&e.key.name===`constructor`}function kf(e){if(e.type!==`ExpressionStatement`)return!1;let{expression:t}=e;if(t.type!==`AssignmentExpression`)return!1;let{left:n}=t;if(n.type!==`MemberExpression`||n.object.type!==`ThisExpression`)return!1;let{property:r}=n;return(r.type===`Identifier`||Be(r))&&Ef(t.right)&&Df(n)}const Af=t({create(e){let[t=`always`]=e.options;if(t===`never`)return{PropertyDefinition(t){t.static||e.report({messageId:`unexpectedClassProperty`,node:t})}};function n(t){for(let n of t.body.body)if(!(!Of(n)||n.value.body===null))for(let t of n.value.body.body)kf(t)&&e.report({messageId:`unexpectedAssignment`,node:t.expression})}return{ClassDeclaration(e){n(e)},ClassExpression(e){n(e)}}},meta:{docs:{description:`Prefer class properties to assignment of literals in constructors.`},messages:{unexpectedAssignment:`Constructor assigns a literal value to this.property. Literals are static and known at class definition time. Move to a class property declaration: propertyName = value; at class level. This clarifies intent and reduces constructor complexity.`,unexpectedClassProperty:`Class property declarations are disabled by rule configuration (mode: 'never'). Move initialization into the constructor: this.propertyName = value; inside constructor().`},schema:[{enum:[`always`,`never`],type:`string`}],type:`suggestion`}});function jf(e){if(!G(e.scope))return!1;for(let t of e.defs){if(t.type!==`Variable`)continue;let e=t.node;if(e.type!==`VariableDeclarator`)continue;let n=e.parent;if(n.type===`VariableDeclaration`&&n.kind===`const`)return!0}return!1}function Mf(e,t){let n=E(e.getScope(t),t.name);return n===void 0?!1:ds(n)||jf(n)}function Nf(e,t){let n=E(e.getScope(t),t.name);return n===void 0?!1:ds(n)||G(n.scope)}function Pf(e,t){let n=t;for(;n.type===`MemberExpression`;){if(n.computed)return!1;n=w(n.object)}return n.type===`Identifier`&&Nf(e,n)}function Ff(e,t){let n=w(t);switch(n.type){case`Identifier`:return Mf(e,n);case`Literal`:return!0;case`MemberExpression`:return Pf(e,n);case`TemplateLiteral`:return n.expressions.length===0;case`UnaryExpression`:return n.operator===`-`&&w(n.argument).type===`Literal`;default:return!1}}function If(e,t){for(let n of t.properties)if(n.type!==`Property`||n.kind!==`init`||n.computed||!Ff(e,n.value))return!1;return!0}function Lf(e,t){if(t.id.type!==`ArrayPattern`||t.init?.type!==`CallExpression`||L(t.init)!==`useReducer`)return;let n=t.id.elements[1];if(n!=null&&n.type===`Identifier`)return E(e.getScope(n),n.name)}function Rf(e){let t=e;for(;t!==void 0;){if(t.type===`Program`)return t;t=t.parent}}function zf(e,t,n,r,i){let a=`const ${r} = ${t.getText(n)};`,{body:o}=i,s;for(let e of o){if(e.type===`ImportDeclaration`){s=e;continue}break}if(s!==void 0)return e.insertTextAfter(s,`\n\n${a}`);let[c]=o;return c===void 0?e.insertTextAfterRange([i.range[0],i.range[1]],a):e.insertTextBefore(c,`${a}\n\n`)}const Bf=t({create(e){let t=new Set,{sourceCode:n}=e,r=0;return{CallExpression(i){if(i.callee.type!==`Identifier`)return;let a=E(n.getScope(i.callee),i.callee.name);if(a===void 0||!t.has(a))return;let[o]=i.arguments;if(o===void 0||o.type===`SpreadElement`)return;let s=w(o);if(s.type!==`ObjectExpression`||!If(n,s))return;let c=Rf(s);if(c===void 0)return;let l=`PREFER_CONSTANT_ACTION_${r}`;r+=1,e.report({messageId:`preferConstantDispatch`,node:s,suggest:[{desc:`Extract to module constant \`${l}\``,fix(e){return[zf(e,n,s,l,c),e.replaceText(s,l)]}}]})},VariableDeclarator(e){let r=Lf(n,e);r!==void 0&&t.add(r)}}},meta:{docs:{description:`Disallow inline useReducer action objects that could be module-level constants.`,recommended:!0},hasSuggestions:!0,messages:{preferConstantDispatch:`Move this inline useReducer action object to a module-level constant.`},schema:[],type:`suggestion`}}),Vf=new Set([`.js`,`.jsx`,`.ts`,`.tsx`]),Hf=new Set([`.git`,`.next`,`.turbo`,`__fixtures__`,`__mocks__`,`__tests__`,`coverage`,`dist`,`documentation`,`example`,`examples`,`fixture`,`fixtures`,`node_modules`,`opensrc`,`stories`,`story`,`test`,`tests`]),Uf=/\bexport\s+default\b/u,Wf=/\/index$/u,Gf=/\.(?:[cm]?jsx?|tsx?)$/u,Kf=new Map,qf=new Map,Jf=new Map,Yf=/[.*+?^${}()|[\]\\]/gu,Xf=String.raw`\$&`;function Zf(e){return e.replaceAll(Yf,Xf)}const Qf=new Map;function $f(e){return e.includes(`u`)||e.includes(`v`)?e:`${e}u`}function ep(e,t){let n=`${t}:${e}`,r=Qf.get(n);if(r!==void 0)return r;let i=new RegExp(e,$f(t));if(Qf.size>=64){let e=Qf.keys().next().value;e!==void 0&&Qf.delete(e)}return Qf.set(n,i),i}function tp(e){return e.replaceAll(`\\`,`/`)}function np(e){let t=qf.get(e);if(t!==void 0)return t;let n=f(e,`utf8`);return qf.set(e,n),n}function rp(e,t){let n=Zf(t);return ep(`\\bexport\\s+(?:const|function|class)\\s+${n}\\b`,`u`).test(e)||ep(`\\bexport\\s*\\{[^}]*\\b${n}\\b[^}]*\\}`,`u`).test(e)?`named`:Uf.test(e)&&ep(`\\b${n}\\b`,`u`).test(e)?`default`:void 0}function ip(e,t){for(let n of t)if(!ep(`\\b${Zf(n)}\\b`,`u`).test(e))return!1;return!0}function ap(e){let t=Jf.get(e);if(t!==void 0)return t;let n=e;for(;;){if(d(c(n,`package.json`))||d(c(n,`tsconfig.json`)))return Jf.set(e,n),n;let t=a(n);if(t===n){Jf.set(e,void 0);return}n=t}}function op(e){let t=Kf.get(e);if(t!==void 0)return t;let n=new Map;function r(e){for(let t of p(e,{withFileTypes:!0})){let a=t.name.toLowerCase();if(t.name.startsWith(`.`)&&t.name!==`.storybook`||Hf.has(a))continue;let s=c(e,t.name);if(t.isDirectory()){r(s);continue}let l=o(t.name);if(!Vf.has(l)||t.name.endsWith(`.d.ts`))continue;let u=i(t.name,l).toLowerCase(),d=n.get(u);d===void 0?n.set(u,[s]):d.push(s)}}r(e);let a=new Map;for(let[e,t]of n)a.set(e,t);return Kf.set(e,a),a}function sp(e,t){let n=tp(l(a(e),t));return n=n.replace(Gf,``),n=n.replace(Wf,``),n.startsWith(`.`)||(n=`./${n}`),n}function cp(e){let t=ap(a(e)),n=tp(t===void 0?e:l(t,e));for(let e of n.split(`/`))if(Hf.has(e.toLowerCase()))return!0;return!1}function lp(e,t){if(cp(e))return{importStyle:void 0,matches:!1};let n=o(e);if(!Vf.has(n)||e.endsWith(`.d.ts`))return{importStyle:void 0,matches:!1};let r=i(e,n).toLowerCase();if(!t.fileNames.map(e=>e.toLowerCase()).includes(r))return{importStyle:void 0,matches:!1};let a=np(e);if(!ep(`\\b${Zf(t.componentName)}\\b`,`u`).test(a)||t.markers!==void 0&&!ip(a,t.markers))return{importStyle:void 0,matches:!1};let s=rp(a,t.componentName);return s===void 0?{importStyle:void 0,matches:!1}:{importStyle:s,matches:!0}}function up(e,t,n){let r=e.source.value;if(!(y(r)&&r.startsWith(`.`))||t===``)return{importStyle:void 0,matches:!1};let i=Qs(r,t);return i.found?lp(i.path,n):{importStyle:void 0,matches:!1}}function dp(e,t,n,r){if(t.matches)for(let t of e.specifiers){if(t.type===`ImportDefaultSpecifier`){r.add(t.local.name);continue}if(t.type!==`ImportSpecifier`)continue;let{imported:e}=t;(e.type===`Identifier`?e.name:e.value)===n&&r.add(t.local.name)}}function fp(e,t){let n=ap(a(e));if(n===void 0)return{found:!1};let r=op(n),i=new Set;for(let e of t.fileNames)for(let t of r.get(e.toLowerCase())??[])i.add(t);let o=[...i].filter(e=>lp(e,t).matches);if(o.length!==1)return{found:!1};let[s]=o;if(s===void 0)return{found:!1};let c=lp(s,t);return{found:!0,importSource:sp(e,s),importStyle:c.importStyle,path:s}}const pp={componentName:`ContextStack`,fileNames:[`context-stack`],markers:[`providers`]},mp=new Set([`.jsx`,`.tsx`]);function hp(e){return e.openingElement.name.type===`JSXMemberExpression`&&e.openingElement.name.property.name===`Provider`}function gp(e){return e.children.filter(e=>e.type===`JSXText`?e.value.trim()!==``:e.type!==`JSXExpressionContainer`||e.expression.type!==`JSXEmptyExpression`)}function _p(e){let{parent:t}=e;if(t.type!==`JSXElement`||!hp(t))return!1;let n=gp(t);return n.length===1&&n[0]===e}function vp(e){if(!hp(e))return;let t=[e],n=e;for(;;){let e=gp(n);if(e.length!==1)break;let[r]=e;if(r?.type!==`JSXElement`||!hp(r))break;t.push(r),n=r}return t.length>1?t:void 0}function yp(e,t){let n=!1;for(let r of e.children){if(r===t){n=!0;continue}if(!(r.type===`JSXText`&&r.value.trim()===``))return!1}return n}function bp(e){let t=0;for(let n of e){let r=e[t+1];if(r===void 0){t+=1;continue}if(!yp(n,r))return!1;t+=1}return!0}function xp(e,t){let n=t.getText(e.openingElement);return e.openingElement.selfClosing?n:n.endsWith(`>`)?`${n.slice(0,-1)} />`:void 0}function Sp(e,t,n){let r=[];for(let e of t){let t=xp(e,n);if(t===void 0)return;r.push(t)}let i=t.at(-1);if(i===void 0||i.closingElement===null)return;let a=n.text.slice(i.openingElement.range[1],i.closingElement.range[0]);return`<${e} providers={[${r.join(`, `)}]}>${a}</${e}>`}const Cp=t({create(e){let{filename:t,sourceCode:n}=e,r=t===``?{found:!1}:fp(t,pp),i=new Set;return{ImportDeclaration(e){dp(e,up(e,t,pp),pp.componentName,i)},JSXElement(a){if(_p(a))return;let s=vp(a);if(s===void 0||i.size===0&&!r.found)return;let c=mp.has(o(t))&&i.size===1&&bp(s),[l]=i,u=c&&l!==void 0?Sp(l,s,n):void 0;if(u!==void 0){e.report({fix:e=>e.replaceText(a,u),messageId:`preferContextStack`,node:a});return}e.report({messageId:`preferContextStack`,node:a})}}},meta:{docs:{description:`Prefer a local ContextStack component over directly nesting multiple context providers.`},fixable:`code`,messages:{preferContextStack:"Use the local `ContextStack` component instead of nesting multiple context providers directly."},schema:[],type:`suggestion`}});function wp(e){return x(e)&&b(e.maximumStatements)?e.maximumStatements:1}function Tp(e){return e.type===`IfStatement`&&e.alternate===null}function Ep(e,t){return e.type===`ExpressionStatement`&&t===0||e.type===`BlockStatement`&&e.body.length>t}function Dp(e,t){if(e.body.length!==1)return!1;let[n]=e.body;return n===void 0||!Tp(n)?!1:Ep(n.consequent,t)}const Op=t({create(e){let t=wp(e.options[0]);function n(n){Dp(n,t)&&e.report({messageId:`preferEarlyReturn`,node:n})}return{ArrowFunctionExpression(e){e.body.type===`BlockStatement`&&n(e.body)},FunctionDeclaration(e){e.body!==null&&n(e.body)},FunctionExpression(e){e.body!==null&&n(e.body)}}},meta:{docs:{description:`Prefer early returns over full-body conditional wrapping.`,recommended:!0},messages:{preferEarlyReturn:`Function body is wrapped in a single conditional without an else branch. This increases nesting depth and cognitive load. Invert the condition and return early: if (!condition) return; then place the main logic at the top level.`},schema:[{additionalProperties:!1,properties:{maximumStatements:{default:1,minimum:0,type:`number`}},type:`object`}],type:`suggestion`}});function kp(e){return e.type===`Identifier`&&(e.name===`it`||e.name===`test`)}function Ap(e){if(e.callee.type!==`MemberExpression`||!kp(e.callee.object))return!1;let t=T(e.callee);return t===`only`||t===`skip`}function jp(e){return e.callee.type!==`MemberExpression`||!kp(e.callee.object)?!1:T(e.callee)===`each`}function Mp(e){let t=e.arguments.at(-1);return t===void 0||!He(t)?void 0:t}function Np(e){return e.type===`DoWhileStatement`||e.type===`ForInStatement`||e.type===`ForOfStatement`||e.type===`ForStatement`||e.type===`WhileStatement`}function Pp(e,t){return e.type===t.type&&e.range[0]===t.range[0]&&e.range[1]===t.range[1]}function Fp(e,t){return{hasCallback:e.hasCallback||t.hasCallback,hasIndeterminate:e.hasIndeterminate||t.hasIndeterminate,hasLoop:e.hasLoop||t.hasLoop}}function Ip(e,t){if(Pp(e,t))return{hasCallback:!1,hasIndeterminate:!1,hasLoop:!1};let n={hasCallback:He(e),hasIndeterminate:He(e)||Np(e)||e.type===`ConditionalExpression`||e.type===`IfStatement`||e.type===`SwitchCase`||e.type===`TryStatement`&&e.handler!==null,hasLoop:Np(e)};return e.parent===null?n:Fp(n,Ip(e.parent,t))}function Lp(e){return e.callee.type===`Identifier`?kp(e.callee):Ap(e)?!0:e.callee.type===`CallExpression`&&jp(e.callee)}function Rp(e){return Lp(e)?Mp(e):void 0}function zp({callee:e}){return e.type!==`MemberExpression`||e.object.type!==`Identifier`||e.object.name!==`expect`?!1:T(e)===`assertions`}function Bp({callee:e}){return e.type!==`MemberExpression`||e.object.type!==`Identifier`||e.object.name!==`expect`?!1:T(e)===`hasAssertions`}function Vp(e,t=[]){return e.callee.type===`Identifier`&&(e.callee.name===`expect`||t.includes(e.callee.name))}function Hp(e,t=[]){let n=0,r=!1,i=!1,a=!1,o=0;return Rr(e,s=>{if(s.type!==`CallExpression`||!Vp(s,t))return;let c=Ip(s.parent,e);if(c.hasLoop&&(i=!0),c.hasCallback&&(r=!0),c.hasIndeterminate){a=!0,o+=1;return}n+=1}),{deterministic:n,hasExpectInCallback:r,hasExpectInLoop:i,hasIndeterminate:a,indeterminate:o}}function Up(e){return Array.isArray(e)?e.filter(y):[]}function Wp(e){return x(e)?{additionalAssertionFunctions:Up(e.additionalAssertionFunctions),additionalExpectCallNames:Up(e.additionalExpectCallNames),onlyFunctionsWithAsyncKeyword:e.onlyFunctionsWithAsyncKeyword===!0,onlyFunctionsWithExpectInCallback:e.onlyFunctionsWithExpectInCallback===!0,onlyFunctionsWithExpectInLoop:e.onlyFunctionsWithExpectInLoop===!0}:{additionalAssertionFunctions:[],additionalExpectCallNames:[],onlyFunctionsWithAsyncKeyword:!1,onlyFunctionsWithExpectInCallback:!1,onlyFunctionsWithExpectInLoop:!1}}function Gp(e){return[...new Set([...e.additionalExpectCallNames,...e.additionalAssertionFunctions])]}function Kp(e){return e.onlyFunctionsWithAsyncKeyword||e.onlyFunctionsWithExpectInCallback||e.onlyFunctionsWithExpectInLoop}function qp(e){return e.body??void 0}function Jp(e){let t=qp(e);return t?.type===`BlockStatement`?t:void 0}function Yp(e,t,n,r,i,a){return n+r===0?!1:!Kp(t)||t.onlyFunctionsWithAsyncKeyword&&e.async||t.onlyFunctionsWithExpectInCallback&&i||t.onlyFunctionsWithExpectInLoop&&a}function Xp(e){let t=Jp(e);if(t===void 0)return;let[n]=t.body;if(!(n?.type!==`ExpressionStatement`||n.expression.type!==`CallExpression`))return n.expression}function Zp(e,t,n,r,i){let a=Jp(t);if(a===void 0){e.report({messageId:`haveExpectAssertions`,node:n});return}let[o]=a.body;if(i){e.report({messageId:`haveExpectAssertions`,node:n,suggest:[{fix(e){return o===void 0?e.insertTextAfterRange([a.range[0],a.range[0]+1],` expect.hasAssertions();`):e.insertTextBefore(o,`expect.hasAssertions();
10
- `)},messageId:`suggestAddingHasAssertions`}]});return}e.report({messageId:`haveExpectAssertions`,node:n,suggest:[{data:{count:String(r)},fix(e){return o===void 0?e.insertTextAfterRange([a.range[0],a.range[0]+1],` expect.assertions(${r});`):e.insertTextBefore(o,`expect.assertions(${r});\n`)},messageId:`suggestAddingAssertions`}]})}function Qp(e,t,n,r){if(Bp(t)){t.arguments.length>0&&e.report({messageId:`hasAssertionsTakesNoArguments`,node:t});return}if(!zp(t))return;if(t.arguments.length!==1){e.report({messageId:`assertionsRequiresOneArgument`,node:t});return}let[i]=t.arguments;if(i===void 0||i.type===`SpreadElement`||!We(i)){e.report({messageId:`assertionsRequiresNumberArgument`,node:t});return}!r&&n>0&&i.value!==n&&e.report({data:{actual:String(n),expected:String(i.value)},messageId:`wrongAssertionCount`,node:t})}const $p=t({create(e){let t=Wp(e.options[0]);return{CallExpression(n){if(!Lp(n))return;let r=Rp(n);if(r===void 0)return;let i=qp(r);if(i===void 0)return;let{deterministic:a,indeterminate:o,hasIndeterminate:s,hasExpectInCallback:c,hasExpectInLoop:l}=Hp(i,Gp(t));if(!Yp(r,t,a,o,c,l))return;let u=Xp(r);if(u!==void 0&&(zp(u)||Bp(u))){if(Qp(e,u,a,s),Bp(u)&&u.arguments.length===0&&a>0&&!s){let[t]=Jp(r)?.body??[];t!==void 0&&e.report({data:{count:String(a)},fix(e){return e.replaceText(t,`expect.assertions(${a});`)},messageId:`preferAssertionsCount`,node:u})}return}Zp(e,r,n,a,s)}}},meta:{docs:{description:`Enforce expect assertion guards in Jest tests and prefer expect.assertions(n) over expect.hasAssertions() when the count is known.`,recommended:!0},fixable:`code`,hasSuggestions:!0,messages:{assertionsRequiresNumberArgument:`This argument should be a number`,assertionsRequiresOneArgument:"`expect.assertions` expects a single argument of type number",hasAssertionsTakesNoArguments:"`expect.hasAssertions` expects no arguments",haveExpectAssertions:"Every test should have either `expect.assertions(<number of assertions>)` or `expect.hasAssertions()` as its first expression",preferAssertionsCount:"Use `expect.assertions({{count}})` instead of `expect.hasAssertions()` when the count is known",suggestAddingAssertions:"Add `expect.assertions({{count}})`",suggestAddingHasAssertions:"Add `expect.hasAssertions()`",wrongAssertionCount:`Expected {{expected}} assertions, but test has {{actual}} expect calls`},schema:[{additionalProperties:!1,properties:{additionalAssertionFunctions:{items:{type:`string`},type:`array`},additionalExpectCallNames:{items:{type:`string`},type:`array`},onlyFunctionsWithAsyncKeyword:{type:`boolean`},onlyFunctionsWithExpectInCallback:{type:`boolean`},onlyFunctionsWithExpectInLoop:{type:`boolean`}},type:`object`}],type:`suggestion`}});function em(e){if(!(x(e)&&`additionalHoistableComponents`in e))return new Set;let{additionalHoistableComponents:t}=e;return t===void 0||!S(t)?new Set:new Set(t)}function tm(e){if(!(x(e)&&`additionalStaticFactories`in e))return new Set;let{additionalStaticFactories:t}=e;return t===void 0||!S(t)?new Set:new Set(t)}function nm(e,t){let n=t,{parent:r}=n;for(;r.type===`ParenthesizedExpression`;)n=r,{parent:r}=n;if(r.type!==`VariableDeclarator`||r.id.type!==`Identifier`||r.init!==n)return!1;let i=E(e.sourceCode.getScope(n),r.id.name);return i!==void 0&&G(i.scope)}function rm(e,t,n,r){if(t.name.type===`JSXIdentifier`&&(t.name.name===`Event`||t.name.name===`Change`))return!1;let{value:i}=t;return i===null||i.type===`Literal`?!0:i.type!==`JSXExpressionContainer`||i.expression.type===`JSXEmptyExpression`||gs(e.sourceCode,i.expression,new Set)?!1:K(e.sourceCode,i.expression,n,r)}function im(e,t,n,r){for(let i of t.attributes)if(i.type===`JSXSpreadAttribute`||!rm(e,i,n,r))return!1;return!0}function am(e,t,n,r,i){if(t.type===`JSXText`)return t.value.trim()===``;if(t.type===`JSXElement`)return sm(e,t,n,r,i);if(t.type!==`JSXExpressionContainer`)return!1;if(t.expression.type===`JSXEmptyExpression`)return!0;if(t.expression.type===`Identifier`){let a=ms(e.sourceCode,t.expression);if(a?.type===`JSXElement`)return sm(e,a,n,r,i)}return K(e.sourceCode,t.expression,n,i)}function om(e,t,n,r,i){for(let a of t.children)if(!am(e,a,n,r,i))return!1;return!0}function sm(e,t,n,r,i){return ho(t.openingElement.name,r)&&im(e,t.openingElement,n,i)&&om(e,t,n,r,i)}function cm(e,t,n,r){let{parent:i}=t;for(;i.type!==`Program`;){if(i.type===`JSXElement`&&sm(e,i,new Set,n,r))return!0;({parent:i}=i)}return!1}function lm(e,t){let n=t,{parent:r}=n;for(;r.type!==`Program`;){if(r.type===`VariableDeclarator`&&r.id.type===`Identifier`&&r.init===n){let t=E(e.sourceCode.getScope(n),r.id.name);if(t!==void 0&&G(t.scope))return!0}(r.type===`JSXElement`||r.type===`JSXFragment`||r.type===`ParenthesizedExpression`)&&(n=r),{parent:r}=r}return!1}function um(e,t){let n=e.sourceCode.getText(t);e.report({data:{elementText:n},messageId:`hoistableJsxElement`,node:t})}const dm=t({create(e){let[t]=e.options,n=em(t),r=tm(t),i={staticGlobalFactories:new Set([...ss,...r])};return{JSXElement(t){sm(e,t,new Set,n,i)&&(nm(e,t)||cm(e,t,n,i)||lm(e,t)||um(e,t))}}},meta:{docs:{description:`Prefer extracting static Roblox JSX intrinsic elements to module-level constants.`},messages:{hoistableJsxElement:"Extract `{{elementText}}` to a shared module-level const — this Roblox JSX element is fully static and identical elements should reuse the same const."},schema:[{additionalProperties:!1,properties:{additionalHoistableComponents:{description:`Additional component names that can be hoisted to module-level constants.`,items:{type:`string`},type:`array`},additionalStaticFactories:{description:`Additional factory functions whose return values are considered static.`,items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}}),fm={staticGlobalFactories:new Set(ss)};function pm(e){let{value:t}=e;if(t?.type===`JSXExpressionContainer`&&t.expression.type!==`JSXEmptyExpression`)return t.expression}function mm(e,t){let n=t;for(;;){let{parent:r}=n;if(r===null)return!1;if(r.type===`VariableDeclarator`)return gm(e,t,r,n);let i=hm(r);if(i===void 0)return!1;n=i}}function hm(e){if(e.type===`JSXElement`||e.type===`JSXFragment`||e.type===`JSXExpressionContainer`||e.type===`ParenthesizedExpression`||e.type===`ArrayExpression`)return e}function gm(e,t,n,r){if(n.id.type!==`Identifier`||n.init!==r)return!1;let i=E(e.sourceCode.getScope(t),n.id.name);return i!==void 0&&G(i.scope)}function _m(e,t){let n=e.sourceCode.getText(t);e.report({data:{objectText:n},messageId:`hoistableObjectProp`,node:t})}function vm(e,t){if(t.properties.some(e=>e.type===`Property`&&e.computed))return;let n=new Set;if(K(e.sourceCode,t,n,fm)){_m(e,t);return}for(let n of t.properties){if(n.type!==`Property`)continue;let t=w(n.value);t.type===`ObjectExpression`&&vm(e,t)}}const ym=t({create(e){return{JSXAttribute(t){let n=pm(t);if(n===void 0)return;let r=w(n);if(r.type!==`ObjectExpression`)return;let i=t.parent;if(i.type!==`JSXOpeningElement`)return;let a=i.parent;a.type===`JSXElement`&&mm(e,a)||vm(e,r)}}},meta:{docs:{description:`Prefer extracting inline JSX object props to module-level constants when the entire object is statically hoistable.`},messages:{hoistableObjectProp:"Extract `{{objectText}}` to a module-level const — this inline JSX prop object is fully static and causes unnecessary reference churn on every render."},schema:[],type:`suggestion`}});function bm({type:e}){return e===`Identifier`||e===`MemberExpression`||e===`CallExpression`||e===`NewExpression`||e===`ThisExpression`}function xm(e){let t=e;for(;t.type===`ParenthesizedExpression`;)t=t.expression;return t}const Sm=t({createOnce(e){return{CallExpression(t){if(t.optional)return;let n=w(t.callee);if(n.type!==`MemberExpression`||n.optional||T(n)!==`floor`)return;let r=w(n.object);if(r.type!==`Identifier`||r.name!==`math`||ie(e.sourceCode,r,`math`)||t.arguments.length!==1)return;let[i]=t.arguments;if(i===void 0||i.type===`SpreadElement`)return;let a=w(i);if(a.type!==`BinaryExpression`||a.operator!==`/`)return;let o=w(a.left),s=e.sourceCode.getText(xm(a.left)),c=bm(o)?s:`(${s})`,l=e.sourceCode.getText(xm(a.right));e.report({fix:e=>e.replaceText(t,`${c}.idiv(${l})`),messageId:`useIdiv`,node:t})}}},meta:{docs:{description:`Prefer .idiv() for integer division instead of math.floor(x / y).`,recommended:!0},fixable:`code`,messages:{useIdiv:`Use .idiv() instead of math.floor(x / y) for integer division.`},schema:[],type:`suggestion`}}),Cm={componentName:`Portal`,fileNames:[`portal`],markers:[`target`]},wm=new Set([`@rbxts/react-roblox`,`react-dom`]),Tm=new Set([`.jsx`,`.tsx`]);function Em(e){return e.type===`ImportBinding`}function Dm(e){return e.parent?.type===`ImportDeclaration`?e.parent:void 0}function Om(e){if(e===void 0)return!1;for(let t of e.defs){if(!Em(t)||t.node.type!==`ImportSpecifier`)continue;let e=Dm(t.node);if(e===void 0||!wm.has(e.source.value))continue;let{imported:n}=t.node;if(n.type===`Identifier`&&n.name===`createPortal`)return!0}return!1}function km(e){if(e===void 0)return!1;for(let t of e.defs){if(!Em(t)||t.node.type!==`ImportNamespaceSpecifier`)continue;let e=Dm(t.node);if(e!==void 0&&wm.has(e.source.value))return!0}return!1}function Am(e,{callee:t}){return t.type===`Identifier`?Om(E(e.getScope(t),t.name)):t.type!==`MemberExpression`||t.computed||t.property.type!==`Identifier`||t.property.name!==`createPortal`||t.object.type!==`Identifier`?!1:km(E(e.getScope(t.object),t.object.name))}function jm(e,t){return e.type===`JSXElement`||e.type===`JSXFragment`?t.getText(e):`{${t.getText(e)}}`}function Mm(e,t,n){if(t.arguments.length!==2)return;let[r,i]=t.arguments;if(r===void 0||i===void 0)return;let a=jm(r,n);return`<${e} target={${n.getText(i)}}>${a}</${e}>`}const Nm=t({create(e){let{filename:t,sourceCode:n}=e,r=t===``?{found:!1}:fp(t,Cm),i=new Set;return{CallExpression(a){if(!Am(n,a)||a.arguments.length!==2||!(i.size>0||r.found))return;let s=Tm.has(o(t))&&i.size===1,[c]=i,l=s&&c!==void 0?Mm(c,a,n):void 0;if(l!==void 0){e.report({fix:e=>e.replaceText(a,l),messageId:`preferPortalComponent`,node:a});return}e.report({messageId:`preferPortalComponent`,node:a})},ImportDeclaration(e){dp(e,up(e,t,Cm),Cm.componentName,i)}}},meta:{docs:{description:`Prefer a local Portal component over direct createPortal calls when the project already defines one.`},fixable:`code`,messages:{preferPortalComponent:"Use the local `Portal` component instead of calling `createPortal` directly."},schema:[],type:`suggestion`}});function Pm(e){return e===void 0?!1:e.type===`TSTypeAnnotation`?Pm(e.typeAnnotation):e.type===`TSNumberKeyword`||e.type===`TSTypeReference`&&e.typeName.type===`Identifier`&&e.typeName.name===`Number`}function Fm(e){return e.type!==`PrivateIdentifier`}function Im(e){let t=w(e);return t.type===`Literal`&&!b(t.value)}function Lm(e){if(e.type===`Parameter`){let t=e.name;if(t.type===`Identifier`&&t.typeAnnotation!==void 0&&t.typeAnnotation!==null)return!Pm(t.typeAnnotation);let{parent:n}=t;return n?.type===`AssignmentPattern`&&Im(n.right)}if(e.type!==`Variable`||e.node.type!==`VariableDeclarator`)return!1;let{id:t,init:n}=e.node;return t.type===`Identifier`&&t.typeAnnotation!==void 0&&t.typeAnnotation!==null?!Pm(t.typeAnnotation):n!=null&&Im(n)}function Rm(e,t){let n=E(e.getScope(t),t.name);if(n===void 0)return!1;for(let e of n.defs)if(Lm(e))return!0;return!1}function zm(e,t){if(t.type===`ParenthesizedExpression`)return zm(e,t.expression);if(t.type===`TSAsExpression`||t.type===`TSTypeAssertion`)return!Pm(t.typeAnnotation);if(Im(t))return!0;let n=w(t);return n.type===`Identifier`&&Rm(e,n)}function Bm(e,t){return e.getText(w(t))}function Vm(e){let t=e;for(;t.type===`ParenthesizedExpression`;)t=t.expression;return t}function Hm(e,t){let n=Vm(t);return n.type===`SequenceExpression`?`(${e.getText(n)})`:e.getText(n)}function Um(e,t){if(t.test.type!==`BinaryExpression`)return;let{alternate:n,consequent:r,test:i}=t,{left:a,operator:o,right:s}=i;if(!(Fm(a)&&Fm(s))||!(I(a)&&I(s))||zm(e,a)||zm(e,s))return;let c=Bm(e,a),l=Bm(e,s),u=Bm(e,n),d=Bm(e,r),f=o===`>`||o===`>=`,p=o===`<`||o===`<=`;if(f&&c===u&&l===d||p&&c===d&&l===u)return`min`;if(f&&c===d&&l===u||p&&c===u&&l===d)return`max`}const Wm=t({create(e){let{sourceCode:t}=e;return{ConditionalExpression(n){if(ie(t,n,`math`))return;let r=Um(t,n);if(r===void 0||n.test.type!==`BinaryExpression`)return;let{left:i,right:a}=n.test;if(!(Fm(i)&&Fm(a)))return;let o=Hm(t,i),s=Hm(t,a);e.report({fix(e){return e.replaceText(n,`math.${r}(${o}, ${s})`)},messageId:`preferMathMethod`,node:n})}}},meta:{docs:{description:`Prefer math.min() and math.max() over simple clamp-like ternaries.`,recommended:!0},fixable:`code`,messages:{preferMathMethod:"Use `math.min()` or `math.max()` instead of this ternary comparison."},schema:[],type:`suggestion`}}),Gm=new Set([`ReadonlyRecord`,`Record`]);function Km(e){return e.type===`TSTypeReference`&&e.typeName.type===`Identifier`&&Gm.has(e.typeName.name)}function qm(e){if(e.id.type!==`Identifier`)return;let t=ce(e.id);if(t===void 0)return;let{typeAnnotation:n}=t;if(!Km(n))return;let{typeArguments:r}=n;if(r?.params.length!==2)return;let[i,a]=r.params;if(!(i===void 0||a===void 0)&&a.type===`TSLiteralType`&&!(a.literal.type!==`Literal`||a.literal.value!==!0))return i}function Jm(e){if(e?.type!==`ObjectExpression`)return!1;for(let t of e.properties)if(t.type!==`Property`||t.value.type!==`Literal`||t.value.value!==!0)return!1;return!0}const Ym=t({create(e){let{sourceCode:t}=e;return{VariableDeclarator(n){if(n.id.type!==`Identifier`)return;let r=n.id.name;if(!Jm(n.init))return;let i=qm(n);if(i===void 0)return;let a=t.getText(i);e.report({data:{enumType:a},fix(e){return e.replaceTextRange([n.range[0],n.range[1]],`${r} = Modding.inspect<Record<${a}, true>>()`)},messageId:`preferModdingInspect`,node:n.id})}}},meta:{docs:{description:`Prefer Modding.inspect over manually enumerating every enum member in a Record<Enum, true>.`,recommended:!0},fixable:`code`,messages:{preferModdingInspect:`Replace manual {{enumType}} enumeration with Modding.inspect<Record<{{enumType}}, true>>().`},schema:[],type:`suggestion`}}),Xm=/^[A-Z][A-Z0-9_]*$/u;function Zm(e){let{type:t}=e;if(t===`module`||t===`global`)return!0;if(e.upper?.type===`global`){let{block:t}=e.upper;if(t.type===`Program`&&t.sourceType===`script`)return!0}return!1}const Qm=t({create(e){let t=!1;return{VariableDeclaration(e){t=e.kind===`const`},"VariableDeclaration:exit"(){t=!1},VariableDeclarator(n){let{id:r}=n;if(!(r.type!==`Identifier`||!Xm.test(r.name))){if(!t){e.report({messageId:`mustUseConst`,node:n});return}Zm(e.sourceCode.getScope(n))||e.report({messageId:`mustBeModuleScope`,node:n})}}}},meta:{docs:{description:"Prefer that screaming snake case variables always be defined using `const`, and always appear at module scope."},messages:{mustBeModuleScope:`You must place screaming snake case at module scope. If this is not meant to be a module-scoped variable, use camelcase instead.`,mustUseConst:"You must use `const` when defining screaming snake case variables. If this is not a constant, use camelcase instead."},schema:[],type:`suggestion`}}),$m=new Set([`end`,`loc`,`parent`,`range`,`start`]),eh=new Set([`.jsx`,`.tsx`]),th=new Set([`PaddingBottom`,`PaddingLeft`,`PaddingRight`,`PaddingTop`]),nh={componentName:`DirectionalPadding`,fileNames:[`directional-padding`],markers:[`horizontal`,`vertical`]},rh={componentName:`EqualPadding`,fileNames:[`equal-padding`],markers:[`padding`]};function ih(e,t){return Object.is(e,t)?!0:Array.isArray(e)?Array.isArray(t)&&ah(e,t):Array.isArray(t)||typeof e!=`object`||typeof t!=`object`||e===null||t===null||!(x(e)&&x(t))?!1:oh(e,t)}function ah(e,t){if(e.length!==t.length)return!1;let n=0;for(let r of e)if(!ih(r,t[n++]))return!1;return!0}function oh(e,t){let n=Object.entries(e).filter(([e])=>!$m.has(e)),r=Object.entries(t).filter(([e])=>!$m.has(e));if(n.length!==r.length)return!1;for(let[e,r]of n)if(!(e in t)||!ih(r,t[e]))return!1;return!0}function sh(e){for(let t of e.children)if(!(t.type===`JSXText`&&t.value.trim()===``)&&!(t.type===`JSXExpressionContainer`&&t.expression.type===`JSXEmptyExpression`))return!0;return!1}function ch({value:e}){if(e!==null){if(e.type===`JSXExpressionContainer`)switch(e.expression.type){case`JSXElement`:case`JSXEmptyExpression`:case`JSXFragment`:return;default:return w(e.expression)}return e.type===`Literal`?e:void 0}}function lh(e){let t=new Map;for(let n of e.attributes){if(n.type===`JSXSpreadAttribute`||n.name.type!==`JSXIdentifier`)return;let e=n.name.name;if(!th.has(e)||t.has(e)||n.value===null)return;t.set(e,n)}let n=t.get(`PaddingBottom`),r=t.get(`PaddingLeft`),i=t.get(`PaddingRight`),a=t.get(`PaddingTop`);if(!(n===void 0||r===void 0||i===void 0||a===void 0))return{paddingBottom:n,paddingLeft:r,paddingRight:i,paddingTop:a}}function uh({value:e},t){if(e!==null)switch(e.type){case`JSXExpressionContainer`:case`Literal`:return t.getText(e);default:return}}function dh(e,t,n,r){let i=uh(n.paddingTop,r);if(i===void 0)return;if(t===`preferEqualPadding`)return`<${e} padding=${i} />`;let a=uh(n.paddingLeft,r);if(a!==void 0)return`<${e} horizontal=${i} vertical=${a} />`}function fh(e){let t=ch(e.paddingBottom),n=ch(e.paddingLeft),r=ch(e.paddingRight),i=ch(e.paddingTop);if(t===void 0||n===void 0||r===void 0||i===void 0)return;if(ih(i,t)&&ih(i,n)&&ih(i,r))return`preferEqualPadding`;let a=ih(i,t),o=ih(n,r);return a&&o?`preferDirectionalPadding`:void 0}function ph(e){return e.type===`JSXIdentifier`}const mh=t({create(e){let{filename:t}=e,n=t===``?{found:!1}:fp(t,nh),r=t===``?{found:!1}:fp(t,rh),i=new Set,a=new Set;return{ImportDeclaration(e){let n=up(e,t,nh),r=up(e,t,rh);dp(e,n,nh.componentName,i),dp(e,r,rh.componentName,a)},JSXElement(s){if(sh(s))return;let{openingElement:c}=s;if(!ph(c.name)||c.name.name!==`uipadding`)return;let l=lh(c);if(l===void 0)return;let u=fh(l);if(u===void 0)return;let d=u===`preferEqualPadding`?a:i,f=u===`preferEqualPadding`?r:n;if(d.size===0&&!f.found)return;let p=eh.has(o(t))&&d.size===1,[m]=[...d],h=p&&m!==void 0?dh(m,u,l,e.sourceCode):void 0;if(h!==void 0){e.report({fix(e){return e.replaceText(s,h)},messageId:u,node:s});return}e.report({messageId:u,node:s})}}},meta:{docs:{description:`Prefer local EqualPadding and DirectionalPadding components over matching <uipadding /> declarations.`},fixable:`code`,messages:{preferDirectionalPadding:"Use the local `DirectionalPadding` component when horizontal and vertical padding already match.",preferEqualPadding:"Use the local `EqualPadding` component when all four padding values already match."},schema:[],type:`suggestion`}}),hh=/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/gu,gh=/^[^A-Za-z0-9]+|[^A-Za-z0-9]+$/gu,_h=/(?<first>[a-z0-9])(?<second>[A-Z])/gu,vh=/[_\-\s]+/gu;function yh(e){return e.replaceAll(gh,``).replaceAll(_h,`$<first> $<second>`).replaceAll(vh,` `).match(hh)??[]}function bh(e){let t=yh(e),n=``;for(let e of t)e.length!==0&&(n+=`${e.slice(0,1).toUpperCase()}${e.slice(1).toLowerCase()}`);return n}const xh=/^\d/u;function Sh(e){if(e.id.type===`Identifier`)return e.id.name;if(!(e.id.type!==`Literal`||!y(e.id.value)))return xh.test(e.id.value)?void 0:e.id.value}const Ch=t({createOnce(e){return{TSEnumDeclaration(t){let n=t.id.name;bh(n)!==n&&e.report({data:{identifier:n},messageId:`notPascalCase`,node:t.id})},TSEnumMember(t){let n=Sh(t);n===void 0||bh(n)===n||e.report({data:{identifier:n},messageId:`notPascalCase`,node:t.id})}}},meta:{docs:{description:`Enforce Pascal case when naming enums.`,recommended:!0},messages:{notPascalCase:`Enum '{{ identifier }}' uses non-standard casing. TypeScript convention requires PascalCase for enum names and members to distinguish them from variables (camelCase) and constants (UPPER_CASE). Rename to PascalCase: capitalize first letter of each word, no underscores.`},schema:[],type:`suggestion`}});function wh(e,t){return We(e)&&e.value===t}function Th(e){if(e===`ColorSequence`)return`ColorSequenceKeypoint`;if(e===`NumberSequence`)return`NumberSequenceKeypoint`}function Eh(e,t,n){if(e.type!==`NewExpression`||!Ie(e,t)||e.arguments.length!==2)return;let[r,i]=e.arguments;if(!(r===void 0||r.type===`SpreadElement`)&&!(i===void 0||i.type===`SpreadElement`))return wh(r,n)?i:void 0}function Dh(e,t,n){if(t.arguments.length!==2)return;let[r,i]=t.arguments;if(r===void 0||r.type===`SpreadElement`||i===void 0||i.type===`SpreadElement`)return;let a=e.sourceCode.getText(r);if(a===e.sourceCode.getText(i))return{messageId:`preferSingleOverload`,replacement:`new ${n}(${a})`}}function Oh(e,t,n,r){if(t.arguments.length!==1)return;let[i]=t.arguments;if(i===void 0||i.type===`SpreadElement`||i.type!==`ArrayExpression`||i.elements.length!==2)return;let[a,o]=i.elements;if(a===void 0||o===void 0||a===null||o===null||a.type===`SpreadElement`||o.type===`SpreadElement`)return;let s=Eh(a,r,0),c=Eh(o,r,1);if(s===void 0||c===void 0)return;let l=e.sourceCode.getText(s),u=e.sourceCode.getText(c);return{messageId:l===u?`preferSingleOverload`:`preferTwoPointOverload`,replacement:l===u?`new ${n}(${l})`:`new ${n}(${l}, ${u})`}}const kh=t({createOnce(e){return{NewExpression(t){if(t.callee.type!==`Identifier`)return;let n=t.callee.name,r=Th(n);if(r===void 0)return;let i=Dh(e,t,n)??Oh(e,t,n,r);i!==void 0&&e.report({fix:e=>e.replaceText(t,i.replacement),messageId:i.messageId,node:t})}}},meta:{docs:{description:`Prefer direct ColorSequence and NumberSequence overloads over two-keypoint arrays.`,recommended:!0},fixable:`code`,messages:{preferSingleOverload:`Use the single-value sequence overload instead of two identical keypoints.`,preferTwoPointOverload:`Use the two-value sequence overload instead of constructing a two-keypoint array.`},schema:[],type:`suggestion`}});function Ah(e){return e.length===2}function jh(e){return e.type===`MemberExpression`&&!e.computed}function Mh(e,t){if(e.type!==`CallExpression`)return!1;let{callee:n}=e;if(!jh(n)||n.property.name!==t||!Ah(e.arguments))return!1;let[r,i]=e.arguments;return r.type!==`SpreadElement`&&i.type!==`SpreadElement`}function Nh(e,t){if(e.declarations.length!==1)return;let[n]=e.declarations;if(n===void 0)return;let{id:r,init:i}=n;if(r.type!==`Identifier`||i===null||!Mh(i,t))return;let{callee:a}=i;if(!jh(a))return;let[o,s]=i.arguments;if(!(o===void 0||s===void 0||o.type===`SpreadElement`||s.type===`SpreadElement`))return{componentNode:s,entityNode:o,node:i,queryType:t,variableDeclaration:e,variableDeclarator:n,variableName:r.name,worldNode:a.object}}const Ph=new Set([`ConditionalExpression`,`DoWhileStatement`,`ForStatement`,`IfStatement`,`WhileStatement`]);function Fh(e){return x(e)&&`parent`in e}function Ih(e){return x(e)&&y(e.type)?e.type:void 0}function Lh(e){return x(e)&&y(e.operator)?e.operator:void 0}function Rh(e){return Ih(e)===`LogicalExpression`&&Lh(e)===`&&`}function zh(e){return x(e)&&e.type===`Identifier`&&y(e.name)}function Bh(e){let{parent:t}=e;if(Rh(t))return!0;let n=Ih(t);if(n===void 0||!Ph.has(n))return!1;let r=e;for(;r!==void 0&&r!==t&&Fh(r);){let e=r.parent;if(Rh(e))return!0;r=e}return!1}function Vh(e){if(e.isWrite())return!1;let{identifier:t}=e;return zh(t)?Bh(t):!1}function Hh(e,t,n){return E(n.getScope(t),e)?.references.some(Vh)??!1}function Uh(e,t){return e.every(e=>Hh(e.variableName,e.variableDeclaration,t))}const Wh=/^[\s;]*$/u;function Gh(e,t,n){if(e===void 0)return!0;if(n.getText(e.worldNode)!==n.getText(t.worldNode)||n.getText(e.entityNode)!==n.getText(t.entityNode)||e.queryType!==t.queryType)return!1;let[,r]=e.variableDeclaration.range,[i]=t.variableDeclaration.range,a=n.text.slice(r,i);return Wh.test(a)}function Kh(e,t){if(e.length<2)return;let[n]=e;if(n===void 0)return;let{sourceCode:r}=t,i=r.getText(n.worldNode),a=r.getText(n.entityNode),o=e.map(e=>e.variableName),s=e.map(e=>r.getText(e.componentNode));qh(e,t,`const ${o.length===1?o[0]:`[${o.join(`, `)}]`} = ${i}.get(${a}, ${s.join(`, `)});`,`preferSingleGet`,n)}function qh(e,t,n,r,i){let a=e.at(0)?.variableDeclaration,o=e.at(-1)?.variableDeclaration;a===void 0||o===void 0||t.report({data:{fixedCode:n},fix(e){let[t]=a.range,[,r]=o.range;return e.replaceTextRange([t,r],n)},messageId:r,node:i.node})}function Jh(e,t){if(e.length<2)return;let{sourceCode:n}=t;if(!Uh(e,n))return;let[r]=e;r!==void 0&&qh(e,t,`const hasAll = ${n.getText(r.worldNode)}.has(${n.getText(r.entityNode)}, ${e.map(e=>n.getText(e.componentNode)).join(`, `)});`,`preferSingleHas`,r)}const Yh=t({create(e){let{sourceCode:t}=e,n=[],r=[];function i(){n.length>=2&&Kh(n,e),n=[]}function a(){r.length>=2&&Jh(r,e),r=[]}function o(){i(),a()}return{":statement:not(VariableDeclaration[kind='const'])":o,"Program:exit":o,"VariableDeclaration[kind='const']"(e){let s=Nh(e,`get`);if(s!==void 0){let e=n.at(-1);e!==void 0&&!Gh(e,s,t)&&i(),n.push(s),a();return}let c=Nh(e,`has`);if(c!==void 0){let e=r.at(-1);e!==void 0&&!Gh(e,c,t)&&a(),r.push(c),i();return}o()}}},meta:{docs:{description:`Enforce combining multiple world.get() or world.has() calls into a single call for better Jecs performance.`},fixable:`code`,messages:{preferSingleGet:`Multiple world.get() calls on the same entity should be combined into a single call for better performance. Suggested fix: {{fixedCode}}`,preferSingleHas:`Multiple world.has() calls on the same entity should be combined into a single call for better performance. Suggested fix: {{fixedCode}}`},schema:[],type:`suggestion`}}),Xh=new Set([`alumni`,`axes`,`cacti`,`children`,`criteria`,`data`,`dice`,`feet`,`fungi`,`geese`,`indices`,`matrices`,`media`,`men`,`mice`,`octopi`,`people`,`phenomena`,`teeth`,`vertices`,`women`]),Zh=new Set([`alias`,`analysis`,`axis`,`basis`,`business`,`class`,`crisis`,`glass`,`news`,`series`,`species`,`status`,`thesis`]),Qh=new Set([`args`,`components`,`controllers`,`dto`,`dtos`,`entries`,`enums`,`hooks`,`items`,`keys`,`models`,`options`,`orders`,`pages`,`parameters`,`params`,`props`,`repositories`,`services`,`settings`,`types`,`values`,`vo`,`vos`]),$h=/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/gu,eg=/^[A-Z]{2,}[sS]?$/u;function tg(e){let t=[],n=0;for(let r of e.split(`_`)){let e=r.match($h);if(e!==null)for(let r of e)t[n++]=r}return t}const ng=/^\d+$/u;function rg(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(!(n===void 0||ng.test(n)))return{lowercased:n.toLowerCase(),original:n}}}const ig=/[sS]$/u,ag=/(?:ches|shes|xes|zes)$/u;function og(e,t){return Xh.has(e)||Qh.has(e)?!0:Zh.has(e)?!1:eg.test(t)&&ig.test(t)||e.endsWith(`ies`)||e.endsWith(`ves`)||ag.test(e)||e.endsWith(`s`)&&!e.endsWith(`ss`)&&!e.endsWith(`us`)&&!e.endsWith(`is`)}function sg(e){if(eg.test(e)&&ig.test(e))return!0;let t=rg(tg(e));return t!==void 0&&og(t.lowercased,t.original)}const cg=t({createOnce(e){return{TSEnumDeclaration({id:t}){let{name:n}=t;sg(n)&&e.report({data:{name:n},messageId:`notSingular`,node:t})}}},meta:{docs:{description:`Prefer singular naming for enums.`,recommended:!0},messages:{notSingular:`Enum name "{{name}}" should be singular.`},schema:[],type:`suggestion`}});function lg(e){return e.type===`JSXElement`||e.type===`JSXFragment`}function ug(e,t,n){return e.type===`Super`||t.type===`Super`?e.type===`Super`&&t.type===`Super`:Z(e,t,n)}function dg(e,t,n){return e.type===`SpreadElement`||t.type===`SpreadElement`?e.type!==`SpreadElement`||t.type!==`SpreadElement`?!1:Z(e.argument,t.argument,n):Z(e,t,n)}function fg(e,t,n){return e.type===`PrivateIdentifier`||t.type===`PrivateIdentifier`?e.type===`PrivateIdentifier`&&t.type===`PrivateIdentifier`&&e.name===t.name:Z(e,t,n)}function Z(e,t,n){let r=w(e),i=w(t);if(r.type!==i.type)return!1;switch(r.type){case`BinaryExpression`:return i.type===`BinaryExpression`&&pg(r,i,n);case`CallExpression`:return i.type===`CallExpression`&&mg(r,i,n);case`Identifier`:return i.type===`Identifier`&&r.name===i.name;case`Literal`:return i.type===`Literal`&&r.value===i.value;case`LogicalExpression`:return i.type===`LogicalExpression`&&hg(r,i,n);case`MemberExpression`:return i.type===`MemberExpression`&&gg(r,i,n);case`ThisExpression`:return i.type===`ThisExpression`;case`UnaryExpression`:return i.type===`UnaryExpression`&&r.operator===i.operator&&Z(r.argument,i.argument,n);default:return n.getText(r)===n.getText(i)}}function pg(e,t,n){return e.operator===t.operator&&fg(e.left,t.left,n)&&fg(e.right,t.right,n)}function mg(e,t,n){if(e.optional!==t.optional||!ug(e.callee,t.callee,n)||e.arguments.length!==t.arguments.length)return!1;for(let r=0;r<e.arguments.length;r+=1){let i=e.arguments[r],a=t.arguments[r];if(i===void 0||a===void 0||!dg(i,a,n))return!1}return!0}function hg(e,t,n){return e.operator===t.operator&&Z(e.left,t.left,n)&&Z(e.right,t.right,n)}function gg(e,t,n){return e.computed!==t.computed||e.optional!==t.optional||!ug(e.object,t.object,n)?!1:e.computed?fg(e.property,t.property,n):_g(e.property,t.property)}function _g(e,t){return(e.type===`Identifier`&&t.type===`Identifier`||e.type===`PrivateIdentifier`&&t.type===`PrivateIdentifier`)&&e.name===t.name}function vg(e){let t=w(e);if(!(t.type!==`UnaryExpression`||t.operator!==`!`))return w(t.argument)}function yg(e){let t=w(e);if(t.type===`BinaryExpression`&&!(t.operator!==`===`&&t.operator!==`!==`))return{left:t.left,operator:t.operator,right:t.right}}function bg(e){let t=w(e);return t.type===`Identifier`||t.type===`ThisExpression`||t.type===`Literal`}function xg(e){return rt(e)&&bg(e)}function Sg(e,t,n){let r=vg(e);if(r&&Z(r,t,n))return{isFixSafe:bg(r)};let i=vg(t);if(i&&Z(i,e,n))return{isFixSafe:bg(i)};let a=yg(e),o=yg(t);if(!(a&&o)||!(a.operator===`===`&&o.operator===`!==`||a.operator===`!==`&&o.operator===`===`))return;let s=fg(a.left,o.left,n)&&fg(a.right,o.right,n),c=fg(a.left,o.right,n)&&fg(a.right,o.left,n);if(s||c)return{isFixSafe:xg(a.left)&&xg(a.right)&&xg(o.left)&&xg(o.right)}}function Cg(e){return e.type===`JSXText`&&e.value.trim()===``}function wg(e){if(e.type===`JSXExpressionContainer`&&e.expression.type!==`JSXEmptyExpression`&&e.expression.type===`LogicalExpression`&&e.expression.operator===`&&`&&lg(e.expression.right))return{condition:e.expression.left,logical:e.expression,node:e,renderBranch:e.expression.right}}const Tg=t({create(e){let{sourceCode:t}=e;function n(e,t){let n=t;for(;n<e.length;){let t=e[n];if(t===void 0||!Cg(t))break;n+=1}let r=e[n];return r===void 0?void 0:wg(r)}function r(n,r){let i=Sg(n.condition,r.condition,t);if(i!==void 0){if(i.isFixSafe){e.report({fix(e){let i=`{${t.getText(n.condition)} ? ${t.getText(n.renderBranch)} : ${t.getText(r.renderBranch)}}`;return e.replaceTextRange([n.node.range[0],r.node.range[1]],i)},messageId:`preferTernaryConditionalRendering`,node:n.logical});return}e.report({messageId:`preferTernaryConditionalRendering`,node:n.logical})}}function i(e){for(let t=0;t<e.length;t+=1){let i=e[t];if(i===void 0)continue;let a=wg(i);if(a===void 0)continue;let o=n(e,t+1);o!==void 0&&r(a,o)}}return{JSXElement(e){i(e.children)},JSXFragment(e){i(e.children)}}},meta:{docs:{description:`Prefer ternary expressions over complementary JSX && branches.`},fixable:`code`,messages:{preferTernaryConditionalRendering:`Use a single ternary expression instead of complementary JSX && branches.`},schema:[],type:`suggestion`}});function Eg(e){return e.type===`PrivateIdentifier`}function Dg(e){return e===`+`||e===`-`||e===`*`||e===`/`||e===`%`}function Og(e){return e.type===`BinaryExpression`&&Dg(e.operator)&&!Eg(e.left)&&!Eg(e.right)}function kg(e){switch(e.type){case`BinaryExpression`:{if(!Og(e))return;let{left:t,right:n}=e,r=kg(t),i=kg(n);return r===void 0||i===void 0?void 0:`${r} ${e.operator} ${i}`}case`Identifier`:return e.name;case`Literal`:return re(e.value)?String(e.value):void 0;case`UnaryExpression`:{let t=kg(e.argument);return t===void 0||e.operator!==`+`&&e.operator!==`-`?void 0:`${e.operator}${t}`}default:return}}function Ag(e,t,n){switch(e){case`%`:return n===0?void 0:t%n;case`*`:return t*n;case`+`:return t+n;case`-`:return t-n;case`/`:return n===0?void 0:t/n;default:return}}function jg(e){switch(e.type){case`BinaryExpression`:{if(!Og(e))return;let{left:t,right:n}=e,r=jg(t),i=jg(n);return r===void 0||i===void 0?void 0:Ag(e.operator,r,i)}case`Identifier`:return;case`Literal`:return re(e.value)?e.value:void 0;case`UnaryExpression`:{let t=jg(e.argument);return t===void 0?void 0:e.operator===`+`?t:e.operator===`-`?-t:void 0}default:return}}function Mg(e){if(e.length!==4)return;let[t,n,r,i]=e;if(t===void 0||n===void 0||r===void 0||i===void 0||t.type===`SpreadElement`||n.type===`SpreadElement`||r.type===`SpreadElement`||i.type===`SpreadElement`)return;let a=kg(t),o=kg(n),s=kg(r),c=kg(i);if(!(a===void 0||o===void 0||s===void 0||c===void 0))return{offsetXText:o,offsetYText:c,scaleXText:a,scaleYText:s}}const Ng=t({create(e){return{NewExpression(t){if(!Ie(t,`UDim2`))return;let n=Mg(t.arguments);if(n===void 0)return;let[r,i,a,o]=t.arguments;if(r===void 0||i===void 0||a===void 0||o===void 0||r.type===`SpreadElement`||i.type===`SpreadElement`||a.type===`SpreadElement`||o.type===`SpreadElement`)return;let s=jg(r),c=jg(i),l=jg(a),u=jg(o);if(!(s===0&&c===0&&l===0&&u===0)){if(c===0&&u===0){e.report({fix(e){return e.replaceText(t,`UDim2.fromScale(${n.scaleXText}, ${n.scaleYText})`)},messageId:`preferFromScale`,node:t});return}s===0&&l===0&&e.report({fix(e){return e.replaceText(t,`UDim2.fromOffset(${n.offsetXText}, ${n.offsetYText})`)},messageId:`preferFromOffset`,node:t})}}}},meta:{docs:{description:`Prefer UDim2.fromScale() or UDim2.fromOffset() over new UDim2() when all offsets or all scales are zero.`},fixable:`code`,messages:{preferFromOffset:`Use UDim2.fromOffset() instead of new UDim2() when all scales are 0.`,preferFromScale:`Use UDim2.fromScale() instead of new UDim2() when all offsets are 0.`},schema:[],type:`suggestion`}});function Pg(e,t,n){if(t.type!==`BlockStatement`)return;let r=0;for(let e of t.body)if(e.type===`VariableDeclaration`)for(let t of e.declarations)_o(t.init,`useState`)&&(r+=1);r<5||e.report({data:{componentName:n,useStateCount:String(r)},messageId:`excessiveUseState`,node:t})}const Fg=t({create(e){return{FunctionDeclaration(t){t.id===null||!W(t.id.name)||`body`in t&&t.body&&Pg(e,t.body,t.id.name)},VariableDeclarator(t){vo(t)&&t.init&&`body`in t.init&&t.init.body&&`name`in t.id&&Pg(e,t.init.body,t.id.name)}}},meta:{docs:{description:`Suggest using useReducer for related state updates instead of multiple useState calls.`,recommended:!0},messages:{excessiveUseState:`Component "{{componentName}}" has {{useStateCount}} useState calls — consider useReducer for related state`},type:`problem`}}),Ig=`replace`,Lg=`suggestion`,Rg=`A more descriptive name will do too.`,zg={args:`parameters`,char:`character`,dt:`deltaTime`,plr:`player`},Bg=[`char`],Vg={acc:{accumulator:!0},arg:{argument:!0},args:{arguments:!0},arr:{array:!0},attr:{attribute:!0},attrs:{attributes:!0},btn:{button:!0},cb:{callback:!0},char:{character:!0},conf:{config:!0},ctx:{context:!0},cur:{current:!0},curr:{current:!0},db:{database:!0},def:{defer:!0,deferred:!0,define:!0,definition:!0},dest:{destination:!0},dev:{development:!0},dir:{direction:!0,directory:!0},dirs:{directories:!0},dist:{distance:!0},doc:{document:!0},docs:{documentation:!0,documents:!0},dst:{daylightSavingTime:!0,destination:!0,distribution:!0},dt:{dateTime:!0,deltaTime:!0},e:{error:!0,event:!0},el:{element:!0},elem:{element:!0},elems:{elements:!0},env:{environment:!0},envs:{environments:!0},err:{error:!0},ev:{event:!0},evt:{event:!0},ext:{extension:!0},exts:{extensions:!0},fn:{func:!0,function:!0},func:{function:!0},i:{index:!0},idx:{index:!0},impl:{implementation:!0},j:{index:!0},len:{length:!0},lib:{library:!0},mod:{module:!0},msg:{message:!0},num:{number:!0},obj:{object:!0},opts:{options:!0},param:{parameter:!0},params:{parameters:!0},pkg:{package:!0},plr:{player:!0},prev:{previous:!0},prod:{production:!0},prop:{property:!0},props:{properties:!0},rel:{related:!0,relationship:!0,relative:!0},req:{request:!0},res:{resource:!0,response:!0,result:!0},ret:{returnValue:!0},retval:{returnValue:!0},sep:{separator:!0},src:{source:!0},stdDev:{standardDeviation:!0},str:{string:!0},tbl:{table:!0},temp:{temporary:!0},tit:{title:!0},tmp:{temporary:!0},util:{utility:!0},utils:{utilities:!0},val:{value:!0},var:{variable:!0},vars:{variables:!0},ver:{version:!0}},Hg={EmberENV:!0,defaultProps:!0,devDependencies:!0,getDerivedStateFromProps:!0,getInitialProps:!0,getServerSideProps:!0,getStaticProps:!0,iOS:!0,obj:!0,propTypes:!0,setupFilesAfterEnv:!0},Ug=[`i18n`,`l10n`],Wg=/(?=[A-Z])|(?<=[_.-])/u,Gg=new Set(`any.as.boolean.break.case.catch.class.const.constructor.continue.debugger.declare.default.delete.do.else.enum.export.extends.false.finally.for.from.function.get.if.implements.import.in.instanceof.interface.let.module.new.null.number.of.package.private.protected.public.require.return.set.static.string.super.switch.symbol.this.throw.true.try.type.typeof.var.void.while.with.yield`.split(`.`)),Kg=/^[A-Za-z]+$/u;function qg(e){return e>=65&&e<=90||e>=97&&e<=122||e===36||e===95}function Jg(e){return e<192?qg(e):e>=12289&&e<=55295?!0:e<=767?e!==215&&e!==247:e<=8191?e>=880&&e!==894:e<=8591?e>=8204&&e<=8205||e>=8304:e<=12271?e>=11264:e<=64255?e>=63744:e<=65023?e>=64512:e<=65279?e>=65136:e<=65370?e>=65313&&e<=65338||e>=65345:e>=65382&&e<=65500}function Yg(e){return!!(Jg(e)||e>=48&&e<=57||e===8204||e===8205||e>=768&&e<=865||e>=8240&&e<=8266)}function Xg(e){if(e.length===0||Gg.has(e))return!1;let t=e.codePointAt(0);if(t===void 0||!Jg(t))return!1;let n=t>65535?2:1;for(;n<e.length;){let t=e.codePointAt(n);if(t===void 0||!Yg(t))return!1;n+=t>65535?2:1}return!0}function Zg(e,t,n){return e?t:n}const Qg=/(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/u,$g=/(?<=[a-zA-Z])(?=\d)|(?<=\d)(?=[a-zA-Z])/u,e_=/[a-zA-Z]+|\d+|[^a-zA-Z\d]+/gu,t_=/[.+^${}()|[\]\\]/gu,n_=/^\/(?<first>.+)\/(?<second>[dgimsuvy]*)$/u,r_=new WeakMap;function i_(e){return e===e.toUpperCase()}function a_(e){return i_(e.charAt(0))}function o_(e){return e.charAt(0).toUpperCase()+e.slice(1)}function s_(e){return e.charAt(0).toLowerCase()+e.slice(1)}function c_(e){return e.includes(`u`)||e.includes(`v`)?e:`${e}u`}function l_(e){let t=e.match(e_);if(t===null)return[e];let n=[],r=0;for(let e of t){if(!Kg.test(e)){n[r++]=e;continue}r=u_(e,n,r)}return n}function u_(e,t,n){let r=n;for(let n of e.split($g))if(n.length!==0)for(let e of n.split(Qg))e.length>0&&(t[r++]=e);return r}const d_=/\$\d+/gu;function f_(e){let t=e.match(d_);if(t===null)return 0;let n=0;for(let e of t){let t=Math.trunc(Number(e.slice(1)));t>n&&(n=t)}return n}function p_(e){let t=f_(e);if(t===0)return[];let n=Array.from({length:t});for(let e=1;e<=t;e+=1)n[e-1]=RegExp(`\\$${e}`,`gu`);return n}function m_(e){let t=[],n=[],r=0;for(let[i,a]of e)a&&(t[r]=s_(i),n[r]=o_(i),r+=1);return{lowerFirst:t.toSorted(),upperFirst:n.toSorted()}}function h_(e,t){if(e.startsWith(`/`)){let n=n_.exec(e);if(n?.groups!==void 0)return{matcher:{original:e,pattern:RegExp(`^${n.groups.first}$`,c_(n.groups.second??``)),replacement:t,replacementPatterns:p_(t)},type:`pattern`}}if(e.includes(`*`)||e.includes(`?`)){let n=e.replaceAll(t_,String.raw`\$&`).replaceAll(`*`,`(.*)`).replaceAll(`?`,`(.)`),r=0,i=t.replaceAll(`*`,()=>`$${++r}`);return{matcher:{original:e,pattern:RegExp(`^${n}$`,`u`),replacement:i,replacementPatterns:p_(i)},type:`pattern`}}return{original:e,replacement:t,type:`exact`}}function g_(e,t){let n=t.exactMatchers.get(e);if(n!==void 0)return{matchedWord:e,replacement:n,shorthand:e};for(let n of t.matchers){let t=e.match(n.pattern);if(t===null)continue;let r=n.replacement,i=1;for(let e of n.replacementPatterns)r=r.replaceAll(e,t[i]??``),i+=1;return{matchedWord:e,replacement:r,shorthand:n.original}}}function __(e,t){if(t.ignoreExact.has(e))return!0;for(let n of t.ignoreMatchers)if(n.pattern.test(e))return!0;return!1}function v_(e,t){return e===`internal`||typeof e==`boolean`?e:t}function y_(e){if(!x(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r==`boolean`&&(t[n]=r);return t}function b_(e,t){return typeof e==`boolean`?e:t}function x_(e){let t=x(e)?e:void 0,n=y_(t?.allowList),r=Zg(b_(t?.extendDefaultAllowList,!0),n===void 0?Hg:{...Hg,...n},n??{});return new Map(Object.entries(r))}function S_(e){if(!x(e))return{};let t={};for(let[n,r]of Object.entries(e)){if(r===!1){t[n]=!1;continue}if(!x(r))continue;let e={};for(let[t,n]of Object.entries(r))typeof n==`boolean`&&(e[t]=n);t[n]=e}return t}function C_(e){let t=x(e)?e:void 0,n=b_(t?.extendDefaultReplacements,!0),r=S_(t?.replacements),i=new Set([...Object.keys(Vg),...Object.keys(r)]),a=[];for(let e of i){let t=r[e],i=n?Vg[e]??{}:{},o=t===!1?{}:Zg(t===void 0,i,{...i,...t}),s=new Map(Object.entries(o));r_.set(s,m_(s)),a.push([e,s])}return new Map(a)}function w_(e){let t=x(e)?e:void 0,n=[];for(let e of Ug)n.push(e);if(Array.isArray(t?.ignore))for(let e of t.ignore)(y(e)||e instanceof RegExp)&&n.push(e);return n.map(e=>e instanceof RegExp?e:new RegExp(e,`u`))}function T_(e){let t=x(e)?e:void 0,n=new Set(Bg);if(!S(t?.allowPropertyAccess))return n;for(let e of t.allowPropertyAccess)n.add(e);return n}function E_(e){let t=x(e)?e:void 0,n=new Map,r=new Set,i=[],a=[],o=C(t?.shorthands)?t.shorthands:{},s={...zg,...o};for(let[e,t]of Object.entries(s)){let r=h_(e,t);r.type===`exact`?n.set(r.original,r.replacement):a.push(r.matcher)}if(S(t?.ignoreShorthands))for(let e of t.ignoreShorthands){let t=h_(e,``);t.type===`exact`?r.add(t.original):i.push(t.matcher)}return{exactMatchers:n,ignoreExact:r,ignoreMatchers:i,matchers:a}}function D_(e){let t=x(e)?e:void 0;return{allowList:x_(t),allowPropertyAccess:T_(t),checkDefaultAndNamespaceImports:v_(t?.checkDefaultAndNamespaceImports,`internal`),checkFilenames:b_(t?.checkFilenames,!0),checkProperties:b_(t?.checkProperties,!1),checkShorthandImports:v_(t?.checkShorthandImports,`internal`),checkShorthandProperties:b_(t?.checkShorthandProperties,!0),checkVariables:b_(t?.checkVariables,!0),ignore:w_(t),replacements:C_(t),shorthandConfiguration:E_(t)}}function O_(e,t){if(i_(e)||t.allowList.get(e)===!0)return[];let n=t.replacements.get(s_(e))??t.replacements.get(e)??t.replacements.get(o_(e));if(n===void 0)return[];let r=r_.get(n);return r===void 0?[]:a_(e)?r.upperFirst:r.lowerFirst}function k_(e,t){if(e.length===0)return;let n=l_(e),r=[],i=!1;for(let e of n){let n=g_(e,t);n!==void 0&&(i=!0,r.push(n))}if(!i)return;let a=``,o=0;for(let e of n){let t=r[o];if(t?.matchedWord===e){a+=t.replacement,o+=1;continue}a+=e}return{matches:r,replaced:a}}function A_(e,t){if(__(e,t))return!0;let n=l_(e),r=!1;for(let e of n){let n=g_(e,t);if(n!==void 0&&(r=!0,!__(n.matchedWord,t)))return!1}return r}function j_(e,t,n){if(n.has(e))return!0;for(let e of t.matches)if(!n.has(e.matchedWord))return!1;return t.matches.length>0}function M_(e,t,n=3){if(t.allowList.get(e)===!0||t.ignore.some(t=>t.test(e)))return{total:0};let r=k_(e,t.shorthandConfiguration);if(r!==void 0)return A_(e,t.shorthandConfiguration)?{total:0}:{samples:[r.replaced],total:1};if(i_(e))return{total:0};let i=O_(e,t);if(i.length>0)return{samples:i.slice(0,n),total:i.length};let a=e.split(Wg).filter(Boolean),o=!1,s=[],c=0;for(let e of a){let n=O_(e,t);if(n.length>0){o=!0,s[c++]=n;continue}s[c++]=[e]}if(!o)return{total:0};let l=s.reduce((e,t)=>e*t.length,1);return{samples:N_(s,l,n).map(e=>e.join(``)),total:l}}function N_(e,t,n){let r=Math.min(t,n),i=Array.from({length:r},(t,n)=>{let r=n,i=[];for(let t=e.length-1;t>=0;--t){let n=e[t]??[],a=r%n.length;r=(r-a)/n.length;let o=n[a];o!==void 0&&i.unshift(o)}return i});for(let e of i)for(let t=e.length-1;t>0;--t){let n=e[t]??``;Kg.test(n)&&e[t-1]?.endsWith(n)===!0&&e.splice(t,1)}return i}function P_(e,t){let n=t.replacements.get(e);if(n===void 0)return!1;let r=r_.get(n);return r!==void 0&&r.lowerFirst.length>0}function F_(e,t,n){let{samples:r=[],total:i}=t;if(i===1)return{data:{discouragedName:e,nameTypeText:n,replacement:r[0]??``},messageId:Ig};let a=r.map(e=>`\`${e}\``).join(`, `),o=i-r.length;return o>0&&(a+=`, ... (${o>99?`99+`:o} more omitted)`),{data:{discouragedName:e,nameTypeText:n,replacementsText:a},messageId:Lg}}function I_(e){let t=[e],n=1;for(let r of e.childScopes){let e=I_(r);for(let r of e)t[n++]=r}return t}function L_(e,t){return!t.some(t=>E(t,e)!==void 0)}function R_(e,t,n){let r=e;if(!(!Xg(r)&&(r=`${r}_`,!Xg(r)))){for(;!(L_(r,t)&&n(r,t));)r=`${r}_`;return r}}function z_(e){let t=new Set;for(let n of e.identifiers)t.add(n);for(let{identifier:n}of e.references)t.add(n);return[...t]}function B_(e,t){return e.range[0]===t.range[0]&&e.range[1]===t.range[1]}function V_(e){let{parent:t}=e;return!ye(t)||t.local!==e?!1:B_(t.local,t.imported)}function H_(e){let{parent:t}=e;return!be(t)||t.local!==e?!1:B_(t.local,t.exported)}function U_(e){if(!A(e))return!1;let{parent:t}=e;return xe(t)&&t.shorthand&&t.value===e}function W_(e){if(!A(e))return!1;let{parent:t}=e;if(!$e(t)||t.left!==e)return!1;let n=t.parent;return xe(n)?n.shorthand:!1}function G_(e){if(!A(e))return!1;let{parent:t}=e;if(Ae(t)&&t.local===e||je(t)&&t.local===e)return!0;if(ye(t)&&t.local===e){let{imported:e}=t;if(j(e)&&e.name==="default")return!0}return k(t)&&t.id===e&&t.init!==null&&tt(t.init)}function K_(e){if(!A(e))return!1;let{parent:t}=e;if(k(t)&&t.id===e){let e=t.parent;return Me(e)?Ne(e.parent):!1}return Pe(t)&&t.id===e||Le(t)&&t.id===e||Re(t)&&t.id===e?Ne(t.parent):!1}function q_(e){return z_(e).every(e=>!(K_(e)||me(e)))}function J_(e,t,n){if(A(e))return U_(e)||W_(e)?n.replaceText(e,`${e.name}: ${t}`):V_(e)?n.replaceText(e,`${e.name} as ${t}`):H_(e)?n.replaceText(e,`${t} as ${e.name}`):n.replaceText(e,t)}function Y_(e,t,n){let r=[],i=0;for(let a of z_(e)){let e=J_(a,t,n);e!==void 0&&(r[i++]=e)}return r}function X_(e){if(!A(e))return!1;let{parent:t}=e;if(M(t)&&t.property===e&&!t.computed){let e=t.parent;if(Se(e)&&e.left===t)return!0}return xe(t)&&t.key===e&&!t.computed&&!t.shorthand&&(qe(t.parent)||Je(t.parent))||ze(t)&&t.key===e&&!t.computed||be(t)&&t.exported===e&&t.local!==e?!0:(Oe(t)||ke(t))&&t.key===e&&!t.computed}function Z_(e){if(!A(e))return!1;let{parent:t}=e;return xe(t)&&t.key===e&&!t.computed&&!t.shorthand&&(qe(t.parent)||Je(t.parent))}function Q_(e){if(e.type===`ImportBinding`){let{parent:t}=e;if(t!==null&&ge(t)&&_e(t.source))return t.source.value}if(e.type===`Variable`){let{node:t}=e;if(k(t)&&t.init!==null&&tt(t.init)){let[e]=t.init.arguments;if(e!==void 0&&_e(e))return e.value}}}function $_(e){let t=Q_(e);return t!==void 0&&!t.includes(`node_modules`)&&(t.startsWith(`.`)||t.startsWith(`/`))}function ev(e,t){return e===!1?!1:e!==`internal`||$_(t)}function tv(e){return e.defs.length===1&&e.defs[0]?.type===`ClassName`}function nv(e){return function(t,n){return n.every(n=>{let r=e.get(n);return r===void 0||!r.has(t)})}}function rv(e){let{parent:t}=e;return M(t)&&t.property===e&&!t.computed||Ue(t)&&t.right===e}function iv(e,t){let{parent:n}=e,r;return M(n)&&n.property===e&&!n.computed?r=n.object:Ue(n)&&n.right===e&&(r=n.left),r===void 0||!A(r)?!1:E(t.getScope(e),r.name)?.defs[0]?.type===`ImportBinding`}function av(e,t,n,r){r({...F_(e.name,{samples:[t],total:1},n?`property`:`variable`),node:e})}function ov(e,t,n){return G_(t)&&!ev(n.checkDefaultAndNamespaceImports,e)||V_(t)&&!ev(n.checkShorthandImports,e)?!0:!n.checkShorthandProperties&&U_(t)}function sv(e){if(e.name!==`plr`)return;let[t]=e.defs;if(t?.type!==`Variable`||!k(t.node)||t.node.init===null)return;let{init:n}=t.node;if(M(n)&&!n.computed&&j(n.object)&&n.object.name===`Players`&&j(n.property)&&n.property.name===`LocalPlayer`)return`localPlayer`}function cv(e,t,n,r){let i=[],a=0,o=0;for(let s of e){let e=R_(s,t,n);if(e!==void 0){if(e!==s&&P_(s,r)){o+=1;continue}e.length>0&&(i[a++]=e)}}return{droppedDiscouraged:o,safeSamples:i}}function lv(e,t,n){let r=e.type===`Variable`&&k(e.node)&&e.node.init===null,i=e.type===`Parameter`&&t.scope.type===`function`&&t.scope.block.type===`ArrowFunctionExpression`,a=r||i;return(e,t)=>!(!n(e,t)||a&&e===`arguments`)}function uv(e,t,n,r,i,a,o){for(let e of i)a.has(e)||a.set(e,new Set),a.get(e)?.add(r);e({...t,fix(e){return Y_(n,r,e)},node:o})}function dv(e,t,n,r,i){let[a]=e.defs;if(a===void 0)return;let o=a.name;if(!j(o)||ov(a,o,t))return;let s=lv(a,e,r),c=sv(e),l=c===void 0?M_(e.name,t):{samples:[c],total:1};if(l.total===0||!l.samples)return;let{references:u}=e,d=[...u.map(e=>e.from),e.scope],{droppedDiscouraged:f,safeSamples:p}=cv(l.samples,d,s,t),m=p.length>0?p:l.samples,h=b(l.samples.length)&&l.samples.length===l.total?Math.max(0,l.total-f):l.total,g=e.name===`fn`&&h>1?m.map(e=>e===`function_`?`function`:e):m,_=F_(o.name,{samples:g,total:h},`variable`);if(h===1&&p.length===1&&q_(e)){let[t]=p;if(t!==void 0){uv(i,_,e,t,d,n,o);return}}i({..._,node:o})}function fv(e,t){if(!tv(e)){t(e);return}if(e.scope.type===`class`){let[n]=e.defs;if(n===void 0){t(e);return}let r=n.name;if(!j(r)){t(e);return}t(e)}}function pv(e,t){for(let n of I_(e))for(let e of n.variables)fv(e,t)}function mv(e,t,n,r){let i=X_(e),a=rv(e);a&&iv(e,r)||hv(e,i,a,t,n)||t.checkProperties&&i&&gv(e,t,n)}function hv(e,t,n,r,i){let a=k_(e.name,r.shorthandConfiguration);return a===void 0||!(t||n)?!1:(A_(e.name,r.shorthandConfiguration)||!r.checkShorthandProperties||n&&j_(e.name,a,r.allowPropertyAccess)||av(e,a.replaced,!0,i),!0)}function gv(e,t,n){let r=M_(e.name,t);if(r.total===0)return;let i=F_(e.name,r,`property`),a=_v(e,r.samples);if(a!==void 0){n({...i,fix(t){return t.replaceText(e,a)},node:e});return}n({...i,node:e})}function _v(e,t){if(t?.length!==1||!Z_(e))return;let[n]=t,{parent:r}=e;if(n!==void 0&&xe(r)&&_e(r.value)&&Xg(n))return n}const vv=t({create(e){let t=D_(e.options[0]),n=e.physicalFilename,r=new WeakMap,i=nv(r),{sourceCode:a}=e;function o(n){dv(n,t,r,i,e.report)}return{Identifier(n){!A(n)||n.name===`__proto__`||mv(n,t,e.report,a)},JSXOpeningElement({name:n}){if(!(t.checkVariables&&me(n)&&a_(n.name)))return;let r=M_(n.name,t);if(r.total===0)return;let i=F_(n.name,r,`variable`);e.report({...i,node:n})},"Program:exit"(r){if(t.checkFilenames&&n!==`<input>`&&n!==`<text>`){let i=Math.max(n.lastIndexOf(`/`),n.lastIndexOf(`\\`)),a=n.slice(i+1),o=a.lastIndexOf(`.`),s=o===-1?``:a.slice(o),c=M_(o===-1?a:a.slice(0,o),t);if(c.total>0&&c.samples){let t=c.samples.map(e=>`${e}${s}`);e.report({...F_(a,{samples:t,total:c.total},`filename`),node:r})}}t.checkVariables&&pv(a.getScope(r),o)}}},meta:{docs:{description:`Prevent abbreviations.`,recommended:!1},fixable:`code`,messages:{[Ig]:`The {{nameTypeText}} \`{{discouragedName}}\` should be named \`{{replacement}}\`. ${Rg}`,[Lg]:`Please rename the {{nameTypeText}} \`{{discouragedName}}\`. Suggested names are: {{replacementsText}}. ${Rg}`},schema:[{additionalProperties:!1,properties:{allowList:{additionalProperties:{type:`boolean`},type:`object`},allowPropertyAccess:{items:{type:`string`},type:`array`},checkDefaultAndNamespaceImports:{enum:[!1,!0,`internal`]},checkFilenames:{type:`boolean`},checkProperties:{type:`boolean`},checkShorthandImports:{enum:[!1,!0,`internal`]},checkShorthandProperties:{type:`boolean`},checkVariables:{type:`boolean`},extendDefaultAllowList:{type:`boolean`},extendDefaultReplacements:{type:`boolean`},ignore:{items:{oneOf:[{type:`object`},{type:`string`}]},type:`array`},ignoreShorthands:{items:{type:`string`},type:`array`},replacements:{additionalProperties:{oneOf:[{enum:[!1]},{additionalProperties:{type:`boolean`},type:`object`}]},type:`object`},shorthands:{additionalProperties:{type:`string`},type:`object`}},type:`object`}],type:`suggestion`}}),yv=/^use[A-Z0-9].*$/u;function bv(e){return yv.test(e)}function xv(e){if(e.id!==null)return e.id.name}function Sv(e){return e.id.type===`Identifier`?e.id.name:void 0}function Cv(e){let t=xv(e);return t!==void 0&&bv(t)}function wv({parent:e}){if(e.type!==`VariableDeclarator`)return!1;let t=Sv(e);return t!==void 0&&bv(t)}function Tv(e,t){let n=e.get(t);if(!(n===void 0||n.length===0))return n.at(-1)}function Ev(e){for(let t=e.defs.length-1;t>=0;--t){let n=e.defs[t];if(!(n?.node.type!==`VariableDeclarator`||n.node.init?.type!==`ArrayExpression`))return n.node.init}}function Dv(e){for(let t=e.defs.length-1;t>=0;--t){let n=e.defs[t];if(n?.node.type===`VariableDeclarator`&&n.node.init?.type===`ObjectExpression`)return!0}return!1}function Ov(e,t,n,r){let i=E(e.getScope(t),n);if(i!==void 0){let e=Ev(i);if(e!==void 0)return e}return Tv(r,n)}function kv(e,t,n){if(e.argument.type===`Identifier`){let r=Ov(t,e,e.argument.name,n);return r===void 0?1:Av(r,t,n)}return e.argument.type===`ArrayExpression`?Av(e.argument,t,n):1}function Av(e,t,n){let r=0;for(let i of e.elements){if(i===null){r+=1;continue}if(i.type===`SpreadElement`){r+=kv(i,t,n);continue}r+=1}return r}function jv(e,t){let n=E(e.getScope(t),t.name);return n!==void 0&&Dv(n)}function Mv(e){let t=Sv(e);if(!(t===void 0||e.init?.type!==`ArrayExpression`))return{init:e.init,name:t}}function Nv(e,t){let n=Mv(e);if(n===void 0)return;let{init:r,name:i}=n,a=t.get(i)??[];a.push(r),t.set(i,a)}function Pv(e,t){let n=Mv(e);if(n===void 0)return;let{name:r}=n,i=t.get(r);i===void 0||i.length===0||(i.pop(),i.length===0&&t.delete(r))}const Fv=t({create(e){let{sourceCode:t}=e,n=new Map,r=0;function i(e){Cv(e)&&(r+=1)}function a(e){Cv(e)&&--r}function o(e){wv(e)&&(r+=1)}function s(e){wv(e)&&--r}function c(t){e.report({data:{count:`2`},messageId:`tooManyReturnValues`,node:t})}function l(e){if(!(r===0||e.argument===null||e.argument.type===`ObjectExpression`)){if(e.argument.type===`Identifier`){if(jv(t,e.argument))return;let r=Ov(t,e,e.argument.name,n);if(r===void 0)return;Av(r,t,n)>2&&c(e);return}e.argument.type===`ArrayExpression`&&Av(e.argument,t,n)>2&&c(e)}}return{ArrowFunctionExpression:o,"ArrowFunctionExpression:exit":s,FunctionDeclaration:i,"FunctionDeclaration:exit":a,FunctionExpression:i,"FunctionExpression:exit":a,ReturnStatement:l,VariableDeclarator(e){Nv(e,n)},"VariableDeclarator:exit"(e){Pv(e,n)}}},meta:{docs:{description:`Restrict React hooks to object returns or short tuples.`},messages:{tooManyReturnValues:`Hook returns more than {{count}} values. Return an object with named properties instead.`},schema:[],type:`suggestion`}});function Iv(e){return e.endsWith(`Async`)}function Lv(e){let{parent:t}=e;if(t.type!==`ObjectExpression`)return!1;let{parent:n}=t;return n.type===`CallExpression`||n.type===`NewExpression`?n.arguments.includes(t):!1}const Rv=t({create(e){let t=e.options[0]?.except,n=t===void 0?new Set:new Set(t);function r(e){return Iv(e)||n.has(e)}function i(t){r(t.name)||e.report({messageId:`missingAsyncSuffix`,node:t})}return{FunctionDeclaration(e){!e.async||e.id===null||i(e.id)},MethodDefinition(e){!e.value.async||e.key.type!==`Identifier`||i(e.key)},Property(e){!e.method||e.value.type!==`FunctionExpression`||!e.value.async||e.key.type===`Identifier`&&(Lv(e)||i(e.key))},PropertyDefinition(e){e.value?.type!==`ArrowFunctionExpression`&&e.value?.type!==`FunctionExpression`||!e.value.async||e.key.type!==`Identifier`||i(e.key)},VariableDeclarator(e){e.id.type===`Identifier`&&(e.init?.type!==`ArrowFunctionExpression`&&e.init?.type!==`FunctionExpression`||e.init.async&&i(e.id))}}},meta:{docs:{description:`Require async function names to end with Async.`},messages:{missingAsyncSuffix:`Async functions must have names that end with Async.`},schema:[{additionalProperties:!1,properties:{except:{items:{type:`string`},type:`array`}},type:`object`}],type:`problem`}});function zv(e){if(!(x(e)&&`classes`in e&&x(e.classes)))return new Map;let{classes:t}=e,n=new Map;for(let[e,r]of Object.entries(t))y(r)&&n.set(e,r);return n}function Bv(e){return e?.type===`module`||e?.type===`global`}function Vv(e){if(e.type===`ImportDefaultSpecifier`)return e.local.name;if(e.type===`ImportSpecifier`){if(e.imported.type===`Identifier`)return e.imported.name;if(y(e.imported.value))return e.imported.value}}function Hv(e,t,n){if(e.callee.type===`Identifier`){let r=t.get(e.callee.name);if(r===void 0)return;let i=n.get(r);return i===void 0?void 0:{className:r,importSource:i}}if(e.callee.type===`MemberExpression`&&e.callee.property.type===`Identifier`){let t=e.callee.property.name,r=n.get(t);return r===void 0?void 0:{className:t,importSource:r}}}function Uv(e,t,n){if(!y(e.source.value))return;let r=e.source.value;for(let[i,a]of t)if(a===r)for(let t of e.specifiers)Vv(t)===i&&n.set(t.local.name,i)}const Wv=t({create(e){let{sourceCode:t}=e,n=zv(e.options[0]);if(n.size===0)return{};let r=new Map;return{ImportDeclaration(e){Uv(e,n,r)},NewExpression(i){let a=Hv(i,r,n);a!==void 0&&(Bv(t.getScope(i))||e.report({data:{className:a.className,importSource:a.importSource},messageId:`mustBeModuleLevel`,node:i}))}}},meta:{docs:{description:`Require configured classes to be instantiated at module level only.`},messages:{mustBeModuleLevel:`'{{className}}' from '{{importSource}}' must be instantiated at module level only.`},schema:[{additionalProperties:!1,properties:{classes:{additionalProperties:{type:`string`},type:`object`}},type:`object`}],type:`problem`}}),Gv=[{allowAsync:!1,name:`useEffect`},{allowAsync:!1,name:`useLayoutEffect`},{allowAsync:!1,name:`useInsertionEffect`}];function Kv(e){return x(e)&&y(e.name)&&typeof e.allowAsync==`boolean`}function qv(e){if(!x(e))return{environment:`roblox-ts`,hooks:Gv};let t=hn(e.environment)?e.environment:`roblox-ts`,n=e.hooks;if(!Array.isArray(n))return{environment:t,hooks:Gv};let r=[];for(let e of n)Kv(e)&&r.push(e);return r.length===0?{environment:t,hooks:Gv}:{environment:t,hooks:r}}function Jv(e){for(let t of e.defs){let{node:e}=t;if(e.type===`FunctionDeclaration`)return{isAsync:e.async,node:e,type:`function-declaration`};if(e.type===`VariableDeclarator`){if(e.init===null)continue;if(e.init.type===`ArrowFunctionExpression`)return{isAsync:e.init.async,node:e.init,type:`arrow`};if(e.init.type===`FunctionExpression`)return{isAsync:e.init.async,node:e.init,type:`function-expression`}}}}function Yv(e,t){let n=E(e.getScope(t),t.name);if(n===void 0)return!1;for(let e of n.defs){let{node:t}=e;if(t.type!==`VariableDeclarator`||t.init?.type!==`CallExpression`)continue;let n=L(t.init);if(n===`useCallback`||n===`useMemo`)return!0}return!1}const Xv=t({create(e){let{environment:t,hooks:n}=qv(e.options[0]),r=new Map(n.map(e=>[e.name,e.allowAsync])),i=new Set(r.keys()),a=t===`roblox-ts`;function o(e){let t=r.get(e);return typeof t==`boolean`&&t}function s(t,n,r){e.report({data:{hook:t},messageId:r,node:n})}function c(t,n,r){let i=E(e.sourceCode.getScope(r),r.name);if(i===void 0){Yv(e.sourceCode,r)&&s(t,n,`identifierReferencesCallback`);return}let a=Jv(i);if(a===void 0){Yv(e.sourceCode,r)&&s(t,n,`identifierReferencesCallback`);return}l(t,n,a)}function l(e,t,n){if(n.type===`arrow`){n.isAsync&&!o(e)?s(e,t,`identifierReferencesAsyncArrow`):n.isAsync||s(e,t,`identifierReferencesArrow`);return}if(n.type===`function-expression`){u(e,t,n.node);return}n.isAsync&&!o(e)&&s(e,t,`identifierReferencesAsyncFunction`)}function u(e,t,n){n.id===null?s(e,t,`anonymousFunction`):a&&s(e,t,`functionExpression`)}function d(e,t,n){let r=n.id!==null;r&&n.async?s(e,t,`asyncFunctionExpression`):r&&a?s(e,t,`functionExpression`):!r&&n.async?s(e,t,`asyncAnonymousFunction`):r||s(e,t,`anonymousFunction`)}return{CallExpression(e){let t=L(e);if(t===void 0||!i.has(t))return;let[n]=e.arguments;if(n!==void 0){if(n.type===`Identifier`){c(t,e,n);return}if(n.type===`ArrowFunctionExpression`){n.async?s(t,e,`asyncArrowFunction`):s(t,e,`arrowFunction`);return}n.type===`FunctionExpression`&&d(t,e,n)}}}},meta:{docs:{description:`Enforce named effect functions for better debuggability. Prevents inline arrow functions in useEffect and similar hooks.`,recommended:!1},messages:{anonymousFunction:`Anonymous function passed to {{hook}}. debug.info returns empty string for anonymous functions, making stack traces useless for debugging. Extract to: function effectName() { ... } then pass effectName.`,arrowFunction:`Arrow function passed to {{hook}}. Arrow functions have no debug name and create new instances each render. Extract to: function effectName() { ... } then pass effectName.`,asyncAnonymousFunction:`Async anonymous function in {{hook}}. Two issues: (1) no debug name makes stack traces useless, (2) async effects require cancellation logic for unmount. Extract to: async function effectName() { ... } with cleanup.`,asyncArrowFunction:`Async arrow function in {{hook}}. Two issues: (1) arrow functions have no debug name, (2) async effects require cancellation logic. Extract to: async function effectName() { ... } with cleanup.`,asyncFunctionDeclaration:`Async function declaration passed to {{hook}}. Async effects require cancellation logic to handle component unmount. Implement cleanup or set allowAsync: true if cancellation is handled.`,asyncFunctionExpression:`Async function expression in {{hook}}. Async effects require cancellation logic for unmount. Extract to a named async function declaration with cleanup, then pass the reference.`,functionExpression:`Function expression passed to {{hook}}. Function expressions create new instances each render, breaking referential equality. Extract to: function effectName() { ... } at module or component top-level.`,identifierReferencesArrow:`{{hook}} receives identifier pointing to arrow function. Arrow functions have no debug name and lack referential stability. Convert to: function effectName() { ... } then pass effectName.`,identifierReferencesAsyncArrow:`{{hook}} receives identifier pointing to async arrow function. Two issues: (1) no debug name, (2) async effects require cancellation logic. Convert to: async function effectName() { ... } with cleanup.`,identifierReferencesAsyncFunction:`{{hook}} receives identifier pointing to async function. Async effects require cancellation logic for unmount. Implement cleanup or set allowAsync: true if cancellation is handled.`,identifierReferencesCallback:`{{hook}} receives identifier from useCallback/useMemo. These hooks return new references when dependencies change, causing unexpected effect re-runs. Use a stable function declaration: function effectName() { ... }`},schema:[{additionalProperties:!1,properties:{environment:{default:`roblox-ts`,description:`Environment mode: 'roblox-ts' only allows identifiers, 'standard' allows both identifiers and named function expressions`,enum:[`roblox-ts`,`standard`],type:`string`},hooks:{description:`Array of hook configuration objects with name and allowAsync settings`,items:{additionalProperties:!1,properties:{allowAsync:{description:`Whether async functions are allowed for this hook`,type:`boolean`},name:{description:`Hook name to check`,type:`string`}},required:[`name`,`allowAsync`],type:`object`},type:`array`}},type:`object`}],type:`problem`}});h({"alternatives?":h(`string[]`).readonly().or(`undefined`),closer:h(`string[]`).readonly().or(`string`),opener:`string`,"openerAlternatives?":h(`string[]`).readonly().or(`undefined`),"platform?":h(`"roblox" | undefined`),"requireSync?":`boolean | undefined`,"yieldingFunctions?":h(`string[]`).readonly().or(`undefined`)}).readonly();const Zv=new Set([`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`WhileStatement`]),Qv=[`task.wait`,`wait`,`*.WaitForChild`,`*.*Async`];function $v(e,t){for(let n of t){let t=!1;for(let r of n)if(r.index===e.index){t=!0;break}if(!t)return!1}return!0}function ey(e,t){return t.filter(t=>t.some(t=>t.index===e.index))}function ty({callee:e}){if(e.type===`Identifier`)return e.name;if(e.type===`MemberExpression`){let t=e.object.type===`Identifier`?e.object.name:void 0,n=e.property.type===`Identifier`?e.property.name:void 0;if(t!==void 0&&n!==void 0)return`${t}.${n}`}}function Q(e){let t=[];if(S(e.closer)?t.push(...e.closer):y(e.closer)&&t.push(e.closer),e.alternatives)for(let n of e.alternatives)t.push(n);return t}function ny(e){let t=[e.opener];return e.openerAlternatives&&t.push(...e.openerAlternatives),t}function ry(e){return e.length===0?`configured opener`:e.length===1?e[0]??`configured opener`:e.join(`' or '`)}function iy(e){return e?Zv.has(e.type):!1}function ay(e){return e?.type===`SwitchStatement`}function oy(e,t){if(e.type!==`Identifier`)return;let n=t;for(;n;){if(n.type===`LabeledStatement`&&n.label.name===e.name)return n.body;n=n.parent??void 0}}function sy(e,t){let n=e.label?oy(e.label,e.parent):void 0;if(n)return iy(n)?n:void 0;let r=e.parent;for(;r;){if(iy(r))return r;if(t&&ay(r))return;r=r.parent??void 0}}function cy(e){return sy(e,!0)}function ly(e){return sy(e,!1)}function uy(e){return{...e,loopAncestors:[...e.loopAncestors]}}const dy=t({create(e){let[t]=e.options,n={allowConditionalClosers:t?.allowConditionalClosers??!1,allowMultipleOpeners:t?.allowMultipleOpeners??!0,maxNestingDepth:t?.maxNestingDepth??1/0,pairs:t?.pairs??[]},r=n.pairs.length===0?[{closer:`debug.profileend`,opener:`debug.profilebegin`,platform:`roblox`,requireSync:!0,yieldingFunctions:[...Qv]}]:n.pairs,i={...n.allowConditionalClosers===void 0?{}:{allowConditionalClosers:n.allowConditionalClosers},...n.allowMultipleOpeners===void 0?{}:{allowMultipleOpeners:n.allowMultipleOpeners},...n.maxNestingDepth===void 0?{}:{maxNestingDepth:n.maxNestingDepth},pairs:r},a=[],o=[],s=0,c=[],l=!1,u=!1,d=[],f=new Map,p=new Map,m=new Map;function h(e){if(m.has(e))return m.get(e)??[];let t=[],n=0;for(let r of i.pairs){if(!ny(r).includes(e))continue;let i=Q(r);for(let e of i)t.includes(e)||(t[n++]=e)}return m.set(e,t),t}function g(){return d.length>0?d.at(-1):{asyncContext:!1,currentFunction:void 0,hasEarlyExit:!1,inCatch:!1,inConditional:!1,inFinally:!1,inLoop:!1,inTry:!1}}function _(e){let t=g();d.push({...t,...e})}function v(){d.pop()}function ee(e){let t=d.at(-1);t&&(d[d.length-1]={...t,...e})}function te(){return a.map(uy)}function y(e){f.set(e,te())}function b(e,t){return i.pairs.find(n=>(t?ny(n):Q(n)).includes(e))}function x(e,t){return t.platform===`roblox`&&(t.yieldingFunctions??Qv).some(t=>{if(t.startsWith(`*.`)){let n=t.slice(2);return e.endsWith(`.${n}`)}return e===t})}function ne(e){let t=Q(e);return t.length===1?t[0]??`closer`:t.join(`' or '`)}function S(t,n){e.report({data:{closer:ne(t.config),opener:t.opener,paths:n},messageId:`unpairedOpener`,node:t.node})}function C(e){a.length=0;for(let t of e)a.push({...t})}function re(e){let t=p.get(e)??[];t.push(te()),p.set(e,t)}function w(e,t,n){for(let r of e){let e=ey(r,t);e.length<=0||e.length>=t.length||i.allowConditionalClosers===!1&&S(r,n)}}function T(e){e.type!==`FunctionDeclaration`&&e.type!==`FunctionExpression`&&e.type!==`ArrowFunctionExpression`||(c.push([...a]),a.length=0,l=!1,u=!1,_({asyncContext:e.async,currentFunction:e,hasEarlyExit:!1,inCatch:!1,inConditional:!1,inFinally:!1,inLoop:!1,inTry:!1}))}function E(){if(a.length>0)for(let e of a)S(e,`function exit`);let e=c.pop();e?(a.length=0,a.push(...e)):a.length=0,v()}function ie(e){e.type===`IfStatement`&&(_({inConditional:!0}),y(e))}function ae(e){if(e.type!==`IfStatement`)return;v();let t=f.get(e),n=p.get(e);if(t&&n&&n.length>0){let r=e.alternate!==null;for(let e of n)for(let n of e)t.some(({index:e})=>e===n.index)||S(n,`conditional branch`);if(r){w(t,n,`not all execution paths`);let e=t.filter(e=>$v(e,n));a.length=0,a.push(...e)}else C(t)}f.delete(e),p.delete(e)}function oe(e){let{parent:t}=e;if(t?.type===`IfStatement`){re(t);let e=f.get(t);if(!e)return;C(e)}}function D(e){let{parent:t}=e;t?.type===`IfStatement`&&re(t)}function se(e){e.type===`TryStatement`&&y(e)}function O(t){if(t.type!==`TryStatement`)return;let n=f.get(t),r=p.get(t);if(t.finalizer){f.delete(t),p.delete(t);return}if(n&&r&&r.length>0){for(let t of n){let n=r.filter(e=>e.some(e=>e.index===t.index));if(n.length>0&&n.length<r.length&&i.allowConditionalClosers===!1){let n=Q(t.config),r=n.length===1?n[0]??`closer`:n.join(`' or '`);e.report({data:{closer:r,opener:t.opener,paths:`not all execution paths`},messageId:`unpairedOpener`,node:t.node})}}let t=n.filter(e=>$v(e,r));a.length=0,a.push(...t)}f.delete(t),p.delete(t)}function k(){_({inTry:!0})}function ce(e,t){if(e.type!==t)return;let{parent:n}=e;if(n.type===`TryStatement`){re(n);let e=f.get(n);e&&C(e)}v()}function le(e){ce(e,`BlockStatement`)}function ue(){_({inCatch:!0})}function de(e){ce(e,`CatchClause`)}function fe(){_({inFinally:!0})}function pe(e){e.type===`SwitchStatement`&&(_({inConditional:!0}),y(e))}function A(e){if(e.type!==`SwitchStatement`)return;v();let t=f.get(e),n=p.get(e);if(t&&n&&n.length>0)if(e.cases.some(e=>e.test===null)&&n.length===e.cases.length){w(t,n,`not all execution paths`);let e=t.filter(e=>$v(e,n));a.length=0,a.push(...e)}else C(t);f.delete(e),p.delete(e)}function j(e){if(e.type!==`SwitchCase`)return;let{parent:t}=e;if(t.type===`SwitchStatement`){re(t);let e=f.get(t);if(!e)return;C(e)}}function me(e){iy(e)&&(o.push(e),_({inLoop:!0}))}function he(){o.length>0&&o.pop(),v()}function ge(t){if(ee({hasEarlyExit:!0}),!(g().inFinally||a.length===0))for(let{config:n,node:r,opener:i}of a){let a=Q(n),o=a.length===1?a[0]??`closer`:a.join(`' or '`),s=t.type===`ReturnStatement`?`return`:`throw`;e.report({data:{closer:o,opener:i,paths:`${s} at line ${t.loc.start.line}`},messageId:`unpairedOpener`,node:r})}}function _e(t){if(t.type!==`BreakStatement`&&t.type!==`ContinueStatement`||a.length===0)return;let n=t.type===`ContinueStatement`?ly(t):cy(t);if(n)for(let{config:r,loopAncestors:i,node:o,opener:s}of a){if(!i.some(e=>e===n))continue;let a=Q(r),c=a.length===1?a[0]??`closer`:a.join(`' or '`),l=t.type===`BreakStatement`?`break`:`continue`,u=t.loc.start.line;e.report({data:{closer:c,opener:s,paths:`${l} at line ${u}`},messageId:`unpairedOpener`,node:o})}}function ve(t,n,r){let c=i.maxNestingDepth??0;c>0&&a.length>=c&&e.report({data:{max:String(c)},messageId:`maxNestingExceeded`,node:t}),i.allowMultipleOpeners===!1&&a.length>0&&a.at(-1)?.opener===n&&e.report({data:{opener:n},messageId:`multipleOpeners`,node:t});let l={config:r,index:s++,location:t.loc,loopAncestors:[...o],node:t,opener:n};a.push(l)}function ye(t,n){let r=a.findLastIndex(e=>Q(e.config).includes(n));if(r===-1){if(l&&!u){u=!0;return}if(a.length===0){e.report({data:{closer:n},messageId:`unpairedCloser`,node:t});return}let r=ry(h(a.at(-1).opener));e.report({data:{closer:n,expected:r},messageId:`unexpectedCloser`,node:t});return}let i=a[r];if(i){if(r!==a.length-1){let r=a.at(-1);r&&e.report({data:{actual:r.opener,closer:n,expected:i.opener},messageId:`wrongOrder`,node:t})}a.splice(r,1)}}function be(t,n,r){let i=Q(r.config),a=i.length===1?i[0]??`closer`:i.join(`' or '`);e.report({data:{closer:a,yieldingFunction:n},messageId:`robloxYieldViolation`,node:t})}function xe(t){if(!(t.type!==`AwaitExpression`&&t.type!==`YieldExpression`&&t.type!==`ForOfStatement`))for(let{config:n,opener:r}of a){if(n.requireSync!==!0)continue;let i=Q(n),a=i.length===1?i[0]??`closer`:i.join(`' or '`),o=t.type===`YieldExpression`?`yield`:`await`;e.report({data:{asyncType:o,closer:a,opener:r},messageId:`asyncViolation`,node:t})}}function M(e){if(e.type!==`CallExpression`)return;let t=ty(e);if(t===void 0||t===``)return;let n=b(t,!0);if(n){ve(e,t,n);return}if(b(t,!1)){ye(e,t);return}for(let n of a)if(x(t,n.config)){be(e,t,n),a.length=0,l=!0;return}}return{ArrowFunctionExpression:T,"ArrowFunctionExpression:exit":E,AwaitExpression:xe,BreakStatement:_e,CallExpression:M,CatchClause:ue,"CatchClause:exit":de,ContinueStatement:_e,DoWhileStatement:me,"DoWhileStatement:exit":he,ForInStatement:me,"ForInStatement:exit":he,ForOfStatement:e=>{e.await&&xe(e),me(e)},"ForOfStatement:exit":he,ForStatement:me,"ForStatement:exit":he,FunctionDeclaration:T,"FunctionDeclaration:exit":E,FunctionExpression:T,"FunctionExpression:exit":E,IfStatement:ie,"IfStatement > .alternate:exit":D,"IfStatement > .consequent:exit":oe,"IfStatement:exit":ae,ReturnStatement:ge,"SwitchCase:exit":j,SwitchStatement:pe,"SwitchStatement:exit":A,ThrowStatement:ge,TryStatement:se,"TryStatement > .block":k,"TryStatement > .block:exit":le,"TryStatement > .finalizer":fe,"TryStatement > .finalizer:exit":v,"TryStatement:exit":O,WhileStatement:me,"WhileStatement:exit":he,YieldExpression:xe}},meta:{docs:{description:`Enforces balanced opener/closer function calls across all execution paths`,recommended:!1},fixable:`code`,messages:{asyncViolation:`Cannot use {{asyncType}} between '{{opener}}' and '{{closer}}' (requireSync: true)`,conditionalOpener:`Conditional opener '{{opener}}' at {{location}} may not have matching closer on all paths`,maxNestingExceeded:`Maximum nesting depth of {{max}} exceeded for paired calls`,multipleOpeners:`Multiple consecutive calls to '{{opener}}' without matching closers (allowMultipleOpeners: false)`,robloxYieldViolation:`Yielding function '{{yieldingFunction}}' auto-closes all profiles - subsequent '{{closer}}' will error`,unexpectedCloser:`Unexpected call to '{{closer}}' - expected one of: {{expected}}`,unpairedCloser:`Unexpected call to '{{closer}}' - no matching opener on stack`,unpairedOpener:`Unpaired call to '{{opener}}' - missing '{{closer}}' on {{paths}}`,wrongOrder:`Closer '{{closer}}' called out of order - expected to close '{{expected}}' but '{{actual}}' is still open`},schema:[{additionalProperties:!1,properties:{allowConditionalClosers:{default:!1,type:`boolean`},allowMultipleOpeners:{default:!0,type:`boolean`},maxNestingDepth:{default:0,minimum:0,type:`number`},pairs:{items:{additionalProperties:!1,properties:{alternatives:{items:{minLength:1,type:`string`},type:`array`},closer:{oneOf:[{minLength:1,type:`string`},{items:{minLength:1,type:`string`},minItems:1,type:`array`}]},opener:{minLength:1,type:`string`},openerAlternatives:{items:{minLength:1,type:`string`},type:`array`},platform:{enum:[`roblox`],type:`string`},requireSync:{default:!1,type:`boolean`},yieldingFunctions:{items:{minLength:1,type:`string`},type:`array`}},required:[`opener`,`closer`],type:`object`},minItems:1,type:`array`}},required:[`pairs`],type:`object`}],type:`problem`}}),fy={allowRootKeys:!1,ignoreCallExpressions:[`ReactTree.mount`,`CreateReactStory`,`createReactStory`,`createPlatformStory`],iterationMethods:[`map`,`filter`,`forEach`,`flatMap`,`reduce`,`reduceRight`,`some`,`every`,`find`,`findIndex`],memoizationHooks:[`useCallback`,`useMemo`]},py=new Set([`ChainExpression`,`ParenthesizedExpression`,`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]),my=new Set([...py,`AwaitExpression`,`ConditionalExpression`,`LogicalExpression`,`SequenceExpression`,`SpreadElement`]),hy={iteration:!1,memoization:!1},gy=new Set([`ConditionalExpression`,`LogicalExpression`]),_y=new Set([`BlockStatement`,`CatchClause`,`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`IfStatement`,`LabeledStatement`,`SwitchCase`,`SwitchStatement`,`TryStatement`,`WhileStatement`,`WithStatement`]);function $(e){return e.parent??void 0}function vy(e){let t=e;for(;t!==void 0&&py.has(t.type);)t=$(t);return t}function yy(e){let t=$(e);for(;t!==void 0;){if(N(t))return t;t=$(t)}}function by(e,t,n){let{callee:r}=e;if(r.type===`Identifier`)return{iteration:t.has(r.name),memoization:n.has(r.name)};if(r.type===`MemberExpression`&&r.property.type===`Identifier`){let{name:i}=r.property,a={iteration:t.has(i),memoization:n.has(i)};return i===`from`&&r.object.type===`Identifier`&&r.object.name===`Array`&&e.arguments.length>=2||i===`call`&&r.object.type===`MemberExpression`&&r.object.property.type===`Identifier`&&t.has(r.object.property.name)?{...a,iteration:!0}:a}return hy}function xy(e){let t=e,n=$(e);for(;n!==void 0;){if(n.type===`CallExpression`){for(let e of n.arguments)if(e===t||e.type===`SpreadElement`&&e.argument===t)return n;return}if(my.has(n.type)){t=n,n=$(n);continue}break}}function Sy(e,t){if(t.type===`FunctionDeclaration`){let n=e.getDeclaredVariables(t);return n.length>0?n[0]:void 0}let n=$(t);if(n!==void 0&&(n.type===`VariableDeclarator`||n.type===`AssignmentExpression`)){let t=e.getDeclaredVariables(n);if(t.length>0)return t[0]}}function Cy(e,t){e.iteration||=t.iteration,e.memoization||=t.memoization}function wy(e,t,n){if(e.isWrite())return hy;let r=xy(e.identifier);return r===void 0||fo(r)?hy:by(r,t,n)}function Ty(e,t,n,r){let i=xy(t);if(i!==void 0)return fo(i)?hy:by(i,n,r);let a=Sy(e,t);if(a===void 0)return hy;let o={iteration:!1,memoization:!1};for(let e of a.references)if(Cy(o,wy(e,n,r)),o.iteration&&o.memoization)return o;return o}function Ey(e){let t=Dy(e);return t===void 0?!1:t.type===`ReturnStatement`?ky(t):t.type===`ArrowFunctionExpression`}function Dy(e){let t=Oy(vy($(e)));for(;t!==void 0&&gy.has(t.type);)t=vy($(t));return Oy(t)}function Oy(e){return e?.type===`JSXExpressionContainer`?vy($(e)):e}function ky(e){let t=vy($(e));for(;t!==void 0&&_y.has(t.type);)t=vy($(t));return t!==void 0&&N(t)}function Ay(e){if(!Ey(e))return!1;let t=yy(e);if(t===void 0)return!1;let n=vy($(t));return n?.type!==`CallExpression`||fo(n)}function jy(e,t){let n=$(e);if(n===void 0||n.type===`JSXExpressionContainer`&&(n=$(n),n===void 0))return!1;for(let e=0;e<20&&n!==void 0;e+=1){if(n.type===`CallExpression`){let{callee:e}=n;return e.type===`Identifier`?t.includes(e.name):e.type===`MemberExpression`&&e.object.type===`Identifier`&&e.property.type===`Identifier`&&t.includes(`${e.object.name}.${e.property.name}`)}n=$(n)}return!1}function My(e){return e.toLowerCase().endsWith(`children`)}function Ny(e){let t=$(e);if(t===void 0)return!1;for(;t!==void 0&&(t.type===`ConditionalExpression`||t.type===`LogicalExpression`);)t=$(t);if(t===void 0||t.type===`JSXExpressionContainer`&&(t=$(t),t===void 0)||t.type!==`JSXAttribute`)return!1;let n=po(t);return n===void 0||!My(n)}function Py(e){let t=e,n=$(e);for(;n!==void 0&&py.has(n.type);)t=n,n=$(n);return n===void 0?!1:n.type===`VariableDeclarator`?n.init===t:n.type===`AssignmentExpression`&&n.right===t}function Fy(e,t){let n=$(e);if(n===void 0)return!1;let r=!1;for(;n!==void 0&&(n.type===t||py.has(n.type));)n.type===t&&(r=!0),n=$(n);if(!r||n?.type!==`JSXExpressionContainer`)return!1;let i=$(n);return i===void 0?!1:i.type===`JSXElement`||i.type===`JSXFragment`}function Iy(e){return Fy(e,`ConditionalExpression`)}function Ly(e){return Fy(e,`LogicalExpression`)}const Ry=t({create(e){let[t]=e.options,n={allowRootKeys:fy.allowRootKeys,ignoreCallExpressions:fy.ignoreCallExpressions,iterationMethods:fy.iterationMethods,memoizationHooks:fy.memoizationHooks,...t},r=new Set(n.iterationMethods),i=new Set(n.memoizationHooks);function a(t){let a=yy(t),o=a===void 0?hy:Ty(e.sourceCode,a,r,i),s=o.iteration||o.memoization;if(Ay(t)&&!s){!n.allowRootKeys&&t.type===`JSXElement`&&mo(t,`key`)&&e.report({messageId:`rootComponentWithKey`,node:t});return}if(!jy(t,n.ignoreCallExpressions)&&!(Py(t)||Ny(t)||Iy(t))&&!(t.type===`JSXFragment`&&Ly(t))&&!(t.type===`JSXFragment`&&o.memoization&&!o.iteration&&Ey(t))){if(t.type===`JSXFragment`){e.report({messageId:`missingKey`,node:t});return}mo(t,`key`)||e.report({messageId:`missingKey`,node:t})}}return{JSXElement:a,JSXFragment:a}},meta:{docs:{description:`Require keys on React components when used in lists or iteration.`},messages:{missingKey:"JSX element in list/callback lacks key prop. React Luau warns about missing keys in _G.__DEV__ mode. Add a unique `key` prop using a stable identifier (not array index).",rootComponentWithKey:"Root return has unnecessary key prop. The key gets overwritten by the parent anyway. Remove the `key` prop."},schema:[{additionalProperties:!1,properties:{allowRootKeys:{default:!1,description:`Allow key props on root component returns`,type:`boolean`},ignoreCallExpressions:{default:[`ReactTree.mount`],description:`Function calls where JSX arguments don't need keys`,items:{type:`string`},type:`array`},iterationMethods:{default:fy.iterationMethods,description:`Array method names that indicate iteration contexts where keys are required`,items:{type:`string`},type:`array`},memoizationHooks:{default:[`useCallback`,`useMemo`],description:`Hook names that indicate memoization contexts where keys are required`,items:{type:`string`},type:`array`}},type:`object`}],type:`problem`}});function zy(e){if(e.id.type===`Identifier`)return e.id.name}function By(e,t,n){return de(e,t,n,`memo`)}function Vy(e,t,n){return e.callee.type===`Identifier`?t.has(e.callee.name):e.callee.type!==`MemberExpression`||e.callee.property.type!==`Identifier`||e.callee.property.name!==`createContext`||e.callee.object.type!==`Identifier`?!1:n.has(e.callee.object.name)}function Hy(e){let t=e;for(;t!==null;){if(t.type===`ExportNamedDeclaration`||t.type===`ExportDefaultDeclaration`)return!0;t=t.parent}return!1}function Uy(e){return e.parent.type===`VariableDeclaration`?e.parent.parent.type===`ExportNamedDeclaration`||e.parent.parent.type===`ExportDefaultDeclaration`:!1}function Wy(e,t,n){for(let r of e.getDeclaredVariables(t))if(r.name===n){for(let{identifier:e}of r.references)if(Hy(e))return!0;return!1}return!1}function Gy(e,t,n,r){return r.has(t)||Uy(n)?!0:Wy(e,n,t)}function Ky(e,t,n){e.report({data:{variableName:n},messageId:t.kind===`context`?`missingContextDisplayName`:`missingMemoDisplayName`,node:t.node})}const qy=t({create(e){let t=yn(e.options[0]),n=new Set,r=new Set,i=new Set,a=new Map,o=new Set;return{'AssignmentExpression[left.type="MemberExpression"]'(e){let{left:t}=e;if(t.type!==`MemberExpression`||t.property.type!==`Identifier`||t.property.name!==`displayName`||t.object.type!==`Identifier`)return;let n=a.get(t.object.name);n!==void 0&&(n.hasDisplayName=!0)},ExportDefaultDeclaration(t){if(t.declaration.type===`CallExpression`){if(By(t.declaration,n,i)){e.report({messageId:`directMemoExport`,node:t});return}Vy(t.declaration,r,i)&&e.report({messageId:`directContextExport`,node:t});return}t.declaration.type===`Identifier`&&o.add(t.declaration.name)},ExportNamedDeclaration(e){for(let t of e.specifiers)t.exported.type!==`Identifier`||t.exported.name!=="default"||t.local.type!==`Identifier`||o.add(t.local.name)},ImportDeclaration(e){if(bn(e,t))for(let t of e.specifiers){if(t.type===`ImportSpecifier`){let e=pe(t);e===`memo`&&n.add(t.local.name),e===`createContext`&&r.add(t.local.name);continue}i.add(t.local.name)}},"Program:exit"(){for(let[t,n]of a)n.hasDisplayName||Gy(e.sourceCode,t,n.node,o)&&Ky(e,n,t)},VariableDeclarator(e){if(e.init?.type!==`CallExpression`)return;let t=zy(e);if(t!==void 0){if(By(e.init,n,i)){a.set(t,{hasDisplayName:!1,kind:`memo`,node:e});return}Vy(e.init,r,i)&&a.set(t,{hasDisplayName:!1,kind:`context`,node:e})}}}},meta:{docs:{description:`Require displayName on exported memo components and contexts.`},messages:{directContextExport:`Directly exporting createContext() result prevents setting displayName.`,directMemoExport:`Directly exporting memo() result prevents setting displayName.`,missingContextDisplayName:`Context '{{variableName}}' must have a displayName assigned.`,missingMemoDisplayName:`Memo component '{{variableName}}' must have a displayName assigned.`},schema:[{additionalProperties:!1,properties:{environment:mn},type:`object`}],type:`problem`}});function Jy(e){return x(e)&&e.metric===`statements`?`statements`:`lines`}function Yy(e,t){let n=e.consequent.length;if(n===0)return!1;let[r]=e.consequent;if(r===void 0||n===1&&r.type===`BlockStatement`)return!1;if(t===`statements`)return n>1;let i=e.consequent[n-1];return i!==void 0&&r.loc.start.line!==i.loc.end.line}const Xy=t({create(e){let t=Jy(e.options[0]);return{SwitchCase(n){if(!Yy(n,t))return;let[r]=n.consequent,i=n.consequent.at(-1);r===void 0||i===void 0||e.report({fix(e){return[e.insertTextBefore(r,`{
5
+ `&&--g;break}return u.push(e.removeRange([g,m])),u}const wr=t({create(e){let{sourceCode:t}=e;function n(n){let r=0;for(;r<n.length;){let i=Sr(t,n,r);if(i===void 0){r+=1;continue}e.report({fix(e){return Cr(e,t,i)},messageId:`preferArrayLiteral`,node:i.declaration}),r=n.indexOf(i.lastAssignmentStatement)+1}}return{BlockStatement(e){n(e.body)},Program(e){n(e.body)}}},meta:{docs:{description:`Disallow new Array<T>() followed by contiguous index assignments; use an array literal instead.`},fixable:`code`,messages:{preferArrayLiteral:`Use an array literal instead of new Array<T>() followed by index assignments.`},schema:[],type:`suggestion`}});function Tr(e){return typeof e!=`object`||!e?!1:`allowAutofix`in e?e.allowAutofix===void 0||typeof e.allowAutofix==`boolean`:!0}function Er(e,t,n){if(e.type!==t.type)return!1;switch(e.type){case`CallExpression`:return t.type===`CallExpression`&&n.getText(e)===n.getText(t);case`Identifier`:return t.type===`Identifier`&&e.name===t.name;case`Literal`:return t.type===`Literal`&&e.value===t.value&&e.raw===t.raw;case`MemberExpression`:return t.type===`MemberExpression`&&Dr(e,t,n);case`Super`:return t.type===`Super`;case`ThisExpression`:return t.type===`ThisExpression`;default:return!1}}function Dr(e,t,n){return e.computed!==t.computed||e.optional!==t.optional||!Er(e.object,t.object,n)?!1:e.computed?Or(e.property,t.property,n):kr(e.property,t.property)}function Or(e,t,n){return rt(e)&&rt(t)&&Er(e,t,n)}function kr(e,t){return e.type===`PrivateIdentifier`||t.type===`PrivateIdentifier`?e.type===`PrivateIdentifier`&&t.type===`PrivateIdentifier`&&e.name===t.name:t.type===`Identifier`&&e.type===`Identifier`&&e.name===t.name}function Ar(e,t){switch(e.type){case`Identifier`:case`ThisExpression`:return!0;case`Literal`:return t;case`MemberExpression`:return e.optional||!Ar(e.object,!1)?!1:e.computed?rt(e.property)?Ar(e.property,!0):!1:e.property.type===`Identifier`||e.property.type===`PrivateIdentifier`;default:return!1}}function jr(e){return Ar(e,!1)}function Mr(e){return e.type!==`CallExpression`||e.optional||e.arguments.length>0||e.callee.type!==`MemberExpression`||e.callee.optional||e.callee.computed||e.callee.property.type!==`Identifier`?!1:e.callee.property.name===`size`}function Nr(e,t,n){if(!(e.operator!==`=`||e.left.type!==`MemberExpression`||!e.left.computed)){if(n===`roblox-ts`&&Mr(e.left.property))return Er(e.left.object,e.left.property.callee.object,t)?e.left:void 0;if(n===`standard`){let{property:n}=e.left;if(n.type===`MemberExpression`&&!n.optional&&!n.computed&&n.property.type===`Identifier`&&n.property.name===`length`)return Er(e.left.object,n.object,t)?e.left:void 0}}}const Pr=t({create(e){let[t]=e.options,n=Tr(t)&&t.allowAutofix,r=t?.environment===`standard`?`standard`:`roblox-ts`,{sourceCode:i}=e;return{AssignmentExpression(t){let a=Nr(t,i,r);if(a===void 0)return;let o=t.parent.type===`ExpressionStatement`?t.parent:void 0;if(!(n&&o!==void 0&&jr(a.object))){e.report({messageId:`usePush`,node:t});return}let s=i.getText(a.object),c=i.getText(t.right);e.report({fix(e){return e.replaceText(o,`${s}.push(${c});`)},messageId:`usePush`,node:t})}}},meta:{docs:{description:`Disallow array append assignments using array[array.size()] = value (roblox-ts) or array[array.length] = value (standard) and prefer push-based appends.`},fixable:`code`,messages:{usePush:`Do not append with array[array.size()] = value or array[array.length] = value. Use array.push(value) instead.`},schema:[{additionalProperties:!1,properties:{allowAutofix:{default:!1,type:`boolean`},environment:{...mn,default:`roblox-ts`,description:`Array environment mode: 'roblox-ts' checks array[array.size()]; 'standard' checks array[array.length].`}},type:`object`}],type:`problem`}}),Fr=/^set[A-Z]/u;function L({callee:e}){if(e.type===`Identifier`)return e.name;if(e.type===`MemberExpression`&&e.property.type===`Identifier`)return e.property.name}function Ir(e){return Fr.test(e)}function Lr(e){let[t]=e.arguments;return t?.type===`ArrowFunctionExpression`||t?.type===`FunctionExpression`?t:void 0}function Rr(e,t){let n=[e];for(;n.length>0;){let e=n.pop();if(e===void 0)break;t(e),Br(e,n)}}function zr(e,t){t(e);for(let n of Object.values(e))Ur(n,e,t)}function Br(e,t){for(let n in e)se(n)||Vr(Reflect.get(e,n),e,t)}function Vr(e,t,n){if(!(typeof e!=`object`||!e||e===t.parent)){if(Array.isArray(e)){Hr(e,t,n);return}D(e)&&n.push(e)}}function Hr(e,t,n){for(let r=e.length-1;r>=0;--r){let i=e[r];i!==t.parent&&D(i)&&n.push(i)}}function Ur(e,t,n){if(Array.isArray(e)){for(let r of e)Ur(r,t,n);return}e===t.parent||!D(e)||zr(e,n)}function Wr(e){let{key:t}=e;if(t.type===`Identifier`)return t.name;if(t.type===`Literal`&&y(t.value))return t.value}function Gr(e){let{value:t}=e;if(t.type===`Identifier`)return t;if(t.type===`AssignmentPattern`&&t.left.type===`Identifier`)return t.left}function Kr(e){let t=0;return Rr(e,e=>{e.type!==`CallExpression`||e.callee.type!==`Identifier`||Ir(e.callee.name)&&(t+=1)}),t}function qr(e,t,n,r,i){if(t===void 0)return 0;if(t.type===`SpreadElement`)return 3;let a=w(t);return a.type===`ArrayExpression`?a.elements.length===0?1:i(e,a,n,r)?2:3:3}const Jr=new Set([`catch`,`finally`,`then`]);function Yr(e){let t=new Set;for(let n of e.body)n.type!==`MethodDefinition`||n.kind!==`method`||!n.value.async||n.key.type===`Identifier`&&t.add(n.key.name);return t}function Xr(e){return e.callee.type!==`MemberExpression`||e.callee.property.type!==`Identifier`?!1:Jr.has(e.callee.property.name)}function Zr({callee:e}){let t=w(e);return Fe(t)&&t.async}function Qr({callee:e},t){if(!(e.type!==`MemberExpression`||e.object.type!==`ThisExpression`||e.property.type!==`Identifier`))return t.has(e.property.name)?e.property.name:void 0}function $r(e){let{parent:t}=e;return t?.type!==`AssignmentExpression`||t.right!==e?!1:t.left.type===`MemberExpression`&&t.left.object.type===`ThisExpression`}function ei(e){let{parent:t}=e;if(!(t?.type!==`VariableDeclarator`||t.init!==e))return t.id.type===`Identifier`?t.id.name:void 0}function ti(e){return!Fe(e)||e.parent.type===`ParenthesizedExpression`&&e.parent.parent.type===`CallExpression`&&e.parent.parent.callee===e.parent?!1:e.parent.type!==`CallExpression`||e.parent.callee!==e}function ni(e,t){let n=e;for(;n!==t;){let{parent:e}=n;if(e===null)return!1;if(ti(e))return!0;n=e}return!1}function ri(e,t){let n=Qr(e,t);if(n===void 0||$r(e))return;if(e.parent.type===`ExpressionStatement`)return{data:{methodName:n},messageId:`unhandledAsyncCall`,node:e};let r=ei(e);if(r!==void 0)return{data:{variableName:r},messageId:`orphanedPromise`,node:e}}function ii(e,t){let n=[],r=0;function i(i){if(i!==e&&ni(i,e))return;if(i.type===`AwaitExpression`){n[r++]={messageId:`awaitInConstructor`,node:i};return}if(i.type!==`CallExpression`)return;Xr(i)&&(n[r++]={messageId:`promiseChainInConstructor`,node:i}),Zr(i)&&(n[r++]={messageId:`asyncIifeInConstructor`,node:i});let a=ri(i,t);a!==void 0&&(n[r++]=a)}return zr(e,i),n}const ai=t({create(e){function t(t){e.report({data:t.data,messageId:t.messageId,node:t.node})}return{"MethodDefinition[kind='constructor']"(e){if(e.value.type!==`FunctionExpression`||e.value.body?.type!==`BlockStatement`||e.parent.type!==`ClassBody`)return;let n=Yr(e.parent),r=e.value.body,i=ii(r,n);for(let e of i)t(e)}}},meta:{docs:{description:`Disallow asynchronous operations inside class constructors. Constructors return immediately, so async work causes race conditions, unhandled rejections, and incomplete object states.`},messages:{asyncIifeInConstructor:`Refactor this asynchronous operation outside of the constructor. Async IIFEs create unhandled promises and incomplete object state.`,awaitInConstructor:`Refactor this asynchronous operation outside of the constructor. Using 'await' in a constructor causes the class to be instantiated before the async operation completes.`,orphanedPromise:`Refactor this asynchronous operation outside of the constructor. Promise assigned to '{{variableName}}' is never consumed - errors will be silently swallowed.`,promiseChainInConstructor:`Refactor this asynchronous operation outside of the constructor. Promise chains (.then/.catch/.finally) in constructors lead to race conditions.`,unhandledAsyncCall:`Refactor this asynchronous operation outside of the constructor. Calling async method '{{methodName}}' without handling its result creates uncontrolled async behavior.`},schema:[],type:`problem`}}),oi=new Set(`Accessory,AccessoryDescription,AccountService,Accoutrement,AchievementService,ActivityHistoryEventService,Actor,AdGui,AdPortal,AdService,AdvancedDragger,AirController,AlignOrientation,AlignPosition,AnalyticsService,AngularVelocity,Animation,AnimationClip,AnimationClipProvider,AnimationConstraint,AnimationController,AnimationFromVideoCreatorService,AnimationFromVideoCreatorStudioService,AnimationGraphDefinition,AnimationImportData,AnimationNode,AnimationNodeDefinition,AnimationRigData,AnimationStreamTrack,AnimationTrack,Animator,Annotation,AnnotationsService,AppAgeSignalsService,AppLifecycleObserverService,AppRatingPromptService,AppStorageService,AppUpdateService,ArcHandles,AssetCounterService,AssetDeliveryProxy,AssetImportService,AssetImportSession,AssetManagerService,AssetPatchSettings,AssetQualityService,AssetService,AssetSoundEffect,Atmosphere,AtmosphereSensor,Attachment,AudioAnalyzer,AudioChannelMixer,AudioChannelSplitter,AudioChorus,AudioCompressor,AudioDeviceInput,AudioDeviceOutput,AudioDistortion,AudioEcho,AudioEmitter,AudioEqualizer,AudioFader,AudioFilter,AudioFlanger,AudioFocusService,AudioGate,AudioLimiter,AudioListener,AudioPages,AudioPitchShifter,AudioPlayer,AudioRecorder,AudioReverb,AudioSearchParams,AudioSpeechToText,AudioTextToSpeech,AudioTremolo,AuroraScriptObject,AvatarAbilityRules,AvatarAccessoryRules,AvatarAnimationRules,AvatarBodyRules,AvatarChatService,AvatarClothingRules,AvatarCollisionRules,AvatarCreationService,AvatarEditorService,AvatarImportService,AvatarRules,AvatarSettings,Backpack,BackpackItem,BadgeService,BallSocketConstraint,BanHistoryPages,BaseCoreGuiConfiguration,BaseImportData,BasePart,BasePlayerGui,BaseRemoteEvent,BaseScript,BaseWrap,Beam,BevelMesh,BillboardGui,BinaryStringValue,BindableEvent,BindableFunction,BlockMesh,BloomEffect,BlurEffect,BodyAngularVelocity,BodyColors,BodyForce,BodyGyro,BodyMover,BodyPartDescription,BodyPosition,BodyThrust,BodyVelocity,Bone,BoolValue,BoxHandleAdornment,Breakpoint,BrickColorValue,BrowserService,BubbleChatConfiguration,BubbleChatMessageProperties,BugReporterService,BulkImportService,BuoyancySensor,CFrameValue,CSGDictionaryService,CacheableContentProvider,CalloutService,Camera,CanvasGroup,Capture,CaptureService,CapturesPages,CapturesViewConfiguration,CatalogPages,ChangeHistoryService,ChangeHistoryStreamingService,ChannelSelectorSoundEffect,ChannelTabsConfiguration,CharacterAppearance,CharacterMesh,Chat,ChatInputBarConfiguration,ChatWindowConfiguration,ChatWindowMessageProperties,ChorusSoundEffect,ClickDetector,ClientReplicator,ClientStorageService,ClimbController,Clothing,CloudCRUDService,CloudExecutionService,CloudLocalizationTable,Clouds,ClusterPacketCache,Collaborator,CollaboratorsService,CollectionService,Color3Value,ColorCorrectionEffect,ColorGradingEffect,CommerceService,CompositeValueCurve,CompressorSoundEffect,ConeHandleAdornment,ConfigService,ConfigSnapshot,Configuration,ConfigureServerService,ConnectivityService,Constraint,ContentProvider,ContextActionService,Controller,ControllerBase,ControllerManager,ControllerPartSensor,ControllerSensor,ControllerService,CookiesService,CoreGui,CoreGuiConfiguration,CorePackages,CoreScript,CoreScriptDebuggingManagerHelper,CoreScriptSyncService,CornerWedgePart,CreationDBService,CreatorStoreService,CrossDMScriptChangeListener,CurveAnimation,CustomEvent,CustomEventReceiver,CustomLog,CustomSoundEffect,CylinderHandleAdornment,CylinderMesh,CylindricalConstraint,DataModel,DataModelMesh,DataModelPatchService,DataModelSession,DataStore,DataStoreGetOptions,DataStoreIncrementOptions,DataStoreInfo,DataStoreKey,DataStoreKeyInfo,DataStoreKeyPages,DataStoreListingPages,DataStoreObjectVersionInfo,DataStoreOptions,DataStorePages,DataStoreService,DataStoreSetOptions,DataStoreVersionPages,Debris,DebugSettings,DebuggablePluginWatcher,DebuggerBreakpoint,DebuggerConnection,DebuggerConnectionManager,DebuggerLuaResponse,DebuggerManager,DebuggerUIService,DebuggerVariable,DebuggerWatch,Decal,DeferredAssetManagerService,DepthOfFieldEffect,DesignFoundationsService,DeviceDisplayService,DeviceIdService,Dialog,DialogChoice,DigitsRigDescription,DisplayWakeLock,DistortionSoundEffect,DockWidgetPluginGui,DoubleConstrainedValue,DraftsService,DragDetector,Dragger,DraggerService,DynamicRotate,EchoSoundEffect,EditableImage,EditableMesh,EditableService,EncodingService,EqualizerSoundEffect,EulerRotationCurve,EventIngestService,ExampleV2Service,ExecutedRemoteCommand,ExperienceAuthService,ExperienceInviteOptions,ExperienceNotificationService,ExperienceService,ExperienceStateCaptureService,ExperienceStateRecordingService,ExplorerFilter,ExplorerFilterAutocompleter,ExplorerServiceVisibilityService,Explosion,FaceAnimatorService,FaceControls,FaceInstance,FacialAgeEstimationService,FacialAnimationRecordingService,FacialAnimationStreamingServiceStats,FacialAnimationStreamingServiceV2,FacialAnimationStreamingSubsessionStats,FacsImportData,Feature,FeatureRestrictionManager,File,FileManagerService,FileMesh,FileSyncReplicationService,Fire,Flag,FlagStand,FlagStandService,FlangeSoundEffect,FloatCurve,FloorWire,FluidForceSensor,FlyweightService,Folder,ForceField,FormFactorPart,Frame,FriendPages,FriendService,FunctionalTest,GamePassService,GameSettings,GamepadService,GeneratedFolder,GenerationService,GenericChallengeService,GenericSettings,Geometry,GeometryService,GetTextBoundsParams,GlobalDataStore,GlobalSettings,Glue,GongService,GroundController,GroupImportData,GroupService,GuiBase,GuiBase2d,GuiBase3d,GuiButton,GuiLabel,GuiMain,GuiObject,GuiService,GuidRegistryService,HSRDataContentProvider,HandleAdornment,Handles,HandlesBase,HapticEffect,HapticService,HarmonyService,Hat,HeapProfilerService,HeatmapQueryService,HeatmapService,HeightmapImporterService,HiddenSurfaceRemovalAsset,Highlight,HingeConstraint,Hint,Hole,Hopper,HopperBin,HttpRbxApiService,HttpRequest,HttpService,Humanoid,HumanoidController,HumanoidDescription,HumanoidRigDescription,IKControl,ILegacyStudioBridge,IXPService,ImageButton,ImageHandleAdornment,ImageLabel,ImageScreenCaptureService,ImportSession,IncrementalPatchBuilder,InputAction,InputBinding,InputContext,InputObject,InsertService,Instance,InstanceAdornment,InstanceExtensionsService,InstanceFileSyncService,IntConstrainedValue,IntValue,InternalMessagingService,InternalMessagingServiceVerifier,IntersectOperation,InventoryPages,JointImportData,JointInstance,JointsService,KeyboardService,Keyframe,KeyframeMarker,KeyframeSequence,KeyframeSequenceProvider,LanguageService,LayerCollector,LegacyStudioBridge,Light,Lighting,LineForce,LineHandleAdornment,LinearVelocity,LinkingService,LiveScriptingService,LiveSyncService,LocalDebuggerConnection,LocalScript,LocalStorageService,LocalizationService,LocalizationTable,LodDataEntity,LodDataService,LogReporterService,LogService,LoginService,LuaSettings,LuaSourceContainer,LuaWebService,LuauScriptAnalyzerService,MLModelDeliveryService,MLService,MLSession,MakeupDescription,ManualGlue,ManualSurfaceJointInstance,ManualWeld,MarkerCurve,MarketplaceService,MatchmakingService,MaterialGenerationService,MaterialImportData,MaterialService,MaterialVariant,MemStorageConnection,MemStorageService,MemoryStoreHashMap,MemoryStoreHashMapPages,MemoryStoreQueue,MemoryStoreService,MemoryStoreSortedMap,MeshContentProvider,MeshImportData,MeshPart,Message,MessageBusConnection,MessageBusService,MessagingService,MetaBreakpoint,MetaBreakpointContext,MetaBreakpointManager,MicroProfilerService,Model,ModerationService,ModuleScript,Motor,Motor6D,MotorFeature,Mouse,MouseService,MultipleDocumentInterfaceInstance,NegateOperation,NetworkClient,NetworkMarker,NetworkPeer,NetworkReplicator,NetworkServer,NetworkSettings,NoCollisionConstraint,Noise,NonReplicatedCSGDictionaryService,NotificationService,NumberPose,NumberValue,Object,ObjectValue,OmniRecommendationsService,OpenCloudApiV1,OpenCloudService,OperationGraph,OrderedDataStore,OutfitPages,OutputLink,PVAdornment,PVInstance,PackageLink,PackageService,PackageUIService,Packages,Pages,Pants,ParabolaAdornment,Part,PartAdornment,PartOperation,PartOperationAsset,ParticleEmitter,PartyEmulatorService,PatchBundlerFileWatch,PatchMapping,Path,Path2D,PathfindingLink,PathfindingModifier,PathfindingService,PausedState,PausedStateBreakpoint,PausedStateException,PerformanceControlService,PermissionsService,PhysicsService,PhysicsSettings,PitchShiftSoundEffect,PlaceAssetIdsService,PlaceStatsService,PlacesService,Plane,PlaneConstraint,Platform,PlatformCloudStorageService,PlatformFriendsService,PlatformLibraries,Player,PlayerData,PlayerDataRecord,PlayerDataRecordConfig,PlayerDataService,PlayerEmulatorService,PlayerGui,PlayerHydrationService,PlayerListConfiguration,PlayerMouse,PlayerScripts,PlayerViewService,Players,Plugin,PluginAction,PluginCapabilities,PluginConnection,PluginConnectionService,PluginDebugService,PluginDragEvent,PluginGui,PluginGuiService,PluginManagementService,PluginManager,PluginManagerInterface,PluginMenu,PluginMouse,PluginPolicyService,PluginToolbar,PluginToolbarButton,PointLight,PointsService,PolicyService,PopLatencyService,Pose,PoseBase,PostEffect,Preloaded,PrismaticConstraint,ProceduralBehaviorSchedulerService,ProceduralModel,ProcessInstancePhysicsService,ProximityPrompt,ProximityPromptService,PublishService,PyramidHandleAdornment,QWidgetPluginGui,RTAnimationTracker,RayValue,RbxAnalyticsService,RealtimeMedia,RecommendationPages,RecommendationService,ReflectionMetadata,ReflectionMetadataCallbacks,ReflectionMetadataClass,ReflectionMetadataClasses,ReflectionMetadataEnum,ReflectionMetadataEnumItem,ReflectionMetadataEnums,ReflectionMetadataEvents,ReflectionMetadataFunctions,ReflectionMetadataItem,ReflectionMetadataMember,ReflectionMetadataProperties,ReflectionMetadataYieldFunctions,ReflectionService,RelativeGui,RemoteCommandService,RemoteCursorService,RemoteDebuggerServer,RemoteEvent,RemoteFunction,RenderSettings,RenderingTest,ReplicatedFirst,ReplicatedStorage,ReverbSoundEffect,RibbonNotificationService,RigidConstraint,RobloxPluginGuiService,RobloxReplicatedStorage,RobloxSerializableInstance,RobloxServerStorage,RocketPropulsion,RodConstraint,RolloutValidation,RolloutValidationService,RomarkRbxAnalyticsService,RomarkService,RootImportData,RopeConstraint,Rotate,RotateP,RotateV,RotationCurve,RtMessagingService,RunService,RunningAverageItemDouble,RunningAverageItemInt,RunningAverageTimeIntervalItem,RuntimeContentService,RuntimeScriptService,SafetyService,SceneAnalysisService,ScreenGui,ScreenshotCapture,ScreenshotHud,Script,ScriptBuilder,ScriptChangeService,ScriptCloneWatcher,ScriptCloneWatcherHelper,ScriptCommitService,ScriptContext,ScriptDebugger,ScriptDebuggerService,ScriptDocument,ScriptEditorService,ScriptProfilerService,ScriptRegistrationService,ScriptRuntime,ScriptService,ScrollingFrame,Seat,Selection,SelectionBox,SelectionHighlightManager,SelectionLasso,SelectionPartLasso,SelectionPointLasso,SelectionSphere,SelfViewConfiguration,SensorBase,SerializationService,ServerReplicator,ServerScriptService,ServerStorage,ServiceProvider,ServiceVisibilityService,SessionCheckService,SessionService,SharedTableRegistry,Shirt,ShirtGraphic,SkateboardController,SkateboardPlatform,Skin,Sky,SlidingBallConstraint,SlimAnimationDataEntity,SlimAnimationReplicationService,SlimContentProvider,SlimDebugSettings,SlimReplicationService,SlimService,Smoke,SmoothVoxelsUpgraderService,Snap,SnippetService,SocialService,SolidModelContentProvider,Sound,SoundEffect,SoundGroup,SoundService,SoundShimService,Sparkles,SpawnLocation,SpawnerService,SpecialMesh,SphereHandleAdornment,SpotLight,SpringConstraint,StackFrame,StandalonePluginScripts,StandardPages,StartPageService,StarterCharacterScripts,StarterGear,StarterGui,StarterPack,StarterPlayer,StarterPlayerScripts,StartupMessageService,Stats,StatsItem,Status,StopWatchReporter,StringValue,Studio,StudioActionOverride,StudioAssetService,StudioAttachment,StudioCallout,StudioCameraService,StudioCaptureService,StudioData,StudioDeviceEmulatorService,StudioDeviceSimulatorService,StudioObjectBase,StudioPublishService,StudioScreenshotCapture,StudioScriptDebugEventListener,StudioSdkService,StudioService,StudioTestService,StudioTheme,StudioUserService,StudioWidget,StudioWidgetsService,StyleBase,StyleDerive,StyleLink,StyleQuery,StyleRule,StyleSheet,StylingService,SunRaysEffect,SurfaceAppearance,SurfaceGui,SurfaceGuiBase,SurfaceLight,SurfaceSelection,SwimController,SyncScriptBuilder,SystemThemeService,TaskScheduler,Team,TeamCreateData,TeamCreatePublishService,TeamCreateService,Teams,TelemetryService,TeleportAsyncResult,TeleportOptions,TeleportService,TemporaryCageMeshProvider,TemporaryScriptService,Terrain,TerrainDetail,TerrainIterateOperation,TerrainModifyOperation,TerrainReadOperation,TerrainRegion,TerrainWriteOperation,TestCase,TestService,TextBox,TextBoxService,TextButton,TextChannel,TextChannelWindow,TextChatCommand,TextChatConfigurations,TextChatMessage,TextChatMessageProperties,TextChatService,TextFilterResult,TextFilterTranslatedResult,TextGenerator,TextLabel,TextService,TextSource,Texture,TextureGenerationPartGroup,TextureGenerationService,TextureGenerationUnwrappingRequest,ThirdPartyUserService,ThreadState,TimerService,ToastNotificationService,Tool,Torque,TorsionSpringConstraint,TotalCountTimeIntervalItem,TouchInputService,TouchTransmitter,TraceRouteService,TracerService,TrackerLodController,TrackerStreamAnimation,Trail,Translator,TremoloSoundEffect,TriangleMeshPart,TrussPart,TutorialService,Tween,TweenBase,TweenService,UGCAvatarService,UGCValidationService,UIAspectRatioConstraint,UIBase,UIComponent,UIConstraint,UICorner,UIDragDetector,UIDragDetectorService,UIFlexItem,UIGradient,UIGridLayout,UIGridStyleLayout,UILayout,UIListLayout,UIPadding,UIPageLayout,UIScale,UIShadow,UISizeConstraint,UIStroke,UITableLayout,UITextSizeConstraint,UnionOperation,UniqueIdLookupService,UniversalConstraint,UnreliableRemoteEvent,UnvalidatedAssetService,UserGameSettings,UserInputService,UserService,UserSettings,UserStorageService,VRService,VRStatusService,ValueBase,ValueCurve,Vector3Curve,Vector3Value,VectorForce,VehicleController,VehicleSeat,VelocityMotor,VersionControlService,VideoCapture,VideoCaptureService,VideoDeviceInput,VideoDisplay,VideoFrame,VideoPlayer,VideoSampler,VideoScreenCaptureService,VideoService,ViewportFrame,VirtualInput,VirtualInputManager,VirtualUser,VisibilityCheckDispatcher,Visit,VisualizationMode,VisualizationModeCategory,VisualizationModeService,VoiceChatInternal,VoiceChatService,VoxelBuffer,WebSocketClient,WebSocketService,WebStreamClient,WebViewService,WedgePart,Weld,WeldConstraint,Wire,WireframeHandleAdornment,Workspace,WorkspaceAnnotation,WorldModel,WorldRoot,WrapDeformMeshProvider,WrapDeformer,WrapLayer,WrapTarget,WrapTextureTransfer`.split(`,`)),si=new Set(`WaitForChild`.split(`,`)),ci={AccountService:`GetCredentialsHeaders,GetDeviceAccessToken,GetDeviceIntegrityTokenYield`,AchievementService:`GrantAchievement,HasAchieved`,AdService:`GetAdAvailabilityNowAsync,GetAdAvailabilityNowForUniverseAsync,GetCampaignEligibilityAsync,RegisterAdOpportunityAsync,ShowRewardedVideoAdAsync,ShowRewardedVideoAdAtClientAsync`,AnalyticsService:`GetPlayerSegmentsAsync`,AnimationClipProvider:`GetAnimationClipAsync,GetAnimations,GetAnimationsAsync,GetClipEvaluatorAsync`,AnimationFromVideoCreatorService:`CreateJob,DownloadJobResult,FullProcess,GetJobStatus`,AnimationFromVideoCreatorStudioService:`CreateAnimationByUploadingVideo,ImportVideoWithPrompt`,AnnotationsService:`CreateOrUpdateChannelPreferenceAsync,CreateOrUpdatePlacePreferenceAsync,GetChannelPreferenceAsync,GetPlacePreferenceAsync`,AppAgeSignalsService:`GetAppAgeSignalsAsync`,AssetImportService:`GetFilesInDirAsync,PickFileWithPromptAsync,PickImageFileWithPrompt,PickMeshFileWithPrompt,PickMultipleFilesWithPrompt,StartSessionWithPathAsync,UploadAssetFromContentAsync,UploadAssetFromPathAsync,UploadVersionedAssetFromContentAsync,UploadVersionedAssetFromPathAsync`,AssetManagerService:`AddNewPlace,CreateAlias,DeleteAlias,RemovePlace,RenameAlias,RenameModel,RenamePlace`,AssetQualityService:`FetchAssetQualitySummaryFromGltfAsync,FetchAssetQualitySummaryFromJobIdAsync,FetchAssetQualityValidationEntriesFromModelsAsync,FetchAssetQualityVisualizationDataFromUrlAsync,GenerateAssetQualityGltfFromInstanceAsync`,AssetService:`CachePartOperationsAsync,CanEditAssetAsync,ComposeDecalAsync,CreateAssetAsync,CreateAssetVersionAsync,CreateDataModelContentAsync,CreateEditableImageAsync,CreateEditableMeshAsync,CreateMeshPartAsync,CreatePlaceAsync,CreatePlaceInPlayerInventoryAsync,CreateSurfaceAppearanceAsync,GetAssetIdsForPackage,GetAssetIdsForPackageAsync,GetAudioMetadataAsync,GetBundleDetailsAsync,GetCreatorAssetID,GetGamePlacesAsync,LoadAssetAsync,PromptCreateAssetAsync,PromptImportAnimationClipFromVideoAsync,SavePlaceAsync,SearchAudio,SearchAudioAsync`,AudioPages:`AdvanceToNextPageAsync`,AudioPlayer:`GetWaveformAsync`,AudioRecorder:`CanRecordAsync,GetUnrecordableInstancesAsync,RecordAsync`,AudioTextToSpeech:`GetWaveformAsync,LoadAsync`,AvatarChatService:`GetClientFeaturesAsync,GetServerFeaturesAsync`,AvatarCreationService:`AutoSetupAvatarAsync,CreateCageMeshPartsWithScaleForExportAsync,GenerateAvatar2DPreviewAsync,GenerateAvatarAsync,GetBatchTokenDetailsAsync,LoadAvatar2DPreviewAsync,LoadGeneratedAvatarAsync,PrepareAvatarForPreviewAsync,PromptCreateAvatarAssetAsync,PromptCreateAvatarAsync,PromptSelectAvatarGenerationImageAsync,RequestAvatarGenerationSessionAsync,ValidateUGCAccessoryAsync,ValidateUGCBodyPartAsync,ValidateUGCFullBodyAsync`,AvatarEditorService:`CheckApplyDefaultClothing,CheckApplyDefaultClothingAsync,ConformToAvatarRules,ConformToAvatarRulesAsync,GetAvatarRules,GetAvatarRulesAsync,GetBatchItemDetails,GetBatchItemDetailsAsync,GetBundlesByAssetIdAsync,GetFavorite,GetFavoriteAsync,GetHeadShapesAsync,GetInventory,GetInventoryAsync,GetItemDetails,GetItemDetailsAsync,GetOutfitDetails,GetOutfitDetailsAsync,GetOutfits,GetOutfitsAsync,GetRecommendedAssets,GetRecommendedAssetsAsync,GetRecommendedBundles,GetRecommendedBundlesAsync,SearchCatalog,SearchCatalogAsync`,AvatarImportService:`ImportFBXAnimationFromFilePathUserMayChooseModel,ImportFBXAnimationUserMayChooseModel,ImportFbxRigWithoutSceneLoad,ImportLoadedFBXAnimation,LoadRigAndDetectType`,BadgeService:`AwardBadge,AwardBadgeAsync,CheckUserBadgesAsync,GetBadgeInfoAsync,IsDisabled,IsLegal,UserHasBadge,UserHasBadgeAsync`,BanHistoryPages:`AdvanceToNextPageAsync`,BasePart:`IntersectAsync,SubtractAsync,UnionAsync`,BindableFunction:`Invoke`,BugReporterService:`IsAvailable`,CaptureService:`CheckUploadCaptureStatusAsync,CreatePostAsync,DeleteCapturesAsync,DeleteVideoCaptureAsync,GetCaptureFilePathAsync,GetCaptureSizeAsync,GetCaptureStorageSizeAsync,GetCaptureUploadDataAsync,InternalCheckPlayabilityAsync,InternalGetStartPlaceIdAsync,PromptCaptureGalleryPermissionAsync,ReadCapturesFromGalleryAsync,SaveCapturesToExternalStorageAsync,StartUploadCaptureAsync,StartVideoCaptureAsync,StartVideoCaptureInternalAsync,UploadCaptureAsync`,CapturesPages:`AdvanceToNextPageAsync`,CatalogPages:`AdvanceToNextPageAsync`,Chat:`CanUserChatAsync,CanUsersChatAsync,FilterStringAsync,FilterStringForBroadcast,FilterStringForPlayerAsync`,CommerceService:`GetCommerceProductInfoAsync,PrepareCommerceProductPurchase,UserEligibleForRealWorldCommerceAsync`,ConfigService:`GetConfigAsync,GetConfigForPlayerAsync`,ContentProvider:`PreloadAsync`,ContextActionService:`GetButton`,CornerWedgePart:`IntersectAsync,SubtractAsync,UnionAsync`,CreatorStoreService:`GetAssetInfoAsync,GetCreatorStoreProductInfoAsync,PerformCreatorStorePurchase`,DataModel:`GetObjectsAsync,HttpGetAsync,HttpPostAsync,InsertObjectsAndJoinIfLegacyAsync,SavePlace`,DataStore:`GetAsync,GetVersionAsync,GetVersionAtTimeAsync,IncrementAsync,ListKeysAsync,ListVersionsAsync,RemoveAsync,RemoveVersionAsync,SetAsync,UpdateAsync`,DataStoreKeyPages:`AdvanceToNextPageAsync`,DataStoreListingPages:`AdvanceToNextPageAsync`,DataStorePages:`AdvanceToNextPageAsync`,DataStoreService:`ListDataStoresAsync`,DataStoreVersionPages:`AdvanceToNextPageAsync`,DraftsService:`CommitEdits,GetDrafts,UpdateToLatestVersion`,ExperienceNotificationService:`CanPromptOptInAsync`,ExperienceStateRecordingService:`LoadPlaybackAsync`,FacialAgeEstimationService:`InquiryAsync`,FacialAnimationRecordingService:`CheckOrRequestCameraPermission`,FacialAnimationStreamingServiceV2:`ResolveStateForUser`,FileManagerService:`ListFilesInFolderAsync`,FlagStand:`IntersectAsync,SubtractAsync,UnionAsync`,FluidForceSensor:`EvaluateAsync`,FormFactorPart:`IntersectAsync,SubtractAsync,UnionAsync`,FriendPages:`AdvanceToNextPageAsync`,FriendService:`GetPlatformFriends`,GamePassService:`PlayerHasPass`,GenerationService:`ConnectAsync,DisconnectAsync,GenerateMeshAsync,GenerateModelAsync,GetVideoGenSessionAsync,GetVideoGenTriggersAsync,InternalGenerateMeshAsync,LoadGeneratedMeshAsync,LoadModelFromGlbAsync,StartVideoGenSessionAsync,UpdateVideoGenSessionPromptAsync,UpdateVideoGenSessionTriggersAsync`,GeometryService:`FragmentAsync,HashMeshAsync,IntersectAsync,SubtractAsync,SweepPartAsync,UnionAsync`,GlobalDataStore:`GetAsync,IncrementAsync,RemoveAsync,SetAsync,UpdateAsync`,GroupService:`GetAlliesAsync,GetEnemiesAsync,GetGroupInfoAsync,GetGroupsAsync,GetRolesInGroupAsync,PromptJoinAsync`,GuiService:`GetScreenResolution`,HeapProfilerService:`ClientRequestDataAsync,ServerRequestDataAsync`,HeightmapImporterService:`GetHeightmapPreviewAsync,ImportHeightmap`,HttpRbxApiService:`GetAsync,GetAsyncFullUrl,PostAsync,PostAsyncFullUrl,RequestAsync,RequestLimitedAsync`,HttpService:`GetAsync,JSONDecodeAsync,JSONEncodeAsync,PostAsync,RequestAccessTokenScopesAsync,RequestAsync`,Humanoid:`ApplyAvatarRules,ApplyDescription,ApplyDescriptionAsync,ApplyDescriptionReset,ApplyDescriptionResetAsync,PlayEmote,PlayEmoteAndGetAnimTrackById,PlayEmoteAsync`,InsertService:`CreateMeshPartAsync,GetBaseCategories,GetBaseSets,GetCollection,GetFreeDecals,GetFreeDecalsAsync,GetFreeModels,GetFreeModelsAsync,GetLatestAssetVersionAsync,GetUserCategories,GetUserSets,LoadAsset,LoadAssetVersion,LoadAssetWithBytecodeAsync,LoadAssetWithFormat,LoadPackageAssetAsync,loadAsset`,IntersectOperation:`IntersectAsync,SubtractAsync,UnionAsync`,InventoryPages:`AdvanceToNextPageAsync`,KeyframeSequenceProvider:`GetAnimations,GetAnimationsAsync,GetKeyframeSequenceAsync`,LanguageService:`GetCapabilitiesUsedInPackageAsync`,LinkingService:`OpenUrl,SupportsSwitchToSettingsApp,SwitchToSettingsApp`,LocalizationService:`GetCountryRegionForPlayerAsync,GetTranslatorForLocaleAsync,GetTranslatorForPlayerAsync,PromptDownloadGameTableToCSV,PromptExportToCSVs,PromptImportFromCSVs,PromptUploadCSVToGameTable`,MLService:`CreateSessionAsync,GetNPCInferenceSpecAsync,LoadPostProcessModelAsync,RunNPCInferenceAsync`,MLSession:`ForwardAsync`,MarketplaceService:`GetAvailableSubscriptionProductsAsync,GetDeveloperProductsAsync,GetProductInfo,GetProductInfoAsync,GetRobloxSubscriptionDetailsAsync,GetRobuxBalance,GetSubscriptionProductInfoAsync,GetSubscriptionPurchaseInfoAsync,GetUserSubscriptionDetailsAsync,GetUserSubscriptionDetailsInternalAsync,GetUserSubscriptionPaymentHistoryAsync,GetUserSubscriptionStatusAsync,GetUsersPriceLevelsAsync,PerformBulkPurchase,PerformCancelSubscription,PerformPurchase,PerformPurchaseV2,PerformSubscriptionPurchase,PerformSubscriptionPurchaseV2,PerformSubscriptionPurchaseV3Async,PerformSubscriptionPurchaseWithRobuxAsync,PlayerOwnsAsset,PlayerOwnsAssetAsync,PlayerOwnsBundle,PlayerOwnsBundleAsync,PromptRobuxTransferAsync,RankProductsAsync,RecommendTopProductsAsync,UserOwnsGamePassAsync`,MaterialGenerationService:`GenerateMaterialVariantsAsync`,MemoryStoreHashMap:`GetAsync,ListItemsAsync,RemoveAsync,SetAsync,UpdateAsync`,MemoryStoreHashMapPages:`AdvanceToNextPageAsync`,MemoryStoreQueue:`AddAsync,GetSizeAsync,ReadAsync,RemoveAsync`,MemoryStoreSortedMap:`GetAsync,GetRangeAsync,GetSizeAsync,RemoveAsync,SetAsync,UpdateAsync`,MeshPart:`IntersectAsync,SubtractAsync,UnionAsync`,MessagingService:`PublishAsync,SubscribeAsync`,MicroProfilerService:`DumpToFileAsync`,ModerationService:`CreateReviewableContentAsync,InternalRequestReviewableContentReviewAsync`,NegateOperation:`IntersectAsync,SubtractAsync,UnionAsync`,NotificationService:`GetScheduledNotifications`,OpenCloudApiV1:`CreateUserNotificationAsync`,OpenCloudService:`HttpRequestAsync,InvokeAsync`,OrderedDataStore:`GetAsync,GetSortedAsync,IncrementAsync,RemoveAsync,SetAsync,UpdateAsync`,OutfitPages:`AdvanceToNextPageAsync`,PackageService:`UpdateAsync`,PackageUIService:`ConvertToPackageAsync,GetPackageInfo,PublishPackage,SetPackageVersion`,Pages:`AdvanceToNextPageAsync`,Part:`IntersectAsync,SubtractAsync,UnionAsync`,PartOperation:`IntersectAsync,SubtractAsync,UnionAsync`,PartyEmulatorService:`GetEmulatedPartyAsync`,Path:`CheckOcclusionAsync,ComputeAsync`,PathfindingService:`ComputeRawPathAsync,ComputeSmoothPathAsync,FindPathAsync`,Platform:`IntersectAsync,SubtractAsync,UnionAsync`,PlatformCloudStorageService:`GetUserDataAsync,SetUserDataAsync`,PlatformFriendsService:`GetPartyMembers`,Player:`GetCanManageAsync,GetFriendsOnline,GetFriendsOnlineAsync,GetFriendsWhoPlayedAsync,GetRankInGroup,GetRankInGroupAsync,GetRoleInGroup,GetRoleInGroupAsync,IsBestFriendsWith,IsFriendsWith,IsFriendsWithAsync,IsInGroup,IsInGroupAsync,LoadCharacter,LoadCharacterAsync,LoadCharacterBlocking,LoadCharacterWithAvatarRules,LoadCharacterWithHumanoidDescription,LoadCharacterWithHumanoidDescriptionAsync,PromptSecurityChallengeAsync,RequestStreamAroundAsync,WaitForDataReady,isFriendsWith,waitForDataReady`,PlayerData:`GetRecordAsync`,PlayerDataRecord:`ReleaseAsync,RequestFlushAsync`,Players:`BanAsync,CreateHumanoidModelFromDescription,CreateHumanoidModelFromDescriptionAsync,CreateHumanoidModelFromUserId,CreateHumanoidModelFromUserIdAsync,GetBanHistoryAsync,GetCharacterAppearanceAsync,GetCharacterAppearanceInfoAsync,GetFriendsAsync,GetHumanoidDescriptionFromOutfitId,GetHumanoidDescriptionFromOutfitIdAsync,GetHumanoidDescriptionFromUserId,GetHumanoidDescriptionFromUserIdAsync,GetNameFromUserIdAsync,GetProfileConfigurationFromUserIdAsync,GetUserIdFromNameAsync,GetUserThumbnailAsync,UnbanAsync`,Plugin:`CreateDockWidgetPluginGui,CreateDockWidgetPluginGuiAsync,CreateQWidgetPluginGui,ImportFbxAnimation,ImportFbxAnimationAsync,ImportFbxRig,ImportFbxRigAsync,PromptForExistingAssetId,PromptForExistingAssetIdAsync,PromptSaveSelection,PromptSaveSelectionAsync`,PluginManagementService:`GetOTAPluginVersion`,PluginMenu:`ShowAsync`,PointsService:`AwardPoints,GetGamePointBalance,GetPointBalance`,PolicyService:`CanViewBrandProjectAsync,GetPolicyInfoForPlayerAsync,GetPolicyInfoForServerRobloxOnlyAsync`,ProceduralModel:`WaitForGenerationAsync`,PublishService:`CreateAssetAndWaitForAssetId,CreateAssetOrAssetVersionAndPollAssetWithTelemetryAsync,CreateAssetOrAssetVersionAndPollAssetWithTelemetryAsyncWithAddParam,CreateAssetOrAssetVersionAndPollAssetWithTelemetryAsyncWithAddParamErrorJson,PublishCageMeshAsync,PublishDescendantAssetsAsync`,RealtimeMedia:`ConnectAsync`,RecommendationPages:`AdvanceToNextPageAsync`,RecommendationService:`GenerateItemListAsync,GetRecommendationItemAsync,RegisterItemAsync,RemoveItemAsync,UpdateItemAsync`,RemoteCommandService:`ExecuteCommandAsync`,RemoteFunction:`InvokeClient,InvokeServer`,SceneAnalysisService:`GetAnimationMemoryAsync,GetAudioMemoryAsync,GetInstanceCompositionAsync,GetScriptMemoryAsync,GetTriangleCompositionAsync,GetUnparentedInstancesAsync`,ScriptDocument:`CloseAsync,EditTextAsync,ForceSetSelectionAsync,MultiEditTextAsync,RequestSetSelectionAsync`,ScriptEditorService:`EditSourceAsyncWithRanges,OpenScriptDocumentAsync,UpdateSourceAsync`,Seat:`IntersectAsync,SubtractAsync,UnionAsync`,SerializationService:`DeserializeInstancesAsync,SerializeInstancesAsync`,SkateboardPlatform:`IntersectAsync,SubtractAsync,UnionAsync`,SocialService:`CanSendCallInviteAsync,CanSendGameInviteAsync,GetEventRsvpStatusAsync,GetExperienceEventAsync,GetPartyAsync,GetUpcomingExperienceEventsAsync,PromptFeedbackSubmissionAsync,PromptLinkSharing,PromptLinkSharingAsync,PromptRsvpToEventAsync`,SoundService:`EndRecording,GetRecordingDevices`,SpawnLocation:`IntersectAsync,SubtractAsync,UnionAsync`,StandardPages:`AdvanceToNextPageAsync`,StarterGui:`GetCore`,Stats:`GetPaginatedMemoryByTexture`,StudioAssetService:`AutoSetupAvatarAsync,AutoSetupSerializedAvatarAsync,CancelAutoSetupAvatarAsync,DEPRECATED_SerializeInstances,PromptSaveInstanceToRobloxAsync,RequestAvatarAutosetupAsync,SerializeInstances`,StudioCaptureService:`RequestScreenshotPermissionAsync`,StudioDeviceEmulatorService:`EmulatePCDeviceWithResolution,GetCurrentDeviceId,GetCurrentOrientation,HasDeviceWithId,SetCurrentDeviceId,SetCurrentOrientation`,StudioDeviceSimulatorService:`CreateDeviceAsync,GetDeviceAsync,GetDeviceInfoAsync,GetDeviceListAsync,GetOrientationAsync,GetPixelDensityAsync,GetResolutionAsync,GetScalingModeAsync,RemoveDeviceAsync,SetDeviceAsync,SetOrientationAsync,SetPixelDensityAsync,SetResolutionAsync,SetScalingModeAsync,StopSimulationAsync,UpdateDeviceAsync`,StudioScreenshotCapture:`ScaleAsync`,StudioService:`PromptImportFile,PromptImportFileAsync,PromptImportFiles,PromptImportFilesAsync,TryInstallPlugin`,StudioTestService:`ExecuteMultiplayerTestAsync,ExecutePlayModeAsync,ExecuteRunModeAsync`,SystemThemeService:`getSystemThemeAsync`,TeleportService:`GetPlayerPlaceInstanceAsync,PromptExperienceDetailsAsync,ReserveServer,ReserveServerAsync,TeleportAsync,TeleportPartyAsync,UnblockAsync`,Terrain:`DrawBufferAsync,IntersectAsync,ReadBufferAsync,SubtractAsync,UnionAsync`,TestService:`CaptureScreenshotAsync,RequestValidationAsync,Run,RunAsync,StartVideoCaptureAsync,StopVideoCaptureAsync`,TextChannel:`AddUserAsync,SendAsync,SendDictatedSpeechAsync,SendInternalAsync,SendPresetAsync`,TextChatService:`CanUserChatAsync,CanUsersChatAsync,CanUsersDirectChatAsync,CanUsersWhisperAsync,GetChatGroupsAsync,GetChatableUserCountAsync,GetPresetsAsync,OnUserChatSettingUpdateAsync,SendDictatedSpeechUniverseChatAsync,SendUniverseChatMessageAsync,SendUniverseChatPresetAsync`,TextFilterResult:`GetChatForUserAsync,GetNonChatStringForBroadcastAsync,GetNonChatStringForUserAsync`,TextGenerator:`GenerateTextAsync`,TextService:`FilterAndTranslateStringAsync,FilterStringAsync,GetFamilyInfoAsync,GetTextBoundsAsync,GetTextSizeOffsetAsync`,TextureGenerationService:`GetQuotasAsync`,ThirdPartyUserService:`RegisterActiveUser`,TriangleMeshPart:`IntersectAsync,SubtractAsync,UnionAsync`,TrussPart:`IntersectAsync,SubtractAsync,UnionAsync`,UGCValidationService:`CalculateBodyMaxCageDistance,CanLoadAsset,CreateEditableImageOriginalSizeAsync,DoesMeshHaveSkinningData,DoesSurfaceAppearanceMatchTexturePackAsync,FetchAssetWithFormat,GetMeshDataBinaryString,GetMeshVerts,IsDeformedLayeredClothingOutOfRenderBounds`,UnionOperation:`IntersectAsync,SubtractAsync,UnionAsync`,UserService:`GetUserFromGlobalUserIdAsync,GetUserInfosByUserIdsAsync`,VehicleSeat:`IntersectAsync,SubtractAsync,UnionAsync`,VideoPlayer:`LoadAsync`,VideoSampler:`GetSamplesAtTimesAsync`,VideoService:`CreateVideoSamplerAsync`,ViewportFrame:`CaptureSnapshotAsync`,VirtualInputManager:`WaitForInputEventsProcessed`,VoiceChatInternal:`IsVoiceEnabledForUserIdAsync`,VoiceChatService:`GetChatGroupsAsync,IsVoiceEnabledForUserIdAsync`,VoxelBuffer:`ClearAsync,DrawBufferAsync,FromHeightmapAsync,NormalizeAsync,UnclampAsync`,WebViewService:`IsAvailable`,WedgePart:`IntersectAsync,SubtractAsync,UnionAsync`,WrapDeformer:`CreateEditableMeshAsync,GetDeformedCFrameAsync`};function li(e,t){return oi.has(e)?si.has(t)?!0:ci[e]?.split(`,`).includes(t)===!0:!1}const ui=[`PlanckSystem`,`System`,`SystemFunction`,`SystemReturn`,`SystemTableLike`],di=new Set([`comments`,`loc`,`parent`,`range`,`tokens`]);function fi(e,t){if(e.type===`Identifier`)return e.name;if(t&&e.type===`TSQualifiedName`)return fi(e.right,t)}function pi(e,t=!0){if(e!=null){if(e.type===`TSTypeAnnotation`)return pi(e.typeAnnotation,t);if(e.type===`TSUnionType`){let n;for(let r of e.types){if(r.type===`TSUndefinedKeyword`||r.type===`TSNullKeyword`)continue;let e=pi(r,t);if(e===void 0||n!==void 0)return;n=e}return n}if(e.type===`TSTypeReference`)return fi(e.typeName,t)}}function mi(e,t){let n=pi(e);return n!==void 0&&t.has(n)}function hi(e,t){for(let n of Object.keys(e)){if(di.has(n))continue;let r=Reflect.get(e,n);r!=null&&t.push(r)}}function gi(e,t){let n=[e];for(;n.length>0;){let e=n.pop();if(!(typeof e!=`object`||!e)){if(Array.isArray(e)){for(let t of e)n.push(t);continue}D(e)&&t(e)!==!1&&hi(e,n)}}}function _i(e){if(e.type===`Property`)return e.computed?e.key.type===`Literal`&&typeof e.key.value==`string`?e.key.value:void 0:e.key.type===`Identifier`?e.key.name:e.key.type===`Literal`&&typeof e.key.value==`string`?e.key.value:void 0}function vi(e,t,n){for(let r of e.properties)if(!(_i(r)!==`system`||r.type!==`Property`)){if(N(r.value))n.add(r.value);else if(r.value.type===`Identifier`){let e=t.get(r.value.name);e!==void 0&&n.add(e)}}}function yi(e){if(e.type===`ImportSpecifier`)return e.imported.type===`Identifier`?e.imported.name:e.imported.value}function bi(e,t){let n=new Map;for(let r of e.body){if(r.type!==`ImportDeclaration`||typeof r.source.value!=`string`)continue;let e=t.getDeclaredVariables(r);for(let t of r.specifiers){let i=yi(t);if(i===void 0)continue;let a=e.find(e=>e.name===t.local.name);a!==void 0&&n.set(a,{imported:i,source:r.source.value})}}return n}function xi(e){let t=[],n=w(e);for(;n.type===`MemberExpression`;){let e=T(n);if(e===void 0)return;t.unshift(e),n=w(n.object)}return n.type===`Identifier`?{path:t,root:n}:void 0}function Si(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function Ci(e,t){return E(e.getScope(t),t.name)}function wi(e,t,n,r,i){gi(e,e=>{if(e.type!==`CallExpression`||e.callee.type!==`MemberExpression`)return;let a=xi(e.callee);if(a===void 0)return;let o=Ci(t,a.root),s=o===void 0?void 0:n.get(o);if(s!==void 0)for(let n of r){if(s.source!==n.source||s.imported!==n.imported||!Si(a.path,n.memberPath))continue;let r=e.arguments[n.callbackArgumentIndex];if(r===void 0||r.type===`SpreadElement`||!N(r))continue;let o=r.params[n.parameterIndex];if(o?.type!==`Identifier`)continue;let c=Ci(t,o);c!==void 0&&i.set(c,n.className)}})}function Ti(e,t,n,r){gi(e,e=>{if(e.type===`VariableDeclarator`&&e.id.type===`Identifier`){let i=e.id.name,a=pi(e.id.typeAnnotation,!1);if(a===void 0||n.has(a))return;let o=t.getDeclaredVariables(e).find(e=>e.name===i);o!==void 0&&r.set(o,a);return}if(!N(e))return;let i=t.getDeclaredVariables(e);for(let t of e.params){if(t.type!==`Identifier`)continue;let e=t.name,a=pi(t.typeAnnotation,!1);if(a===void 0||n.has(a))continue;let o=i.find(t=>t.name===e);o!==void 0&&r.set(o,a)}})}function Ei(e){let t=new Set;return gi(e,e=>{if(e.type===`ImportDeclaration`){for(let n of e.specifiers)t.add(n.local.name);return!1}return(e.type===`TSInterfaceDeclaration`||e.type===`TSTypeAliasDeclaration`||e.type===`ClassDeclaration`||e.type===`TSEnumDeclaration`)&&e.id!==null&&t.add(e.id.name),!0}),t}function Di(e,t){let n=Ci(t,e);if(n?.defs.length!==1)return;let[r]=n.defs;if(r?.node.type!==`VariableDeclarator`)return;let i=r.node.parent;if(!(i.type!==`VariableDeclaration`||i.kind!==`const`))return r.node.init??void 0}function Oi(e,t,n,r,i){let a=w(e);if(a.type===`Identifier`)return ki(a,t,n,r,i);if(!(a.type===`CallExpression`&&a.callee.type===`MemberExpression`&&T(a.callee)===`GetService`&&a.callee.object.type===`Identifier`&&a.callee.object.name===`game`&&!ie(t,a.callee.object,`game`)))return;let[o]=a.arguments;return o?.type===`Literal`&&typeof o.value==`string`?o.value:void 0}function ki(e,t,n,r,i){let a=Ci(t,e);if(a!==void 0){let e=r.get(a);if(e!==void 0)return e;let t=n.get(a);if(t?.source===`@rbxts/services`)return t.imported}let o=Di(e,t);if(!(o===void 0||i.has(o)))return i.add(o),Oi(o,t,n,r,i)}function Ai(e,t,n,r){if(e.callee.type!==`MemberExpression`)return!1;let i=T(e.callee);if(i===void 0)return!1;let a=Oi(e.callee.object,t,n,r,new Set);return a!==void 0&&li(a,i)}function ji(e,t,n,r,i){e.async||e.body===null||gi(e.body,a=>N(a)&&a!==e&&a.async?!1:(a.type===`CallExpression`&&Ai(a,t,n,r)&&i(a),!0))}const Mi=t({create(e){let t=e.options[0]?.additionalSystemTypeNames??[],n=e.options[0]?.callbackParameterTypes??[],r=new Set([...ui,...t]);return{"Program:exit"(t){let i=new Map,a=new Set,o=[],s=bi(t,e.sourceCode),c=new Map;Ti(t,e.sourceCode,Ei(t),c),wi(t,e.sourceCode,s,n,c),gi(t,e=>{if(N(e)){e.id!==null&&i.set(e.id.name,e),mi(e.returnType,r)&&a.add(e);return}if(e.type===`VariableDeclarator`&&e.id.type===`Identifier`){if(!mi(e.id.typeAnnotation,r)||e.init===null)return;N(e.init)?a.add(e.init):e.init.type===`ObjectExpression`&&o.push(e.init);return}e.type===`TSSatisfiesExpression`&&mi(e.typeAnnotation,r)&&e.expression.type===`ObjectExpression`&&o.push(e.expression)});for(let e of o)vi(e,i,a);for(let t of a)ji(t,e.sourceCode,s,c,t=>{e.report({messageId:`noAsyncInSystem`,node:t})})}}},meta:{docs:{description:`Disallow yielding Roblox API calls in synchronous Planck system execution.`,recommended:!0},messages:{noAsyncInSystem:`Do not call a yielding Roblox API from a synchronous Planck system.`},schema:[{additionalProperties:!1,properties:{additionalSystemTypeNames:{items:{type:`string`},type:`array`,uniqueItems:!0},callbackParameterTypes:{items:{additionalProperties:!1,properties:{callbackArgumentIndex:{minimum:0,type:`integer`},className:{type:`string`},imported:{type:`string`},memberPath:{items:{type:`string`},type:`array`},parameterIndex:{minimum:0,type:`integer`},source:{type:`string`}},required:[`callbackArgumentIndex`,`className`,`imported`,`memberPath`,`parameterIndex`,`source`],type:`object`},type:`array`}},type:`object`}],type:`problem`}}),Ni=new Set([`useAsyncEffect`,`useEffect`,`useInsertionEffect`,`useLayoutEffect`,`useMountEffect`,`useReactiveEffect`,`useUnmountEffect`,`useUpdateEffect`]),Pi=t({create(e){return{CallExpression(t){let n=L(t);if(n===void 0||!Ni.has(n))return;let r=Lr(t);if(r===void 0)return;let i=Kr(r);i<3||e.report({data:{count:String(i)},messageId:`cascadingSetState`,node:t})}}},meta:{docs:{description:`Disallow effect hooks with many cascading state updates.`,recommended:!0},messages:{cascadingSetState:`{{count}} setState calls in a single useEffect — consider using useReducer or deriving state`},type:`problem`}});function Fi(e){return Math.round(e>1?e:e*255)}function Ii(e){return{reportUnknownComponents:typeof e==`object`&&e&&`reportUnknownComponents`in e?e.reportUnknownComponents===!0:!0}}function Li(e){let t=[],n=0,r=!0;for(let i of e){if(!We(i))return;let e=Fi(i.value);t[n++]=e,e!==0&&(r=!1)}return[r,t]}const Ri=t({create(e){let t=Ii(e.options[0]);return{NewExpression(n){if(!Ie(n,`Color3`))return;let r=n.arguments;if(r.length===0)return;let i=Li(r);if(!i){t.reportUnknownComponents&&e.report({messageId:r.length<3?`useFromRGB`:`onlyZeroArgs`,node:n});return}if(r.length<3){let[t,r=0]=i[1];e.report({fix:e=>e.replaceText(n,`Color3.fromRGB(${t}, ${r}, 0)`),messageId:`useFromRGB`,node:n});return}i[0]||e.report({fix:e=>e.replaceText(n,`Color3.fromRGB(${i[1].join(`, `)})`),messageId:`onlyZeroArgs`,node:n})}}},meta:{docs:{description:`Ban new Color3(...) except new Color3() or new Color3(0, 0, 0). Use Color3.fromRGB() instead.`},fixable:`code`,messages:{onlyZeroArgs:`Use Color3.fromRGB() instead of new Color3(). new Color3() uses floats [0-1] and performs worse than Color3.fromRGB() which uses [0-255]. Only 'new Color3()' or 'new Color3(0, 0, 0)' are allowed.`,useFromRGB:`Use Color3.fromRGB() instead of new Color3(). new Color3() uses floats [0-1] and performs worse than Color3.fromRGB() which uses [0-255].`},schema:[{additionalProperties:!1,properties:{reportUnknownComponents:{default:!0,type:`boolean`}},type:`object`}],type:`problem`}});function zi(e,t){let n=e.scan(t);return n===0?0:1-(1-e.probability)**n}function Bi(e,t){let n=0;for(let r of e){let e=zi(r,t);n=1-(1-n)*(1-e)}return n}function Vi(e,t){return Bi(e,t)>=.9}function Hi(e,t){return t.some(t=>Vi(e,t))}function Ui(e){return{probability:e,scan(e){for(let t=0;t<e.length-1;t+=1){let n=e.charAt(t),r=e.charAt(t+1);if(n===n.toLowerCase()&&r===r.toUpperCase()&&r!==r.toLowerCase())return 1}return 0}}}const Wi=/\s+/gu;function Gi(e,t){if(t===``)return e.length+1;let n=0,r=0;for(;r<=e.length-t.length;){let i=e.indexOf(t,r);if(i===-1)break;n+=1,r=i+t.length}return n}function Ki(e,t){let n=t.map(e=>y(e)?{pattern:e,type:`string`}:{pattern:new RegExp(e.source,`gu`),type:`regexp`});return{probability:e,scan(e){let t=e.replace(Wi,``),r=0;for(let e of n){if(e.type===`string`){r+=Gi(t,e.pattern);continue}e.pattern.lastIndex=0;let n=t.match(e.pattern);n&&(r+=n.length)}return r}}}const qi=/\s/u;function Ji(e,t){let n=new Set(t);return{probability:e,scan(e){for(let t=e.length-1;t>=0;--t){let r=e.charAt(t);if(n.has(r))return 1;if(!qi.test(r)&&r!==`*`&&r!==`/`)return 0}return 0}}}const Yi=/[ \t(),{}]/u;function Xi(e,t){let n=new Set(t);return{probability:e,scan(e){let t=e.split(Yi),r=0;for(let e of t)n.has(e)&&(r+=1);return r}}}const Zi=`public.abstract.class.implements.extends.return.throw.private.protected.enum.continue.assert.boolean.this.instanceof.interface.static.void.super.true.case:.let.const.var.async.await.break.yield.typeof.import.export`.split(`.`),Qi=[`++`,`||`,`&&`,`===`,`?.`,`??`],$i=[`for(`,`if(`,`while(`,`catch(`,`switch(`,`try{`,`else{`,`this.`,`window.`,/;\s+\/\//u,`import '`,`import "`,`require(`],ea=[`}`,`;`,`{`];function ta(){return[Ji(.95,ea),Xi(.7,Qi),Xi(.3,Zi),Ki(.95,$i),Ui(.5)]}const na=new Set([`BreakStatement`,`ContinueStatement`,`LabeledStatement`]);function ra(e){return na.has(e.type)}function ia(e){return{comments:e,value:e.map(({value:e})=>e).join(`
6
+ `)}}const aa=ta();function oa(e,t,n){let r=e.loc.start.line,i=t.loc.start.line;if(r+1!==i)return!1;let a=n.getTokenAfter(e);return!a||a.loc.start.line>i}function sa(e,t){let n=[],r=0,i=[],a=0;for(let o of e)if(o.type===`Block`)a>0&&(n[r++]=ia(i),i=[],a=0),n[r++]=ia([o]);else if(a===0)i[a++]=o;else{let e=i.at(-1);e&&oa(e,o,t)?i[a++]=o:(n[r++]=ia(i),i=[o],a=1)}return a>0&&(n[r]=ia(i)),n}const ca=/\{/gu,la=/\}/gu;function ua(e){let t=(e.match(ca)??[]).length-(e.match(la)??[]).length;return t>0?e+`}`.repeat(t):t<0?`{`.repeat(-t)+e:e}function da(e){return Hi(aa,e.split(`
7
+ `))}function fa(e){return e.type!==`ReturnStatement`&&e.type!==`ThrowStatement`?!1:e.argument?.type===`Identifier`}function pa(e){return e.type===`UnaryExpression`&&(e.operator===`-`||e.operator===`+`)}function ma(e){return e.type===`Literal`&&(y(e.value)||b(e.value))}function ha(e){return x(e)&&y(e.type)}function ga(e){let t=[],n=0;for(let r of e)ha(r)&&(t[n++]=r);return t}function _a(e,t){if(e.type!==`ExpressionStatement`)return!1;let{expression:n}=e;return n.type===`Identifier`||n.type===`SequenceExpression`||pa(n)||ma(n)||!t.trimEnd().endsWith(`;`)}function va(e,t){if(e.length!==1)return!1;let n=e.at(0);return n?ra(n)||fa(n)||_a(n,t):!1}const ya=[/A 'return' statement can only be used within a function body/u];function ba(e){for(let t of e){let e=!1;for(let n of ya)if(n.test(t.message)){e=!0;break}if(!e)return!1}return!0}function xa(e){return(e.errors.length===0||ba(e.errors))&&e.program.body.length>0}function Sa(e,t){let n=o(t),r=u(`file${n||`.js`}`,e);if(xa(r))return r;if(n!==`.tsx`&&n!==`.jsx`){let t=u(`file.tsx`,e);if(xa(t))return t}}function Ca(e,t){if(!da(e))return!1;let n=Sa(e,t);return n?!va(ga(n.program.body),e):!1}function wa(e){let t=1;for(let n of e)n===`
8
+ `&&(t+=1);return t}const Ta=t({create(e){let{maxLines:t=0}=e.options[0]??{};return{"Program:exit"(){let n=sa(e.sourceCode.getAllComments(),e.sourceCode);for(let r of n){let n=r.value.trim();if(n===`}`||wa(r.value)<=t||!Ca(ua(n),e.filename))continue;let i=r.comments.at(0),a=r.comments.at(-1);i&&a&&e.report({loc:{end:a.loc.end,start:i.loc.start},messageId:`commentedCode`,suggest:[{desc:`Remove this commented out code`,fix(e){return e.removeRange([i.range[0],a.range[1]])}}]})}}}},meta:{docs:{description:`Disallow commented-out code`,recommended:!1},hasSuggestions:!0,messages:{commentedCode:`Commented-out code creates confusion about intent and clutters the codebase. Version control preserves history, making dead code comments unnecessary. Delete the commented code entirely. If needed later, retrieve it from git history.`},schema:[{additionalProperties:!1,properties:{maxLines:{default:0,description:`Maximum number of lines of commented code allowed without reporting. Default 0 means any commented code triggers an error.`,type:`number`}},type:`object`}],type:`suggestion`}});function R(e){return{constant:!0,value:e}}function Ea(){return{constant:!1}}function Da(e){return{constant:!0,value:e}}function Oa(){return{constant:!1}}function ka(e){let t=new Set;if(!e?.loopExitCalls)return t;for(let n of e.loopExitCalls)ne(n)&&t.add(n);return t}function Aa(e){let t=w(e);if(t.type===`Identifier`)return t.name;if(t.type!==`MemberExpression`)return;let n=Aa(t.object);if(n===void 0||n.length===0)return;let r=T(t);if(!(r===void 0||r.length===0))return`${n}.${r}`}function ja(e,t){if(t.size===0)return!1;let n=Aa(e.callee);return n===void 0||n.length===0?!1:t.has(n)}function Ma(e,t){return z(e.type===`SpreadElement`?e.argument:e,t)}function z(e,t){if(t.size===0)return!1;let n=w(e);switch(n.type){case`ArrayExpression`:return Na(n,t);case`ArrowFunctionExpression`:case`ClassExpression`:case`FunctionExpression`:return!1;case`AssignmentExpression`:return z(n.right,t);case`AwaitExpression`:return z(n.argument,t);case`BinaryExpression`:return Pa(n,t);case`CallExpression`:return Fa(n,t);case`ConditionalExpression`:return Ia(n,t);case`LogicalExpression`:return La(n,t);case`MemberExpression`:return Ra(n,t);case`NewExpression`:return za(n,t);case`SequenceExpression`:return n.expressions.some(e=>z(e,t));case`TaggedTemplateExpression`:return Ba(n,t);case`TemplateLiteral`:return n.expressions.some(e=>z(e,t));case`UnaryExpression`:case`UpdateExpression`:return z(n.argument,t);case`YieldExpression`:return n.argument?z(n.argument,t):!1;default:return!1}}function Na(e,t){for(let n of e.elements)if(n!==null&&Ma(n,t))return!0;return!1}function Pa(e,t){let{left:n}=e;return n.type!==`PrivateIdentifier`&&z(n,t)?!0:z(e.right,t)}function Fa(e,t){return ja(e,t)||z(e.callee,t)?!0:e.arguments.some(e=>Ma(e,t))}function Ia(e,t){return z(e.test,t)||z(e.consequent,t)||z(e.alternate,t)}function La(e,t){return z(e.left,t)||z(e.right,t)}function Ra(e,t){return z(e.object,t)?!0:e.computed&&z(e.property,t)}function za(e,t){return z(e.callee,t)?!0:e.arguments.some(e=>Ma(e,t))}function Ba(e,t){return z(e.tag,t)?!0:e.quasi.expressions.some(e=>z(e,t))}function Va(e){let t=w(e);switch(t.type){case`ArrayExpression`:return R([]);case`ArrowFunctionExpression`:case`ClassExpression`:case`FunctionExpression`:return R(!0);case`Identifier`:return t.name===`undefined`?R(void 0):t.name===`NaN`?R(NaN):t.name===`Infinity`?R(1/0):Ea();case`Literal`:return R(t.value);case`LogicalExpression`:return Ha(t);case`ObjectExpression`:return R({});case`SequenceExpression`:{let e=t.expressions.at(-1);return e?Va(e):Ea()}case`TemplateLiteral`:return t.expressions.length>0?Ea():t.quasis.length===0?R(``):R(t.quasis[0]?.value.cooked??``);case`UnaryExpression`:return Ua(t);default:return Ea()}}function Ha(e){let t=Va(e.left);return t.constant?e.operator===`&&`?t.value===!0?Va(e.right):R(t.value):e.operator===`||`?t.value===!0?R(t.value):Va(e.right):t.value===void 0?Va(e.right):R(t.value):Ea()}function Ua(e){if(e.operator===`typeof`)return R(`string`);if(e.operator===`void`)return R(void 0);let t=Va(e.argument);return t.constant?e.operator===`!`?R(!t.value):e.operator===`+`&&b(t.value)?R(t.value):e.operator===`-`&&b(t.value)?R(-t.value):e.operator===`~`&&b(t.value)?R(~t.value):Ea():Ea()}function B(e){let t=w(e);if(t.type===`ConditionalExpression`)return Wa(t);if(t.type===`LogicalExpression`)return Ga(t);if(t.type===`SequenceExpression`){let e=t.expressions.at(-1);return e?B(e):Oa()}let n=Va(t);return n.constant?Da(!!n.value):Oa()}function Wa(e){let t=B(e.test);if(t.constant)return B(t.value===!0?e.consequent:e.alternate);let n=B(e.consequent),r=B(e.alternate);return n.constant&&r.constant&&n.value===r.value?n:Oa()}function Ga(e){let t=B(e.left);if(!t.constant)return Oa();if(e.operator===`&&`)return t.value?B(e.right):Da(!1);if(e.operator===`||`)return t.value===!0?Da(!0):B(e.right);let n=Va(e.left);return n.constant?n.value===void 0?B(e.right):Da(!!n.value):Oa()}const Ka=new Set([`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`WhileStatement`]);function qa(e){return Ka.has(e.type)}function Ja(e,t){let n=t;for(;n!==null;){if(n.type===`LabeledStatement`&&n.label.name===e)return n.body;if(n.type===`Program`)return;n=n.parent}}function Ya(e,t){if(e.label)return Ja(e.label.name,e.parent)===t;let n=e.parent;for(;n!==null;){if(n.type===`Program`||N(n)||n.type===`SwitchStatement`)return!1;if(qa(n))return n===t;n=n.parent}return!1}function Xa(e,t){return e?e.type===`VariableDeclaration`?e.declarations.some(e=>e.init?z(e.init,t):!1):z(e,t):!1}function Za(e,t){switch(e.type){case`DoWhileStatement`:case`WhileStatement`:return z(e.test,t);case`ForInStatement`:case`ForOfStatement`:return z(e.right,t);case`ForStatement`:return!!(Xa(e.init,t)||e.test&&z(e.test,t)||e.update&&z(e.update,t));default:return!1}}function V(e,t,n){switch(e.type){case`BlockStatement`:return e.body.some(e=>V(e,t,n));case`BreakStatement`:return Ya(e,t);case`DoWhileStatement`:case`WhileStatement`:return Qa(e,t,n);case`ExpressionStatement`:return z(e.expression,n);case`ForInStatement`:case`ForOfStatement`:return $a(e,t,n);case`ForStatement`:return eo(e,t,n);case`IfStatement`:return to(e,t,n);case`LabeledStatement`:return V(e.body,t,n);case`ReturnStatement`:return!0;case`SwitchStatement`:return e.cases.some(e=>e.consequent.some(e=>V(e,t,n)));case`TryStatement`:return no(e,t,n);case`VariableDeclaration`:return e.declarations.some(e=>e.init?z(e.init,n):!1);case`WithStatement`:return ro(e,t,n);default:return!1}}function Qa(e,t,n){return z(e.test,n)?!0:V(e.body,t,n)}function $a(e,t,n){return z(e.right,n)?!0:V(e.body,t,n)}function eo(e,t,n){return Xa(e.init,n)||e.test&&z(e.test,n)||e.update&&z(e.update,n)?!0:V(e.body,t,n)}function to(e,t,n){return V(e.consequent,t,n)?!0:e.alternate?V(e.alternate,t,n):!1}function no(e,t,n){return!!(V(e.block,t,n)||e.handler&&V(e.handler.body,t,n)||e.finalizer&&V(e.finalizer,t,n))}function ro(e,t,n){return z(e.object,n)?!0:V(e.body,t,n)}function io(e,t,n){return e.constant?!e.value||!Za(t,n)&&!V(t.body,t,n):!1}const ao=t({create(e){let t=e.options?.[0],n=ka(typeof t==`object`&&t?t:void 0);function r(t){B(t).constant&&e.report({messageId:`unexpected`,node:t})}function i(t,r){io(B(r),t,n)&&e.report({messageId:`unexpected`,node:r})}return{ConditionalExpression(e){r(e.test)},DoWhileStatement(e){i(e,e.test)},ForStatement(e){e.test&&i(e,e.test)},IfStatement(e){r(e.test)},WhileStatement(e){i(e,e.test)}}},meta:{docs:{description:`Disallow constant conditions, but allow constant loops that include loop exits such as break, return, or configured calls.`},messages:{unexpected:`Unexpected constant condition.`},schema:[{additionalProperties:!1,properties:{loopExitCalls:{items:{minLength:1,type:`string`},type:`array`}},type:`object`}],type:`problem`}});function oo(e){let n=`CallExpression[callee.type="Identifier"][callee.name="${e.name}"]`;return t({create(t){return{[n](n){t.report({messageId:e.messageId,node:n})}}},meta:{docs:{description:`Use ${e.alternative} instead of ${e.name}().`},messages:{[e.messageId]:e.message.replaceAll(`{{name}}`,e.name).replaceAll(`{{alternative}}`,e.alternative)},schema:[],type:`problem`}})}const so=oo({alternative:`throw`,message:`Replace {{name}}(...) with {{alternative}}.`,messageId:`noError`,name:`error`});function co(e){let t=new Set;if(!e?.eventsImportPaths)return t;for(let n of e.eventsImportPaths)ne(n)&&t.add(n);return t}function lo(e){switch(e.type){case`ChainExpression`:case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSTypeAssertion`:return lo(e.expression);default:return e}}function uo(e){let t=lo(e);if(t.type===`Identifier`)return t.name;if(t.type===`MemberExpression`)return uo(t.object)}function fo(e,t){let n=lo(e.callee);if(n.type!==`MemberExpression`||T(n)!==`connect`)return;let r=uo(n.object);if(r===void 0||!t.has(r))return;let[i]=e.arguments;if(i)switch(i.type){case`ArrowFunctionExpression`:case`FunctionExpression`:return i;default:return}}function po(e,t){let n=lo(e.callee);if(n.type!==`MemberExpression`)return!1;let r=uo(n);return r!==void 0&&t.has(r)}function mo(e,t){return e.has(t)?!1:(e.add(t),!0)}function ho(e,t){return mo(t.playerValues,e)}function go(e,t){return mo(t.playerContainers,e)}function H(e,t){switch(e.type){case`ArrayPattern`:{let n=!1;for(let r of e.elements)r&&(n=H(r,t)||n);return n}case`AssignmentPattern`:return H(e.left,t);case`Identifier`:return ho(e.name,t);case`ObjectPattern`:{let n=!1;for(let r of e.properties){if(r.type===`RestElement`){n=H(r.argument,t)||n;continue}n=H(r.value,t)||n}return n}case`RestElement`:return H(e.argument,t);default:return!1}}function _o(e,t,n){return t===0?!1:e.type===`Identifier`?t===2?ho(e.name,n):go(e.name,n):H(e,n)}function vo(e,t,n){return e.type===`MemberExpression`||t===0?!1:e.type===`ArrayPattern`||e.type===`AssignmentPattern`||e.type===`Identifier`||e.type===`ObjectPattern`||e.type===`RestElement`?e.type===`Identifier`?t===2?ho(e.name,n):go(e.name,n):H(e,n):!1}function U(e,t){let n=lo(e);switch(n.type){case`ArrayExpression`:return yo(n,t);case`AssignmentExpression`:return U(n.right,t);case`ConditionalExpression`:return bo(n,t);case`Identifier`:return t.playerValues.has(n.name)?2:+!!t.playerContainers.has(n.name);case`MemberExpression`:return xo(n,t);case`ObjectExpression`:return So(n,t);case`SequenceExpression`:{let e=n.expressions.at(-1);return e===void 0?0:U(e,t)}default:return 0}}function yo(e,t){for(let n of e.elements)if(n!==null&&U(n.type===`SpreadElement`?n.argument:n,t)!==0)return 1;return 0}function bo(e,t){let n=U(e.consequent,t);return n===U(e.alternate,t)?n:0}function xo(e,t){return U(e.object,t)===1?2:0}function So(e,t){for(let n of e.properties)if(U(n.type===`SpreadElement`?n.argument:n.value,t)!==0)return 1;return 0}function Co(e,t){if(e.type===`TSParameterProperty`){H(e.parameter,t);return}H(e,t)}const wo=t({create(e){let t=co(e.options[0]),n=new Set,r=new WeakMap,i=[];function a(){let e=i.at(-1);if(e?.callbackState&&!(e.callbackDepth>0))return e.callbackState}function o(e){if(e.type!==`FunctionDeclaration`){let t=r.get(e);if(t){i.push({callbackDepth:0,callbackState:t});return}}let t=i.at(-1);if(!t?.callbackState){i.push({callbackDepth:0,callbackState:void 0});return}i.push({callbackDepth:t.callbackDepth+1,callbackState:t.callbackState})}function s(){i.pop()}return{ArrowFunctionExpression:o,"ArrowFunctionExpression:exit":s,AssignmentExpression(e){let t=a();if(!t||e.operator!==`=`)return;let n=U(e.right,t);n!==0&&vo(e.left,n,t)},CallExpression(t){let i=fo(t,n);if(i){let e={playerContainers:new Set,playerValues:new Set},[t]=i.params;t&&Co(t,e),r.set(i,e)}let o=a();if(!(o&&po(t,n)))return;let[s]=t.arguments;!s||s.type===`SpreadElement`||U(s,o)!==2||e.report({messageId:`preferFunctions`,node:t})},FunctionDeclaration:o,"FunctionDeclaration:exit":s,FunctionExpression:o,"FunctionExpression:exit":s,ImportDeclaration(e){let r=e.source.value;if(t.has(r))for(let t of e.specifiers){if(t.type===`ImportDefaultSpecifier`){t.local.name===`Events`&&n.add(t.local.name);continue}if(t.type===`ImportSpecifier`){if(t.imported.type===`Identifier`&&t.imported.name===`Events`){n.add(t.local.name);continue}t.imported.type===`Literal`&&t.imported.value===`Events`&&n.add(t.local.name)}}},VariableDeclarator(e){let t=a();if(!(t&&e.init))return;let n=U(e.init,t);n!==0&&_o(e.id,n,t)}}},meta:{docs:{description:`Disallow sending Events back to the same player inside an Events.connect callback; use Functions for request/response.`},messages:{preferFunctions:`Do not call Events for the same player inside an Events.connect callback. Use a Functions callback instead.`},schema:[{additionalProperties:!1,properties:{eventsImportPaths:{items:{minLength:1,type:`string`},type:`array`}},required:[`eventsImportPaths`],type:`object`}],type:`problem`}}),To=/^[A-Z]/u;function W(e){return To.test(e)}function Eo(e){return e.type===`FunctionDeclaration`&&e.id!==null&&W(e.id.name)}function Do(e){return e.type===`CallExpression`?e.callee.type===`Identifier`?e.callee.name===`memo`:e.callee.type===`MemberExpression`&&e.callee.object.type===`Identifier`&&e.callee.object.name===`React`&&e.callee.property.type===`Identifier`&&e.callee.property.name===`memo`:!1}function Oo({callee:e}){return e.type===`Identifier`?e.name===`forwardRef`||e.name===`memo`:e.type===`MemberExpression`&&e.object.type===`Identifier`&&e.object.name===`React`&&e.property.type===`Identifier`&&(e.property.name===`forwardRef`||e.property.name===`memo`)}function ko({name:e}){return e.type===`JSXIdentifier`?e.name:e.name.name}function Ao(e,t){for(let n of e.openingElement.attributes)if(n.type===`JSXAttribute`&&n.name.type===`JSXIdentifier`&&n.name.name===t)return!0;return!1}function jo(e,t){if(e.type!==`JSXIdentifier`)return!1;let n=e.name.charAt(0);return n!==``&&n===n.toLowerCase()||t.has(e.name)}function Mo(e){if(e.type===`BinaryExpression`)switch(e.operator){case`%`:case`*`:case`**`:case`+`:case`-`:case`/`:return Mo(e.left)&&Mo(e.right);default:return!1}return e.type===`Identifier`||e.type===`Literal`?!0:e.type===`MemberExpression`?!e.computed&&Mo(e.object):e.type===`ParenthesizedExpression`?Mo(e.expression):e.type===`TemplateLiteral`?e.expressions.length===0:e.type===`UnaryExpression`&&Mo(e.argument)}function No(e,t){return e?.type===`CallExpression`&&e.callee.type===`Identifier`&&(y(t)?e.callee.name===t:t.has(e.callee.name))}function Po(e){return e.type===`VariableDeclarator`&&e.id.type===`Identifier`&&W(e.id.name)&&e.init!==null&&(e.init.type===`ArrowFunctionExpression`||e.init.type===`FunctionExpression`)}function Fo(e){return e.loc.end.line-e.loc.start.line+1}function Io(e){if(!(e.type!==`FunctionDeclaration`||!Eo(e)||e.id===null||e.body===null)&&D(e.id)&&`name`in e.id&&y(e.id.name))return{body:e.body,name:e.id.name,nameNode:e.id}}function Lo(e){if(e.type!==`VariableDeclarator`||!Po(e)||e.init===null||!(`name`in e.id&&y(e.id.name))||e.init.type!==`ArrowFunctionExpression`&&e.init.type!==`FunctionExpression`||!D(e.init.body))return;let{name:t}=e.id;return{body:e.init.body,name:t,nameNode:e.id}}const Ro=t({create(e){function t(t,n,r){let i=Fo(r);i<=300||e.report({data:{lineCount:String(i),name:n},messageId:`giantComponent`,node:t})}return{FunctionDeclaration(e){let n=Io(e);n!==void 0&&t(n.nameNode,n.name,n.body)},VariableDeclarator(e){let n=Lo(e);n!==void 0&&t(n.nameNode,n.name,n.body)}}},meta:{docs:{description:`Report React components whose bodies exceed the configured size threshold.`,recommended:!0},messages:{giantComponent:`Component "{{name}}" is {{lineCount}} lines — consider breaking it into smaller focused components`},type:`problem`}}),zo=new Set([`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`]);function Bo(e){if(e.type===`FunctionDeclaration`&&e.id!==null&&O(e.id.name))return e.id.name;if(e.type===`FunctionExpression`||e.type===`ArrowFunctionExpression`){let{parent:t}=e;if(t.type===`VariableDeclarator`&&t.id.type===`Identifier`&&O(t.id.name))return t.id.name;if(t.type===`Property`&&t.key.type===`Identifier`&&O(t.key.name)||t.type===`MethodDefinition`&&t.key.type===`Identifier`&&O(t.key.name))return t.key.name}}function Vo(e){let{parent:t}=e;if(t.type===`VariableDeclarator`&&t.id.type===`Identifier`&&O(t.id.name))return t.id.name;if(t.type===`AssignmentExpression`&&t.left.type===`Identifier`&&O(t.left.name))return t.left.name;let n;if(t.type===`ExportDefaultDeclaration`&&e.arguments.length>0){let[t]=e.arguments;t?.type===`FunctionExpression`&&t.id&&O(t.id.name)&&(n=t.id.name)}return n}function Ho(e){if(!He(e))return;let[t]=e.params;if(!t)return;let n;if(t.type===`ObjectPattern`&&(n=t),t.type===`AssignmentPattern`&&t.left.type===`ObjectPattern`&&(n=t.left),!n)return;let r=0;for(let e of n.properties)e.type===`Property`&&(r+=1);return r}function Uo(e,t){return t?.type===`TSLiteralType`}function Wo(e,t){if(!He(e)||e.body===null)return{maxJsxDepth:0,nullLiterals:[],stateHookCount:0};let n=0,r=0,i=[],a=0;return Rr(e.body,o=>{if(!(zo.has(o.type)&&o!==e)){if(o.type===`JSXElement`||o.type===`JSXFragment`){a+=1,a>n&&(n=a);return}if(o.type===`CallExpression`){let e=L(o);e!==void 0&&e.length>0&&t.has(e)&&(r+=1)}o.type===`Literal`&&o.value===null&&!Uo(o,o.parent)&&i.push(o)}}),{maxJsxDepth:n,nullLiterals:i,stateHookCount:r}}function Go(e){let t={enforceTargetLines:!0,ignoreComponents:[],maxDestructuredProps:5,maxLines:200,maxStateHooks:5,maxTsxNesting:3,stateHooks:[`useState`,`useReducer`,`useBinding`],targetLines:120};if(typeof e!=`object`||!e)return t;let n=e;return{enforceTargetLines:typeof n.enforceTargetLines==`boolean`?n.enforceTargetLines:t.enforceTargetLines,ignoreComponents:Array.isArray(n.ignoreComponents)?n.ignoreComponents:t.ignoreComponents,maxDestructuredProps:b(n.maxDestructuredProps)?n.maxDestructuredProps:t.maxDestructuredProps,maxLines:b(n.maxLines)?n.maxLines:t.maxLines,maxStateHooks:b(n.maxStateHooks)?n.maxStateHooks:t.maxStateHooks,maxTsxNesting:b(n.maxTsxNesting)?n.maxTsxNesting:t.maxTsxNesting,stateHooks:Array.isArray(n.stateHooks)?n.stateHooks:t.stateHooks,targetLines:b(n.targetLines)?n.targetLines:t.targetLines}}const Ko=t({create(e){let t=Go(e.options[0]),n=new Set(t.ignoreComponents),r=new Set(t.stateHooks),i=new WeakSet;function a(a,o){if(n.has(o)||i.has(a))return;i.add(a);let s=a.loc,c=s.end.line-s.start.line+1;c>t.maxLines?e.report({data:{lines:String(c),max:String(t.maxLines),name:o,target:String(t.targetLines)},messageId:`exceedsMaxLines`,node:a}):t.enforceTargetLines&&c>t.targetLines&&e.report({data:{lines:String(c),max:String(t.maxLines),name:o,target:String(t.targetLines)},messageId:`exceedsTargetLines`,node:a});let l=Ho(a);b(l)&&l>t.maxDestructuredProps&&e.report({data:{count:String(l),max:String(t.maxDestructuredProps),name:o},messageId:`tooManyProps`,node:a});let u=Wo(a,r);u.maxJsxDepth>t.maxTsxNesting&&e.report({data:{depth:String(u.maxJsxDepth),max:String(t.maxTsxNesting),name:o},messageId:`tsxNestingTooDeep`,node:a}),u.stateHookCount>t.maxStateHooks&&e.report({data:{count:String(u.stateHookCount),hooks:t.stateHooks.join(`, `),max:String(t.maxStateHooks),name:o},messageId:`tooManyStateHooks`,node:a});for(let t of u.nullLiterals)e.report({messageId:`nullLiteral`,node:t})}function o(e){let t=Bo(e);t===void 0||t.length===0||a(e,t)}return{ArrowFunctionExpression:o,CallExpression(e){if(!Oo(e))return;let[t]=e.arguments;if(!t||t.type!==`FunctionExpression`&&t.type!==`ArrowFunctionExpression`)return;let n=Vo(e),r=Bo(t),i=n??r;i===void 0||i.length===0||a(t,i)},FunctionDeclaration(e){e.type===`FunctionDeclaration`&&o(e)},FunctionExpression(e){e.type===`FunctionExpression`&&o(e)}}},meta:{docs:{description:`Enforce React component size and complexity limits inspired by the 'Refactor God Component' checklist.`,recommended:!1},messages:{exceedsMaxLines:`Component '{{name}}' is {{lines}} lines; max allowed is {{max}}. Split into smaller components/hooks.`,exceedsTargetLines:`Component '{{name}}' is {{lines}} lines; target is {{target}} (max {{max}}). Consider extracting hooks/components.`,nullLiteral:"Avoid `null` in components; use `undefined` instead.",tooManyProps:`Component '{{name}}' destructures {{count}} props; max allowed is {{max}}. Group props or split the component.`,tooManyStateHooks:`Component '{{name}}' has {{count}} state hooks ({{hooks}}); max allowed is {{max}}. Extract cohesive state into a custom hook.`,tsxNestingTooDeep:`Component '{{name}}' has TSX nesting depth {{depth}}; max allowed is {{max}}. Extract child components.`},schema:[{additionalProperties:!1,properties:{enforceTargetLines:{default:!0,description:`Whether to report when exceeding targetLines (soft limit).`,type:`boolean`},ignoreComponents:{description:`Component names to ignore.`,items:{type:`string`},type:`array`},maxDestructuredProps:{default:5,description:`Maximum number of destructured props in a component parameter.`,type:`number`},maxLines:{default:200,description:`Hard maximum lines for a component.`,type:`number`},maxStateHooks:{default:5,description:`Maximum number of stateful hook calls in a component.`,type:`number`},maxTsxNesting:{default:3,description:`Maximum JSX/TSX nesting depth in a component.`,type:`number`},stateHooks:{default:[`useState`,`useReducer`,`useBinding`],description:`Hook names to count toward state complexity.`,items:{type:`string`},type:`array`},targetLines:{default:120,description:`Soft target lines for a component.`,type:`number`}},type:`object`}],type:`problem`}});function qo({callee:e}){if(e.type!==`CallExpression`)return!1;let t=e.callee;if(t.type!==`MemberExpression`)return!1;let{object:n}=t;return n.type===`Identifier`&&n.name===`Ianitor`}const Jo=t({create(e){let t=0;function n(){t+=1}function r(){--t}return{ArrowFunctionExpression:n,"ArrowFunctionExpression:exit":r,CallExpression(n){t===0||!qo(n)||e.report({messageId:`hoistIanitorValidator`,node:n})},FunctionDeclaration:n,"FunctionDeclaration:exit":r,FunctionExpression:n,"FunctionExpression:exit":r}},meta:{docs:{description:`Disallow Ianitor validator creation inside function bodies. Hoist to module scope to avoid recreating validators on every call.`,recommended:!0},messages:{hoistIanitorValidator:`Ianitor validator created inside function body is slow — hoist to module scope. Example: const validator = Ianitor.keyOf(ids);`},schema:[],type:`problem`}});function Yo(e){let t=w(e);if(t.type!==`CallExpression`)return!1;let n=w(t.callee);if(n.type!==`MemberExpression`||n.computed)return!1;let r=w(n.object);return r.type===`Identifier`&&r.name===`Ianitor`&&n.property.type===`Identifier`}function Xo(e){for(let{node:t}of e.defs){if(t.type!==`VariableDeclarator`)continue;let{init:e}=t;if(e!==null&&Yo(e))return!0}return!1}function Zo(e,t){let n=w(e.callee);if(n.type===`CallExpression`)return Yo(n);if(n.type===`Identifier`){let r=E(t.getScope(e),n.name);return r!==void 0&&Xo(r)}return!1}function Qo(e){let t=!1;for(let n of e.properties)if(!(n.type!==`Property`||n.key.type!==`Identifier`)){if(n.key.name===`error`||n.key.name===`value`)return!1;n.key.name===`success`&&(t=!0)}return t}function $o(e){for(let t of e.properties)if(t.type===`Property`&&t.key.type===`Identifier`&&t.key.name===`success`)return t.key}const es=t({create(e){let{sourceCode:t}=e,n=new Set,r=new Map;function i(e){let t=r.get(e);t!==void 0&&(t.referencedFully=!0)}return{CallExpression(e){for(let t of e.arguments)if(t.type===`Identifier`){let e=r.get(t.name);e!==void 0&&(e.referencedFully=!0)}},MemberExpression({computed:n,object:i,property:a}){if(n||a.type!==`Identifier`)return;let o=w(i);if(o.type===`CallExpression`&&a.name===`success`){Zo(o,t)&&e.report({messageId:`preferCreateGuard`,node:a});return}if(o.type===`Identifier`){let e=r.get(o.name);e!==void 0&&e.properties.add(a.name)}},"Program:exit"(){for(let[,{firstSuccessNode:t,properties:n,referencedFully:i}]of r)n.has(`success`)&&!n.has(`error`)&&!n.has(`value`)&&!i&&e.report({messageId:`preferCreateGuard`,node:t})},ReturnStatement({argument:e}){e?.type===`Identifier`&&i(e.name)},VariableDeclarator({id:i,init:a}){if(a===null)return;let o=w(a);if(o.type===`CallExpression`){if(i.type===`Identifier`&&Yo(o)){n.add(i.name);return}if(i.type===`ObjectPattern`&&Zo(o,t)&&Qo(i)){let t=$o(i);t!==void 0&&e.report({messageId:`preferCreateGuard`,node:t})}i.type===`Identifier`&&o.callee.type===`Identifier`&&n.has(o.callee.name)&&r.set(i.name,{firstSuccessNode:i,properties:new Set,referencedFully:!1})}}}},meta:{docs:{description:"Disallow accessing `.success` on Ianitor check results when the full result object is not needed."},messages:{preferCreateGuard:`Replace with Flamework.createGuard<T>(). Ianitor check results allocate a table on every call; Flamework.createGuard returns a plain boolean at runtime with zero allocation.`},schema:[],type:`suggestion`}}),ts=[`binding`];function ns(e){if(e.type===`Identifier`)return e.name;if(e.type===`AssignmentPattern`&&e.left.type===`Identifier`)return e.left.name}function rs({body:e},t){if(e.length!==1)return!1;let[n]=e;return n?.type!==`ReturnStatement`||n.argument?.type!==`Identifier`?!1:n.argument.name===t}function is(e){if(e.params.length!==1)return;let[t]=e.params;return t===void 0?void 0:ns(t)}function as(e){if(e.type===`ArrowFunctionExpression`){let t=is(e);if(t===void 0)return!1;let{body:n}=e;switch(n.type){case`BlockStatement`:return rs(n,t);case`Identifier`:return n.name===t;default:return!1}}if(e.type===`FunctionExpression`){let t=is(e);return t===void 0||e.body===null?!1:rs(e.body,t)}return!1}function os(e){return L(e)===`joinBindings`}function ss(e){for(let t of e.defs){if(t.node.type!==`VariableDeclarator`)continue;let{init:e}=t.node;if(e?.type===`CallExpression`&&(L(e)===`useBinding`||os(e)||e.callee.type===`MemberExpression`&&T(e.callee)===`map`))return!0}return!1}function cs(e,{object:t},n){if(t.type===`Identifier`){let r=t.name.toLowerCase();for(let e of n)if(r.includes(e.toLowerCase()))return!0;let i=E(e.getScope(t),t.name);if(i!==void 0&&ss(i))return!0}return t.type===`CallExpression`&&(t.callee.type===`MemberExpression`&&T(t.callee)===`map`||os(t))}const ls=t({create(e){let{sourceCode:t}=e,[n]=e.options,r=n?.bindingPatterns??ts;return{CallExpression(n){let{callee:i}=n;if(i.type!==`MemberExpression`||i.computed||i.property.type!==`Identifier`||T(i)!==`map`||n.arguments.length!==1)return;let[a]=n.arguments;if(a===void 0||a.type===`SpreadElement`||!as(a))return;let o=cs(t,i,r);e.report({fix(e){return e.replaceText(n,t.getText(i.object))},messageId:o?`identityBindingMap`:`identityArrayMap`,node:n})}}},meta:{docs:{description:"Disallow pointless identity `.map()` calls that return the parameter unchanged"},fixable:`code`,messages:{identityArrayMap:"Pointless identity `.map()` call on Array. Use `table.clone(array)` or `[...array]` instead.",identityBindingMap:"Pointless identity `.map()` call on Binding. Use the original binding directly."},schema:[{additionalProperties:!1,properties:{bindingPatterns:{default:[...ts],description:`Variable name patterns to recognize as Bindings (case insensitive)`,items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}});function us(e){let{parent:t}=e;return t?.type===`ExpressionStatement`||t?.type===`ForStatement`&&t.update===e}const ds=t({create(e){let[t]=e.options,n=Tr(t)&&t.allowAutofix,{sourceCode:r}=e;return{UpdateExpression(t){if(!us(t))return;let i=r.getText(t.argument),a=t.operator===`++`?`noIncrement`:`noDecrement`;if(!n){e.report({messageId:a,node:t});return}let o=t.operator===`++`?`${i} += 1`:`${i} -= 1`;e.report({fix(e){return e.replaceText(t,o)},messageId:a,node:t})}}},meta:{docs:{description:"Disallow standalone `++` and `--` statements.",recommended:!0},fixable:`code`,messages:{noDecrement:"Do not use standalone `--`. Use `-= 1` instead.",noIncrement:"Do not use standalone `++`. Use `+= 1` instead."},schema:[{additionalProperties:!1,properties:{allowAutofix:{default:!1,type:`boolean`}},type:`object`}],type:`suggestion`}});function fs(e){return e.name.type===`JSXIdentifier`?e.name.name:void 0}function ps(e){switch(e.type){case`ArrayExpression`:return`array`;case`ArrowFunctionExpression`:case`FunctionExpression`:return`function`;case`JSXElement`:case`JSXFragment`:return`JSX`;case`ObjectExpression`:return`object`;default:return}}const ms=t({create(e){let t=new Set;return{JSXAttribute(n){if(n.value?.type!==`JSXExpressionContainer`||n.value.expression.type===`JSXEmptyExpression`)return;let r=n.parent;if(!he(r))return;let i=fs(r);if(i===void 0||!t.has(i))return;let a=ps(n.value.expression);a!==void 0&&e.report({data:{name:i,type:a},messageId:`inlineProperty`,node:n.value.expression})},VariableDeclarator(e){e.id.type===`Identifier`&&e.init!==null&&Do(e.init)&&t.add(e.id.name)}}},meta:{docs:{description:`Prevent inline properties from being passed to memoized components.`,recommended:!0},messages:{inlineProperty:`Inline {{type}} passed to memoized component "{{name}}" — new references cause unnecessary re-renders`},type:`problem`}}),hs={checkPrivate:!0,checkProtected:!0,checkPublic:!0};function gs(e){return x(e)?{checkPrivate:typeof e.checkPrivate!=`boolean`||e.checkPrivate,checkProtected:typeof e.checkProtected!=`boolean`||e.checkProtected,checkPublic:typeof e.checkPublic!=`boolean`||e.checkPublic}:hs}function _s(e,t){if(e.static||e.kind!==`method`)return!1;let n=e.accessibility??`public`;return!(n===`private`&&!t.checkPrivate||n===`protected`&&!t.checkProtected||n===`public`&&!t.checkPublic)}function vs(e,t){if(t.has(e))return!1;if(t.add(e),e.type===`ThisExpression`||e.type===`Super`)return!0;if(!x(e))return!1;for(let n in e)if(Object.hasOwn(e,n)&&ys(e[n],t))return!0;return!1}function ys(e,t){if(Array.isArray(e)){for(let n of e)if(D(n)&&vs(n,t))return!0;return!1}return D(e)&&vs(e,t)}function bs({value:e}){return e.type===`FunctionExpression`&&vs(e,new WeakSet)}function xs(e){return e.key.type===`Identifier`?e.key.name:`unknown`}const Ss=t({create(e){let t=gs(e.options[0]);return{MethodDefinition(n){!_s(n,t)||bs(n)||e.report({data:{methodName:xs(n)},messageId:`noInstanceMethodWithoutThis`,node:n})}}},meta:{docs:{description:`Detect instance methods that do not use 'this' and suggest converting them to standalone functions for better performance in roblox-ts.`},messages:{noInstanceMethodWithoutThis:`Method '{{methodName}}' does not use 'this' and creates unnecessary metatable overhead in roblox-ts. Convert it to a standalone function for better performance.`},schema:[{additionalProperties:!1,properties:{checkPrivate:{default:!0,description:`Check private methods (default: true)`,type:`boolean`},checkProtected:{default:!0,description:`Check protected methods (default: true)`,type:`boolean`},checkPublic:{default:!0,description:`Check public methods (default: true)`,type:`boolean`}},type:`object`}],type:`problem`}}),Cs=[`Axes`,`BrickColor`,`CFrame`,`Color3`,`ColorSequence`,`ColorSequenceKeypoint`,`DateTime`,`Enum`,`Faces`,`NumberRange`,`NumberSequence`,`NumberSequenceKeypoint`,`PathWaypoint`,`PhysicalProperties`,`Ray`,`Rect`,`Region3`,`Region3int16`,`TweenInfo`,`UDim`,`UDim2`,`Vector2`,`Vector3`,`Vector3int16`,`Vector3int32`],ws=new Set([`!`,`+`,`-`,`typeof`,`void`,`~`]),Ts=new Set(`ArrayExpression.ArrowFunctionExpression.AssignmentExpression.AwaitExpression.BinaryExpression.CallExpression.ChainExpression.ClassExpression.ConditionalExpression.FunctionExpression.Identifier.ImportExpression.Literal.LogicalExpression.MemberExpression.MetaProperty.NewExpression.ObjectExpression.ParenthesizedExpression.SequenceExpression.Super.TaggedTemplateExpression.TemplateLiteral.ThisExpression.TSAsExpression.TSInstantiationExpression.TSNonNullExpression.TSSatisfiesExpression.TSTypeAssertion.UnaryExpression.UpdateExpression.YieldExpression`.split(`.`));function Es(e){return Ts.has(e.type)}function G(e){return e.type===`module`||e.type===`global`}function Ds(e){for(let t of e.defs)if(t.type===`ImportBinding`)return!0;return!1}function Os(e){return e.type===`Variable`}function ks(e){if(!Os(e))return;let t=e.node;if(t.type!==`VariableDeclarator`)return;let{parent:n}=t;if(!(n.type!==`VariableDeclaration`||n.kind!==`const`))return t.init??void 0}function As(e,t){let n=E(e.getScope(t),t.name);if(!(n===void 0||!G(n.scope)))for(let e of n.defs){let t=ks(e);if(t!==void 0)return t}}function js(e,t){let n=E(e.getScope(t),t.name);if(n!==void 0)for(let e of n.defs){let t=ks(e);if(t!==void 0)return t}}function Ms(e,t,n){let r=w(t);if(n.has(r))return!1;if(n.add(r),r.type===`Identifier`&&r.name===`undefined`||r.type===`UnaryExpression`&&r.operator===`void`)return!0;if(r.type!==`Identifier`)return!1;let i=js(e,r);return i!==void 0&&Ms(e,i,n)}function Ns(e,t,n,r){return t.type===`Identifier`?!0:Es(t)?K(e,t,n,r):!1}function Ps(e,t,n,r){let i=w(t);return i.type===`Identifier`?Is(e,i,n,r):i.type!==`MemberExpression`||!K(e,i.object,n,r)?!1:i.computed?K(e,i.property,n,r):i.property.type===`Identifier`}function Fs(e,t,n,r,i){return Ps(e,n,r,i)?t.every(t=>t.type!==`SpreadElement`&&K(e,t,r,i)):!1}function K(e,t,n,r){let i=w(t);if(n.has(i))return!1;switch(n.add(i),i.type){case`ArrayExpression`:return zs(e,i,n,r);case`BinaryExpression`:case`LogicalExpression`:return Es(i.left)?K(e,i.left,n,r)&&K(e,i.right,n,r):!1;case`CallExpression`:return Fs(e,i.arguments,i.callee,n,r);case`ChainExpression`:return K(e,i.expression,n,r);case`ConditionalExpression`:return K(e,i.test,n,r)&&K(e,i.consequent,n,r)&&K(e,i.alternate,n,r);case`Identifier`:return Is(e,i,n,r);case`Literal`:return!0;case`MemberExpression`:return K(e,i.object,n,r)&&(!i.computed||Ns(e,i.property,n,r));case`NewExpression`:return Fs(e,i.arguments,i.callee,n,r);case`ObjectExpression`:return Rs(e,i,n,r);case`SequenceExpression`:return i.expressions.length>0&&i.expressions.every(t=>K(e,t,n,r));case`TemplateLiteral`:return i.expressions.length===0;case`UnaryExpression`:return ws.has(i.operator)&&K(e,i.argument,n,r);default:return!1}}function Is(e,t,n,r){let i=E(e.getScope(t),t.name);if(i===void 0)return r.staticGlobalFactories.has(t.name);if(!G(i.scope))return!1;if(Ds(i))return!0;for(let t of i.defs){let i=ks(t);if(i!==void 0&&K(e,i,n,r))return!0}return!1}function Ls(e){return e.type!==`PrivateIdentifier`&&e.type!==`Identifier`}function Rs(e,t,n,r){for(let i of t.properties)if(i.type!==`Property`||i.kind!==`init`||i.computed&&Ls(i.key)&&!K(e,i.key,n,r)||!K(e,i.value,n,r))return!1;return!0}function zs(e,{elements:t},n,r){for(let i of t)if(i===null||i.type===`SpreadElement`||!K(e,i,n,r))return!1;return!0}function Bs(e){return e.type===`JSXIdentifier`?e.name:e.name.name}function Vs(e){return e===`nativeProperties`||e.endsWith(`NativeProperties`)}function Hs(e){if(!(e.type!==`Variable`||e.node.type!==`VariableDeclarator`))return e.node.init??void 0}function Us(e){let t=w(e);for(;t.type===`MemberExpression`;){let e=w(t.object);if(e.type===`Identifier`)return e;if(e.type!==`MemberExpression`)return;t=e}return t.type===`Identifier`?t:void 0}function Ws(e,t){let n=w(t);if(n.type===`ObjectExpression`)return!0;let r=Us(n);if(r===void 0)return!1;let i=E(e.getScope(r),r.name);return i===void 0?!1:Ds(i)||G(i.scope)}function Gs(e,t,n){let r=w(t);if(n.has(r))return;if(n.add(r),r.type===`ObjectExpression`)return r;if(r.type!==`Identifier`)return;let i=E(e.getScope(r),r.name);if(!(i===void 0||G(i.scope)))for(let t of i.defs){let r=Hs(t);if(r===void 0)continue;let i=Gs(e,r,n);if(i!==void 0)return i}}const Ks=t({create(e){let{sourceCode:t}=e;function n(n,r){for(let i of n.properties){if(i.type!==`SpreadElement`||!Ws(t,i.argument))continue;let n=t.getText(i.argument);e.report({data:`propertyName`in r?{prop:r.propertyName,source:n}:{source:n},messageId:r.messageId,node:i})}}return{JSXAttribute(e){let r=Bs(e.name);if(r===void 0||!Vs(r))return;let{value:i}=e;if(i?.type!==`JSXExpressionContainer`)return;let{expression:a}=i;if(a.type===`JSXEmptyExpression`)return;let o=Gs(t,a,new Set);o!==void 0&&n(o,{messageId:`noNativePropertiesSpread`,propertyName:r})},JSXSpreadAttribute(e){let r=Gs(t,e.argument,new Set);r!==void 0&&n(r,{messageId:`noElementSpread`})}}},meta:{docs:{description:`Disallow spreading static property bags into nativeProperties/*NativeProperties props and onto JSX elements via intermediate objects, because the spread creates a new copied table every render.`,recommended:!0},messages:{noElementSpread:`Spreading static property bag {{source}} through an intermediate object creates a new table every render. Inline the full object properties directly on the JSX element.`,noNativePropertiesSpread:`Spreading static property bag {{source}} into {{prop}} creates a new table every render. Pass it directly or inline the full object instead.`},schema:[],type:`problem`}});function qs(e){return e.parent.type===`ExpressionStatement`?!0:e.parent.type!==`UnaryExpression`||e.parent.operator!==`void`?!1:e.parent.parent.type===`ExpressionStatement`}function Js(e,t,n,r){if(bn(e,t))for(let t of e.specifiers){if(t.type===`ImportSpecifier`){ue(t.imported,`useMemo`)&&n.add(t.local.name);continue}r.add(t.local.name)}}const Ys=new Set([`Instance`]);function Xs(e){let t=x(e)&&S(e.constructors)?new Set(e.constructors):Ys,n=x(e)&&e.environment===`standard`?`standard`:`roblox-ts`,r=x(e)?e.maxHelperTraceDepth:void 0;return{constructors:t,environment:n,maxHelperTraceDepth:re(r)&&Number.isInteger(r)&&r>=0?r:4}}function Zs(e){return e?.type===`CallExpression`}function Qs(e,t,n){let r=e.parent;for(;r!==null;){if(Fe(r)){let{parent:e}=r;if(Zs(e)&&e.arguments[0]===r){if(!fe(e,t,n)){r=e.parent;continue}return!0}}r=r.parent}return!1}function $s(e,t,n,r,i){let a=r.get(e);if(a!==void 0)return a;if(i.has(e))return new Set;i.add(e);let o=new Set;for(let a of e.defs){let e=ec(a,t,n,r,i);for(let t of e)o.add(t)}return i.delete(e),r.set(e,o),o}function ec(e,t,n,r,i){if(e.type===`FunctionName`)return tc(e,n);if(e.type!==`Variable`)return new Set;let{node:a}=e;if(a.type!==`VariableDeclarator`||a.init===null)return new Set;let o=w(a.init);if(Fe(o))return nc(o,n);if(o.type!==`Identifier`)return new Set;let s=E(t.getScope(o),o.name);return s===void 0?new Set:$s(s,t,n,r,i)}function tc(e,t){let{node:n}=e;return n.type===`FunctionDeclaration`?nc(n,t):new Set}function nc(e,t){let n=t.get(e)?.id;return n===void 0?new Set:new Set([n])}function rc(e,t,n,r){let i=E(t.getScope(e),e.name);return i===void 0?new Set:$s(i,t,n,r,new Set)}function ic(e,t,n,r){for(let i of t.values())for(let t of i.callIdentifiers){let a=rc(t,e,n,r);for(let e of a)i.callees.add(e)}}function ac(e,t,n){let r=new Set(e),i=[];for(let t of e)i.push({depth:0,functionId:t});let a=0;for(;a<i.length;){let e=i[a];if(a+=1,e===void 0||e.depth>=n)continue;let o=t.get(e.functionId);if(o!==void 0)for(let t of o.callees)r.has(t)||(r.add(t),i.push({depth:e.depth+1,functionId:t}))}return r}function oc(e,t,n,r,i){let a=new Set;for(let e of t){let t=r.get(e)?.id;t!==void 0&&a.add(t)}for(let t of n){let n=rc(t,e,r,i);for(let e of n)a.add(e)}return a}const sc=t({create(e){let t=Xs(e.options[0]);if(t.constructors.size===0)return{};let n=vn(t.environment),r=new Set,i=new Set,a=new Map,o=new Map,s=[],c=[],l=[],u=[],d=new Map,f=0;function p(e){let t=a.get(e);if(t!==void 0)return t;let n={callIdentifiers:[],callees:new Set,id:f};return f+=1,a.set(e,n),o.set(n.id,n),n}function m(e){let t=s.at(-1);if(t===void 0)return;let n=o.get(t);n!==void 0&&n.callIdentifiers.push(e)}function h(e){s.push(p(e).id)}function g(){s.pop()}return{ArrowFunctionExpression:h,"ArrowFunctionExpression:exit":g,CallExpression(e){if(e.callee.type===`Identifier`&&m(e.callee),!fe(e,r,i))return;let[t]=e.arguments;if(t!==void 0){if(t.type===`Identifier`){l.push(t);return}Fe(t)&&u.push(t)}},FunctionDeclaration:h,"FunctionDeclaration:exit":g,FunctionExpression:h,"FunctionExpression:exit":g,ImportDeclaration(e){Js(e,n,r,i)},NewExpression(e){if(e.callee.type!==`Identifier`)return;let n=e.callee.name;t.constructors.has(n)&&c.push({constructorName:n,containingFunctionId:s.at(-1),isLexicallyInsideUseMemo:Qs(e,r,i),node:e})},"Program:exit"(){ic(e.sourceCode,o,a,d);let n=ac(oc(e.sourceCode,u,l,a,d),o,t.maxHelperTraceDepth);for(let t of c){let r=t.containingFunctionId!==void 0&&n.has(t.containingFunctionId);(t.isLexicallyInsideUseMemo||r)&&e.report({data:{constructorName:t.constructorName},messageId:`noNewInUseMemo`,node:t.node})}}}},meta:{docs:{description:`Disallow configured constructor calls (default: new Instance) inside React useMemo callbacks.`},messages:{noNewInUseMemo:"Avoid creating '{{constructorName}}' with `new` inside useMemo. Create it outside the memo callback or use an effect/ref pattern."},schema:[{additionalProperties:!1,properties:{constructors:{description:`Constructor identifiers that should be disallowed inside useMemo callbacks.`,items:{type:`string`},type:`array`},environment:{default:`roblox-ts`,description:`The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.`,enum:[`roblox-ts`,`standard`],type:`string`},maxHelperTraceDepth:{default:4,description:`Maximum depth for tracing local helper function calls from useMemo callbacks. 0 disables helper traversal.`,minimum:0,type:`integer`}},type:`object`}],type:`problem`}}),cc=oo({alternative:`Log`,message:`{{name}}() is a raw output function lacking log levels, timestamps, and filtering. Production systems require structured logging for debugging and monitoring. Replace {{name}}(...) with {{alternative}}.`,messageId:`noPrint`,name:`print`});function lc(e,t){let n=t;for(;n;){if(n.set.has(e))return!0;n=n.upper}return!1}function uc(e){let t=new Map,n=new Set;for(let n of e.keys())t.set(n,0);function r(i,a){t.set(i,1),a.push(i);for(let o of e.get(i)??[]){let e=t.get(o);if(e===1){let e=a.lastIndexOf(o);for(let t=e;t<a.length;t+=1){let e=a[t];e!==void 0&&n.add(e)}}else e===0&&r(o,a)}a.pop(),t.set(i,2)}for(let n of e.keys())t.get(n)===0&&r(n,[]);return n}const dc=t({create(e){let{sourceCode:t}=e,n=new Map,r=[],i=[],a=[],o=new Map;function s(e){r.push(e)}function c(){r.pop()}function l(){for(let e=r.length-1;e>=0;--e){let t=r[e];if(t!==void 0)return t}}function u(e){n.has(e)||n.set(e,new Set)}function d(){for(let e=a.length-1;e>=0;--e)if(a[e]!==void 0)return a[e]}return{ArrowFunctionExpression(){s(void 0)},"ArrowFunctionExpression:exit":c,CallExpression(e){let r=l();if(r===void 0)return;let a,s=!1;if(e.callee.type===`Identifier`?a=e.callee.name:e.callee.type===`MemberExpression`&&e.callee.object.type===`ThisExpression`&&e.callee.property.type===`Identifier`&&(a=e.callee.property.name,s=!0),a===void 0)return;let c=!1;if(s){let e=d();e!==void 0&&o.get(e)?.has(a)===!0&&(c=!0)}else{let n=t.getScope(e);c=lc(a,n)}c&&(n.get(r)?.add(a),i.push({callee:a,caller:r,node:e}))},ClassDeclaration(e){let t=e.id?.name;t!==void 0&&!o.has(t)&&o.set(t,new Set),a.push(t)},"ClassDeclaration:exit"(){a.pop()},FunctionDeclaration(e){let t=e.id?.name;t!==void 0&&t.length>0&&u(t),s(t)},"FunctionDeclaration:exit":c,FunctionExpression(e){e.id&&u(e.id.name);let{parent:t}=e;t?.type===`MethodDefinition`&&t.key.type===`Identifier`?s(t.key.name):s(void 0)},"FunctionExpression:exit":c,MethodDefinition(e){let t=d();e.key.type===`Identifier`&&t!==void 0&&(o.get(t)?.add(e.key.name),u(e.key.name))},"Program:exit"(){let t=uc(n);if(t.size!==0)for(let n of i)t.has(n.caller)&&t.has(n.callee)&&e.report({messageId:`noRecursive`,node:n.node})},VariableDeclarator(e){e.id.type===`Identifier`&&e.init!==null&&(e.init.type===`FunctionExpression`||e.init.type===`ArrowFunctionExpression`)&&(u(e.id.name),s(e.id.name))},"VariableDeclarator:exit"(e){e.id.type===`Identifier`&&e.init!==null&&(e.init.type===`FunctionExpression`||e.init.type===`ArrowFunctionExpression`)&&c()}}},meta:{messages:{noRecursive:`Recursion is not allowed (JPL Power of 10). Use iteration instead — a loop or explicit stack.`},schema:[{additionalProperties:!1,properties:{},type:`object`}]}}),fc=new m({extensions:[`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`,`.json`,`.node`]}),pc={found:!1};function mc(e,t){if(!e.startsWith(`.`))return pc;let{path:n}=fc.sync(a(t),e);return n===void 0||n===``?pc:{found:!0,path:n}}const hc=`uiaspectratioconstraint`,gc=new Set([`ButtonSpritesheet`,`GenericSpritesheet`,`LabelSpritesheet`]);function _c({openingElement:e}){let{name:t}=e;return t.type===`JSXIdentifier`?t.name:void 0}function vc(e){let t=!1;return Rr(e,e=>{t||e.type===`JSXElement`&&_c(e)===hc&&(t=!0)}),t}function yc(e){if(e.type===`FunctionDeclaration`)return e.id?.name;if(Fe(e)){let{parent:t}=e;if(t.type===`VariableDeclarator`&&t.id.type===`Identifier`)return t.id.name}}function bc(e){if(e.body.type!==`BlockStatement`)return w(e.body)}function xc(e){for(let t of e.defs){if(t.type!==`ImportBinding`)continue;let{parent:e}=t.node;if(e?.type===`ImportDeclaration`&&y(e.source.value))return e.source.value}}const Sc=new Map;function Cc(e,t){if(!e.startsWith(`.`))return!1;let n=mc(e,t);if(!n.found)return!1;let r=Sc.get(n.path);if(r!==void 0)return r;try{let e=f(n.path,`utf8`).includes(`<uiaspectratioconstraint`);return Sc.set(n.path,e),e}catch{return Sc.set(n.path,!1),!1}}function wc(e){for(let t of e.openingElement.attributes)if(!(t.type!==`JSXAttribute`||t.name.type!==`JSXIdentifier`||t.name.name!==`scaled`)&&t.value?.type===`JSXExpressionContainer`&&t.value.expression.type===`Literal`&&t.value.expression.value===!1)return!0;return!1}function Tc(e){return e.type===`JSXElement`?_c(e)===hc:e.type===`JSXExpressionContainer`&&e.expression.type===`Identifier`&&e.expression.name===`UI_ASPECT_RATIO_CONSTRAINT`}function Ec(e,t,n,r){if(t.has(e))return!0;if(n===void 0)return!1;let i=n.set.get(e);if(i===void 0||!Ds(i))return!1;let a=xc(i);return a!==void 0&&(Cc(a,r)||gc.has(e))}const Dc=t({create(e){let{filename:t,sourceCode:n}=e,r=new Set,i=[],a;return{ArrowFunctionExpression(e){let t=yc(e),n=bc(e);t===void 0||n===void 0||n.type!==`JSXElement`&&n.type!==`JSXFragment`||vc(n)&&r.add(t)},FunctionDeclaration(e){let t=yc(e);if(t===void 0||e.body?.body.length!==1)return;let[n]=e.body.body;n?.type!==`ReturnStatement`||n.argument===null||vc(n.argument)&&r.add(t)},ImportDeclaration(e){a??=e},JSXElement(e){i.push(e)},"Program:exit"(){let o;a!==void 0&&(o=n.getScope(a));for(let n of i){let i=_c(n);if(i!==void 0&&!(!Ec(i,r,o,t)||wc(n)))for(let t of n.children)Tc(t)&&e.report({messageId:`redundantAspectRatioConstraint`,node:t})}}}},meta:{docs:{description:`Disallow redundant uiaspectratioconstraint children inside components that already manage their own aspect ratio internally.`},messages:{redundantAspectRatioConstraint:`This component already renders a uiaspectratioconstraint internally. Passing one as a child is redundant and will cause layout issues.`},schema:[],type:`problem`}}),Oc=new Set([`JSXElement`,`ReactElement`,`ReactNode`]),kc=new Set([`ChainExpression`,`ParenthesizedExpression`,`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]),Ac=/^use[A-Z]/u;function jc(e){return Ac.test(e)}function Mc(e){if(e?.type!==`TSTypeReference`)return!1;let{typeName:t}=e;return t.type===`Identifier`?Oc.has(t.name):t.type===`TSQualifiedName`&&Oc.has(t.right.name)}function Nc({returnType:e}){return e?.typeAnnotation??void 0}function Pc(e){if(e.type===`ArrowFunctionExpression`&&(e.body.type===`JSXElement`||e.body.type===`JSXFragment`))return!0;if(e.body===null)return!1;let t=!1;return zr(e.body,e=>{if(t||e.type!==`ReturnStatement`)return;let{argument:n}=e;n!==null&&(n.type===`JSXElement`||n.type===`JSXFragment`)&&(t=!0)}),t}function Fc({parent:e}){return e.type===`CallExpression`||e.type===`JSXExpressionContainer`||e.type===`ArrayExpression`}function Ic(e){if(!(e.parent?.type!==`VariableDeclarator`||e.parent.id.type!==`Identifier`))return e.parent.id.name}function Lc(e){return e.type===`Identifier`?e.name:void 0}function Rc(e){let t=e;for(;t!==void 0&&kc.has(t.type);)t=t.parent??void 0;return t}function zc(e){let t=Rc(e.parent??void 0);return t?.type===`Property`&&Bc(t.value)===e}function Bc(e){let t=e;for(;Vc(t);)t=t.expression;return t}function Vc(e){return kc.has(e.type)}function Hc(e,t){if(t.type===`FunctionDeclaration`){let n=e.getDeclaredVariables(t);return n.length>0?n[0]:void 0}let{parent:n}=t;if(n?.type!==`VariableDeclarator`)return;let r=e.getDeclaredVariables(n);return r.length>0?r[0]:void 0}function Uc(e,t){let n=Hc(t,e);if(n===void 0)return!1;let r=!1;for(let e of n.references)if(!e.isWrite()&&(r=!0,!zc(e.identifier)))return!1;return r}const Wc=t({create(e){let t=0;function n(t,n){e.report({data:{functionName:n},messageId:`noRenderHelper`,node:t})}function r(r){let{parent:i}=r,a=Ic(r);if(a!==void 0&&W(a)){--t;return}if(t>0||Fc(r)||i.type!==`VariableDeclarator`)return;let o=Lc(i.id);if(o===void 0||W(o)||jc(o)||Uc(r,e.sourceCode))return;let s=ce(i.id),c=s!==void 0&&Mc(s.typeAnnotation),l=Mc(Nc(r));(c||l||Pc(r))&&n(i,o)}return{ArrowFunctionExpression(e){let n=Ic(e);n!==void 0&&W(n)&&(t+=1)},"ArrowFunctionExpression:exit":r,FunctionDeclaration({id:e}){e!==null&&W(e.name)&&(t+=1)},"FunctionDeclaration:exit"(r){if(r.id===null)return;let i=r.id.name;if(W(i)){--t;return}t>0||jc(i)||Uc(r,e.sourceCode)||(Mc(Nc(r))||Pc(r))&&n(r,i)},FunctionExpression(e){let n=Ic(e);n!==void 0&&W(n)&&(t+=1)},"FunctionExpression:exit":r}},meta:{docs:{description:`Disallow non-component functions that return JSX or React elements.`},messages:{noRenderHelper:`Convert render helper '{{functionName}}' to a React component. Functions that return JSX should be PascalCase components, not camelCase helpers.`},schema:[],type:`suggestion`}}),Gc=h({"message?":`string | undefined`,object:`string`,properties:h(`string[]`).readonly()}).readonly(),Kc=h({"allowFiles?":h(`string[]`).readonly().or(`undefined`),"checkComputed?":`boolean | undefined`,restrictions:Gc.array().readonly()}).readonly(),qc={matchBase:!0},Jc={dot:!0,magicalBraces:!0};function Yc(e){return e.replaceAll(`\\`,`/`)}function Xc(e){let t=Yc(e);if(!s(e))return[t];let n=Yc(l(process.cwd(),e));return n.length===0||n.startsWith(`..`)?[t]:[t,n]}function Zc(e,t){let n=new g(e,t),r=n.hasMagic();return{hasMagic:r,matches:r?e=>n.match(e):t=>t===e}}function Qc(e){let t=new Set,n=[],r=0;for(let i of e){let e=Zc(i,Jc);e.hasMagic?n[r++]=e.matches:t.add(i)}return e=>t.has(e)||n.some(t=>t(e))}function $c(e){return{matchesObject:Zc(e.object,Jc).matches,matchesProperty:Qc(e.properties),message:e.message}}function el(e){let[t]=e.options;if(!Kc.allows(t))return{checkComputed:!0,isAllowedFile:!1,restrictions:[]};let{allowFiles:n,checkComputed:r,restrictions:i}=t,a=Xc(e.filename),o=n?.some(e=>a.some(t=>_(t,e,qc)))??!1;return{checkComputed:r??!0,isAllowedFile:o,restrictions:i.map($c)}}const tl=t({create(e){let{checkComputed:t,isAllowedFile:n,restrictions:r}=el(e);function i(i,a){if(n||!M(i)||i.computed&&!t||i.object.type!==`Identifier`)return;let o=T(i);if(o!==void 0){for(let t of r)if(t.matchesObject(i.object.name)&&t.matchesProperty(o)){t.message===void 0?e.report({data:{object:i.object.name,property:o},messageId:`restricted`,node:a}):e.report({data:{message:t.message},messageId:`restrictedCustom`,node:a});return}}}return{AssignmentExpression(e){i(e.left,e)},UpdateExpression(e){i(e.argument,e)}}},meta:{docs:{description:`Disallow assignment to restricted object properties.`,recommended:!0},messages:{restricted:`Assignment to '{{object}}.{{property}}' is not permitted.`,restrictedCustom:`{{message}}`},schema:[{additionalProperties:!1,properties:{allowFiles:{items:{type:`string`},type:`array`},checkComputed:{default:!0,type:`boolean`},restrictions:{items:{additionalProperties:!1,properties:{message:{type:`string`},object:{type:`string`},properties:{items:{type:`string`},minItems:1,type:`array`}},required:[`object`,`properties`],type:`object`},type:`array`}},required:[`restrictions`],type:`object`}],type:`problem`}}),nl=/\.spec\.(?:ts|tsx)$/u,rl=t({createOnce(e){return{Program(t){let{filename:n}=e;n&&nl.test(n)&&e.report({messageId:`noSpecFileExtension`,node:t})}}},meta:{docs:{description:`Disallow the .spec.{ts,tsx} file extension for test files. Use .test.{ts,tsx} instead.`,recommended:!0},messages:{noSpecFileExtension:`Test files must use .test.ts or .test.tsx instead of .spec.ts or .spec.tsx. Rename this file to use the .test extension.`},schema:[],type:`problem`}}),il=`Fragment`;function al(e){return e.parent?.type===`ImportDeclaration`?e.parent:void 0}function ol(e,t){if(e.type!==`ImportBinding`)return!1;let n=al(e.node);return n!==void 0&&t.has(n.source.value)}function sl(e,t){if(e===void 0)return!1;for(let n of e.defs)if(ol(n,t)&&(n.node.type===`ImportDefaultSpecifier`||n.node.type===`ImportNamespaceSpecifier`))return!0;return!1}function cl(e,t,n){if(e===void 0)return!1;for(let r of e.defs)if(ol(r,n)&&r.node.type===`ImportSpecifier`&&pe(r.node)===t)return!0;return!1}function ll(e,t,n){let{callee:r}=t;return r.type===`Identifier`?cl(E(e.getScope(r),r.name),`createElement`,n):r.type!==`MemberExpression`||r.computed||T(r)!==`createElement`||r.object.type!==`Identifier`?!1:sl(E(e.getScope(r.object),r.object.name),n)}function ul(e){return e.type===`Literal`&&y(e.value)}function dl(e,t){if(Ds(e))return O(t)||t===il;if(!G(e.scope)||!O(t)&&t!==il)return!1;for(let t of e.defs){if(t.type===`FunctionName`||t.type===`ClassName`)return!0;if(t.type!==`Variable`||t.node.type!==`VariableDeclarator`)continue;let e=t.node.init??void 0;if(e!==void 0&&(Fe(e)||e.type===`ClassExpression`))return!0}return!1}function fl(e,t,n){let r=E(e.getScope(t),t.name);return cl(r,il,n)?!0:r!==void 0&&dl(r,t.name)}function pl(e){let t=e;for(;;){if(t.computed)return;if(t.object.type===`Identifier`)return t.object;if(t.object.type!==`MemberExpression`)return;t=t.object}}function ml(e){if(e.computed)return;let t=T(e);if(t!==void 0)return e.object.type===`MemberExpression`&&ml(e.object)===void 0?void 0:t}function hl(e,t,n){let r=pl(t);if(r===void 0)return!1;let i=ml(t);if(i===void 0)return!1;let a=E(e.getScope(r),r.name);return sl(a,n)&&i===il?!0:a===void 0||!Ds(a)?!1:O(i)}function gl(e,t,n){return t.type===`SpreadElement`?!1:ul(t)?!0:t.type===`Identifier`?fl(e,t,n):t.type===`MemberExpression`&&hl(e,t,n)}const _l=t({create(e){let t=yn(e.options[0]),{sourceCode:n}=e;return{CallExpression(r){if(!ll(n,r,t))return;let[i]=r.arguments;i!==void 0&&gl(n,i,t)&&e.report({messageId:`useJsx`,node:r})}}},meta:{docs:{description:`Require JSX for static React.createElement calls.`,recommended:!0},messages:{useJsx:`Use JSX instead of static React.createElement calls.`},schema:[{additionalProperties:!1,properties:{environment:mn},type:`object`}],type:`problem`}});function vl(e,t){let n=w(t);if(n.type!==`CallExpression`||n.optional)return!1;let r=w(n.callee);if(r.type!==`MemberExpression`||r.optional||T(r)!==`create`)return!1;let i=w(r.object);return i.type!==`Identifier`||i.name!==`table`?!1:!ie(e,i,`table`)}function yl(e,t){let n=w(t);if(n.type!==`NewExpression`||n.arguments.length!==1&&n.arguments.length!==2)return!1;let r=w(n.callee);return r.type!==`Identifier`||r.name!==`Array`?!1:!ie(e,r,`Array`)}const bl=t({create(e){return{CallExpression(t){if(t.optional)return;let n=w(t.callee);if(n.type!==`MemberExpression`||n.optional||T(n)!==`map`)return;let r=w(n.object);(vl(e.sourceCode,r)||yl(e.sourceCode,r))&&e.report({messageId:`avoidConstructThenMap`,node:t})}}},meta:{docs:{description:`Disallow map(...) directly on table.create(...) and new Array(...) constructor patterns in roblox-ts.`},messages:{avoidConstructThenMap:`Do not map directly on table.create(...) or new Array(...). Allocate first, then write by index in a loop.`},schema:[],type:`suggestion`}});function xl(e){let{callee:t}=e;if(t.type!==`MemberExpression`||T(t)!==`await`||t.object.type!==`CallExpression`)return!1;let n=t.object.callee;return n.type!==`MemberExpression`||n.object.type!==`Identifier`||n.object.name!==`Promise`?!1:T(n)===`delay`}const Sl=t({createOnce(e){return{CallExpression(t){if(xl(t)){e.report({messageId:`noPromiseDelayAwait`,node:t});return}let{callee:n}=t;n.type===`MemberExpression`&&(n.object.type!==`Identifier`||n.object.name!==`task`||T(n)===`wait`&&e.report({messageId:`noTaskWait`,node:t}))}}},meta:{docs:{description:`Disallow task.wait() calls.`},messages:{noPromiseDelayAwait:`Do not use Promise.delay(...).await() in tests. Advance deterministic schedulers or wait for the actual condition instead.`,noTaskWait:`Do not use task.wait() in tests. Advance deterministic schedulers or wait for the actual condition instead.`},schema:[],type:`problem`}}),Cl=t({createOnce(e){return{JSXAttribute(t){t.name.type!==`JSXIdentifier`||!t.name.name.startsWith(`_`)||e.report({data:{propName:t.name.name},messageId:`noUnderscoreReactProp`,node:t.name})}}},meta:{docs:{description:`Ban React property names that begin with an underscore in JSX.`},messages:{noUnderscoreReactProp:`React prop '{{propName}}' starts with '_'. Remove the leading underscore from the prop name.`},schema:[],type:`problem`}}),wl=/@(?:link|linkcode|linkplain|see)\s+\{?(?<identifier>\w+)/gu,Tl=/\{@(?:link|linkcode|linkplain|see)\s+(?<identifier>\w+)/gu,El=/[@{](?:type|typedef|param|returns?|template|augments|extends|implements)\s+(?<annotation>[^}]*)/gu,Dl=/\b(?<identifier>\w+)\b/gu;function Ol(e){return e.type===`ImportDefaultSpecifier`||e.type===`ImportNamespaceSpecifier`||e.type===`ImportSpecifier`}function kl(e){let t=new Set;for(let n of e)n.type===`Block`&&(Al(n.value,t),jl(n.value,t));return t}function Al(e,t){for(let n of[wl,Tl])for(let r of e.matchAll(n)){let e=r.groups?.identifier;e!==void 0&&t.add(e)}}function jl(e,t){for(let n of e.matchAll(El)){let e=n.groups?.annotation;if(e!==void 0)for(let n of e.matchAll(Dl)){let e=n.groups?.identifier;e!==void 0&&t.add(e)}}}function Ml(e,t,n,r){if(t.specifiers.length===1)return r.remove(t);let i=e.getTokenAfter(n);if(t.specifiers[0]===n&&i?.value===`,`){let t=e.getTokenBefore(n);if(t!==null)return[r.removeRange([t.range[1],n.range[0]]),r.remove(n),r.remove(i)]}if(i?.value===`,`)return r.removeRange([n.range[0],i.range[1]]);let a=e.getTokenBefore(n);return a?.value===`,`?r.removeRange([a.range[0],n.range[1]]):r.remove(n)}const Nl=t({create(e){let{sourceCode:t}=e,n=e.options[0]?.checkJSDoc??!0,r=n?kl(t.getAllComments()):new Set,i=[],a;return{ImportDeclaration(e){a??=e;for(let t of e.specifiers)Ol(t)&&i.push({identifierName:t.local.name,parent:e,specifier:t})},"Program:exit"(){if(a===void 0)return;let o=t.getScope(a);for(let{identifierName:a,parent:s,specifier:c}of i){let i=o.set.get(a);i!==void 0&&i.references.length>0||n&&r.has(a)||e.report({data:{identifierName:a},fix(e){return Ml(t,s,c,e)},messageId:`unusedImport`,node:c})}}}},meta:{docs:{description:`Disallow unused imports`},fixable:`code`,messages:{unusedImport:`Import '{{identifierName}}' is defined but never used.`},schema:[{additionalProperties:!1,properties:{checkJSDoc:{default:!0,description:`Check if imports are referenced in JSDoc comments`,type:`boolean`}},type:`object`}],type:`problem`}}),Pl=t({create(e){let t=new Set,n=new Set,r=yn(e.options[0]);return{CallExpression(r){fe(r,t,n)&&qs(r)&&e.report({messageId:`unusedUseMemo`,node:r})},ImportDeclaration(e){Js(e,r,t,n)}}},meta:{docs:{description:`Disallow standalone useMemo calls that ignore the memoized value.`,recommended:!0},messages:{unusedUseMemo:`useMemo results must be used. Standalone useMemo calls add overhead without preserving a value.`},schema:[{additionalProperties:!1,properties:{environment:{default:`roblox-ts`,enum:[`roblox-ts`,`standard`],type:`string`}},type:`object`}],type:`problem`}});function Fl(e){if(e.body===null)return;if(e.body.type!==`BlockStatement`)return e.body;if(e.body.body.length!==1)return;let[t]=e.body.body;if(t?.type===`ReturnStatement`)return t.argument??void 0}const Il=t({create(e){return{CallExpression(t){if(!No(t,`useMemo`))return;let n=Lr(t);if(n===void 0)return;let r=Fl(n);r===void 0||!Mo(r)||e.report({messageId:`simpleMemo`,node:t})}}},meta:{docs:{description:`Disallow useMemo for expressions that are already trivial to compute.`,recommended:!0},messages:{simpleMemo:`useMemo wrapping a trivially cheap expression - memo overhead exceeds the computation`},type:`problem`}}),Ll=/^[A-Z][A-Z0-9_]*$/u,Rl={staticGlobalFactories:new Set(Cs)},zl=[String.raw`^Array\b`,String.raw`^Object\b`,String.raw`^Map\b`,String.raw`^Set\b`,String.raw`^WeakMap\b`,String.raw`^WeakSet\b`];function Bl(e){let t=[],n=0,r=[e];for(;r.length>0;){let e=r.pop();if(e===void 0)break;e.type!==`global`&&(t[n++]=e);for(let t of e.childScopes)r.push(t)}return t}function Vl(e){return Fe(e)||e.type===`ClassExpression`}const Hl=new Set([`ArrayExpression`,`ObjectExpression`,`JSXElement`,`JSXFragment`]);function Ul(e,t,n){if(Hl.has(e.type))return!0;if(e.type!==`CallExpression`&&e.type!==`NewExpression`)return!1;let r=n.getText(e.callee);for(let e of t)if(e.test(r))return!0;return!1}function Wl(e){return e.type===`Program`||e.type===`BlockStatement`}function Gl(e){switch(e.type){case`ChainExpression`:case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:return Gl(e.expression);case`Identifier`:return e.name;case`MemberExpression`:return Gl(e.object);default:return}}function q(e,t){switch(e.type){case`ArrayExpression`:return Kl(e,t);case`BinaryExpression`:case`LogicalExpression`:return ql(e,t);case`CallExpression`:case`NewExpression`:return Jl(e,t);case`ChainExpression`:return q(e.expression,t);case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:return q(e.expression,t);case`ConditionalExpression`:return Yl(e,t);case`MemberExpression`:return Xl(e,t);case`ObjectExpression`:return Zl(e,t);case`SequenceExpression`:return!1;case`SpreadElement`:return!1;case`TemplateLiteral`:return Ql(e.expressions,t);case`UnaryExpression`:return q(e.argument,t);default:return!0}}function Kl(e,t){for(let n of e.elements)if(n===null||!q(n,t))return!1;return!0}function ql(e,t){return q(e.left,t)&&q(e.right,t)}function Jl(e,t){let n=Gl(e.callee);return n===void 0||!t.has(n)||!q(e.callee,t)?!1:Ql(e.arguments,t)}function Yl(e,t){return q(e.test,t)&&q(e.consequent,t)&&q(e.alternate,t)}function Xl(e,t){return q(e.object,t)&&(!e.computed||q(e.property,t))}function Zl(e,t){for(let n of e.properties)if(n.type!==`Property`||n.computed&&!q(n.key,t)||!q(n.value,t))return!1;return!0}function Ql(e,t){for(let n of e)if(!q(n,t))return!1;return!0}function $l(e,t){return t.type===`Literal`||K(e,t,new Set,Rl)&&q(t,Rl.staticGlobalFactories)}function eu(e,t){let n=t;for(;n.type===`ParenthesizedExpression`;)n=n.expression;return e.getText(n)}function tu(e,t){let{parent:n}=e;if(n==null||!Wl(n))return!1;let{body:r}=n;for(let n=0;n<r.length;n+=1)if(r[n]===e)return r[n+1]===t;return!1}function nu(e,t){let[n]=t.range;for(;n>0;){let t=e[n-1];if(t===` `||t===` `){--n;continue}break}let[,r]=t.range,i=r;for(;i<e.length;){let t=e[i];if(t===`
9
+ `||t===`\r`){i+=1;continue}break}return[n,i]}function ru(e){let t=e.parent,n=e;for(;t!=null;){if(k(t)&&t.init===n)return t;n=t,t=t.parent}}const iu=t({create(e){let{sourceCode:t}=e,[n]=e.options,r=(n?.ignoreCallPatterns??zl).map(e=>new RegExp(e,`u`));function i(e){if(t.getCommentsInside(e).length>0)return!0;let n=e.loc?.start.line,r=e.loc?.end.line;if(n===void 0||r===void 0)return!1;for(let r of t.getCommentsBefore(e)){let e=r.loc?.end.line;if(e===n||e===n-1)return!0}for(let n of t.getCommentsAfter(e)){let e=n.loc?.start.line;if(e===r||e===r+1)return!0}return!1}function a(e,n){let r,i=0;for(let e of n.references)e.isReadOnly()&&(i+=1,r=e);if(!(i!==1||r===void 0||r.from!==e||t.getScope(r.identifier)!==e))return r}function o(e,n){let{name:i}=n;if(!Ll.test(i))return;let[o]=n.defs;if(o?.type!==`Variable`)return;let s=o.node;if(!(k(s)&&nt(s.id))||s.init===null)return;let c=o.parent;if(c===null||!Me(c)||c.kind!==`const`||c.declarations.length!==1||Ne(c.parent))return;let l=s.init;if(Vl(l)||Ul(l,r,t))return;let u=a(e,n);if(u===void 0||!nt(u.identifier))return;let d=ru(u.identifier);if(d===void 0)return;let f=d.parent;if(!(!Me(f)||f.kind!==`const`))return{declarationNode:c,enclosingDeclaration:f,initializer:l,name:i,referenceIdentifier:u.identifier,reportNode:s.id}}function s(n){let r=[];for(let a of n.variables){let s=o(n,a);if(s===void 0)continue;let c=tu(s.declarationNode,s.enclosingDeclaration),l=$l(t,s.initializer),u=q(s.initializer,Rl.staticGlobalFactories);if(!((c||l)&&u&&!i(s.declarationNode))){e.report({data:{name:s.name},messageId:`uselessConstantNoFix`,node:s.reportNode});continue}r.push({declarationNode:s.declarationNode,initializerText:eu(t,s.initializer),name:s.name,referenceIdentifier:s.referenceIdentifier,reportNode:s.reportNode})}c(r)}function c(n){let[r]=n;r!==void 0&&e.report({data:{name:r.name,names:n.map(e=>e.name).join(`, `)},fix(e){let r=[],i=0;for(let t of n)r[i++]=e.replaceText(t.referenceIdentifier,t.initializerText);for(let a of n)r[i++]=e.removeRange(nu(t.text,a.declarationNode));return r},messageId:n.length===1?`uselessConstant`:`uselessConstants`,node:r.reportNode})}return{"Program:exit"(e){let n=Bl(t.getScope(e));for(let e of n)s(e)}}},meta:{docs:{description:`Disallow constants that do not add value.`,recommended:!0},fixable:`code`,messages:{uselessConstant:`Constant '{{name}}' is only referenced once in the same scope. Inline it directly, or move it to a higher scope if reference stability is needed.`,uselessConstantNoFix:`Constant '{{name}}' is only referenced once in the same scope. It cannot be auto-inlined because the initializer is not safely movable or the declaration has attached comments. Inline it manually, or move it to a higher scope if reference stability is needed.`,uselessConstants:`Constants '{{names}}' are only referenced once in the same scope. Inline them directly, or move them to a higher scope if reference stability is needed.`},schema:[{additionalProperties:!1,properties:{ignoreCallPatterns:{default:[...zl],items:{type:`string`},type:`array`}},type:`object`}],type:`problem`}});var au={AdGui:[25,133],AdPortal:[25,133],AlignOrientation:[7,6,25,133,72,152,155,133,343,172,359,204,379,76,440,132,455,132,471,207,515,132,720,132],AlignPosition:[23,132,25,133,155,133,187,36,189,2,344,144,348,204,361,172,379,86,436,135,454,132,471,207,515,132,720,132],AngularVelocity:[21,135,25,133,155,133,359,200,455,132,459,2,720,132],Animation:[25,133],AnimationConstraint:[15,212,20,212,25,133,155,133,250,132,318,212,320,212,348,204,359,204,681,152,720,132],AnimationController:[25,133],AnimationGraphDefinition:[25,133,324,133,443,10],AnimationNodeDefinition:[25,133,396,9],Animator:[25,133,438,133],ArcHandles:[25,133,103,155,682,200,720,133],Attachment:[25,133,72,152,720,132],AudioAnalyzer:[25,133,596,133,740,16],AudioChannelMixer:[25,133,259,13],AudioChannelSplitter:[25,133,259,13],AudioChorus:[25,133,69,132,120,192,377,197,452,234],AudioCompressor:[25,133,29,186,69,132,334,200,453,227,460,186,648,177],AudioDeviceInput:[1,0,25,133,388,132,722,212],AudioDeviceOutput:[25,133],AudioDistortion:[25,133,69,132,302,193],AudioEcho:[25,133,69,132,118,212,145,200,166,193,450,200,730,200],AudioEmitter:[2,133,25,133,31,242,125,100,398,100,437,32,473,100,578,15],AudioEqualizer:[25,133,69,132,223,200,327,200,365,200],AudioFader:[25,133,69,132,722,212],AudioFilter:[25,133,69,132,175,14,193,214,198,200,446,195],AudioFlanger:[25,133,69,132,120,192,377,197,452,234],AudioGate:[25,133,29,181,69,132,460,186],AudioLimiter:[25,133,69,132,352,200,460,181],AudioListener:[2,133,25,133,31,242,125,100,398,100,437,65,473,100,578,15],AudioPitchShifter:[25,133,69,132,424,201,740,16],AudioPlayer:[25,133,34,133,36,132,326,132,432,212,661,200,722,212],AudioRecorder:[25,133],AudioReverb:[25,133,69,132,115,193,116,202,119,212,126,212,145,200,147,182,222,213,258,183,328,218,329,200,456,231,730,179],AudioSpeechToText:[25,133,155,132,630,242],AudioTextToSpeech:[25,133,326,132,424,200,432,212,597,212,630,242,661,200,721,242,722,212],AudioTremolo:[25,133,69,132,120,212,146,193,193,234,567,200,585,200,604,200],AuroraScript:[25,133],AvatarAbilityRules:[25,133],AvatarAccessoryRules:[25,133],AvatarAnimationRules:[25,133],AvatarBodyRules:[25,133],AvatarClothingRules:[25,133],AvatarCollisionRules:[25,133],AvatarRules:[25,133],BallSocketConstraint:[25,133,155,133,312,132,449,187,472,200,687,132,688,178,689,228,698,228,720,132],Beam:[25,133,68,212,109,200,110,200,155,133,162,132,307,200,308,200,551,207,643,212,644,115,646,212,731,212,732,212,745,200],BillboardGui:[4,132,9,132,25,133,35,133,68,212,96,132,131,200,132,175,155,133,159,135,160,135,308,200,345,172,468,133,554,99,555,99,556,99,557,99,558,132,580,252,582,262,613,135,614,135,744,131],BlockMesh:[25,133,400,135,538,141,711,141],BloomEffect:[25,133,155,133,246,191,580,217,648,199],BlurEffect:[25,133,155,133,580,217],BodyAngularVelocity:[21,138,25,133,359,148,410,209],BodyColors:[25,133,212,168,266,168,283,156,481,168,498,156,677,159],BodyForce:[25,133,186,136],BodyGyro:[25,133,72,152,113,232,359,149,410,221],BodyPartDescription:[25,133,28,200,53,18,102,154,215,242],BodyPosition:[25,133,113,209,348,148,410,204,436,139],BodyThrust:[25,133,186,136,321,135],BodyVelocity:[25,133,348,148,410,209,708,138],Bone:[25,133,72,152,720,132],BoolValue:[25,133,704,132],BoxHandleAdornment:[6,4,9,132,25,133,72,152,103,155,565,5,580,141,583,135,682,200,720,133,743,175],BrickColorValue:[25,133],CFrameValue:[25,133,704,152],Camera:[25,133,72,153,74,22,167,236,168,33,184,151,213,133,214,212,703,132],CanvasGroup:[4,132,11,262,25,133,35,133,41,17,46,164,47,200,55,157,56,19,58,212,96,133,144,132,205,170,206,200,245,53,247,133,260,200,436,252,531,200,552,132,554,99,555,99,556,99,557,99,558,132,561,200,580,252,581,101,720,133,743,212],CharacterMesh:[25,133,53,18,409,200],ChorusSoundEffect:[25,133,120,187,155,133,377,193,443,200,452,193],ClickDetector:[25,133,341,223],Color3Value:[25,133,704,154],ColorCorrectionEffect:[25,133,68,200,107,200,155,133,537,200,664,170],ColorGradingEffect:[25,133,155,133,665,116],CompositeValueCurve:[25,133,111,23],CompressorSoundEffect:[25,133,29,186,155,133,199,200,443,200,453,227,460,186,648,177],ConeHandleAdornment:[6,4,9,132,25,133,72,152,103,155,220,220,226,132,449,193,565,5,583,135,682,200,720,133,743,175],Configuration:[25,133],CornerWedgePart:[12,132,25,133,30,133,42,173,43,193,44,107,45,54,61,173,62,193,64,107,65,54,72,152,76,133,77,133,78,133,82,133,99,244,100,200,102,171,154,133,194,173,195,193,196,107,197,54,284,173,285,193,291,107,292,54,322,132,337,132,338,67,340,242,425,152,458,200,499,173,500,193,505,107,506,54,525,200,530,135,580,146,671,173,672,193,674,107,675,54,682,200,708,135],CurveAnimation:[25,133,324,133,443,10],CustomLog:[25,133],CylinderHandleAdornment:[6,4,9,132,13,224,25,133,72,152,103,155,220,212,244,200,449,212,565,5,583,135,682,200,720,133,743,175],CylinderMesh:[25,133,400,135,538,141,711,141],CylindricalConstraint:[5,3,14,3,16,132,17,228,18,200,19,200,21,200,25,133,155,133,238,200,312,132,319,228,330,178,331,200,383,172,384,230,385,200,386,200,472,200,532,132,563,200,564,200,580,187,590,132,591,132,597,200,624,200,627,200,698,228,699,234,708,200,720,132],Decal:[25,133,35,133,103,170,161,73,531,200,682,200,695,262,696,264,743,212],DepthOfFieldEffect:[25,133,155,133,165,196,185,184,236,207,391,196],DigitsRigDescription:[25,133,239,152,240,152,241,152,242,135,243,200,366,152,367,152,368,152,369,135,370,200,419,152,420,152,421,152,422,135,423,200,516,152,517,152,518,152,519,135,520,200,576,24,653,152,654,152,655,152,656,135,657,200],DistortionSoundEffect:[25,133,155,133,302,196,443,200],DoubleConstrainedValue:[25,133,360,212,376,200],DragDetector:[23,132,25,133,138,152,142,26,155,133,202,58,257,61,341,223,346,200,347,135,348,203,359,204,371,200,372,135,406,137,418,27,470,28,471,207,535,132,679,212,680,212,702,57],Dragger:[25,133],EchoSoundEffect:[25,133,117,212,145,200,155,133,166,193,443,200,730,200],EqualizerSoundEffect:[25,133,155,133,223,200,327,176,365,174,443,200],EulerRotationCurve:[25,133,533,93],ExplorerFilter:[25,133],FaceControls:[25,133],FileMesh:[25,133,400,135,538,141,711,141],Fire:[25,133,102,166,155,133,219,240,547,161,580,234,662,212],FlangeSoundEffect:[25,133,120,192,155,133,377,197,443,200,452,234],FloatCurve:[25,133],FloorWire:[25,133,103,155,112,200,612,229,645,264,682,200,708,220,720,133,741,185],Folder:[25,133],ForceField:[25,133,720,133],Frame:[4,132,11,262,25,133,35,133,41,17,46,164,47,200,55,157,56,19,58,212,96,132,144,132,245,53,247,133,260,200,436,252,531,200,552,132,554,99,555,99,556,99,557,99,558,132,561,200,580,252,581,101,618,38,720,133,743,212],GeneratedFolder:[25,133],Handles:[25,133,103,155,618,41,682,200,720,133],HapticEffect:[25,133,325,132,436,135,449,225,690,42],Highlight:[25,133,121,43,155,133,169,169,174,193,407,170,408,200],HingeConstraint:[5,3,17,228,19,200,21,200,25,133,155,133,312,132,330,178,383,230,386,200,449,187,472,200,564,200,591,132,624,200,698,228,720,132],Humanoid:[25,133,33,133,37,133,40,133,67,133,101,45,128,46,129,242,157,133,217,206,218,47,224,200,253,235,254,233,349,206,355,237,389,206,390,72,466,133,475,48,701,133,728,211],HumanoidController:[25,133],HumanoidDescription:[25,133,54,190,94,200,122,212,161,200,164,200,203,200,214,212,221,212,230,200,252,200,381,200,416,200,444,212,534,200,571,200,607,132,622,200,700,132,727,200,733,212],HumanoidRigDescription:[25,133,86,135,87,135,88,200,89,152,208,135,209,135,210,200,211,152,262,135,263,135,264,200,265,152,267,135,268,135,269,200,270,152,271,135,272,135,273,200,274,152,275,135,276,135,277,200,278,152,279,135,280,135,281,200,282,152,287,135,288,135,289,200,290,152,293,135,294,135,295,200,296,152,297,135,298,135,299,200,300,152,392,135,393,135,394,200,395,152,477,135,478,135,479,200,480,152,482,135,483,135,484,200,485,152,486,135,487,135,488,200,489,152,490,135,491,135,492,200,493,152,494,135,495,135,496,200,497,152,501,135,502,135,503,200,504,152,507,135,508,135,509,200,510,152,511,135,512,135,513,200,514,152,526,135,527,135,528,200,529,152,598,135,599,135,600,200,601,152,723,135,724,135,725,200,726,152],IKControl:[25,133,155,133,156,152,400,152,443,200,589,184,690,49,729,212],ImageButton:[4,133,11,262,25,133,32,133,35,133,41,17,46,164,47,200,55,157,56,19,58,212,96,132,144,132,231,170,232,262,233,262,234,200,245,53,247,133,260,200,378,132,436,252,467,91,531,200,539,95,552,133,553,132,554,99,555,99,556,99,557,99,558,132,561,200,580,252,581,101,587,241,588,212,618,21,660,257,720,133,743,212],ImageHandleAdornment:[6,4,9,132,25,133,72,152,103,167,580,264,583,135,682,200,720,133,743,175],ImageLabel:[4,132,11,262,25,133,35,133,41,17,46,164,47,200,55,157,56,19,58,212,96,132,144,132,231,170,232,262,233,262,234,200,245,53,247,133,260,200,436,252,467,91,531,200,539,95,552,132,554,99,555,99,556,99,557,99,558,132,561,200,580,252,581,101,587,241,588,212,660,257,720,133,743,212],InputAction:[25,133,155,133,690,51],InputBinding:[25,133,48,62,91,133,135,62,191,62,255,62,261,62,435,200,439,193,441,62,461,188,469,212,476,62,538,212,548,62,690,52,697,62,705,264,706,141],InputContext:[25,133,155,133,443,205,579,132],IntConstrainedValue:[25,133,360,207,376,200],IntValue:[25,133,704,200],LineForce:[23,132,25,133,155,133,249,132,332,205,348,172,454,132,720,132],LineHandleAdornment:[6,4,9,132,25,133,72,152,103,155,301,234,583,135,647,212,682,200,720,133,743,175],LinearVelocity:[25,133,155,133,187,36,188,133,313,140,317,200,344,143,348,205,353,265,429,262,442,140,454,133,459,2,549,136,707,135,709,126,720,132],LocalizationTable:[25,133,593,251],MakeupDescription:[25,133,28,200,335,66,405,200],MaterialVariant:[8,7,25,133,50,67,152,212,153,170,339,68,615,207],MeshPart:[12,132,25,133,30,133,42,173,43,193,44,107,45,54,61,173,62,193,64,107,65,54,72,152,76,133,77,133,78,133,82,133,99,244,100,200,102,171,134,132,154,133,194,173,195,193,196,107,197,54,284,173,285,193,291,107,292,54,322,132,337,132,338,67,340,242,425,152,458,200,462,89,499,173,500,193,505,107,506,54,525,200,530,135,580,147,671,173,672,193,674,107,675,54,682,200,708,135],Model:[25,133,303,70,380,71],Motor:[25,133,70,152,71,152,124,200,155,133,361,200],Motor6D:[25,133,70,152,71,152,124,200,155,133,361,200],MotorFeature:[25,133,163,74,237,50,286,63,668,117],NoCollisionConstraint:[25,133,155,133],Noise:[25,133],NumberPose:[25,133,148,84,149,85,704,200,729,212],NumberValue:[25,133,704,200],ObjectValue:[25,133],Pants:[25,133,103,170],Part:[12,132,25,133,30,133,42,173,43,193,44,107,45,54,61,173,62,193,64,106,65,54,72,152,76,133,77,133,78,133,82,133,99,244,100,200,102,171,154,133,190,37,194,173,195,193,196,107,197,54,284,173,285,193,291,107,292,54,322,132,337,132,338,67,340,242,425,152,458,200,499,173,500,193,505,107,506,54,525,200,530,135,567,77,580,147,671,173,672,193,674,108,675,54,682,200,708,135],ParticleEmitter:[0,135,25,133,68,212,136,200,151,75,155,133,177,133,178,249,179,81,180,82,181,212,182,212,183,132,307,200,308,200,323,132,406,83,452,215,567,78,568,79,569,212,570,80,603,262,662,212,710,200,739,132,745,200],Path2D:[25,133,97,132,103,154,647,212,720,133,743,212],PitchShiftSoundEffect:[25,133,155,133,399,201,443,200],PlaneConstraint:[25,133,155,133,720,132],PluginAction:[25,133],PointLight:[25,133,68,212,102,170,155,133,451,238,566,132],PrismaticConstraint:[5,3,25,133,155,133,312,132,319,228,331,200,383,172,385,200,472,200,563,200,580,187,591,132,597,200,627,200,699,234,708,200,720,132],ProceduralModel:[25,133,303,70,380,71,580,145],ProximityPrompt:[3,246,25,133,35,133,93,133,155,133,158,87,201,59,225,200,256,60,341,207,350,200,397,242,465,133,618,88,692,262],PyramidHandleAdornment:[6,4,9,132,25,133,72,152,103,155,220,220,565,5,577,229,580,212,583,135,682,200,720,133,743,175],RayValue:[25,133],RealtimeMedia:[25,133],RelativeGui:[25,133],RenderingTest:[25,133,72,152,104,207,105,90,106,233,123,242,167,236,417,132,447,132,448,216,463,215,572,132,658,242,663,222],ReverbSoundEffect:[25,133,116,202,119,212,126,212,145,179,155,133,443,200,730,200],RigidConstraint:[25,133,155,133,720,132],RocketPropulsion:[25,133,81,194,356,222,358,226,359,150,626,135,628,229,651,180,652,234,683,232,684,221],RodConstraint:[25,133,155,133,301,234,309,239,310,239,312,132,647,186,720,132],RopeConstraint:[25,133,155,133,301,234,472,200,647,186,720,132,734,132,735,204,736,228,737,220,738,234],Rotate:[25,133,70,152,71,152,155,133],RotateP:[25,133,49,200,70,152,71,152,155,133],RotateV:[25,133,49,200,70,152,71,152,155,133],RotationCurve:[25,133],ScreenGui:[25,133,35,133,95,133,130,200,155,133,468,133,536,94,540,96,554,99,555,99,556,99,557,99,558,132,744,131],ScrollingFrame:[4,132,11,262,25,133,35,133,39,17,41,17,46,164,47,200,55,157,56,19,58,212,79,262,80,253,96,133,144,132,150,31,229,97,245,53,247,133,260,200,436,252,531,200,541,170,542,200,543,210,545,98,546,133,552,133,554,99,555,99,556,99,557,99,558,133,561,200,580,252,581,101,714,97,715,128,720,133,743,212],Seat:[12,132,25,133,30,133,42,173,43,193,44,107,45,54,61,173,62,193,64,106,65,54,72,152,76,133,77,133,78,133,82,133,99,244,100,200,102,171,127,132,154,133,190,37,194,173,195,193,196,107,197,54,284,173,285,193,291,107,292,54,322,132,337,132,338,67,340,242,425,152,458,200,499,173,500,193,505,107,506,54,525,200,530,135,567,77,580,147,671,173,672,193,674,108,675,54,682,200,708,135],SelectionBox:[25,133,103,155,316,187,620,156,621,212,682,200,720,133],SelectionPartLasso:[25,133,103,155,682,200,720,133],SelectionPointLasso:[25,133,103,155,434,135,682,200,720,133],SelectionSphere:[25,133,103,155,620,156,621,212,682,200,720,133],Shirt:[25,133,103,170],ShirtGraphic:[25,133,103,170],Sky:[25,133,83,133,382,208,586,135,605,221,619,216],Smoke:[25,133,102,170,155,133,403,193,521,212,580,212,662,212],Sound:[2,133,25,133,325,132,430,132,431,132,432,212,433,132,522,204,523,207,524,92,661,200,722,193],SoundGroup:[25,133,722,193],Sparkles:[25,133,155,133,595,163,662,212],SpecialMesh:[25,133,364,69,400,135,538,141,711,141],SphereHandleAdornment:[6,4,9,132,25,133,72,152,103,155,449,212,565,5,583,135,682,200,720,133,743,175],SpotLight:[13,239,25,133,68,212,102,170,155,133,161,73,451,211,566,132],SpringConstraint:[25,133,98,225,114,200,155,133,192,212,312,132,348,172,351,234,373,200,449,191,610,200,647,186,720,132],StringValue:[25,133,704,242],StyleDerive:[25,133,443,200],StyleLink:[25,133],StyleQuery:[25,133],StyleRule:[25,133,443,200,562,242],StyleSheet:[25,133],SunRaysEffect:[25,133,155,133,246,189,602,212],SurfaceAppearance:[8,8,25,133,102,170,152,212,153,170,467,91],SurfaceGui:[4,133,9,132,25,133,35,133,68,212,80,266,96,132,155,133,161,73,308,200,345,200,426,233,468,133,554,99,555,99,556,99,557,99,558,132,584,105,666,200,744,131,745,200],SurfaceLight:[13,239,25,133,68,212,102,170,155,133,161,73,451,211,566,132],TextBox:[4,133,11,262,25,133,35,133,41,17,46,164,47,200,55,157,56,19,58,212,92,133,96,132,144,132,245,53,247,133,260,200,314,212,362,175,387,132,404,242,427,160,428,242,436,252,474,132,531,200,552,133,554,99,555,99,556,99,557,99,558,132,561,200,573,133,580,252,581,101,630,250,631,158,632,111,633,133,634,132,635,238,636,154,637,212,638,200,639,112,640,132,641,113,642,114,720,133,743,212],TextButton:[4,133,11,262,25,133,32,133,35,133,41,17,46,164,47,200,55,157,56,19,58,212,96,132,144,132,245,53,247,133,260,200,314,212,362,175,378,132,404,242,436,252,474,132,531,200,552,133,553,132,554,99,555,99,556,99,557,99,558,132,561,200,580,252,581,101,618,21,630,243,631,158,632,111,634,132,635,238,636,154,637,212,638,200,639,112,640,132,641,113,642,114,720,133,743,212],TextGenerator:[25,133,550,200,623,242,629,194,670,198],TextLabel:[4,132,11,262,25,133,35,133,41,17,46,164,47,200,55,157,56,19,58,212,96,132,144,132,245,53,247,133,260,200,314,212,362,175,404,242,436,252,474,132,531,200,552,132,554,99,555,99,556,99,557,99,558,132,561,200,580,252,581,101,630,247,631,158,632,111,634,132,635,238,636,154,637,212,638,200,639,112,640,132,641,113,642,114,720,133,743,212],Texture:[25,133,35,133,103,170,161,73,401,200,402,200,531,200,616,220,617,220,682,200,695,262,696,264,743,212],Tool:[25,133,75,133,155,133,204,152,303,70,336,132,380,71,464,133,667,242],Torque:[25,133,155,133,459,1,676,135,720,132],TorsionSpringConstraint:[25,133,98,238,114,181,155,133,311,132,312,132,342,228,359,172,449,191,472,200,610,206,720,132],Trail:[25,133,68,212,155,133,162,132,304,220,307,200,308,200,351,200,373,186,643,212,644,115],TremoloSoundEffect:[25,133,120,212,146,193,155,133,193,234,443,200],TrussPart:[12,132,25,133,30,133,42,173,43,193,44,109,45,54,61,173,62,193,64,109,65,54,72,152,76,133,77,133,78,133,82,133,99,244,100,200,102,171,154,133,194,173,195,193,196,109,197,54,284,173,285,193,291,109,292,54,322,132,337,132,338,67,340,242,425,152,458,200,499,173,500,193,505,109,506,54,525,200,530,135,580,146,671,173,672,193,674,109,675,54,682,200,708,135],UIAspectRatioConstraint:[25,133,26,212,27,12,133,25],UICorner:[25,133,60,259,63,259,669,259,673,259],UIDragDetector:[25,133,66,118,137,263,139,119,140,200,141,120,142,121,143,252,155,133,346,200,347,252,371,200,372,252,470,122,559,255,560,239,691,123],UIFlexItem:[25,133,176,125,207,200,251,56,575,200],UIGradient:[25,133,155,133,400,262,531,200,538,212,659,39,690,40],UIGridLayout:[25,133,84,256,85,254,170,34,171,200,227,44,592,102,606,103,712,127],UIListLayout:[25,133,170,35,227,44,228,124,251,56,411,258,592,102,712,127,713,124,742,132],UIPadding:[25,133,412,258,413,258,414,258,415,258],UIPageLayout:[22,133,25,133,90,132,148,29,149,30,170,34,200,133,227,44,411,258,544,133,592,102,678,133,686,212,712,127],UIScale:[25,133,538,212],UIShadow:[25,133,52,258,102,154,155,133,400,252,602,252,682,200,743,175],UISizeConstraint:[25,133,354,261,374,262],UIStroke:[24,11,25,133,57,258,59,20,102,154,155,133,315,64,611,104,647,212,682,200,743,212],UITableLayout:[25,133,170,35,172,132,173,132,227,44,333,110,411,252,592,102,712,127],UITextSizeConstraint:[25,133,357,206,375,212],UniversalConstraint:[25,133,155,133,312,132,342,228,449,188,472,200,720,132],ValueCurve:[25,133],Vector3Curve:[25,133],Vector3Value:[25,133,704,135],VectorForce:[23,132,25,133,155,133,186,142,459,1,720,132],VehicleSeat:[12,132,25,133,30,133,42,173,43,193,44,107,45,54,61,173,62,193,64,106,65,54,72,152,76,133,77,133,78,133,82,133,99,244,100,200,102,171,127,132,154,133,194,173,195,193,196,107,197,54,216,133,284,173,285,193,291,107,292,54,322,132,337,132,338,67,340,242,356,219,425,152,458,200,499,173,500,193,505,107,506,54,525,200,530,135,580,147,608,200,609,200,649,200,650,200,671,173,672,193,674,108,675,54,676,207,682,200,685,212,708,135],VelocityMotor:[25,133,70,152,71,152,108,200,124,200,155,133,361,200],VideoDisplay:[4,132,11,262,25,133,35,133,41,17,46,164,47,200,55,157,56,19,58,212,96,132,144,132,245,53,247,133,260,200,436,252,467,91,531,200,539,95,552,132,554,99,555,99,556,99,557,99,558,132,561,200,580,252,581,101,660,257,716,170,717,262,718,262,719,200,720,133,743,212],VideoFrame:[4,132,11,262,25,133,35,133,41,17,46,164,47,200,55,157,56,19,58,212,96,132,144,132,245,53,247,133,248,55,260,200,325,132,363,129,433,132,436,252,522,204,523,212,524,92,531,200,552,132,554,99,555,99,556,99,557,99,558,132,561,200,580,252,581,101,661,200,720,133,722,212,743,212],VideoPlayer:[25,133,248,55,326,132,363,129,432,212,661,200,722,212],ViewportFrame:[4,132,10,165,11,262,25,133,35,133,41,17,46,164,47,200,55,157,56,19,58,212,96,132,144,132,231,170,234,200,245,53,247,133,260,200,305,162,306,134,436,252,531,200,552,132,554,99,555,99,556,99,557,99,558,132,561,200,580,252,581,101,720,133,743,212],WedgePart:[12,132,25,133,30,133,42,173,43,193,44,107,45,54,61,173,62,193,64,106,65,54,72,152,76,133,77,133,78,133,82,133,99,244,100,200,102,171,154,133,190,37,194,173,195,193,196,107,197,54,284,173,285,193,291,107,292,54,322,132,337,132,338,67,340,242,425,152,458,200,499,173,500,193,505,107,506,54,525,200,530,135,580,147,671,173,672,193,674,107,675,54,682,200,708,135],Weld:[25,133,70,152,71,152,155,133],WeldConstraint:[25,133],Wire:[25,133,594,248,625,245],WireframeHandleAdornment:[6,4,9,132,25,133,72,152,103,155,538,141,583,135,647,212,682,200,720,133,743,175],WorldModel:[25,133,303,70,380,71],WrapDeformer:[25,133,73,152,235,152],WrapLayer:[25,133,38,130,51,152,73,152,155,133,235,152,405,212,445,212,457,152,574,200],WrapTarget:[25,133,73,152,235,152,610,200],WrapTextureTransfer:[25,133,693,260,694,261]},ou=`Acceleration.AccessType.AcousticSimulationEnabled.ActionText.Active.ActuatorType.AdornCullingMode.AlignType.AlphaMode.AlwaysOnTop.Ambient.AnchorPoint.Anchored.Angle.AngularActuatorType.AngularDamping.AngularLimitsEnabled.AngularResponsiveness.AngularRestitution.AngularSpeed.AngularStrength.AngularVelocity.Animated.ApplyAtCenterOfMass.ApplyStrokeMode.Archivable.AspectRatio.AspectType.AssetId.Attack.AudioCanCollide.AudioInteractionGroup.AutoButtonColor.AutoJumpEnabled.AutoLoad.AutoLocalize.AutoPlay.AutoRotate.AutoSkin.AutomaticCanvasSize.AutomaticScalingEnabled.AutomaticSize.BackParamA.BackParamB.BackSurface.BackSurfaceInput.BackgroundColor3.BackgroundTransparency.Backward.BaseAngle.BaseMaterial.BindOffset.BlurRadius.BodyPart.BodyTypeScale.BorderColor3.BorderMode.BorderOffset.BorderSizePixel.BorderStrokePosition.BottomLeftRadius.BottomParamA.BottomParamB.BottomRightRadius.BottomSurface.BottomSurfaceInput.BoundingBehavior.BreakJointsOnDeath.Brightness.Bypass.C0.C1.CFrame.CageOrigin.CameraType.CanBeDropped.CanCollide.CanQuery.CanTouch.CanvasPosition.CanvasSize.CartoonFactor.CastShadow.CelestialBodiesShown.CellPadding.CellSize.ChestRangeMax.ChestRangeMin.ChestSize.ChestTposeAdjustment.Circular.ClampMagnitudeToOne.ClearTextOnFocus.ClickablePrompt.ClimbAnimation.ClipToDeviceSafeArea.ClipsDescendants.Closed.Coils.CollisionGroup.CollisionGroupId.CollisionType.Color.Color3.ComparisonDiffThreshold.ComparisonMethod.ComparisonPsnrThreshold.Contrast.CurrentAngle.CurveSize0.CurveSize1.CurveType.CycleOffset.D.Damping.DecayRatio.DecayTime.Delay.DelayTime.Density.Depth.DepthMode.DepthScale.Description.DesiredAngle.DiffractionEnabled.Diffusion.Disabled.DisplayDistanceType.DisplayName.DisplayOrder.DistanceLowerLimit.DistanceUpperLimit.DominantAxis.DoubleSided.Down.Drag.DragAxis.DragFrame.DragRelativity.DragRotation.DragSpace.DragStyle.DragUDim2.Draggable.DryLevel.Duty.EarlyDelayTime.EasingDirection.EasingStyle.ElasticBehavior.EmissionDirection.EmissiveStrength.EmissiveTint.EnableFluidForces.Enabled.EndEffectorOffset.EvaluateStateMachine.Exclusivity.ExtentsOffset.ExtentsOffsetWorldSpace.Face.FaceCamera.FaceId.FallAnimation.FarIntensity.Feedback.FieldOfView.FieldOfViewMode.FillColor.FillDirection.FillDirectionMaxCells.FillEmptySpaceColumns.FillEmptySpaceRows.FillTransparency.FilterType.FlexMode.FlipbookBlendFrames.FlipbookIncompatible.FlipbookLayout.FlipbookMode.FlipbookSizeX.FlipbookSizeY.FlipbookStartRandom.Focus.FocusDistance.Force.ForceLimitMode.ForceLimitsEnabled.ForceRelativeTo.FormFactor.Forward.FreeLength.Frequency.FrontParamA.FrontParamB.FrontSurface.FrontSurfaceInput.Gain.GainMakeup.GamepadInputEnabled.GamepadKeyCode.GamepadModeSwitchKeyCode.GraphicTShirt.Grip.GroupColor3.GroupTransparency.GrowRatio.HeadBaseRangeMax.HeadBaseRangeMin.HeadBaseSize.HeadBaseTposeAdjustment.HeadColor3.HeadLocked.HeadScale.HeadShape.HeadsUpDisplay.HealthDisplayDistance.HealthDisplayType.Heat.Height.HeightScale.HighCutFrequency.HighGain.HipHeight.HoldDuration.Hollow.HorizontalAlignment.HorizontalFlex.HorizontalScrollBarInset.IdleAnimation.ImageColor3.ImageRectOffset.ImageRectSize.ImageTransparency.ImportOrigin.InFocusRadius.InOut.InclinationAngle.Index1TposeAdjustment.Index2TposeAdjustment.Index3TposeAdjustment.IndexRange.IndexSize.InnerRadius.InputSink.Intensity.Interactable.InternalVideoUsage.InverseSquareLaw.IsKinematic.ItemLineAlignment.JumpAnimation.JumpHeight.JumpPower.KeyCode.KeyboardKeyCode.KeyboardModeSwitchKeyCode.LateDelayTime.Layout.LayoutOrder.Left.LeftAnkleRangeMax.LeftAnkleRangeMin.LeftAnkleSize.LeftAnkleTposeAdjustment.LeftArmColor3.LeftClavicleRangeMax.LeftClavicleRangeMin.LeftClavicleSize.LeftClavicleTposeAdjustment.LeftElbowRangeMax.LeftElbowRangeMin.LeftElbowSize.LeftElbowTposeAdjustment.LeftHipRangeMax.LeftHipRangeMin.LeftHipSize.LeftHipTposeAdjustment.LeftKneeRangeMax.LeftKneeRangeMin.LeftKneeSize.LeftKneeTposeAdjustment.LeftLegColor3.LeftParamA.LeftParamB.LeftRight.LeftShoulderRangeMax.LeftShoulderRangeMin.LeftShoulderSize.LeftShoulderTposeAdjustment.LeftSurface.LeftSurfaceInput.LeftToeBaseRangeMax.LeftToeBaseRangeMin.LeftToeBaseSize.LeftToeBaseTposeAdjustment.LeftWristRangeMax.LeftWristRangeMin.LeftWristSize.LeftWristTposeAdjustment.Length.Level.LevelOfDetail.Lifetime.LightColor.LightDirection.LightEmission.LightInfluence.LimitAngle0.LimitAngle1.LimitEnabled.LimitsEnabled.LineDirection.LineHeight.LineJoinMode.LineThickness.LineVelocity.LinearDamping.LinearResponsiveness.LinearStrength.Location.Locked.LockedToPart.Loop.Looped.Looping.LowGain.LowShelfFrequency.LowShelfGain.LowerAngle.LowerLimit.Magnitude.MajorAxis.MakeupGain.MakeupType.ManualActivationOnly.Massless.Material.MaterialPattern.MaterialVariant.MaxActivationDistance.MaxAngle.MaxAngularVelocity.MaxAxesForce.MaxDistance.MaxDragAngle.MaxDragTranslation.MaxForce.MaxHealth.MaxIndicatorDistance.MaxLength.MaxLevel.MaxPlanarAxesForce.MaxSize.MaxSlopeAngle.MaxSpeed.MaxTextSize.MaxThrust.MaxTorque.MaxValue.MaxVelocity.MaxVisibleGraphemes.MaximumResolution.MeshType.MidGain.Middle1TposeAdjustment.Middle2TposeAdjustment.Middle3TposeAdjustment.MiddleRange.MiddleSize.MinDragAngle.MinDragTranslation.MinLength.MinSize.MinTextSize.MinValue.Mix.Modal.Mode.ModelStreamingMode.MoodAnimation.MoonAngularSize.MotorMaxAcceleration.MotorMaxAngularAcceleration.MotorMaxForce.MotorMaxTorque.MultiLine.Muted.NameDisplayDistance.NameOcclusion.NearIntensity.NeckRangeMax.NeckRangeMin.NeckSize.NeckTposeAdjustment.NodeType.ObjectText.OcclusionEnabled.Octave.Offset.OffsetStudsU.OffsetStudsV.Opacity.OpenTypeFeatures.Order.Orientation.OutlineColor.OutlineTransparency.OverlayTextureId.P.Padding.PaddingBottom.PaddingLeft.PaddingRight.PaddingTop.Pants.PerfTest.PermissionPolicy.Pinky1TposeAdjustment.Pinky2TposeAdjustment.Pinky3TposeAdjustment.PinkyRange.PinkySize.Pitch.PivotOffset.PixelsPerStud.PlaceholderColor3.PlaceholderText.PlaneVelocity.PlayOnRemove.PlaybackRegionsEnabled.PlaybackSpeed.Playing.Point.PointerIndex.Position.PositionType.PreferLodEnabled.PressedThreshold.PrimaryAxisOnly.PrimaryModifier.PrimaryTangentAxis.Priority.ProportionScale.Puffiness.Q.QualityAuto.QualityLevel.Radius.RampTime.Range.Rate.Ratio.ReactionForceEnabled.ReactionTorqueEnabled.ReferenceFrequency.ReferenceOrigin.Reflectance.RelativeTo.Release.ReleasedThreshold.RenderFidelity.RenderingTestFrameCount.RequiresHandle.RequiresLineOfSight.RequiresNeck.ResampleMode.ResetOnSpawn.ResponseCurve.ResponseStyle.Responsiveness.Restitution.ReverbEnabled.RichText.RigType.Right.RightAnkleRangeMax.RightAnkleRangeMin.RightAnkleSize.RightAnkleTposeAdjustment.RightArmColor3.RightClavicleRangeMax.RightClavicleRangeMin.RightClavicleSize.RightClavicleTposeAdjustment.RightElbowRangeMax.RightElbowRangeMin.RightElbowSize.RightElbowTposeAdjustment.RightHipRangeMax.RightHipRangeMin.RightHipSize.RightHipTposeAdjustment.RightKneeRangeMax.RightKneeRangeMin.RightKneeSize.RightKneeTposeAdjustment.RightLegColor3.RightParamA.RightParamB.RightShoulderRangeMax.RightShoulderRangeMin.RightShoulderSize.RightShoulderTposeAdjustment.RightSurface.RightSurfaceInput.RightToeBaseRangeMax.RightToeBaseRangeMin.RightToeBaseSize.RightToeBaseTposeAdjustment.RightWristRangeMax.RightWristRangeMin.RightWristSize.RightWristTposeAdjustment.RigidityEnabled.Ring1TposeAdjustment.Ring2TposeAdjustment.Ring3TposeAdjustment.RingRange.RingSize.RiseVelocity.RollOffMaxDistance.RollOffMinDistance.RollOffMode.RootPriority.RootRangeMax.RootRangeMin.RootSize.RootTposeAdjustment.RotVelocity.Rotation.RotationAxisVisible.RotationOrder.RunAnimation.RunLocally.SafeAreaCompatibility.Saturation.Scale.ScaleType.ScreenInsets.ScrollBarImageColor3.ScrollBarImageTransparency.ScrollBarThickness.ScrollWheelInputEnabled.ScrollingDirection.ScrollingEnabled.SecondaryColor.SecondaryModifier.SecondaryTangentAxis.Seed.Segments.Selectable.Selected.SelectionBehaviorDown.SelectionBehaviorLeft.SelectionBehaviorRight.SelectionBehaviorUp.SelectionGroup.SelectionModeDragSpeed.SelectionModeRotateSpeed.SelectionOrder.Selector.ServoMaxForce.ServoMaxTorque.Shading.Shadows.Shape.ShapeInOut.ShapePartial.ShapeStyle.Shirt.ShouldSkip.ShowNativeInput.ShrinkFactor.ShrinkRatio.Side.Sides.SimulationFidelity.Sink.Size.SizeConstraint.SizeOffset.SizeRelativeOffset.SizingMode.Skew.SkyboxOrientation.SliceCenter.SliceScale.SmoothTime.SoftlockAngularServoUponReachingTarget.SoftlockServoUponReachingTarget.SortOrder.SourceLocaleId.SourceName.SparkleColor.SpectrumEnabled.Speed.SpineRangeMax.SpineRangeMin.SpineSize.SpineTposeAdjustment.Spread.SpreadAngle.Square.StarCount.StartCorner.StaticFacialAnimation.Steer.SteerFloat.Stiffness.StrokeSizingMode.StudsBetweenTextures.StudsOffset.StudsOffsetWorldSpace.StudsPerTile.StudsPerTileU.StudsPerTileV.Style.SunAngularSize.SurfaceColor3.SurfaceTransparency.SwimAnimation.SystemPrompt.TargetAngle.TargetName.TargetOffset.TargetPosition.TargetRadius.Temperature.Text.TextColor3.TextDirection.TextEditable.TextScaled.TextSize.TextStrokeColor3.TextStrokeTransparency.TextTransparency.TextTruncate.TextWrapped.TextXAlignment.TextYAlignment.TextureLength.TextureMode.TextureSize.TextureSpeed.Thickness.Threshold.Throttle.ThrottleFloat.ThrustD.ThrustP.Thumb1TposeAdjustment.Thumb2TposeAdjustment.Thumb3TposeAdjustment.ThumbRange.ThumbSize.Ticket.TileMode.TileSize.TimePosition.TimeScale.Timeout.TintColor.TonemapperPreset.ToolPunchThroughDistance.ToolTip.TopBottom.TopLeftRadius.TopP.TopParamA.TopParamB.TopRightRadius.TopSurface.TopSurfaceInput.Torque.TorsoColor3.TouchInputEnabled.TrackballRadialPullFactor.TrackballRollFactor.Transform.Transparency.TurnD.TurnP.TurnSpeed.TweenTime.TwistLimitsEnabled.TwistLowerAngle.TwistUpperAngle.Type.UIDragSpeedAxisMapping.UIOffset.UVMaxBound.UVMinBound.UVOffset.UVScale.Up.UpperAngle.UpperLimit.UseAvatarSettings.UseJumpPower.VRSwitchKeyCode.VRTiltAndRollEnabled.Value.Vector2Scale.Vector3Scale.VectorVelocity.Velocity.VelocityConstraintMode.VelocityInheritance.VertexColor.VerticalAlignment.VerticalFlex.VerticalScrollBarInset.VerticalScrollBarPosition.VideoColor3.VideoRectOffset.VideoRectSize.VideoTransparency.Visible.VoiceId.Volume.WaistRangeMax.WaistRangeMin.WaistSize.WaistTposeAdjustment.WalkAnimation.WalkSpeed.Weight.WetLevel.Width0.Width1.WidthScale.WinchEnabled.WinchForce.WinchResponsiveness.WinchSpeed.WinchTarget.WindAffectsDrag.WindowSize.WireRadius.Wraps.ZIndex.ZIndexBehavior.ZOffset`.split(`.`),su=[[0,`AccessModifierType`,`Deny`],[0,`ActuatorRelativeTo`,`Attachment0`],[0,`ActuatorRelativeTo`,`World`],[0,`ActuatorType`,`None`],[0,`AdornCullingMode`,`Automatic`],[0,`AdornShading`,`Default`],[0,`AlignType`,`AllAxes`],[0,`AlphaMode`,`Opaque`],[0,`AlphaMode`,`Overlay`],[0,`AnimationNodeType`,`InvalidNode`],[0,`AnimationPriority`,`Action`],[0,`ApplyStrokeMode`,`Contextual`],[0,`AspectType`,`FitWithinMaxSize`],[0,`AudioChannelLayout`,`Stereo`],[0,`AudioFilterType`,`Peak`],[0,`AudioSimulationFidelity`,`Automatic`],[0,`AudioWindowSize`,`Medium`],[0,`AutomaticSize`,`None`],[0,`BodyPart`,`Head`],[0,`BorderMode`,`Outline`],[0,`BorderStrokePosition`,`Outer`],[0,`ButtonStyle`,`Custom`],[0,`CameraType`,`Fixed`],[0,`CompositeValueCurveType`,`NumberRange`],[0,`DigitsRigDescriptionSide`,`None`],[0,`DominantAxis`,`Width`],[0,`DragDetectorDragStyle`,`TranslatePlane`],[0,`DragDetectorPermissionPolicy`,`Everybody`],[0,`DragDetectorResponseStyle`,`Physical`],[0,`EasingDirection`,`Out`],[0,`EasingStyle`,`Back`],[0,`ElasticBehavior`,`WhenScrollable`],[0,`EmitterPositionType`,`Parent`],[0,`FieldOfViewMode`,`Vertical`],[0,`FillDirection`,`Horizontal`],[0,`FillDirection`,`Vertical`],[0,`ForceLimitMode`,`Magnitude`],[0,`FormFactor`,`Brick`],[0,`FrameStyle`,`Custom`],[0,`GradientTileMode`,`Clamp`],[0,`GradientType`,`Linear`],[0,`HandlesStyle`,`Resize`],[0,`HapticEffectType`,`UIClick`],[0,`HighlightDepthMode`,`AlwaysOnTop`],[0,`HorizontalAlignment`,`Left`],[0,`HumanoidCollisionType`,`OuterBox`],[0,`HumanoidDisplayDistanceType`,`Viewer`],[0,`HumanoidHealthDisplayType`,`DisplayWhenDamaged`],[0,`HumanoidRigType`,`R6`],[0,`IKControlType`,`Transform`],[0,`InOut`,`Center`],[0,`InputActionType`,`Bool`],[0,`InputBindingType`,`Automatic`],[0,`InputSink`,`None`],[0,`InputType`,`NoInput`],[0,`InternalVideoUsage`,`Default`],[0,`ItemLineAlignment`,`Automatic`],[0,`KeyCode`,`ButtonL2`],[0,`KeyCode`,`ButtonR1`],[0,`KeyCode`,`ButtonX`],[0,`KeyCode`,`E`],[0,`KeyCode`,`LeftControl`],[0,`KeyCode`,`Unknown`],[0,`LeftRight`,`Center`],[0,`LineJoinMode`,`Round`],[0,`ListenerPositionType`,`Parent`],[0,`MakeupType`,`Face`],[0,`Material`,`Plastic`],[0,`MaterialPattern`,`Regular`],[0,`MeshType`,`Head`],[0,`ModelLevelOfDetail`,`Automatic`],[0,`ModelStreamingMode`,`Default`],[0,`NameOcclusion`,`OccludeAll`],[0,`NormalId`,`Front`],[0,`NormalId`,`Right`],[0,`NormalId`,`Top`],[0,`OrientationAlignmentMode`,`TwoAttachment`],[0,`PartType`,`Block`],[0,`ParticleEmitterShape`,`Box`],[0,`ParticleEmitterShapeInOut`,`Outward`],[0,`ParticleEmitterShapeStyle`,`Volume`],[0,`ParticleFlipbookLayout`,`None`],[0,`ParticleFlipbookMode`,`Loop`],[0,`ParticleOrientation`,`FacingCamera`],[0,`PoseEasingDirection`,`In`],[0,`PoseEasingStyle`,`Linear`],[0,`PositionAlignmentMode`,`TwoAttachment`],[0,`ProximityPromptExclusivity`,`OnePerButton`],[0,`ProximityPromptStyle`,`Default`],[0,`RenderFidelity`,`Automatic`],[0,`RenderingTestComparisonMethod`,`psnr`],[0,`ResamplerMode`,`Default`],[0,`RollOffMode`,`Inverse`],[0,`RotationOrder`,`XYZ`],[0,`SafeAreaCompatibility`,`FullscreenExtension`],[0,`ScaleType`,`Stretch`],[0,`ScreenInsets`,`CoreUISafeInsets`],[0,`ScrollBarInset`,`None`],[0,`ScrollingDirection`,`XY`],[0,`SelectionBehavior`,`Escape`],[0,`SimulationMode`,`Default`],[0,`SizeConstraint`,`RelativeXY`],[0,`SortOrder`,`Name`],[0,`StartCorner`,`TopLeft`],[0,`StrokeSizingMode`,`FixedSize`],[0,`SurfaceGuiSizingMode`,`FixedSize`],[0,`SurfaceType`,`Inlet`],[0,`SurfaceType`,`Smooth`],[0,`SurfaceType`,`Studs`],[0,`SurfaceType`,`Universal`],[0,`TableMajorAxis`,`RowMajor`],[0,`TextDirection`,`Auto`],[0,`TextTruncate`,`None`],[0,`TextXAlignment`,`Center`],[0,`TextYAlignment`,`Center`],[0,`TextureMode`,`Stretch`],[0,`TonemapperPreset`,`Default`],[0,`TopBottom`,`Center`],[0,`UIDragDetectorBoundingBehavior`,`Automatic`],[0,`UIDragDetectorDragRelativity`,`Absolute`],[0,`UIDragDetectorDragSpace`,`Parent`],[0,`UIDragDetectorDragStyle`,`TranslatePlane`],[0,`UIDragDetectorResponseStyle`,`Offset`],[0,`UIDragSpeedAxisMapping`,`XY`],[0,`UIFlexAlignment`,`None`],[0,`UIFlexMode`,`None`],[0,`VelocityConstraintMode`,`Vector`],[0,`VerticalAlignment`,`Top`],[0,`VerticalScrollBarPosition`,`Right`],[0,`VideoSampleSize`,`Full`],[0,`WrapLayerAutoSkin`,`Disabled`],[0,`ZIndexBehavior`,`Global`],[1,!1],[1,!0],[10,[-1,-1,-1]],[10,[0,0,0]],[10,[0,1,0]],[10,[0,180,90]],[10,[0,2,0]],[10,[0,50,0]],[10,[1,0,0]],[10,[1,1,1]],[10,[1e3,0,0]],[10,[1e3,1e3,1e3]],[10,[1e4,1e4,1e4]],[10,[12,12,12]],[10,[2,2,2]],[10,[4,1.2000000476837158,2]],[10,[4e3,4e3,4e3]],[10,[4e5,0,4e5]],[10,[4e5,4e5,0]],[2,[0,0,-5,1,0,0,0,1,0,0,0,1]],[2,[0,0,0,1,0,0,0,1,0,0,0,1]],[2,[0,20,20,1,0,0,0,.7071068286895752,.7071068286895752,0,-.7071068286895752,.7071068286895752]],[3,[0,0,0]],[3,[.05098039284348488,.4117647111415863,.6745098233222961]],[3,[.05098039656877518,.4117647409439087,.6745098233222961]],[3,[.10588235408067703,.16470588743686676,.2078431397676468]],[3,[.10588236153125763,.16470588743686676,.20784315466880798]],[3,[.1568627506494522,.49803924560546875,.27843138575553894]],[3,[.5,.5,.5]],[3,[.545098066329956,.3137255012989044,.21568629145622253]],[3,[.5490196347236633,.5490196347236633,.5490196347236633]],[3,[.5647059082984924,.09803922474384308,1]],[3,[.6392157077789307,.6352941393852234,.6470588445663452]],[3,[.7843137383460999,.7843137383460999,.7843137383460999]],[3,[.9254902601242065,.545098066329956,.27450981736183167]],[3,[.9490196704864502,.9529412388801575,.9529412388801575]],[3,[.9921569228172302,.917647123336792,.5529412031173706]],[3,[1,0,0]],[3,[1,1,1]],[3,[163,162,165]],[4,`inf`],[4,-.5],[4,-10],[4,-1],[4,-20],[4,-40],[4,-45],[4,-6],[4,.0010000000474974513],[4,.009999999776482582],[4,.019999999552965164],[4,.03999999910593033],[4,.05000000074505806],[4,.0625],[4,.10000000149011612],[4,.15000000596046448],[4,.20000000298023224],[4,.25],[4,.30000001192092896],[4,.4000000059604645],[4,.44999998807907104],[4,.5],[4,.699999988079071],[4,.7070000171661377],[4,.75],[4,.8500000238418579],[4,.8999999761581421],[4,.949999988079071],[4,0],[4,1.25],[4,1.5],[4,1e7],[4,1e4],[4,1e3],[4,100],[4,10],[4,11],[4,1250],[4,12],[4,16],[4,1],[4,2e4],[4,2e3],[4,20],[4,21],[4,24],[4,250],[4,25],[4,2],[4,3e3],[4,30],[4,32],[4,360],[4,3],[4,4e3],[4,40],[4,45],[4,4],[4,5e5],[4,5e3],[4,500],[4,50],[4,5],[4,7.199999809265137],[4,70],[4,89],[4,8],[4,90],[4,9],[5,[0,0,0,0]],[6,``],[6,`Button`],[6,`Default`],[6,`Input`],[6,`Interact`],[6,`Label`],[6,`Output`],[6,`Particle texture must be 1024 by 1024 to use flipbooks.`],[6,`TextBox`],[6,`en-us`],[7,[0,0,0,0]],[7,[0,0,2,0]],[7,[0,100,0,100]],[7,[0,300,0,300]],[7,[0,5,0,5]],[7,[1,0,1,0]],[8,[0,0]],[8,[0,8]],[9,[`-inf`,`-inf`]],[9,[`inf`,`inf`]],[9,[0,0]],[9,[1,0]],[9,[1,1]],[9,[1e3,1e3]],[9,[800,600]]];const cu=Object.keys(au).length,lu=new Set([`Name`,`Parent`]),uu=new Set(Array.from(lu,e=>e.toLowerCase())),du=new Map(Object.entries(au).map(([e])=>[e.toLowerCase(),e]));function fu(e){let t=new Map;for(let[n,r]of Object.entries(e)){if(!Eu(r))continue;let e=n.toLowerCase();t.has(e)||t.set(e,{propertyName:n,value:r})}return t}const pu=[`Enum`,`bool`,`CFrame`,`Color3`,`number`,`Rect`,`string`,`UDim2`,`UDim`,`Vector2`,`Vector3`];function mu(e){let[t]=e;if(typeof t!=`number`)return;let n=pu[t];if(n===void 0)return;let r=n===`Enum`?{enumType:e[1],type:n,value:e[2]}:{type:n,value:e[1]};return Eu(r)?r:void 0}const hu=new Map([[`TextLabel`,new Map([[`text`,{propertyName:`Text`,value:{type:`string`,value:``}}]])],[`UICorner`,new Map([[`cornerradius`,{propertyName:`CornerRadius`,value:{type:`UDim`,value:[0,0]}}]])]]);function gu(){let e=new Map;for(let[t,n]of Object.entries(au)){let r={};for(let e=0;e<n.length;e+=2){let t=n[e],i=n[e+1];if(t===void 0||i===void 0)continue;let a=ou[t],o=su[i],s=o===void 0?void 0:mu(o);a!==void 0&&s!==void 0&&(r[a]=s)}e.set(t,fu(r))}return e}const _u=gu();function vu(e,t){return e.type===`Identifier`&&e.name===t}function yu(e){return e.type===`Literal`&&typeof e.value==`boolean`}function bu(e){if(e.type!==`JSXIdentifier`)return;let t=du.get(e.name.toLowerCase());if(!(t===void 0||e.name===t))return t}function xu(e){if(e.type===`JSXIdentifier`)return e.name}function Su(e){let{value:t}=e;if(t!==null){if(t.type===`Literal`)return t;if(!(t.type!==`JSXExpressionContainer`||t.expression.type===`JSXEmptyExpression`))return t.expression}}function Cu(e,t){let n=t.toLowerCase(),r=hu.get(e)?.get(n);if(r!==void 0)return r;let i=_u.get(e);if(i!==void 0)return i.get(n)}function wu(e){return uu.has(e.toLowerCase())}function Tu(e){return b(e)||e===`inf`||e===`-inf`}function Eu(e){if(!(x(e)&&y(e.type)&&`value`in e))return!1;switch(e.type){case`bool`:return typeof e.value==`boolean`;case`CFrame`:return Array.isArray(e.value)&&e.value.length===12&&e.value.every(Tu);case`Color3`:return Array.isArray(e.value)&&e.value.length===3&&e.value.every(b);case`Enum`:return y(e.enumType)&&y(e.value);case`number`:return Tu(e.value);case`Rect`:case`UDim2`:return Array.isArray(e.value)&&e.value.length===4&&e.value.every(Tu);case`string`:return y(e.value);case`UDim`:case`Vector2`:return Array.isArray(e.value)&&e.value.length===2&&e.value.every(Tu);case`Vector3`:return Array.isArray(e.value)&&e.value.length===3&&e.value.every(Tu)}return!1}function Du(e){let t=w(e);if(t.type!==`NewExpression`||!vu(t.callee,`Instance`))return;let[n]=t.arguments;if(!(n===void 0||n.type===`SpreadElement`||!_e(n)))return n.value}function Ou(e,t,n=new WeakSet){if(Array.isArray(e)){for(let r of e)if(Ou(r,t,n))return!0;return!1}if(!x(e)||n.has(e))return!1;if(n.add(e),e.type===`Identifier`&&e.name===t)return!0;for(let r of Object.values(e))if(Ou(r,t,n))return!0;return!1}function ku(e){let t=[],n=e;for(;n.type===`MemberExpression`;){if(n.computed||n.property.type!==`Identifier`)return;t.unshift(n.property.name);let{object:e}=n;if(e.type===`Identifier`)return t.unshift(e.name),t;if(e.type!==`MemberExpression`)return;n=e}if(n.type===`Identifier`)return t.unshift(n.name),t}function Au(e){let t=ku(e);return t?.length===2&&t[0]===`math`&&t[1]===`huge`}function ju(e){return e===`inf`?1/0:e===`-inf`?-1/0:e}function Mu(e,t){return ju(e)===t}function Nu(e,t){if(e.length!==t.length)return!1;for(let[n,r]of e.entries()){let e=t[n];if(r===void 0||e===void 0||!Mu(r,e))return!1}return!0}function J(e){if(We(e))return e.value;if(Au(e))return 1/0;if(e.type!==`UnaryExpression`||e.operator!==`+`&&e.operator!==`-`)return;let t=J(e.argument);if(t!==void 0)return e.operator===`+`?t:-t}function Pu(e){if(e.length!==2)return;let[t,n]=e;if(!(t===void 0||n===void 0||t.type===`SpreadElement`||n.type===`SpreadElement`))return[t,n]}function Fu(e){if(e.length!==3)return;let[t,n,r]=e;if(!(t===void 0||n===void 0||r===void 0||t.type===`SpreadElement`||n.type===`SpreadElement`||r.type===`SpreadElement`))return[t,n,r]}function Iu(e){if(e.length!==4)return;let[t,n,r,i]=e;if(!(t===void 0||n===void 0||r===void 0||i===void 0||t.type===`SpreadElement`||n.type===`SpreadElement`||r.type===`SpreadElement`||i.type===`SpreadElement`))return[t,n,r,i]}function Lu(e){if(e.type===`MemberExpression`){let t=ku(e);return t?.length===2&&t[0]===`Vector2`&&t[1]===`zero`?[0,0]:void 0}if(!(e.type!==`NewExpression`||!vu(e.callee,`Vector2`)))return e.arguments.length===0?[0,0]:Ru(e.arguments)}function Ru(e){let t=Pu(e);if(t===void 0)return;let[n,r]=t,i=J(n),a=J(r);if(!(i===void 0||a===void 0))return[i,a]}function zu(e){let t=Fu(e);if(t===void 0)return;let[n,r,i]=t,a=J(n),o=J(r),s=J(i);if(!(a===void 0||o===void 0||s===void 0))return[a,o,s]}function Bu(e){if(e.type===`MemberExpression`){let t=ku(e);return t?.length===2&&t[0]===`Vector3`&&t[1]===`zero`?[0,0,0]:void 0}if(!(e.type!==`NewExpression`||!vu(e.callee,`Vector3`)))return e.arguments.length===0?[0,0,0]:zu(e.arguments)}function Vu(e){if(!(e.type!==`NewExpression`||!vu(e.callee,`UDim`)))return e.arguments.length===0?[0,0]:Ru(e.arguments)}function Hu(e){let t=Iu(e);if(t===void 0)return;let[n,r,i,a]=t,o=J(n),s=J(r),c=J(i),l=J(a);if(!(o===void 0||s===void 0||c===void 0||l===void 0))return[o,s,c,l]}function Uu(e){if(e.type===`CallExpression`){let t=ku(e.callee),n=Ru(e.arguments);if(t===void 0||n===void 0)return;let[r,i]=n;return t.length===2&&t[0]===`UDim2`&&t[1]===`fromOffset`?[0,r,0,i]:t.length===2&&t[0]===`UDim2`&&t[1]===`fromScale`?[r,0,i,0]:void 0}if(!(e.type!==`NewExpression`||!vu(e.callee,`UDim2`)))return e.arguments.length===0?[0,0,0,0]:Hu(e.arguments)}function Wu(e){if(!(e.type!==`NewExpression`||!vu(e.callee,`Rect`)))return e.arguments.length===0?[0,0,0,0]:Hu(e.arguments)}function Gu(e){let[t,n,r]=e,i=J(t),a=J(n),o=J(r);if(!(i===void 0||a===void 0||o===void 0))return[i,a,o]}function Ku(e){if(e.type===`CallExpression`){let t=ku(e.callee),n=Fu(e.arguments);if(t?.length!==2||t[0]!==`Color3`||t[1]!==`fromRGB`||n===void 0)return;let r=Gu(n);if(r===void 0)return;let[i,a,o]=r;return[Math.fround(i/255),Math.fround(a/255),Math.fround(o/255)]}if(e.type!==`NewExpression`||!vu(e.callee,`Color3`))return;if(e.arguments.length===0)return[0,0,0];let t=Fu(e.arguments);if(t!==void 0)return Gu(t)}function qu(e){if(e.type!==`NewExpression`||!vu(e.callee,`CFrame`))return;if(e.arguments.length===0)return[0,0,0,1,0,0,0,1,0,0,0,1];let t=zu(e.arguments);if(t===void 0)return;let[n,r,i]=t;return[n,r,i,1,0,0,0,1,0,0,0,1]}function Ju(e){let t=ku(e);if(t?.length!==3||t[0]!==`Enum`)return;let[,n,r]=t;if(!(n===void 0||r===void 0))return{enumType:n,value:r}}function Yu(e,t){switch(t.type){case`bool`:return yu(e)&&e.value===t.value;case`CFrame`:{let n=qu(e);return n!==void 0&&Nu(t.value,n)}case`Color3`:{let n=Ku(e);return n!==void 0&&n[0]===t.value[0]&&n[1]===t.value[1]&&n[2]===t.value[2]}case`Enum`:{let n=Ju(e);return n!==void 0&&n.enumType===t.enumType&&n.value===t.value}case`number`:{let n=J(e);return n!==void 0&&Mu(t.value,n)}case`Rect`:{let n=Wu(e);return n!==void 0&&Nu(t.value,n)}case`string`:return _e(e)&&e.value===t.value;case`UDim`:{let n=Vu(e);return n!==void 0&&Nu(t.value,n)}case`UDim2`:{let n=Uu(e);return n!==void 0&&Nu(t.value,n)}case`Vector2`:{let n=Lu(e);return n!==void 0&&Nu(t.value,n)}case`Vector3`:{let n=Bu(e);return n!==void 0&&Nu(t.value,n)}default:return!1}}const Xu=t({create(e){let{sourceCode:t}=e;function n(e){return t.getCommentsBefore(e).length>0||t.getCommentsAfter(e).length>0||t.getCommentsInside(e).length>0}function r(e){let r=t.getTokenBefore(e),i=t.getTokenAfter(e);if(n(e)||r!==null&&t.commentsExistBetween(r,e)||i!==null&&t.commentsExistBetween(e,i))return;let[a]=e.range;for(;a>0;){let e=t.text[a-1];if(e===` `||e===` `){--a;continue}break}return t=>t.removeRange([a,e.range[1]])}function i(e,r){if(e.attributes.some(e=>e.type===`JSXSpreadAttribute`))return;let i=t.getTokenBefore(r),a=t.getTokenAfter(r);if(i!==null&&!n(r)&&!t.commentsExistBetween(i,r)&&!(a!==null&&t.commentsExistBetween(r,a)))return e=>e.removeRange([i.range[1],r.range[1]])}function a(t,n,i){if(n.operator!==`=`||n.left.type!==`MemberExpression`||n.left.computed||n.left.object.type!==`Identifier`||n.left.property.type!==`Identifier`)return;let a=i.get(n.left.object.name);if(a===void 0)return;let o=n.left.property.name;if(wu(o))return;let s=Cu(a.className,o);if(s===void 0||!Yu(n.right,s.value))return;let c=r(t);if(c===void 0){e.report({data:{className:a.className,propertyName:s.propertyName},messageId:`uselessDefault`,node:n.left});return}e.report({data:{className:a.className,propertyName:s.propertyName},fix:c,messageId:`uselessDefault`,node:n.left})}function o(e,t){for(let[n]of t)for(let r of e.arguments)if(r.type!==`SpreadElement`&&Ou(r,n)){t.delete(n);break}}function s(e,t){if(!(e.left.type!==`Identifier`&&e.left.type!==`MemberExpression`))for(let[n]of t)Ou(e.right,n)&&t.delete(n)}function c(e,t){if(e.argument!==null)for(let[n]of t)Ou(e.argument,n)&&t.delete(n)}function l(e){let t=new Map;for(let n of e)u(n,t)}function u(e,t){if(e.type===`ExpressionStatement`){d(e,t);return}if(e.type===`ReturnStatement`){c(e,t);return}e.type===`VariableDeclaration`&&f(e,t)}function d(e,t){let n=w(e.expression);if(n.type===`AssignmentExpression`){a(e,n,t),s(n,t);return}n.type===`CallExpression`&&o(n,t)}function f(e,t){if(e.kind===`const`)for(let n of e.declarations){if(n.id.type!==`Identifier`||n.init===null)continue;let e=Du(n.init);e!==void 0&&t.set(n.id.name,{className:e})}}return{BlockStatement(e){l(e.body)},JSXOpeningElement(t){let n=bu(t.name);if(n!==void 0)for(let r of t.attributes){if(r.type===`JSXSpreadAttribute`)continue;let a=xu(r.name);if(a===void 0||wu(a))continue;let o=Cu(n,a);if(o===void 0)continue;let s=Su(r);if(!(r.value===null&&o.value.type===`bool`&&o.value.value)&&(s===void 0||!Yu(s,o.value)))continue;let c=i(t,r);if(c===void 0){e.report({data:{className:n,propertyName:o.propertyName},messageId:`uselessDefault`,node:r});continue}e.report({data:{className:n,propertyName:o.propertyName},fix:c,messageId:`uselessDefault`,node:r})}},Program(e){l(e.body)}}},meta:{docs:{description:`Scaffold for detecting useless default values across ${cu} default-property classes.`},fixable:`code`,messages:{uselessDefault:`Remove "{{propertyName}}" from {{className}}. It already matches the default value.`},schema:[],type:`suggestion`}}),Zu=[`useEffect`,`useLayoutEffect`,`useInsertionEffect`],Qu=[`on`],$u=[`useRef`],ed=[`useState`,`useReducer`];function td(e){return e===void 0?{environment:`roblox-ts`,hooks:new Set(Zu),propertyCallbackPrefixes:new Set(Qu),refHooks:new Set($u),reportAdjustState:!0,reportDerivedState:!0,reportDuplicateDeps:!0,reportEffectChain:!0,reportEmptyEffect:!0,reportEventFlag:!0,reportEventSpecificLogic:!0,reportExternalStore:!0,reportInitializeState:!0,reportLogOnly:!0,reportMixedDerivedState:!0,reportNotifyParent:!0,reportPassRefToParent:!0,reportResetState:!0,stateHooks:new Set(ed)}:{environment:hn(e.environment)?e.environment:`roblox-ts`,hooks:new Set(S(e.hooks)?e.hooks:Zu),propertyCallbackPrefixes:new Set(S(e.propertyCallbackPrefixes)?e.propertyCallbackPrefixes:Qu),refHooks:new Set(S(e.refHooks)?e.refHooks:$u),reportAdjustState:e.reportAdjustState??!0,reportDerivedState:e.reportDerivedState??!0,reportDuplicateDeps:e.reportDuplicateDeps??!0,reportEffectChain:e.reportEffectChain??!0,reportEmptyEffect:e.reportEmptyEffect??!0,reportEventFlag:e.reportEventFlag??!0,reportEventSpecificLogic:e.reportEventSpecificLogic??!0,reportExternalStore:e.reportExternalStore??!0,reportInitializeState:e.reportInitializeState??!0,reportLogOnly:e.reportLogOnly??!0,reportMixedDerivedState:e.reportMixedDerivedState??!0,reportNotifyParent:e.reportNotifyParent??!0,reportPassRefToParent:e.reportPassRefToParent??!0,reportResetState:e.reportResetState??!0,stateHooks:new Set(S(e.stateHooks)?e.stateHooks:ed)}}function nd(e){if(!(e.type!==`MemberExpression`||e.computed||e.object.type!==`Identifier`||e.property.type!==`Identifier`))return{objectName:e.object.name,propertyName:e.property.name}}function rd(e){if(!(e.type!==`MemberExpression`||e.computed||e.property.type!==`Identifier`))return e.property.name}function id(e,t,n,r){let{callee:i}=e;if(i.type===`Identifier`)return t.has(i.name);let a=nd(i);return a!==void 0&&n.has(a.objectName)&&r.has(a.propertyName)}function ad(e){if((e.type===`FunctionDeclaration`||e.type===`FunctionExpression`)&&e.id!==null)return e.id.name;let{parent:t}=e;if(t.type===`VariableDeclarator`&&t.id.type===`Identifier`)return t.id.name;if(`key`in t&&!(`computed`in t&&t.computed)&&D(t.key)&&t.key.type===`Identifier`)return t.key.name}function od(e){return ne(e)&&e.startsWith(`use`)}function sd(e){if(e.type===`ReturnStatement`)return e.argument===null;if(e.type!==`BlockStatement`||e.body.length!==1)return!1;let[t]=e.body;return t?.type===`ReturnStatement`&&t.argument===null}function cd(e,t){`body`in e&&D(e.body)&&(e.body.type===`BlockStatement`?t.push(...e.body.body):t.push(e.body))}function ld(e,t){if(e.type===`BlockStatement`){t.push(...e.body);return}if(e.type===`IfStatement`){t.push(e.consequent),e.alternate!==null&&t.push(e.alternate);return}if(e.type===`DoWhileStatement`||e.type===`ForInStatement`||e.type===`ForOfStatement`||e.type===`ForStatement`||e.type===`LabeledStatement`||e.type===`WhileStatement`||e.type===`WithStatement`){cd(e,t);return}if(e.type===`SwitchStatement`){for(let n of e.cases)t.push(...n.consequent);return}e.type===`TryStatement`&&(t.push(...e.block.body),e.handler!==null&&t.push(...e.handler.body.body),e.finalizer!==null&&t.push(...e.finalizer.body))}function ud(e){let t=[...e.body];for(;t.length>0;){let e=t.pop();if(e!==void 0)switch(e.type){case`ArrowFunctionExpression`:continue;case`FunctionDeclaration`:continue;case`FunctionExpression`:continue;case`ReturnStatement`:if(e.argument!==null)return!0;continue;case`DoWhileStatement`:case`ForInStatement`:case`ForOfStatement`:case`ForStatement`:case`BlockStatement`:case`IfStatement`:case`LabeledStatement`:case`SwitchStatement`:case`TryStatement`:case`WhileStatement`:case`WithStatement`:ld(e,t);continue;default:continue}}return!1}function dd(e){if(e.length===0)return e;let[t]=e;return t?.type!==`IfStatement`||t.alternate!==null||!sd(t.consequent)?e:e.slice(1)}function fd(e){return e.type===`ChainExpression`?e.expression:e}function Y(e){if(e.type!==`ExpressionStatement`)return;let t=fd(e.expression);return t.type===`CallExpression`?t:void 0}function pd(e,t){return e.callee.type===`Identifier`&&t.has(e.callee.name)}function md(e){return e.type===`Literal`&&e.value===!1}function hd(e){return e.type===`Literal`||e.type===`UnaryExpression`&&e.operator===`void`&&e.argument.type===`Literal`&&e.argument.value===0}function gd(e){return e.type===`ArrayExpression`&&e.elements.length===0}function _d(e){return e.type===`ObjectExpression`&&e.properties.length===0}function vd(e){if(e.type===`Literal`){let{value:t}=e;return t===``||t===0||t===!1||t===null}return hd(e)?!0:gd(e)||_d(e)}function yd(e,t){let n=Y(e);if(n?.callee.type!==`Identifier`)return;let r=t.get(n.callee.name);if(r===void 0||n.arguments.length!==1)return;let[i]=n.arguments;if(!(i===void 0||!md(i)))return r}function bd(e,t){let n=Y(e);if(!(n===void 0||pd(n,t)))return n}function xd(e,t){return e.type===`UnaryExpression`&&e.operator===`!`&&e.argument.type===`Identifier`&&e.argument.name===t}function Sd(e,t){return e.type===`Identifier`&&e.name===t}function X(e){return e.type===`BlockStatement`?e.body:[e]}function Cd(e,t,n){let[r,i,a]=e;if(r?.type!==`IfStatement`||r.alternate!==null||i===void 0||a===void 0)return;let o=yd(i,t),s=yd(a,t),c=sd(r.consequent);if(o!==void 0&&s===void 0)return c&&xd(r.test,o)?bd(a,n)===void 0?void 0:o:void 0;if(!(s===void 0||o!==void 0)&&c&&xd(r.test,s))return bd(i,n)===void 0?void 0:s}function wd(e,t,n){if(e.type!==`IfStatement`||e.alternate!==null)return;let r=X(e.consequent),[i,a]=r;if(r.length!==2||i===void 0||a===void 0)return;let o=yd(i,t),s=yd(a,t);if(o!==void 0&&s===void 0)return Sd(e.test,o)?bd(a,n)===void 0?void 0:o:void 0;if(!(s===void 0||o!==void 0)&&Sd(e.test,s))return bd(i,n)===void 0?void 0:s}function Td(e,t,n){if(e.length===3)return Cd(e,t,n);if(e.length===1){let[r]=e;return r===void 0?void 0:wd(r,t,n)}}const Ed=new Set([`ArrayExpression`,`BinaryExpression`,`CallExpression`,`ChainExpression`,`ConditionalExpression`,`Identifier`,`LogicalExpression`,`MemberExpression`,`ObjectExpression`,`PrivateIdentifier`,`TemplateLiteral`,`UnaryExpression`]);function Dd(e){return Ed.has(e.type)}function Od(e,t){for(let n of e.elements)n!==null&&n.type!==`SpreadElement`&&t.push(n)}function kd(e,t){t.push(e.callee);for(let n of e.arguments)n.type!==`SpreadElement`&&t.push(n)}function Ad(e,t){t.push(e.object),e.computed||t.push(e.property)}function jd(e,t){for(let n of e.properties)n.type===`Property`&&t.push(n.value)}function Md(e,t){switch(e.type){case`ArrayExpression`:Od(e,t);break;case`BinaryExpression`:case`LogicalExpression`:t.push(e.left,e.right);break;case`CallExpression`:kd(e,t);break;case`ChainExpression`:t.push(e.expression);break;case`ConditionalExpression`:t.push(e.test,e.consequent,e.alternate);break;case`MemberExpression`:Ad(e,t);break;case`ObjectExpression`:jd(e,t);break;case`TemplateLiteral`:t.push(...e.expressions);break;case`UnaryExpression`:t.push(e.argument);break;default:}}function Nd(e){let t=[e],n=new Set;for(;t.length>0;){let e=t.pop();if(!(e===void 0||n.has(e))){if(n.add(e),e.type===`Identifier`)return!0;Md(e,t)}}return!1}function Pd(e,t){let n=0;for(let r of e){if(r.type===`IfStatement`){if(r.alternate!==null)return;let e=Pd(X(r.consequent),t);if(e===void 0||e===0)return;n+=e;continue}let e=Y(r);if(e===void 0||!t(e))return;n+=1}return n>0?n:void 0}function Fd(e,t){return Pd(e,e=>pd(e,t)?e.arguments.some(e=>e.type!==`SpreadElement`&&Nd(e)):!1)}function Id(e,t,n){return Pd(e,e=>Bd(e,t,n))}function Ld(e,t){for(let n of t)if(e.startsWith(n))return!0;return!1}function Rd(e){return e.type===`AssignmentPattern`?e.left:e}function zd(e,t,n,r){let i={functionId:n,isCustomHook:r,propertyCallbackIdentifiers:new Set,propertyObjectName:void 0},[a]=e.params;if(a===void 0)return i;let o=Rd(a);if(o.type===`Identifier`)return i.propertyObjectName=o.name,i;if(o.type!==`ObjectPattern`)return i;for(let e of o.properties){if(e.type!==`Property`)continue;let n=Wr(e);if(n===void 0||!Ld(n,t))continue;let r=Gr(e);r!==void 0&&i.propertyCallbackIdentifiers.add(r.name)}return i}function Bd(e,t,n){let{callee:r}=e;if(r.type===`Identifier`)return t.propertyCallbackIdentifiers.has(r.name);let i=nd(r);return i!==void 0&&t.propertyObjectName!==void 0&&i.objectName===t.propertyObjectName&&Ld(i.propertyName,n)}function Vd(e,t){let[,n]=e.arguments;if(n?.type!==`ArrayExpression`)return!1;for(let e of n.elements)if(e?.type===`Identifier`&&e.name===t)return!0;return!1}function Hd(e){let t=new Set,[,n]=e.arguments;if(n?.type!==`ArrayExpression`)return t;for(let e of n.elements)e?.type===`Identifier`&&t.add(e.name);return t}function Ud(e){let[,t]=e.arguments;return t===void 0||t.type===`ArrayExpression`&&t.elements.length===0}function Wd(e,t){if(e.length===0)return!1;for(let n of e){if(n.type===`IfStatement`){if(n.alternate!==null||!Wd(X(n.consequent),t))return!1;continue}if(!t(n))return!1}return!0}function Gd(e,t){let n=new Set;for(let r of e){if(r.type===`IfStatement`){let e=X(r.consequent);for(let r of Gd(e,t))n.add(r);continue}let e=Y(r);e!==void 0&&pd(e,t)&&e.callee.type===`Identifier`&&n.add(e.callee.name)}return n}function Kd(e,t){let{callee:n}=e;if(n.type===`Identifier`)return t.has(n.name);let r=nd(n);return r!==void 0&&t.has(r.objectName)}function qd(e,t,n){for(let r of e){if(r.type===`IfStatement`){if(qd(X(r.consequent),t,n))return!0;continue}let e=Y(r);if(e!==void 0&&!pd(e,t)&&!Kd(e,n))return!0}return!1}function Jd(e,t,n){return Wd(e,e=>{let r=Y(e);if(r===void 0||!pd(r,t)||r.arguments.length!==1)return!1;let[i]=r.arguments;return i!==void 0&&n(i)})}function Yd(e){return e.type===`Literal`&&typeof e.value!=`object`||gd(e)||_d(e)}function Xd(e,t){return Jd(e,t,vd)}function Zd(e,t){return Jd(e,t,Yd)}function Qd(e){return Wd(e,e=>{let t=Y(e);return t!==void 0&&nd(t.callee)?.objectName===`console`})}const $d=new Set([`addEventListener`,`addListener`,`on`,`subscribe`]);function ef(e){return e.some(e=>{let t=Y(e);if(t===void 0)return!1;let n=rd(t.callee);return n!==void 0&&$d.has(n)})}function tf(e,t){return e.type===`MemberExpression`&&!e.computed&&e.object.type===`Identifier`&&e.property.type===`Identifier`&&e.property.name===`current`&&t.has(e.object.name)}function nf(e,t,n){return e.callee.type===`Identifier`&&n.has(e.callee.name)&&e.arguments.some(e=>tf(e,t))}function rf(e,t,n){for(let r of e){if(r.type===`IfStatement`){if(rf(X(r.consequent),t,n))return!0;continue}let e=Y(r);if(e!==void 0&&nf(e,t,n))return!0}return!1}function af(e){let t=new Set,n=new Set,r=Dd(e)?[e]:[];for(;r.length>0;){let e=r.pop();if(!(e===void 0||n.has(e))){if(n.add(e),e.type===`Identifier`){t.add(e.name);continue}Dd(e)&&Md(e,r)}}return t}function of(e){return e.alternate===null?[]:e.alternate.type===`BlockStatement`?e.alternate.body:[e.alternate]}function sf(e,t,n){return[...af(e.test)].some(e=>n.has(e)&&!t.has(e))}function cf(e,t){return e.some(e=>{let n=Y(e);return n!==void 0&&pd(n,t)})}function lf(e,t,n,r){for(let i of e)if(i.type===`IfStatement`&&(sf(i,n,r)&&cf(X(i.consequent),t)||lf(of(i),t,n,r)))return!0;return!1}const uf=new Set([`alert`,`confirm`,`display`,`hide`,`log`,`navigate`,`notify`,`post`,`prompt`,`redirect`,`report`,`send`,`show`,`submit`,`track`]);function df(e){let t=e.toLowerCase();for(let e of uf)if(t.startsWith(e))return!0;return!1}function ff(e,t){let n=Y(e);return n===void 0||pd(n,t)?!1:n.callee.type===`Identifier`?df(n.callee.name):n.callee.type!==`MemberExpression`||n.callee.computed||n.callee.property.type!==`Identifier`?!1:df(n.callee.property.name)}function pf(e,t){return[...af(e.test)].some(e=>t.has(e))}function mf(e,t,n){for(let r of e)if(r.type===`IfStatement`&&(pf(r,n)&&X(r.consequent).some(e=>ff(e,t))||r.alternate!==null&&mf(of(r),t,n)))return!0;return!1}function hf(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function gf(e,t){return`${e}:${t}`}function _f(e){if(e.body?.type===`BlockStatement`)return e.body}function vf(e){return e.body.type===`BlockStatement`}function yf(e){return e.body!==null}const bf=new Set(`addEventListener.addListener.alert.analytics.cancelAnimationFrame.clearInterval.clearTimeout.confirm.debug.delete.error.fetch.get.info.log.navigate.navigateTo.notify.observe.patch.post.prompt.put.redirect.removeEventListener.removeListener.report.requestAnimationFrame.send.setInterval.setTimeout.showNotification.submit.subscribe.track.unobserve.unsubscribe.warn`.split(`.`)),xf=[`fetch`,`send`,`post`,`track`],Sf=new Set([`addEventListener`,`addListener`,`cancelAnimationFrame`,`catch`,`clearInterval`,`clearTimeout`,`finally`,`observe`,`removeEventListener`,`removeListener`,`requestAnimationFrame`,`setInterval`,`setTimeout`,`subscribe`,`then`,`unobserve`,`unsubscribe`]),Cf=[`log`,`fetch`,`send`,`track`,`report`,`show`,`navigate`,`submit`,`post`,`notify`];function wf(e){for(let t of Cf)if(e.startsWith(t))return!0;return!1}function Tf(e){return e.object.type===`Identifier`&&e.object.name===`console`&&e.property.type===`Identifier`&&(e.property.name===`log`||e.property.name===`warn`||e.property.name===`error`||e.property.name===`info`||e.property.name===`debug`)}function Ef(e){for(let t of xf)if(e.startsWith(t))return!0;return Sf.has(e)}function Df(e,t,n){let{callee:r}=e;return pd(e,t)?!1:r.type===`Identifier`?n.has(r.name)?!1:bf.has(r.name)||wf(r.name):r.type!==`MemberExpression`||r.computed||r.property.type!==`Identifier`||r.object.type===`Identifier`&&n.has(r.object.name)?!1:Tf(r)||Ef(r.property.name)}function Of(e,t,n){for(let r of e){if(r.type===`IfStatement`){if(Of(X(r.consequent),t,n))return!0;continue}let e=Y(r);if(e!==void 0&&Df(e,t,n))return!0}return!1}const kf=t({create(e){let t=td(e.options[0]),n=vn(t.environment),r=new Set,i=new Set,a=new Set,o=new Set,s=new Set,c=new Map,l=new Set,u=new Set,d=[],f=1,p=new Map,m=[];function h(e){return id(e,i,r,t.hooks)}function g(e){return id(e,a,r,t.stateHooks)}function _(e){return id(e,l,r,t.refHooks)}function v(e){if(e.init?.type!==`CallExpression`||!g(e.init)||e.id.type!==`ArrayPattern`)return;let{elements:t}=e.id;if(t.length<2)return;let[,n]=t;if(n==null||n.type!==`Identifier`)return;o.add(n.name);let[r]=t;r?.type===`Identifier`&&(s.add(r.name),c.set(n.name,r.name))}function ee(e){e.init?.type!==`CallExpression`||!_(e.init)||e.id.type!==`Identifier`||u.add(e.id.name)}function te(e){e.id.type!==`Identifier`||e.init===null||(e.init.type===`FunctionExpression`||e.init.type===`ArrowFunctionExpression`)&&p.set(e.id.name,e.init)}function y(e){let n=f;f+=1;let r=ad(e);d.push(zd(e,t.propertyCallbackPrefixes,n,od(r))),e.type===`FunctionDeclaration`&&e.id!==null&&p.set(e.id.name,e)}function b(){d.pop()}function x(e){return t.reportMixedDerivedState&&e.setterCalls.size>0&&e.hasNonSetter&&!e.hasReturnCleanup?!Of(e.statements,o,e.functionContext?.propertyCallbackIdentifiers??new Set):!1}function ne(e){let{coreStatements:n,dependencyIdentifiers:r,functionContext:i,hasNonSetter:a,hasReturnCleanup:l,node:d,statements:f}=e,p=t.reportEventFlag?Td(f,c,o):void 0,m=[...r].some(e=>!(s.has(e)||o.has(e)));return[[t.reportEmptyEffect&&(f.length===0||f[0]!==void 0&&sd(f[0])),`emptyEffect`],[t.reportInitializeState&&Ud(d)&&Zd(f,o),`initializeState`],[t.reportResetState&&Xd(f,o)&&m,`resetState`],[p!==void 0&&Vd(d,p),`eventFlag`],[t.reportEventSpecificLogic&&mf(f,o,s),`eventSpecificLogic`],[t.reportAdjustState&&lf(f,o,s,r)&&!a,`adjustState`],[t.reportDerivedState&&Fd(n,o)!==void 0,`derivedState`],[x(e),`mixedDerivedState`],[t.reportPassRefToParent&&i!==void 0&&rf(f,u,i.propertyCallbackIdentifiers),`passRefToParent`],[t.reportNotifyParent&&i!==void 0&&!i.isCustomHook&&Id(n,i,t.propertyCallbackPrefixes)!==void 0,`notifyParent`],[t.reportExternalStore&&ef(f)&&l,`externalStore`],[t.reportLogOnly&&Qd(f),`logOnly`]].find(([e])=>e)?.[1]}function S(t,n,r){let i=d.at(-1),a=dd(n),s=Hd(t),c=Gd(n,o),l=qd(n,o,i?.propertyCallbackIdentifiers??new Set),u=r!==void 0&&ud(r);m.push({depIdentifiers:s,hasNonSetterSideEffect:l,hasReturnWithCleanup:u,node:t,ownerFunctionId:i?.functionId??0,setterCalls:c,statements:n});let f=ne({coreStatements:a,dependencyIdentifiers:s,functionContext:i,hasNonSetter:l,hasReturnCleanup:u,node:t,setterCalls:c,statements:n});f!==void 0&&e.report({messageId:f,node:t})}function C(){if(!t.reportEffectChain)return;let n=re();for(let t of m)if(!(t.hasNonSetterSideEffect||t.hasReturnWithCleanup))for(let r of t.depIdentifiers){let i=gf(t.ownerFunctionId,r),a=n.get(i);if(a!==void 0&&w(a)){e.report({messageId:`effectChain`,node:t.node});return}}}function re(){let e=new Map;for(let[t,n]of m.entries())for(let r of n.setterCalls){let i=c.get(r);if(i===void 0)continue;let a=gf(n.ownerFunctionId,i),o=e.get(a);o===void 0&&(o=new Set,e.set(a,o)),o.add(t)}return e}function w(e){return e.size!==0&&[...e].every(e=>{let t=m[e];return t!==void 0&&!t.hasNonSetterSideEffect&&!t.hasReturnWithCleanup})}function T(){if(!t.reportDuplicateDeps||m.length<2)return;let e=new Set;for(let t=0;t<m.length;t+=1){if(e.has(t))continue;let n=E(t,e);n.length<2||ie(n,e)}}function E(e,t){let n=m[e];if(n===void 0||n.depIdentifiers.size===0)return[];let r=[e];for(let i=e+1;i<m.length;i+=1){let e=m[i];t.has(i)||e!==void 0&&e.ownerFunctionId===n.ownerFunctionId&&hf(n.depIdentifiers,e.depIdentifiers)&&r.push(i)}return r}function ie(t,n){for(let r of t){n.add(r);let t=m[r];t!==void 0&&e.report({messageId:`duplicateDeps`,node:t.node})}}function ae(e,t){let n=p.get(t);if(n===void 0||n.async)return;let r=_f(n);r!==void 0&&S(e,r.body.filter(e=>e.type!==`EmptyStatement`),r)}function oe(e,t){if(!t.async){if(t.type===`ArrowFunctionExpression`){if(!vf(t))return;S(e,t.body.body.filter(e=>e.type!==`EmptyStatement`),t.body);return}yf(t)&&S(e,t.body.body.filter(e=>e.type!==`EmptyStatement`),t.body)}}return{ArrowFunctionExpression:y,"ArrowFunctionExpression:exit":b,CallExpression(e){if(!h(e))return;let[t]=e.arguments;if(t!==void 0){if(t.type===`Identifier`){ae(e,t.name);return}He(t)&&oe(e,t)}},FunctionDeclaration:y,"FunctionDeclaration:exit":b,FunctionExpression:y,"FunctionExpression:exit":b,ImportDeclaration(e){xn(e,n,r,(e,n)=>{t.hooks.has(e)&&i.add(n),t.stateHooks.has(e)&&a.add(n),t.refHooks.has(e)&&l.add(n)})},"Program:exit"(){C(),T()},VariableDeclarator(e){v(e),ee(e),te(e)}}},meta:{docs:{description:`Disallow effects that only derive state, notify parent callbacks, reset state on prop changes, or route event side effects through state.`},messages:{adjustState:`This effect adjusts state when a prop changes. Adjust the state directly during rendering or restructure to avoid this need.`,derivedState:`This effect only derives state from properties or state. Compute the value during rendering instead of useEffect.`,duplicateDeps:`Multiple effects have identical dependency arrays. Combine them into a single effect for better performance.`,effectChain:`This effect is part of a chain of effects that only derive state from other effects. Consolidate the logic into event handlers or compute during rendering.`,emptyEffect:`This effect has an empty body and should be removed.`,eventFlag:`This effect only reacts to a state flag. Call the side effect directly in the event handler instead of toggling state.`,eventSpecificLogic:`This effect runs event-specific logic based on state. Move this logic to the event handler that triggers the state change.`,externalStore:"This effect subscribes to an external store and syncs to state. Use `useSyncExternalStore` instead.",initializeState:`This effect initializes state with a constant value. Pass the value as the useState initializer instead.`,logOnly:`This effect only contains console.log calls. Remove it (debug leftover) or move the logging to an event handler.`,mixedDerivedState:`This effect contains state setter calls that derive values from props or state mixed with other operations. Extract the setter calls and compute values during rendering.`,notifyParent:`This effect only notifies a parent via a property callback. Call the callback in the event handler instead of useEffect.`,passRefToParent:"This effect passes a ref to a parent callback. Use `forwardRef` or `useImperativeHandle` instead.",resetState:"This effect resets state when a prop changes. Pass a `key` prop to the component instead to reset all state automatically."},schema:[{additionalProperties:!1,properties:{environment:{default:`roblox-ts`,description:`The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.`,enum:[`roblox-ts`,`standard`],type:`string`},hooks:{default:[...Zu],items:{type:`string`},type:`array`},propertyCallbackPrefixes:{default:[...Qu],items:{type:`string`},type:`array`},refHooks:{default:[...$u],description:`Ref hook names that return mutable ref objects.`,items:{type:`string`},type:`array`},reportAdjustState:{default:!0,type:`boolean`},reportDerivedState:{default:!0,type:`boolean`},reportDuplicateDeps:{default:!0,type:`boolean`},reportEffectChain:{default:!0,type:`boolean`},reportEmptyEffect:{default:!0,type:`boolean`},reportEventFlag:{default:!0,type:`boolean`},reportEventSpecificLogic:{default:!0,type:`boolean`},reportExternalStore:{default:!0,type:`boolean`},reportInitializeState:{default:!0,type:`boolean`},reportLogOnly:{default:!0,type:`boolean`},reportMixedDerivedState:{default:!0,type:`boolean`},reportNotifyParent:{default:!0,type:`boolean`},reportPassRefToParent:{default:!0,type:`boolean`},reportResetState:{default:!0,type:`boolean`},stateHooks:{default:[...ed],description:`State hook names that return [value, setter] pairs.`,items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}});function Af(e){return x(e)&&y(e.dependencyMode)&&(e.dependencyMode===`empty-or-omitted`||e.dependencyMode===`aggressive`)?e.dependencyMode:`non-updating`}function jf(e){let t=x(e)&&S(e.staticGlobalFactories)?e.staticGlobalFactories:Cs;return{dependencyMode:Af(e),environment:Sn(e),staticGlobalFactories:new Set(t)}}function Mf(e){return{staticGlobalFactories:e.staticGlobalFactories}}function Nf(e){let t=Lr(e);if(t===void 0)return;let{body:n}=t;if(n===null)return;if(n.type!==`BlockStatement`)return n;if(n.body.length!==1)return;let[r]=n.body;return r?.type===`ReturnStatement`?r.argument??void 0:void 0}function Pf(e,t){switch(t.dependencyMode){case`aggressive`:return!0;case`empty-or-omitted`:return e===0||e===1;case`non-updating`:return e===0||e===1||e===2;default:{let e=Error(`Unknown dependency mode: ${String(t.dependencyMode)}`);throw Error.captureStackTrace(e,Pf),e}}}const Ff=t({create(e){let t=jf(e.options[0]),n=Mf(t),r=vn(t.environment),i=new Set,a=new Set;return{CallExpression(r){if(!fe(r,i,a)||qs(r)||r.arguments.length===0)return;let o=Nf(r);if(o===void 0)return;let s=new Set;K(e.sourceCode,o,s,n)&&Pf(qr(e.sourceCode,r.arguments[1],s,n,zs),t)&&e.report({messageId:`uselessUseMemo`,node:r})},ImportDeclaration(e){Js(e,r,i,a)}}},meta:{docs:{description:`Disallow useMemo calls that only wrap values static enough to live at module scope.`},messages:{uselessUseMemo:`useMemo is wrapping a static value. Move the value to module scope instead of paying hook overhead for no runtime benefit.`},schema:[{additionalProperties:!1,properties:{dependencyMode:{default:`non-updating`,enum:[`empty-or-omitted`,`non-updating`,`aggressive`],type:`string`},environment:{default:`roblox-ts`,enum:[`roblox-ts`,`standard`],type:`string`},staticGlobalFactories:{items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}}),If=[`useSpring`];function Lf(e){let t=!1,n=!1;for(let r of e.properties)if(!(r.type!==`Property`||r.computed||r.key.type!==`Identifier`)&&(r.key.name===`from`&&(t=!0),r.key.name===`to`&&(n=!0),t&&n))return!0;return!1}function Rf(e,t,n){let r=w(t);if(r.type===`ObjectExpression`)return n(r);if(r.type!==`Identifier`)return!1;let i=E(e.getScope(r),r.name);if(i===void 0||!G(i.scope)||Ds(i))return!1;for(let e of i.defs){let t=ks(e);if(t===void 0)continue;let r=w(t);if(r.type===`ObjectExpression`&&n(r))return!0}return!1}function zf(e,t){return Rf(e,t,Lf)}function Bf(e,t,n,r){let i={staticGlobalFactories:r.staticGlobalFactories};return Rf(e,t,t=>Rs(e,t,n,i))}function Vf(e,t){return e===0||e===2||e===1&&t.treatEmptyDepsAsViolation}function Hf({callee:e},t){if(e.type===`Identifier`)return t.springHooks.has(e.name);if(e.type===`MemberExpression`&&!e.computed){let{property:n}=e;if(n.type===`Identifier`)return t.springHooks.has(n.name)}return!1}const Uf=t({create(e){let[t]=e.options,n={springHooks:new Set(t?.springHooks??If),staticGlobalFactories:new Set(t?.staticGlobalFactories??Cs),treatEmptyDepsAsViolation:t?.treatEmptyDepsAsViolation??!0};return{CallExpression(t){if(!Hf(t,n)||t.arguments.length===0)return;let[r]=t.arguments;if(r===void 0||r.type===`SpreadElement`)return;let i=new Set;if(!Bf(e.sourceCode,r,i,n)||zf(e.sourceCode,r))return;let a=t.arguments.length>1?t.arguments[1]:void 0;Vf(qr(e.sourceCode,a,i,n,zs),n)&&e.report({messageId:`uselessSpring`,node:t})}}},meta:{docs:{description:`Disallow useSpring hooks whose config and dependencies are entirely static`},messages:{uselessSpring:`useSpring call has only static inputs and non-updating dependencies; replace it with a constant or remove the hook.`},schema:[{additionalProperties:!1,default:{staticGlobalFactories:[...Cs],treatEmptyDepsAsViolation:!0},properties:{springHooks:{description:`Hook identifiers that should be treated as spring hooks`,items:{type:`string`},type:`array`},staticGlobalFactories:{default:[...Cs],description:`Global factory identifiers that are treated as static constructors`,items:{type:`string`},type:`array`},treatEmptyDepsAsViolation:{default:!0,description:`Treat static config with an empty dependency array as a violation`,type:`boolean`}},type:`object`}],type:`suggestion`}}),Wf=oo({alternative:`Log`,message:`{{name}}() is a raw output function lacking log levels, timestamps, and filtering. Production systems require structured logging for debugging and monitoring. Replace {{name}}(...) with {{alternative}}.`,messageId:`noWarn`,name:`warn`}),Gf=t({create(e){return{ImportDeclaration(t){t.importKind!==`type`&&e.report({messageId:`onlyTypeImports`,node:t})}}},meta:{docs:{description:`Require all imports to be type-only imports. Benchmarks cannot import non-types because the benchmarker plugin will throw an error.`,recommended:!0},messages:{onlyTypeImports:"Benchmarks must use `import type` to avoid runtime imports that break the benchmarker plugin."},schema:[],type:`problem`}});function Kf(e){return!e.computed&&qf(e.value)}function qf(e){if(e===void 0)return!1;switch(e.type){case`ArrayExpression`:return e.elements.every(e=>e===null||e.type!==`SpreadElement`&&qf(e));case`CallExpression`:return e.callee.type===`MemberExpression`&&qf(e.callee.object);case`Literal`:return!0;case`MemberExpression`:return qf(e.object);case`ObjectExpression`:return e.properties.every(e=>e.type!==`SpreadElement`&&Kf(e));default:return!1}}function Jf(e){let t=e;for(;t.type===`MemberExpression`;){if(t.computed&&!Be(t.property))return!1;t=t.object}return!0}function Yf(e){return e.type===`MethodDefinition`&&e.kind===`constructor`&&e.key.type===`Identifier`&&e.key.name===`constructor`}function Xf(e){if(e.type!==`ExpressionStatement`)return!1;let{expression:t}=e;if(t.type!==`AssignmentExpression`)return!1;let{left:n}=t;if(n.type!==`MemberExpression`||n.object.type!==`ThisExpression`)return!1;let{property:r}=n;return(r.type===`Identifier`||Be(r))&&qf(t.right)&&Jf(n)}const Zf=t({create(e){let[t=`always`]=e.options;if(t===`never`)return{PropertyDefinition(t){t.static||e.report({messageId:`unexpectedClassProperty`,node:t})}};function n(t){for(let n of t.body.body)if(!(!Yf(n)||n.value.body===null))for(let t of n.value.body.body)Xf(t)&&e.report({messageId:`unexpectedAssignment`,node:t.expression})}return{ClassDeclaration(e){n(e)},ClassExpression(e){n(e)}}},meta:{docs:{description:`Prefer class properties to assignment of literals in constructors.`},messages:{unexpectedAssignment:`Constructor assigns a literal value to this.property. Literals are static and known at class definition time. Move to a class property declaration: propertyName = value; at class level. This clarifies intent and reduces constructor complexity.`,unexpectedClassProperty:`Class property declarations are disabled by rule configuration (mode: 'never'). Move initialization into the constructor: this.propertyName = value; inside constructor().`},schema:[{enum:[`always`,`never`],type:`string`}],type:`suggestion`}});function Qf(e){if(!G(e.scope))return!1;for(let t of e.defs){if(t.type!==`Variable`)continue;let e=t.node;if(e.type!==`VariableDeclarator`)continue;let n=e.parent;if(n.type===`VariableDeclaration`&&n.kind===`const`)return!0}return!1}function $f(e,t){let n=E(e.getScope(t),t.name);return n===void 0?!1:Ds(n)||Qf(n)}function ep(e,t){let n=E(e.getScope(t),t.name);return n===void 0?!1:Ds(n)||G(n.scope)}function tp(e,t){let n=t;for(;n.type===`MemberExpression`;){if(n.computed)return!1;n=w(n.object)}return n.type===`Identifier`&&ep(e,n)}function np(e,t){let n=w(t);switch(n.type){case`Identifier`:return $f(e,n);case`Literal`:return!0;case`MemberExpression`:return tp(e,n);case`TemplateLiteral`:return n.expressions.length===0;case`UnaryExpression`:return n.operator===`-`&&w(n.argument).type===`Literal`;default:return!1}}function rp(e,t){for(let n of t.properties)if(n.type!==`Property`||n.kind!==`init`||n.computed||!np(e,n.value))return!1;return!0}function ip(e,t){if(t.id.type!==`ArrayPattern`||t.init?.type!==`CallExpression`||L(t.init)!==`useReducer`)return;let n=t.id.elements[1];if(n!=null&&n.type===`Identifier`)return E(e.getScope(n),n.name)}function ap(e){let t=e;for(;t!==void 0;){if(t.type===`Program`)return t;t=t.parent}}function op(e,t,n,r,i){let a=`const ${r} = ${t.getText(n)};`,{body:o}=i,s;for(let e of o){if(e.type===`ImportDeclaration`){s=e;continue}break}if(s!==void 0)return e.insertTextAfter(s,`\n\n${a}`);let[c]=o;return c===void 0?e.insertTextAfterRange([i.range[0],i.range[1]],a):e.insertTextBefore(c,`${a}\n\n`)}const sp=t({create(e){let t=new Set,{sourceCode:n}=e,r=0;return{CallExpression(i){if(i.callee.type!==`Identifier`)return;let a=E(n.getScope(i.callee),i.callee.name);if(a===void 0||!t.has(a))return;let[o]=i.arguments;if(o===void 0||o.type===`SpreadElement`)return;let s=w(o);if(s.type!==`ObjectExpression`||!rp(n,s))return;let c=ap(s);if(c===void 0)return;let l=`PREFER_CONSTANT_ACTION_${r}`;r+=1,e.report({messageId:`preferConstantDispatch`,node:s,suggest:[{desc:`Extract to module constant \`${l}\``,fix(e){return[op(e,n,s,l,c),e.replaceText(s,l)]}}]})},VariableDeclarator(e){let r=ip(n,e);r!==void 0&&t.add(r)}}},meta:{docs:{description:`Disallow inline useReducer action objects that could be module-level constants.`,recommended:!0},hasSuggestions:!0,messages:{preferConstantDispatch:`Move this inline useReducer action object to a module-level constant.`},schema:[],type:`suggestion`}}),cp=new Set([`.js`,`.jsx`,`.ts`,`.tsx`]),lp=new Set([`.git`,`.next`,`.turbo`,`__fixtures__`,`__mocks__`,`__tests__`,`coverage`,`dist`,`documentation`,`example`,`examples`,`fixture`,`fixtures`,`node_modules`,`opensrc`,`stories`,`story`,`test`,`tests`]),up=/\bexport\s+default\b/u,dp=/\/index$/u,fp=/\.(?:[cm]?jsx?|tsx?)$/u,pp=new Map,mp=new Map,hp=new Map,gp=/[.*+?^${}()|[\]\\]/gu,_p=String.raw`\$&`;function vp(e){return e.replaceAll(gp,_p)}const yp=new Map;function bp(e){return e.includes(`u`)||e.includes(`v`)?e:`${e}u`}function xp(e,t){let n=`${t}:${e}`,r=yp.get(n);if(r!==void 0)return r;let i=new RegExp(e,bp(t));if(yp.size>=64){let e=yp.keys().next().value;e!==void 0&&yp.delete(e)}return yp.set(n,i),i}function Sp(e){return e.replaceAll(`\\`,`/`)}function Cp(e){let t=mp.get(e);if(t!==void 0)return t;let n=f(e,`utf8`);return mp.set(e,n),n}function wp(e,t){let n=vp(t);return xp(`\\bexport\\s+(?:const|function|class)\\s+${n}\\b`,`u`).test(e)||xp(`\\bexport\\s*\\{[^}]*\\b${n}\\b[^}]*\\}`,`u`).test(e)?`named`:up.test(e)&&xp(`\\b${n}\\b`,`u`).test(e)?`default`:void 0}function Tp(e,t){for(let n of t)if(!xp(`\\b${vp(n)}\\b`,`u`).test(e))return!1;return!0}function Ep(e){let t=hp.get(e);if(t!==void 0)return t;let n=e;for(;;){if(d(c(n,`package.json`))||d(c(n,`tsconfig.json`)))return hp.set(e,n),n;let t=a(n);if(t===n){hp.set(e,void 0);return}n=t}}function Dp(e){let t=pp.get(e);if(t!==void 0)return t;let n=new Map;function r(e){for(let t of p(e,{withFileTypes:!0})){let a=t.name.toLowerCase();if(t.name.startsWith(`.`)&&t.name!==`.storybook`||lp.has(a))continue;let s=c(e,t.name);if(t.isDirectory()){r(s);continue}let l=o(t.name);if(!cp.has(l)||t.name.endsWith(`.d.ts`))continue;let u=i(t.name,l).toLowerCase(),d=n.get(u);d===void 0?n.set(u,[s]):d.push(s)}}r(e);let a=new Map;for(let[e,t]of n)a.set(e,t);return pp.set(e,a),a}function Op(e,t){let n=Sp(l(a(e),t));return n=n.replace(fp,``),n=n.replace(dp,``),n.startsWith(`.`)||(n=`./${n}`),n}function kp(e){let t=Ep(a(e)),n=Sp(t===void 0?e:l(t,e));for(let e of n.split(`/`))if(lp.has(e.toLowerCase()))return!0;return!1}function Ap(e,t){if(kp(e))return{importStyle:void 0,matches:!1};let n=o(e);if(!cp.has(n)||e.endsWith(`.d.ts`))return{importStyle:void 0,matches:!1};let r=i(e,n).toLowerCase();if(!t.fileNames.map(e=>e.toLowerCase()).includes(r))return{importStyle:void 0,matches:!1};let a=Cp(e);if(!xp(`\\b${vp(t.componentName)}\\b`,`u`).test(a)||t.markers!==void 0&&!Tp(a,t.markers))return{importStyle:void 0,matches:!1};let s=wp(a,t.componentName);return s===void 0?{importStyle:void 0,matches:!1}:{importStyle:s,matches:!0}}function jp(e,t,n){let r=e.source.value;if(!(y(r)&&r.startsWith(`.`))||t===``)return{importStyle:void 0,matches:!1};let i=mc(r,t);return i.found?Ap(i.path,n):{importStyle:void 0,matches:!1}}function Mp(e,t,n,r){if(t.matches)for(let t of e.specifiers){if(t.type===`ImportDefaultSpecifier`){r.add(t.local.name);continue}if(t.type!==`ImportSpecifier`)continue;let{imported:e}=t;(e.type===`Identifier`?e.name:e.value)===n&&r.add(t.local.name)}}function Np(e,t){let n=Ep(a(e));if(n===void 0)return{found:!1};let r=Dp(n),i=new Set;for(let e of t.fileNames)for(let t of r.get(e.toLowerCase())??[])i.add(t);let o=[...i].filter(e=>Ap(e,t).matches);if(o.length!==1)return{found:!1};let[s]=o;if(s===void 0)return{found:!1};let c=Ap(s,t);return{found:!0,importSource:Op(e,s),importStyle:c.importStyle,path:s}}const Pp={componentName:`ContextStack`,fileNames:[`context-stack`],markers:[`providers`]},Fp=new Set([`.jsx`,`.tsx`]);function Ip(e){return e.openingElement.name.type===`JSXMemberExpression`&&e.openingElement.name.property.name===`Provider`}function Lp(e){return e.children.filter(e=>e.type===`JSXText`?e.value.trim()!==``:e.type!==`JSXExpressionContainer`||e.expression.type!==`JSXEmptyExpression`)}function Rp(e){let{parent:t}=e;if(t.type!==`JSXElement`||!Ip(t))return!1;let n=Lp(t);return n.length===1&&n[0]===e}function zp(e){if(!Ip(e))return;let t=[e],n=e;for(;;){let e=Lp(n);if(e.length!==1)break;let[r]=e;if(r?.type!==`JSXElement`||!Ip(r))break;t.push(r),n=r}return t.length>1?t:void 0}function Bp(e,t){let n=!1;for(let r of e.children){if(r===t){n=!0;continue}if(!(r.type===`JSXText`&&r.value.trim()===``))return!1}return n}function Vp(e){let t=0;for(let n of e){let r=e[t+1];if(r===void 0){t+=1;continue}if(!Bp(n,r))return!1;t+=1}return!0}function Hp(e,t){let n=t.getText(e.openingElement);return e.openingElement.selfClosing?n:n.endsWith(`>`)?`${n.slice(0,-1)} />`:void 0}function Up(e,t,n){let r=[];for(let e of t){let t=Hp(e,n);if(t===void 0)return;r.push(t)}let i=t.at(-1);if(i===void 0||i.closingElement===null)return;let a=n.text.slice(i.openingElement.range[1],i.closingElement.range[0]);return`<${e} providers={[${r.join(`, `)}]}>${a}</${e}>`}const Wp=t({create(e){let{filename:t,sourceCode:n}=e,r=t===``?{found:!1}:Np(t,Pp),i=new Set;return{ImportDeclaration(e){Mp(e,jp(e,t,Pp),Pp.componentName,i)},JSXElement(a){if(Rp(a))return;let s=zp(a);if(s===void 0||i.size===0&&!r.found)return;let c=Fp.has(o(t))&&i.size===1&&Vp(s),[l]=i,u=c&&l!==void 0?Up(l,s,n):void 0;if(u!==void 0){e.report({fix:e=>e.replaceText(a,u),messageId:`preferContextStack`,node:a});return}e.report({messageId:`preferContextStack`,node:a})}}},meta:{docs:{description:`Prefer a local ContextStack component over directly nesting multiple context providers.`},fixable:`code`,messages:{preferContextStack:"Use the local `ContextStack` component instead of nesting multiple context providers directly."},schema:[],type:`suggestion`}});function Gp(e){return x(e)&&b(e.maximumStatements)?e.maximumStatements:1}function Kp(e){return e.type===`IfStatement`&&e.alternate===null}function qp(e,t){return e.type===`ExpressionStatement`&&t===0||e.type===`BlockStatement`&&e.body.length>t}function Jp(e,t){if(e.body.length!==1)return!1;let[n]=e.body;return n===void 0||!Kp(n)?!1:qp(n.consequent,t)}const Yp=t({create(e){let t=Gp(e.options[0]);function n(n){Jp(n,t)&&e.report({messageId:`preferEarlyReturn`,node:n})}return{ArrowFunctionExpression(e){e.body.type===`BlockStatement`&&n(e.body)},FunctionDeclaration(e){e.body!==null&&n(e.body)},FunctionExpression(e){e.body!==null&&n(e.body)}}},meta:{docs:{description:`Prefer early returns over full-body conditional wrapping.`,recommended:!0},messages:{preferEarlyReturn:`Function body is wrapped in a single conditional without an else branch. This increases nesting depth and cognitive load. Invert the condition and return early: if (!condition) return; then place the main logic at the top level.`},schema:[{additionalProperties:!1,properties:{maximumStatements:{default:1,minimum:0,type:`number`}},type:`object`}],type:`suggestion`}});function Xp(e){return e.type===`Identifier`&&(e.name===`it`||e.name===`test`)}function Zp(e){if(e.callee.type!==`MemberExpression`||!Xp(e.callee.object))return!1;let t=T(e.callee);return t===`only`||t===`skip`}function Qp(e){return e.callee.type!==`MemberExpression`||!Xp(e.callee.object)?!1:T(e.callee)===`each`}function $p(e){let t=e.arguments.at(-1);return t===void 0||!He(t)?void 0:t}function em(e){return e.type===`DoWhileStatement`||e.type===`ForInStatement`||e.type===`ForOfStatement`||e.type===`ForStatement`||e.type===`WhileStatement`}function tm(e,t){return e.type===t.type&&e.range[0]===t.range[0]&&e.range[1]===t.range[1]}function nm(e,t){return{hasCallback:e.hasCallback||t.hasCallback,hasIndeterminate:e.hasIndeterminate||t.hasIndeterminate,hasLoop:e.hasLoop||t.hasLoop}}function rm(e,t){if(tm(e,t))return{hasCallback:!1,hasIndeterminate:!1,hasLoop:!1};let n={hasCallback:He(e),hasIndeterminate:He(e)||em(e)||e.type===`ConditionalExpression`||e.type===`IfStatement`||e.type===`SwitchCase`||e.type===`TryStatement`&&e.handler!==null,hasLoop:em(e)};return e.parent===null?n:nm(n,rm(e.parent,t))}function im(e){return e.callee.type===`Identifier`?Xp(e.callee):Zp(e)?!0:e.callee.type===`CallExpression`&&Qp(e.callee)}function am(e){return im(e)?$p(e):void 0}function om({callee:e}){return e.type!==`MemberExpression`||e.object.type!==`Identifier`||e.object.name!==`expect`?!1:T(e)===`assertions`}function sm({callee:e}){return e.type!==`MemberExpression`||e.object.type!==`Identifier`||e.object.name!==`expect`?!1:T(e)===`hasAssertions`}function cm(e,t=[]){return e.callee.type===`Identifier`&&(e.callee.name===`expect`||t.includes(e.callee.name))}function lm(e,t=[]){let n=0,r=!1,i=!1,a=!1,o=0;return Rr(e,s=>{if(s.type!==`CallExpression`||!cm(s,t))return;let c=rm(s.parent,e);if(c.hasLoop&&(i=!0),c.hasCallback&&(r=!0),c.hasIndeterminate){a=!0,o+=1;return}n+=1}),{deterministic:n,hasExpectInCallback:r,hasExpectInLoop:i,hasIndeterminate:a,indeterminate:o}}function um(e){return Array.isArray(e)?e.filter(y):[]}function dm(e){return x(e)?{additionalAssertionFunctions:um(e.additionalAssertionFunctions),additionalExpectCallNames:um(e.additionalExpectCallNames),onlyFunctionsWithAsyncKeyword:e.onlyFunctionsWithAsyncKeyword===!0,onlyFunctionsWithExpectInCallback:e.onlyFunctionsWithExpectInCallback===!0,onlyFunctionsWithExpectInLoop:e.onlyFunctionsWithExpectInLoop===!0}:{additionalAssertionFunctions:[],additionalExpectCallNames:[],onlyFunctionsWithAsyncKeyword:!1,onlyFunctionsWithExpectInCallback:!1,onlyFunctionsWithExpectInLoop:!1}}function fm(e){return[...new Set([...e.additionalExpectCallNames,...e.additionalAssertionFunctions])]}function pm(e){return e.onlyFunctionsWithAsyncKeyword||e.onlyFunctionsWithExpectInCallback||e.onlyFunctionsWithExpectInLoop}function mm(e){return e.body??void 0}function hm(e){let t=mm(e);return t?.type===`BlockStatement`?t:void 0}function gm(e,t,n,r,i,a){return n+r===0?!1:!pm(t)||t.onlyFunctionsWithAsyncKeyword&&e.async||t.onlyFunctionsWithExpectInCallback&&i||t.onlyFunctionsWithExpectInLoop&&a}function _m(e){let t=hm(e);if(t===void 0)return;let[n]=t.body;if(!(n?.type!==`ExpressionStatement`||n.expression.type!==`CallExpression`))return n.expression}function vm(e,t,n,r,i){let a=hm(t);if(a===void 0){e.report({messageId:`haveExpectAssertions`,node:n});return}let[o]=a.body;if(i){e.report({messageId:`haveExpectAssertions`,node:n,suggest:[{fix(e){return o===void 0?e.insertTextAfterRange([a.range[0],a.range[0]+1],` expect.hasAssertions();`):e.insertTextBefore(o,`expect.hasAssertions();
10
+ `)},messageId:`suggestAddingHasAssertions`}]});return}e.report({messageId:`haveExpectAssertions`,node:n,suggest:[{data:{count:String(r)},fix(e){return o===void 0?e.insertTextAfterRange([a.range[0],a.range[0]+1],` expect.assertions(${r});`):e.insertTextBefore(o,`expect.assertions(${r});\n`)},messageId:`suggestAddingAssertions`}]})}function ym(e,t,n,r){if(sm(t)){t.arguments.length>0&&e.report({messageId:`hasAssertionsTakesNoArguments`,node:t});return}if(!om(t))return;if(t.arguments.length!==1){e.report({messageId:`assertionsRequiresOneArgument`,node:t});return}let[i]=t.arguments;if(i===void 0||i.type===`SpreadElement`||!We(i)){e.report({messageId:`assertionsRequiresNumberArgument`,node:t});return}!r&&n>0&&i.value!==n&&e.report({data:{actual:String(n),expected:String(i.value)},messageId:`wrongAssertionCount`,node:t})}const bm=t({create(e){let t=dm(e.options[0]);return{CallExpression(n){if(!im(n))return;let r=am(n);if(r===void 0)return;let i=mm(r);if(i===void 0)return;let{deterministic:a,indeterminate:o,hasIndeterminate:s,hasExpectInCallback:c,hasExpectInLoop:l}=lm(i,fm(t));if(!gm(r,t,a,o,c,l))return;let u=_m(r);if(u!==void 0&&(om(u)||sm(u))){if(ym(e,u,a,s),sm(u)&&u.arguments.length===0&&a>0&&!s){let[t]=hm(r)?.body??[];t!==void 0&&e.report({data:{count:String(a)},fix(e){return e.replaceText(t,`expect.assertions(${a});`)},messageId:`preferAssertionsCount`,node:u})}return}vm(e,r,n,a,s)}}},meta:{docs:{description:`Enforce expect assertion guards in Jest tests and prefer expect.assertions(n) over expect.hasAssertions() when the count is known.`,recommended:!0},fixable:`code`,hasSuggestions:!0,messages:{assertionsRequiresNumberArgument:`This argument should be a number`,assertionsRequiresOneArgument:"`expect.assertions` expects a single argument of type number",hasAssertionsTakesNoArguments:"`expect.hasAssertions` expects no arguments",haveExpectAssertions:"Every test should have either `expect.assertions(<number of assertions>)` or `expect.hasAssertions()` as its first expression",preferAssertionsCount:"Use `expect.assertions({{count}})` instead of `expect.hasAssertions()` when the count is known",suggestAddingAssertions:"Add `expect.assertions({{count}})`",suggestAddingHasAssertions:"Add `expect.hasAssertions()`",wrongAssertionCount:`Expected {{expected}} assertions, but test has {{actual}} expect calls`},schema:[{additionalProperties:!1,properties:{additionalAssertionFunctions:{items:{type:`string`},type:`array`},additionalExpectCallNames:{items:{type:`string`},type:`array`},onlyFunctionsWithAsyncKeyword:{type:`boolean`},onlyFunctionsWithExpectInCallback:{type:`boolean`},onlyFunctionsWithExpectInLoop:{type:`boolean`}},type:`object`}],type:`suggestion`}});function xm(e){if(!(x(e)&&`additionalHoistableComponents`in e))return new Set;let{additionalHoistableComponents:t}=e;return t===void 0||!S(t)?new Set:new Set(t)}function Sm(e){if(!(x(e)&&`additionalStaticFactories`in e))return new Set;let{additionalStaticFactories:t}=e;return t===void 0||!S(t)?new Set:new Set(t)}function Cm(e,t){let n=t,{parent:r}=n;for(;r.type===`ParenthesizedExpression`;)n=r,{parent:r}=n;if(r.type!==`VariableDeclarator`||r.id.type!==`Identifier`||r.init!==n)return!1;let i=E(e.sourceCode.getScope(n),r.id.name);return i!==void 0&&G(i.scope)}function wm(e,t,n,r){if(t.name.type===`JSXIdentifier`&&(t.name.name===`Event`||t.name.name===`Change`))return!1;let{value:i}=t;return i===null||i.type===`Literal`?!0:i.type!==`JSXExpressionContainer`||i.expression.type===`JSXEmptyExpression`||Ms(e.sourceCode,i.expression,new Set)?!1:K(e.sourceCode,i.expression,n,r)}function Tm(e,t,n,r){for(let i of t.attributes)if(i.type===`JSXSpreadAttribute`||!wm(e,i,n,r))return!1;return!0}function Em(e,t,n,r,i){if(t.type===`JSXText`)return t.value.trim()===``;if(t.type===`JSXElement`)return Om(e,t,n,r,i);if(t.type!==`JSXExpressionContainer`)return!1;if(t.expression.type===`JSXEmptyExpression`)return!0;if(t.expression.type===`Identifier`){let a=As(e.sourceCode,t.expression);if(a?.type===`JSXElement`)return Om(e,a,n,r,i)}return K(e.sourceCode,t.expression,n,i)}function Dm(e,t,n,r,i){for(let a of t.children)if(!Em(e,a,n,r,i))return!1;return!0}function Om(e,t,n,r,i){return jo(t.openingElement.name,r)&&Tm(e,t.openingElement,n,i)&&Dm(e,t,n,r,i)}function km(e,t,n,r){let{parent:i}=t;for(;i.type!==`Program`;){if(i.type===`JSXElement`&&Om(e,i,new Set,n,r))return!0;({parent:i}=i)}return!1}function Am(e,t){let n=t,{parent:r}=n;for(;r.type!==`Program`;){if(r.type===`VariableDeclarator`&&r.id.type===`Identifier`&&r.init===n){let t=E(e.sourceCode.getScope(n),r.id.name);if(t!==void 0&&G(t.scope))return!0}(r.type===`JSXElement`||r.type===`JSXFragment`||r.type===`ParenthesizedExpression`)&&(n=r),{parent:r}=r}return!1}function jm(e,t){let n=e.sourceCode.getText(t);e.report({data:{elementText:n},messageId:`hoistableJsxElement`,node:t})}const Mm=t({create(e){let[t]=e.options,n=xm(t),r=Sm(t),i={staticGlobalFactories:new Set([...Cs,...r])};return{JSXElement(t){Om(e,t,new Set,n,i)&&(Cm(e,t)||km(e,t,n,i)||Am(e,t)||jm(e,t))}}},meta:{docs:{description:`Prefer extracting static Roblox JSX intrinsic elements to module-level constants.`},messages:{hoistableJsxElement:"Extract `{{elementText}}` to a shared module-level const — this Roblox JSX element is fully static and identical elements should reuse the same const."},schema:[{additionalProperties:!1,properties:{additionalHoistableComponents:{description:`Additional component names that can be hoisted to module-level constants.`,items:{type:`string`},type:`array`},additionalStaticFactories:{description:`Additional factory functions whose return values are considered static.`,items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}}),Nm={staticGlobalFactories:new Set(Cs)};function Pm(e){let{value:t}=e;if(t?.type===`JSXExpressionContainer`&&t.expression.type!==`JSXEmptyExpression`)return t.expression}function Fm(e,t){let n=t;for(;;){let{parent:r}=n;if(r===null)return!1;if(r.type===`VariableDeclarator`)return Lm(e,t,r,n);let i=Im(r);if(i===void 0)return!1;n=i}}function Im(e){if(e.type===`JSXElement`||e.type===`JSXFragment`||e.type===`JSXExpressionContainer`||e.type===`ParenthesizedExpression`||e.type===`ArrayExpression`)return e}function Lm(e,t,n,r){if(n.id.type!==`Identifier`||n.init!==r)return!1;let i=E(e.sourceCode.getScope(t),n.id.name);return i!==void 0&&G(i.scope)}function Rm(e,t){let n=e.sourceCode.getText(t);e.report({data:{objectText:n},messageId:`hoistableObjectProp`,node:t})}function zm(e,t){if(t.properties.some(e=>e.type===`Property`&&e.computed))return;let n=new Set;if(K(e.sourceCode,t,n,Nm)){Rm(e,t);return}for(let n of t.properties){if(n.type!==`Property`)continue;let t=w(n.value);t.type===`ObjectExpression`&&zm(e,t)}}const Bm=t({create(e){return{JSXAttribute(t){let n=Pm(t);if(n===void 0)return;let r=w(n);if(r.type!==`ObjectExpression`)return;let i=t.parent;if(i.type!==`JSXOpeningElement`)return;let a=i.parent;a.type===`JSXElement`&&Fm(e,a)||zm(e,r)}}},meta:{docs:{description:`Prefer extracting inline JSX object props to module-level constants when the entire object is statically hoistable.`},messages:{hoistableObjectProp:"Extract `{{objectText}}` to a module-level const — this inline JSX prop object is fully static and causes unnecessary reference churn on every render."},schema:[],type:`suggestion`}});function Vm({type:e}){return e===`Identifier`||e===`MemberExpression`||e===`CallExpression`||e===`NewExpression`||e===`ThisExpression`}function Hm(e){let t=e;for(;t.type===`ParenthesizedExpression`;)t=t.expression;return t}const Um=t({createOnce(e){return{CallExpression(t){if(t.optional)return;let n=w(t.callee);if(n.type!==`MemberExpression`||n.optional||T(n)!==`floor`)return;let r=w(n.object);if(r.type!==`Identifier`||r.name!==`math`||ie(e.sourceCode,r,`math`)||t.arguments.length!==1)return;let[i]=t.arguments;if(i===void 0||i.type===`SpreadElement`)return;let a=w(i);if(a.type!==`BinaryExpression`||a.operator!==`/`)return;let o=w(a.left),s=e.sourceCode.getText(Hm(a.left)),c=Vm(o)?s:`(${s})`,l=e.sourceCode.getText(Hm(a.right));e.report({fix:e=>e.replaceText(t,`${c}.idiv(${l})`),messageId:`useIdiv`,node:t})}}},meta:{docs:{description:`Prefer .idiv() for integer division instead of math.floor(x / y).`,recommended:!0},fixable:`code`,messages:{useIdiv:`Use .idiv() instead of math.floor(x / y) for integer division.`},schema:[],type:`suggestion`}}),Wm={componentName:`Portal`,fileNames:[`portal`],markers:[`target`]},Gm=new Set([`@rbxts/react-roblox`,`react-dom`]),Km=new Set([`.jsx`,`.tsx`]);function qm(e){return e.type===`ImportBinding`}function Jm(e){return e.parent?.type===`ImportDeclaration`?e.parent:void 0}function Ym(e){if(e===void 0)return!1;for(let t of e.defs){if(!qm(t)||t.node.type!==`ImportSpecifier`)continue;let e=Jm(t.node);if(e===void 0||!Gm.has(e.source.value))continue;let{imported:n}=t.node;if(n.type===`Identifier`&&n.name===`createPortal`)return!0}return!1}function Xm(e){if(e===void 0)return!1;for(let t of e.defs){if(!qm(t)||t.node.type!==`ImportNamespaceSpecifier`)continue;let e=Jm(t.node);if(e!==void 0&&Gm.has(e.source.value))return!0}return!1}function Zm(e,{callee:t}){return t.type===`Identifier`?Ym(E(e.getScope(t),t.name)):t.type!==`MemberExpression`||t.computed||t.property.type!==`Identifier`||t.property.name!==`createPortal`||t.object.type!==`Identifier`?!1:Xm(E(e.getScope(t.object),t.object.name))}function Qm(e,t){return e.type===`JSXElement`||e.type===`JSXFragment`?t.getText(e):`{${t.getText(e)}}`}function $m(e,t,n){if(t.arguments.length!==2)return;let[r,i]=t.arguments;if(r===void 0||i===void 0)return;let a=Qm(r,n);return`<${e} target={${n.getText(i)}}>${a}</${e}>`}const eh=t({create(e){let{filename:t,sourceCode:n}=e,r=t===``?{found:!1}:Np(t,Wm),i=new Set;return{CallExpression(a){if(!Zm(n,a)||a.arguments.length!==2||!(i.size>0||r.found))return;let s=Km.has(o(t))&&i.size===1,[c]=i,l=s&&c!==void 0?$m(c,a,n):void 0;if(l!==void 0){e.report({fix:e=>e.replaceText(a,l),messageId:`preferPortalComponent`,node:a});return}e.report({messageId:`preferPortalComponent`,node:a})},ImportDeclaration(e){Mp(e,jp(e,t,Wm),Wm.componentName,i)}}},meta:{docs:{description:`Prefer a local Portal component over direct createPortal calls when the project already defines one.`},fixable:`code`,messages:{preferPortalComponent:"Use the local `Portal` component instead of calling `createPortal` directly."},schema:[],type:`suggestion`}});function th(e){return e===void 0?!1:e.type===`TSTypeAnnotation`?th(e.typeAnnotation):e.type===`TSNumberKeyword`||e.type===`TSTypeReference`&&e.typeName.type===`Identifier`&&e.typeName.name===`Number`}function nh(e){return e.type!==`PrivateIdentifier`}function rh(e){let t=w(e);return t.type===`Literal`&&!b(t.value)}function ih(e){if(e.type===`Parameter`){let t=e.name;if(t.type===`Identifier`&&t.typeAnnotation!==void 0&&t.typeAnnotation!==null)return!th(t.typeAnnotation);let{parent:n}=t;return n?.type===`AssignmentPattern`&&rh(n.right)}if(e.type!==`Variable`||e.node.type!==`VariableDeclarator`)return!1;let{id:t,init:n}=e.node;return t.type===`Identifier`&&t.typeAnnotation!==void 0&&t.typeAnnotation!==null?!th(t.typeAnnotation):n!=null&&rh(n)}function ah(e,t){let n=E(e.getScope(t),t.name);if(n===void 0)return!1;for(let e of n.defs)if(ih(e))return!0;return!1}function oh(e,t){if(t.type===`ParenthesizedExpression`)return oh(e,t.expression);if(t.type===`TSAsExpression`||t.type===`TSTypeAssertion`)return!th(t.typeAnnotation);if(rh(t))return!0;let n=w(t);return n.type===`Identifier`&&ah(e,n)}function sh(e,t){return e.getText(w(t))}function ch(e){let t=e;for(;t.type===`ParenthesizedExpression`;)t=t.expression;return t}function lh(e,t){let n=ch(t);return n.type===`SequenceExpression`?`(${e.getText(n)})`:e.getText(n)}function uh(e,t){if(t.test.type!==`BinaryExpression`)return;let{alternate:n,consequent:r,test:i}=t,{left:a,operator:o,right:s}=i;if(!(nh(a)&&nh(s))||!(I(a)&&I(s))||oh(e,a)||oh(e,s))return;let c=sh(e,a),l=sh(e,s),u=sh(e,n),d=sh(e,r),f=o===`>`||o===`>=`,p=o===`<`||o===`<=`;if(f&&c===u&&l===d||p&&c===d&&l===u)return`min`;if(f&&c===d&&l===u||p&&c===u&&l===d)return`max`}const dh=t({create(e){let{sourceCode:t}=e;return{ConditionalExpression(n){if(ie(t,n,`math`))return;let r=uh(t,n);if(r===void 0||n.test.type!==`BinaryExpression`)return;let{left:i,right:a}=n.test;if(!(nh(i)&&nh(a)))return;let o=lh(t,i),s=lh(t,a);e.report({fix(e){return e.replaceText(n,`math.${r}(${o}, ${s})`)},messageId:`preferMathMethod`,node:n})}}},meta:{docs:{description:`Prefer math.min() and math.max() over simple clamp-like ternaries.`,recommended:!0},fixable:`code`,messages:{preferMathMethod:"Use `math.min()` or `math.max()` instead of this ternary comparison."},schema:[],type:`suggestion`}}),fh=new Set([`ReadonlyRecord`,`Record`]);function ph(e){return e.type===`TSTypeReference`&&e.typeName.type===`Identifier`&&fh.has(e.typeName.name)}function mh(e){if(e.id.type!==`Identifier`)return;let t=ce(e.id);if(t===void 0)return;let{typeAnnotation:n}=t;if(!ph(n))return;let{typeArguments:r}=n;if(r?.params.length!==2)return;let[i,a]=r.params;if(!(i===void 0||a===void 0)&&a.type===`TSLiteralType`&&!(a.literal.type!==`Literal`||a.literal.value!==!0))return i}function hh(e){if(e?.type!==`ObjectExpression`)return!1;for(let t of e.properties)if(t.type!==`Property`||t.value.type!==`Literal`||t.value.value!==!0)return!1;return!0}const gh=t({create(e){let{sourceCode:t}=e;return{VariableDeclarator(n){if(n.id.type!==`Identifier`)return;let r=n.id.name;if(!hh(n.init))return;let i=mh(n);if(i===void 0)return;let a=t.getText(i);e.report({data:{enumType:a},fix(e){return e.replaceTextRange([n.range[0],n.range[1]],`${r} = Modding.inspect<Record<${a}, true>>()`)},messageId:`preferModdingInspect`,node:n.id})}}},meta:{docs:{description:`Prefer Modding.inspect over manually enumerating every enum member in a Record<Enum, true>.`,recommended:!0},fixable:`code`,messages:{preferModdingInspect:`Replace manual {{enumType}} enumeration with Modding.inspect<Record<{{enumType}}, true>>().`},schema:[],type:`suggestion`}}),_h=/^[A-Z][A-Z0-9_]*$/u;function vh(e){let{type:t}=e;if(t===`module`||t===`global`)return!0;if(e.upper?.type===`global`){let{block:t}=e.upper;if(t.type===`Program`&&t.sourceType===`script`)return!0}return!1}const yh=t({create(e){let t=!1;return{VariableDeclaration(e){t=e.kind===`const`},"VariableDeclaration:exit"(){t=!1},VariableDeclarator(n){let{id:r}=n;if(!(r.type!==`Identifier`||!_h.test(r.name))){if(!t){e.report({messageId:`mustUseConst`,node:n});return}vh(e.sourceCode.getScope(n))||e.report({messageId:`mustBeModuleScope`,node:n})}}}},meta:{docs:{description:"Prefer that screaming snake case variables always be defined using `const`, and always appear at module scope."},messages:{mustBeModuleScope:`You must place screaming snake case at module scope. If this is not meant to be a module-scoped variable, use camelcase instead.`,mustUseConst:"You must use `const` when defining screaming snake case variables. If this is not a constant, use camelcase instead."},schema:[],type:`suggestion`}}),bh=new Set([`end`,`loc`,`parent`,`range`,`start`]),xh=new Set([`.jsx`,`.tsx`]),Sh=new Set([`PaddingBottom`,`PaddingLeft`,`PaddingRight`,`PaddingTop`]),Ch={componentName:`DirectionalPadding`,fileNames:[`directional-padding`],markers:[`horizontal`,`vertical`]},wh={componentName:`EqualPadding`,fileNames:[`equal-padding`],markers:[`padding`]};function Th(e,t){return Object.is(e,t)?!0:Array.isArray(e)?Array.isArray(t)&&Eh(e,t):Array.isArray(t)||typeof e!=`object`||typeof t!=`object`||e===null||t===null||!(x(e)&&x(t))?!1:Dh(e,t)}function Eh(e,t){if(e.length!==t.length)return!1;let n=0;for(let r of e)if(!Th(r,t[n++]))return!1;return!0}function Dh(e,t){let n=Object.entries(e).filter(([e])=>!bh.has(e)),r=Object.entries(t).filter(([e])=>!bh.has(e));if(n.length!==r.length)return!1;for(let[e,r]of n)if(!(e in t)||!Th(r,t[e]))return!1;return!0}function Oh(e){for(let t of e.children)if(!(t.type===`JSXText`&&t.value.trim()===``)&&!(t.type===`JSXExpressionContainer`&&t.expression.type===`JSXEmptyExpression`))return!0;return!1}function kh({value:e}){if(e!==null){if(e.type===`JSXExpressionContainer`)switch(e.expression.type){case`JSXElement`:case`JSXEmptyExpression`:case`JSXFragment`:return;default:return w(e.expression)}return e.type===`Literal`?e:void 0}}function Ah(e){let t=new Map;for(let n of e.attributes){if(n.type===`JSXSpreadAttribute`||n.name.type!==`JSXIdentifier`)return;let e=n.name.name;if(!Sh.has(e)||t.has(e)||n.value===null)return;t.set(e,n)}let n=t.get(`PaddingBottom`),r=t.get(`PaddingLeft`),i=t.get(`PaddingRight`),a=t.get(`PaddingTop`);if(!(n===void 0||r===void 0||i===void 0||a===void 0))return{paddingBottom:n,paddingLeft:r,paddingRight:i,paddingTop:a}}function jh({value:e},t){if(e!==null)switch(e.type){case`JSXExpressionContainer`:case`Literal`:return t.getText(e);default:return}}function Mh(e,t,n,r){let i=jh(n.paddingTop,r);if(i===void 0)return;if(t===`preferEqualPadding`)return`<${e} padding=${i} />`;let a=jh(n.paddingLeft,r);if(a!==void 0)return`<${e} horizontal=${i} vertical=${a} />`}function Nh(e){let t=kh(e.paddingBottom),n=kh(e.paddingLeft),r=kh(e.paddingRight),i=kh(e.paddingTop);if(t===void 0||n===void 0||r===void 0||i===void 0)return;if(Th(i,t)&&Th(i,n)&&Th(i,r))return`preferEqualPadding`;let a=Th(i,t),o=Th(n,r);return a&&o?`preferDirectionalPadding`:void 0}function Ph(e){return e.type===`JSXIdentifier`}const Fh=t({create(e){let{filename:t}=e,n=t===``?{found:!1}:Np(t,Ch),r=t===``?{found:!1}:Np(t,wh),i=new Set,a=new Set;return{ImportDeclaration(e){let n=jp(e,t,Ch),r=jp(e,t,wh);Mp(e,n,Ch.componentName,i),Mp(e,r,wh.componentName,a)},JSXElement(s){if(Oh(s))return;let{openingElement:c}=s;if(!Ph(c.name)||c.name.name!==`uipadding`)return;let l=Ah(c);if(l===void 0)return;let u=Nh(l);if(u===void 0)return;let d=u===`preferEqualPadding`?a:i,f=u===`preferEqualPadding`?r:n;if(d.size===0&&!f.found)return;let p=xh.has(o(t))&&d.size===1,[m]=[...d],h=p&&m!==void 0?Mh(m,u,l,e.sourceCode):void 0;if(h!==void 0){e.report({fix(e){return e.replaceText(s,h)},messageId:u,node:s});return}e.report({messageId:u,node:s})}}},meta:{docs:{description:`Prefer local EqualPadding and DirectionalPadding components over matching <uipadding /> declarations.`},fixable:`code`,messages:{preferDirectionalPadding:"Use the local `DirectionalPadding` component when horizontal and vertical padding already match.",preferEqualPadding:"Use the local `EqualPadding` component when all four padding values already match."},schema:[],type:`suggestion`}}),Ih=/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/gu,Lh=/^[^A-Za-z0-9]+|[^A-Za-z0-9]+$/gu,Rh=/(?<first>[a-z0-9])(?<second>[A-Z])/gu,zh=/[_\-\s]+/gu;function Bh(e){return e.replaceAll(Lh,``).replaceAll(Rh,`$<first> $<second>`).replaceAll(zh,` `).match(Ih)??[]}function Vh(e){let t=Bh(e),n=``;for(let e of t)e.length!==0&&(n+=`${e.slice(0,1).toUpperCase()}${e.slice(1).toLowerCase()}`);return n}const Hh=/^\d/u;function Uh(e){if(e.id.type===`Identifier`)return e.id.name;if(!(e.id.type!==`Literal`||!y(e.id.value)))return Hh.test(e.id.value)?void 0:e.id.value}const Wh=t({createOnce(e){return{TSEnumDeclaration(t){let n=t.id.name;Vh(n)!==n&&e.report({data:{identifier:n},messageId:`notPascalCase`,node:t.id})},TSEnumMember(t){let n=Uh(t);n===void 0||Vh(n)===n||e.report({data:{identifier:n},messageId:`notPascalCase`,node:t.id})}}},meta:{docs:{description:`Enforce Pascal case when naming enums.`,recommended:!0},messages:{notPascalCase:`Enum '{{ identifier }}' uses non-standard casing. TypeScript convention requires PascalCase for enum names and members to distinguish them from variables (camelCase) and constants (UPPER_CASE). Rename to PascalCase: capitalize first letter of each word, no underscores.`},schema:[],type:`suggestion`}});function Gh(e,t){return We(e)&&e.value===t}function Kh(e){if(e===`ColorSequence`)return`ColorSequenceKeypoint`;if(e===`NumberSequence`)return`NumberSequenceKeypoint`}function qh(e,t,n){if(e.type!==`NewExpression`||!Ie(e,t)||e.arguments.length!==2)return;let[r,i]=e.arguments;if(!(r===void 0||r.type===`SpreadElement`)&&!(i===void 0||i.type===`SpreadElement`))return Gh(r,n)?i:void 0}function Jh(e,t,n){if(t.arguments.length!==2)return;let[r,i]=t.arguments;if(r===void 0||r.type===`SpreadElement`||i===void 0||i.type===`SpreadElement`)return;let a=e.sourceCode.getText(r);if(a===e.sourceCode.getText(i))return{messageId:`preferSingleOverload`,replacement:`new ${n}(${a})`}}function Yh(e,t,n,r){if(t.arguments.length!==1)return;let[i]=t.arguments;if(i===void 0||i.type===`SpreadElement`||i.type!==`ArrayExpression`||i.elements.length!==2)return;let[a,o]=i.elements;if(a===void 0||o===void 0||a===null||o===null||a.type===`SpreadElement`||o.type===`SpreadElement`)return;let s=qh(a,r,0),c=qh(o,r,1);if(s===void 0||c===void 0)return;let l=e.sourceCode.getText(s),u=e.sourceCode.getText(c);return{messageId:l===u?`preferSingleOverload`:`preferTwoPointOverload`,replacement:l===u?`new ${n}(${l})`:`new ${n}(${l}, ${u})`}}const Xh=t({createOnce(e){return{NewExpression(t){if(t.callee.type!==`Identifier`)return;let n=t.callee.name,r=Kh(n);if(r===void 0)return;let i=Jh(e,t,n)??Yh(e,t,n,r);i!==void 0&&e.report({fix:e=>e.replaceText(t,i.replacement),messageId:i.messageId,node:t})}}},meta:{docs:{description:`Prefer direct ColorSequence and NumberSequence overloads over two-keypoint arrays.`,recommended:!0},fixable:`code`,messages:{preferSingleOverload:`Use the single-value sequence overload instead of two identical keypoints.`,preferTwoPointOverload:`Use the two-value sequence overload instead of constructing a two-keypoint array.`},schema:[],type:`suggestion`}});function Zh(e){return e.length===2}function Qh(e){return e.type===`MemberExpression`&&!e.computed}function $h(e,t){if(e.type!==`CallExpression`)return!1;let{callee:n}=e;if(!Qh(n)||n.property.name!==t||!Zh(e.arguments))return!1;let[r,i]=e.arguments;return r.type!==`SpreadElement`&&i.type!==`SpreadElement`}function eg(e,t){if(e.declarations.length!==1)return;let[n]=e.declarations;if(n===void 0)return;let{id:r,init:i}=n;if(r.type!==`Identifier`||i===null||!$h(i,t))return;let{callee:a}=i;if(!Qh(a))return;let[o,s]=i.arguments;if(!(o===void 0||s===void 0||o.type===`SpreadElement`||s.type===`SpreadElement`))return{componentNode:s,entityNode:o,node:i,queryType:t,variableDeclaration:e,variableDeclarator:n,variableName:r.name,worldNode:a.object}}const tg=new Set([`ConditionalExpression`,`DoWhileStatement`,`ForStatement`,`IfStatement`,`WhileStatement`]);function ng(e){return x(e)&&`parent`in e}function rg(e){return x(e)&&y(e.type)?e.type:void 0}function ig(e){return x(e)&&y(e.operator)?e.operator:void 0}function ag(e){return rg(e)===`LogicalExpression`&&ig(e)===`&&`}function og(e){return x(e)&&e.type===`Identifier`&&y(e.name)}function sg(e){let{parent:t}=e;if(ag(t))return!0;let n=rg(t);if(n===void 0||!tg.has(n))return!1;let r=e;for(;r!==void 0&&r!==t&&ng(r);){let e=r.parent;if(ag(e))return!0;r=e}return!1}function cg(e){if(e.isWrite())return!1;let{identifier:t}=e;return og(t)?sg(t):!1}function lg(e,t,n){return E(n.getScope(t),e)?.references.some(cg)??!1}function ug(e,t){return e.every(e=>lg(e.variableName,e.variableDeclaration,t))}const dg=/^[\s;]*$/u;function fg(e,t,n){if(e===void 0)return!0;if(n.getText(e.worldNode)!==n.getText(t.worldNode)||n.getText(e.entityNode)!==n.getText(t.entityNode)||e.queryType!==t.queryType)return!1;let[,r]=e.variableDeclaration.range,[i]=t.variableDeclaration.range,a=n.text.slice(r,i);return dg.test(a)}function pg(e,t){if(e.length<2)return;let[n]=e;if(n===void 0)return;let{sourceCode:r}=t,i=r.getText(n.worldNode),a=r.getText(n.entityNode),o=e.map(e=>e.variableName),s=e.map(e=>r.getText(e.componentNode));mg(e,t,`const ${o.length===1?o[0]:`[${o.join(`, `)}]`} = ${i}.get(${a}, ${s.join(`, `)});`,`preferSingleGet`,n)}function mg(e,t,n,r,i){let a=e.at(0)?.variableDeclaration,o=e.at(-1)?.variableDeclaration;a===void 0||o===void 0||t.report({data:{fixedCode:n},fix(e){let[t]=a.range,[,r]=o.range;return e.replaceTextRange([t,r],n)},messageId:r,node:i.node})}function hg(e,t){if(e.length<2)return;let{sourceCode:n}=t;if(!ug(e,n))return;let[r]=e;r!==void 0&&mg(e,t,`const hasAll = ${n.getText(r.worldNode)}.has(${n.getText(r.entityNode)}, ${e.map(e=>n.getText(e.componentNode)).join(`, `)});`,`preferSingleHas`,r)}const gg=t({create(e){let{sourceCode:t}=e,n=[],r=[];function i(){n.length>=2&&pg(n,e),n=[]}function a(){r.length>=2&&hg(r,e),r=[]}function o(){i(),a()}return{":statement:not(VariableDeclaration[kind='const'])":o,"Program:exit":o,"VariableDeclaration[kind='const']"(e){let s=eg(e,`get`);if(s!==void 0){let e=n.at(-1);e!==void 0&&!fg(e,s,t)&&i(),n.push(s),a();return}let c=eg(e,`has`);if(c!==void 0){let e=r.at(-1);e!==void 0&&!fg(e,c,t)&&a(),r.push(c),i();return}o()}}},meta:{docs:{description:`Enforce combining multiple world.get() or world.has() calls into a single call for better Jecs performance.`},fixable:`code`,messages:{preferSingleGet:`Multiple world.get() calls on the same entity should be combined into a single call for better performance. Suggested fix: {{fixedCode}}`,preferSingleHas:`Multiple world.has() calls on the same entity should be combined into a single call for better performance. Suggested fix: {{fixedCode}}`},schema:[],type:`suggestion`}}),_g=new Set([`alumni`,`axes`,`cacti`,`children`,`criteria`,`data`,`dice`,`feet`,`fungi`,`geese`,`indices`,`matrices`,`media`,`men`,`mice`,`octopi`,`people`,`phenomena`,`teeth`,`vertices`,`women`]),vg=new Set([`alias`,`analysis`,`axis`,`basis`,`business`,`class`,`crisis`,`glass`,`news`,`series`,`species`,`status`,`thesis`]),yg=new Set([`args`,`components`,`controllers`,`dto`,`dtos`,`entries`,`enums`,`hooks`,`items`,`keys`,`models`,`options`,`orders`,`pages`,`parameters`,`params`,`props`,`repositories`,`services`,`settings`,`types`,`values`,`vo`,`vos`]),bg=/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/gu,xg=/^[A-Z]{2,}[sS]?$/u;function Sg(e){let t=[],n=0;for(let r of e.split(`_`)){let e=r.match(bg);if(e!==null)for(let r of e)t[n++]=r}return t}const Cg=/^\d+$/u;function wg(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(!(n===void 0||Cg.test(n)))return{lowercased:n.toLowerCase(),original:n}}}const Tg=/[sS]$/u,Eg=/(?:ches|shes|xes|zes)$/u;function Dg(e,t){return _g.has(e)||yg.has(e)?!0:vg.has(e)?!1:xg.test(t)&&Tg.test(t)||e.endsWith(`ies`)||e.endsWith(`ves`)||Eg.test(e)||e.endsWith(`s`)&&!e.endsWith(`ss`)&&!e.endsWith(`us`)&&!e.endsWith(`is`)}function Og(e){if(xg.test(e)&&Tg.test(e))return!0;let t=wg(Sg(e));return t!==void 0&&Dg(t.lowercased,t.original)}const kg=t({createOnce(e){return{TSEnumDeclaration({id:t}){let{name:n}=t;Og(n)&&e.report({data:{name:n},messageId:`notSingular`,node:t})}}},meta:{docs:{description:`Prefer singular naming for enums.`,recommended:!0},messages:{notSingular:`Enum name "{{name}}" should be singular.`},schema:[],type:`suggestion`}});function Ag(e){return e.type===`JSXElement`||e.type===`JSXFragment`}function jg(e,t,n){return e.type===`Super`||t.type===`Super`?e.type===`Super`&&t.type===`Super`:Z(e,t,n)}function Mg(e,t,n){return e.type===`SpreadElement`||t.type===`SpreadElement`?e.type!==`SpreadElement`||t.type!==`SpreadElement`?!1:Z(e.argument,t.argument,n):Z(e,t,n)}function Ng(e,t,n){return e.type===`PrivateIdentifier`||t.type===`PrivateIdentifier`?e.type===`PrivateIdentifier`&&t.type===`PrivateIdentifier`&&e.name===t.name:Z(e,t,n)}function Z(e,t,n){let r=w(e),i=w(t);if(r.type!==i.type)return!1;switch(r.type){case`BinaryExpression`:return i.type===`BinaryExpression`&&Pg(r,i,n);case`CallExpression`:return i.type===`CallExpression`&&Fg(r,i,n);case`Identifier`:return i.type===`Identifier`&&r.name===i.name;case`Literal`:return i.type===`Literal`&&r.value===i.value;case`LogicalExpression`:return i.type===`LogicalExpression`&&Ig(r,i,n);case`MemberExpression`:return i.type===`MemberExpression`&&Lg(r,i,n);case`ThisExpression`:return i.type===`ThisExpression`;case`UnaryExpression`:return i.type===`UnaryExpression`&&r.operator===i.operator&&Z(r.argument,i.argument,n);default:return n.getText(r)===n.getText(i)}}function Pg(e,t,n){return e.operator===t.operator&&Ng(e.left,t.left,n)&&Ng(e.right,t.right,n)}function Fg(e,t,n){if(e.optional!==t.optional||!jg(e.callee,t.callee,n)||e.arguments.length!==t.arguments.length)return!1;for(let r=0;r<e.arguments.length;r+=1){let i=e.arguments[r],a=t.arguments[r];if(i===void 0||a===void 0||!Mg(i,a,n))return!1}return!0}function Ig(e,t,n){return e.operator===t.operator&&Z(e.left,t.left,n)&&Z(e.right,t.right,n)}function Lg(e,t,n){return e.computed!==t.computed||e.optional!==t.optional||!jg(e.object,t.object,n)?!1:e.computed?Ng(e.property,t.property,n):Rg(e.property,t.property)}function Rg(e,t){return(e.type===`Identifier`&&t.type===`Identifier`||e.type===`PrivateIdentifier`&&t.type===`PrivateIdentifier`)&&e.name===t.name}function zg(e){let t=w(e);if(!(t.type!==`UnaryExpression`||t.operator!==`!`))return w(t.argument)}function Bg(e){let t=w(e);if(t.type===`BinaryExpression`&&!(t.operator!==`===`&&t.operator!==`!==`))return{left:t.left,operator:t.operator,right:t.right}}function Vg(e){let t=w(e);return t.type===`Identifier`||t.type===`ThisExpression`||t.type===`Literal`}function Hg(e){return rt(e)&&Vg(e)}function Ug(e,t,n){let r=zg(e);if(r&&Z(r,t,n))return{isFixSafe:Vg(r)};let i=zg(t);if(i&&Z(i,e,n))return{isFixSafe:Vg(i)};let a=Bg(e),o=Bg(t);if(!(a&&o)||!(a.operator===`===`&&o.operator===`!==`||a.operator===`!==`&&o.operator===`===`))return;let s=Ng(a.left,o.left,n)&&Ng(a.right,o.right,n),c=Ng(a.left,o.right,n)&&Ng(a.right,o.left,n);if(s||c)return{isFixSafe:Hg(a.left)&&Hg(a.right)&&Hg(o.left)&&Hg(o.right)}}function Wg(e){return e.type===`JSXText`&&e.value.trim()===``}function Gg(e){if(e.type===`JSXExpressionContainer`&&e.expression.type!==`JSXEmptyExpression`&&e.expression.type===`LogicalExpression`&&e.expression.operator===`&&`&&Ag(e.expression.right))return{condition:e.expression.left,logical:e.expression,node:e,renderBranch:e.expression.right}}const Kg=t({create(e){let{sourceCode:t}=e;function n(e,t){let n=t;for(;n<e.length;){let t=e[n];if(t===void 0||!Wg(t))break;n+=1}let r=e[n];return r===void 0?void 0:Gg(r)}function r(n,r){let i=Ug(n.condition,r.condition,t);if(i!==void 0){if(i.isFixSafe){e.report({fix(e){let i=`{${t.getText(n.condition)} ? ${t.getText(n.renderBranch)} : ${t.getText(r.renderBranch)}}`;return e.replaceTextRange([n.node.range[0],r.node.range[1]],i)},messageId:`preferTernaryConditionalRendering`,node:n.logical});return}e.report({messageId:`preferTernaryConditionalRendering`,node:n.logical})}}function i(e){for(let t=0;t<e.length;t+=1){let i=e[t];if(i===void 0)continue;let a=Gg(i);if(a===void 0)continue;let o=n(e,t+1);o!==void 0&&r(a,o)}}return{JSXElement(e){i(e.children)},JSXFragment(e){i(e.children)}}},meta:{docs:{description:`Prefer ternary expressions over complementary JSX && branches.`},fixable:`code`,messages:{preferTernaryConditionalRendering:`Use a single ternary expression instead of complementary JSX && branches.`},schema:[],type:`suggestion`}});function qg(e){return e.type===`PrivateIdentifier`}function Jg(e){return e===`+`||e===`-`||e===`*`||e===`/`||e===`%`}function Yg(e){return e.type===`BinaryExpression`&&Jg(e.operator)&&!qg(e.left)&&!qg(e.right)}function Xg(e){switch(e.type){case`BinaryExpression`:{if(!Yg(e))return;let{left:t,right:n}=e,r=Xg(t),i=Xg(n);return r===void 0||i===void 0?void 0:`${r} ${e.operator} ${i}`}case`Identifier`:return e.name;case`Literal`:return re(e.value)?String(e.value):void 0;case`UnaryExpression`:{let t=Xg(e.argument);return t===void 0||e.operator!==`+`&&e.operator!==`-`?void 0:`${e.operator}${t}`}default:return}}function Zg(e,t,n){switch(e){case`%`:return n===0?void 0:t%n;case`*`:return t*n;case`+`:return t+n;case`-`:return t-n;case`/`:return n===0?void 0:t/n;default:return}}function Qg(e){switch(e.type){case`BinaryExpression`:{if(!Yg(e))return;let{left:t,right:n}=e,r=Qg(t),i=Qg(n);return r===void 0||i===void 0?void 0:Zg(e.operator,r,i)}case`Identifier`:return;case`Literal`:return re(e.value)?e.value:void 0;case`UnaryExpression`:{let t=Qg(e.argument);return t===void 0?void 0:e.operator===`+`?t:e.operator===`-`?-t:void 0}default:return}}function $g(e){if(e.length!==4)return;let[t,n,r,i]=e;if(t===void 0||n===void 0||r===void 0||i===void 0||t.type===`SpreadElement`||n.type===`SpreadElement`||r.type===`SpreadElement`||i.type===`SpreadElement`)return;let a=Xg(t),o=Xg(n),s=Xg(r),c=Xg(i);if(!(a===void 0||o===void 0||s===void 0||c===void 0))return{offsetXText:o,offsetYText:c,scaleXText:a,scaleYText:s}}const e_=t({create(e){return{NewExpression(t){if(!Ie(t,`UDim2`))return;let n=$g(t.arguments);if(n===void 0)return;let[r,i,a,o]=t.arguments;if(r===void 0||i===void 0||a===void 0||o===void 0||r.type===`SpreadElement`||i.type===`SpreadElement`||a.type===`SpreadElement`||o.type===`SpreadElement`)return;let s=Qg(r),c=Qg(i),l=Qg(a),u=Qg(o);if(!(s===0&&c===0&&l===0&&u===0)){if(c===0&&u===0){e.report({fix(e){return e.replaceText(t,`UDim2.fromScale(${n.scaleXText}, ${n.scaleYText})`)},messageId:`preferFromScale`,node:t});return}s===0&&l===0&&e.report({fix(e){return e.replaceText(t,`UDim2.fromOffset(${n.offsetXText}, ${n.offsetYText})`)},messageId:`preferFromOffset`,node:t})}}}},meta:{docs:{description:`Prefer UDim2.fromScale() or UDim2.fromOffset() over new UDim2() when all offsets or all scales are zero.`},fixable:`code`,messages:{preferFromOffset:`Use UDim2.fromOffset() instead of new UDim2() when all scales are 0.`,preferFromScale:`Use UDim2.fromScale() instead of new UDim2() when all offsets are 0.`},schema:[],type:`suggestion`}});function t_(e,t,n){if(t.type!==`BlockStatement`)return;let r=0;for(let e of t.body)if(e.type===`VariableDeclaration`)for(let t of e.declarations)No(t.init,`useState`)&&(r+=1);r<5||e.report({data:{componentName:n,useStateCount:String(r)},messageId:`excessiveUseState`,node:t})}const n_=t({create(e){return{FunctionDeclaration(t){t.id===null||!W(t.id.name)||`body`in t&&t.body&&t_(e,t.body,t.id.name)},VariableDeclarator(t){Po(t)&&t.init&&`body`in t.init&&t.init.body&&`name`in t.id&&t_(e,t.init.body,t.id.name)}}},meta:{docs:{description:`Suggest using useReducer for related state updates instead of multiple useState calls.`,recommended:!0},messages:{excessiveUseState:`Component "{{componentName}}" has {{useStateCount}} useState calls — consider useReducer for related state`},type:`problem`}}),r_=`replace`,i_=`suggestion`,a_=`A more descriptive name will do too.`,o_={args:`parameters`,char:`character`,dt:`deltaTime`,plr:`player`},s_=[`char`],c_={acc:{accumulator:!0},arg:{argument:!0},args:{arguments:!0},arr:{array:!0},attr:{attribute:!0},attrs:{attributes:!0},btn:{button:!0},cb:{callback:!0},char:{character:!0},conf:{config:!0},ctx:{context:!0},cur:{current:!0},curr:{current:!0},db:{database:!0},def:{defer:!0,deferred:!0,define:!0,definition:!0},dest:{destination:!0},dev:{development:!0},dir:{direction:!0,directory:!0},dirs:{directories:!0},dist:{distance:!0},doc:{document:!0},docs:{documentation:!0,documents:!0},dst:{daylightSavingTime:!0,destination:!0,distribution:!0},dt:{dateTime:!0,deltaTime:!0},e:{error:!0,event:!0},el:{element:!0},elem:{element:!0},elems:{elements:!0},env:{environment:!0},envs:{environments:!0},err:{error:!0},ev:{event:!0},evt:{event:!0},ext:{extension:!0},exts:{extensions:!0},fn:{func:!0,function:!0},func:{function:!0},i:{index:!0},idx:{index:!0},impl:{implementation:!0},j:{index:!0},len:{length:!0},lib:{library:!0},mod:{module:!0},msg:{message:!0},num:{number:!0},obj:{object:!0},opts:{options:!0},param:{parameter:!0},params:{parameters:!0},pkg:{package:!0},plr:{player:!0},prev:{previous:!0},prod:{production:!0},prop:{property:!0},props:{properties:!0},rel:{related:!0,relationship:!0,relative:!0},req:{request:!0},res:{resource:!0,response:!0,result:!0},ret:{returnValue:!0},retval:{returnValue:!0},sep:{separator:!0},src:{source:!0},stdDev:{standardDeviation:!0},str:{string:!0},tbl:{table:!0},temp:{temporary:!0},tit:{title:!0},tmp:{temporary:!0},util:{utility:!0},utils:{utilities:!0},val:{value:!0},var:{variable:!0},vars:{variables:!0},ver:{version:!0}},l_={EmberENV:!0,defaultProps:!0,devDependencies:!0,getDerivedStateFromProps:!0,getInitialProps:!0,getServerSideProps:!0,getStaticProps:!0,iOS:!0,obj:!0,propTypes:!0,setupFilesAfterEnv:!0},u_=[`i18n`,`l10n`],d_=/(?=[A-Z])|(?<=[_.-])/u,f_=new Set(`any.as.boolean.break.case.catch.class.const.constructor.continue.debugger.declare.default.delete.do.else.enum.export.extends.false.finally.for.from.function.get.if.implements.import.in.instanceof.interface.let.module.new.null.number.of.package.private.protected.public.require.return.set.static.string.super.switch.symbol.this.throw.true.try.type.typeof.var.void.while.with.yield`.split(`.`)),p_=/^[A-Za-z]+$/u;function m_(e){return e>=65&&e<=90||e>=97&&e<=122||e===36||e===95}function h_(e){return e<192?m_(e):e>=12289&&e<=55295?!0:e<=767?e!==215&&e!==247:e<=8191?e>=880&&e!==894:e<=8591?e>=8204&&e<=8205||e>=8304:e<=12271?e>=11264:e<=64255?e>=63744:e<=65023?e>=64512:e<=65279?e>=65136:e<=65370?e>=65313&&e<=65338||e>=65345:e>=65382&&e<=65500}function g_(e){return!!(h_(e)||e>=48&&e<=57||e===8204||e===8205||e>=768&&e<=865||e>=8240&&e<=8266)}function __(e){if(e.length===0||f_.has(e))return!1;let t=e.codePointAt(0);if(t===void 0||!h_(t))return!1;let n=t>65535?2:1;for(;n<e.length;){let t=e.codePointAt(n);if(t===void 0||!g_(t))return!1;n+=t>65535?2:1}return!0}function v_(e,t,n){return e?t:n}const y_=/(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/u,b_=/(?<=[a-zA-Z])(?=\d)|(?<=\d)(?=[a-zA-Z])/u,x_=/[a-zA-Z]+|\d+|[^a-zA-Z\d]+/gu,S_=/[.+^${}()|[\]\\]/gu,C_=/^\/(?<first>.+)\/(?<second>[dgimsuvy]*)$/u,w_=new WeakMap;function T_(e){return e===e.toUpperCase()}function E_(e){return T_(e.charAt(0))}function D_(e){return e.charAt(0).toUpperCase()+e.slice(1)}function O_(e){return e.charAt(0).toLowerCase()+e.slice(1)}function k_(e){return e.includes(`u`)||e.includes(`v`)?e:`${e}u`}function A_(e){let t=e.match(x_);if(t===null)return[e];let n=[],r=0;for(let e of t){if(!p_.test(e)){n[r++]=e;continue}r=j_(e,n,r)}return n}function j_(e,t,n){let r=n;for(let n of e.split(b_))if(n.length!==0)for(let e of n.split(y_))e.length>0&&(t[r++]=e);return r}const M_=/\$\d+/gu;function N_(e){let t=e.match(M_);if(t===null)return 0;let n=0;for(let e of t){let t=Math.trunc(Number(e.slice(1)));t>n&&(n=t)}return n}function P_(e){let t=N_(e);if(t===0)return[];let n=Array.from({length:t});for(let e=1;e<=t;e+=1)n[e-1]=RegExp(`\\$${e}`,`gu`);return n}function F_(e){let t=[],n=[],r=0;for(let[i,a]of e)a&&(t[r]=O_(i),n[r]=D_(i),r+=1);return{lowerFirst:t.toSorted(),upperFirst:n.toSorted()}}function I_(e,t){if(e.startsWith(`/`)){let n=C_.exec(e);if(n?.groups!==void 0)return{matcher:{original:e,pattern:RegExp(`^${n.groups.first}$`,k_(n.groups.second??``)),replacement:t,replacementPatterns:P_(t)},type:`pattern`}}if(e.includes(`*`)||e.includes(`?`)){let n=e.replaceAll(S_,String.raw`\$&`).replaceAll(`*`,`(.*)`).replaceAll(`?`,`(.)`),r=0,i=t.replaceAll(`*`,()=>`$${++r}`);return{matcher:{original:e,pattern:RegExp(`^${n}$`,`u`),replacement:i,replacementPatterns:P_(i)},type:`pattern`}}return{original:e,replacement:t,type:`exact`}}function L_(e,t){let n=t.exactMatchers.get(e);if(n!==void 0)return{matchedWord:e,replacement:n,shorthand:e};for(let n of t.matchers){let t=e.match(n.pattern);if(t===null)continue;let r=n.replacement,i=1;for(let e of n.replacementPatterns)r=r.replaceAll(e,t[i]??``),i+=1;return{matchedWord:e,replacement:r,shorthand:n.original}}}function R_(e,t){if(t.ignoreExact.has(e))return!0;for(let n of t.ignoreMatchers)if(n.pattern.test(e))return!0;return!1}function z_(e,t){return e===`internal`||typeof e==`boolean`?e:t}function B_(e){if(!x(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r==`boolean`&&(t[n]=r);return t}function V_(e,t){return typeof e==`boolean`?e:t}function H_(e){let t=x(e)?e:void 0,n=B_(t?.allowList),r=v_(V_(t?.extendDefaultAllowList,!0),n===void 0?l_:{...l_,...n},n??{});return new Map(Object.entries(r))}function U_(e){if(!x(e))return{};let t={};for(let[n,r]of Object.entries(e)){if(r===!1){t[n]=!1;continue}if(!x(r))continue;let e={};for(let[t,n]of Object.entries(r))typeof n==`boolean`&&(e[t]=n);t[n]=e}return t}function W_(e){let t=x(e)?e:void 0,n=V_(t?.extendDefaultReplacements,!0),r=U_(t?.replacements),i=new Set([...Object.keys(c_),...Object.keys(r)]),a=[];for(let e of i){let t=r[e],i=n?c_[e]??{}:{},o=t===!1?{}:v_(t===void 0,i,{...i,...t}),s=new Map(Object.entries(o));w_.set(s,F_(s)),a.push([e,s])}return new Map(a)}function G_(e){let t=x(e)?e:void 0,n=[];for(let e of u_)n.push(e);if(Array.isArray(t?.ignore))for(let e of t.ignore)(y(e)||e instanceof RegExp)&&n.push(e);return n.map(e=>e instanceof RegExp?e:new RegExp(e,`u`))}function K_(e){let t=x(e)?e:void 0,n=new Set(s_);if(!S(t?.allowPropertyAccess))return n;for(let e of t.allowPropertyAccess)n.add(e);return n}function q_(e){let t=x(e)?e:void 0,n=new Map,r=new Set,i=[],a=[],o=C(t?.shorthands)?t.shorthands:{},s={...o_,...o};for(let[e,t]of Object.entries(s)){let r=I_(e,t);r.type===`exact`?n.set(r.original,r.replacement):a.push(r.matcher)}if(S(t?.ignoreShorthands))for(let e of t.ignoreShorthands){let t=I_(e,``);t.type===`exact`?r.add(t.original):i.push(t.matcher)}return{exactMatchers:n,ignoreExact:r,ignoreMatchers:i,matchers:a}}function J_(e){let t=x(e)?e:void 0;return{allowList:H_(t),allowPropertyAccess:K_(t),checkDefaultAndNamespaceImports:z_(t?.checkDefaultAndNamespaceImports,`internal`),checkFilenames:V_(t?.checkFilenames,!0),checkProperties:V_(t?.checkProperties,!1),checkShorthandImports:z_(t?.checkShorthandImports,`internal`),checkShorthandProperties:V_(t?.checkShorthandProperties,!0),checkVariables:V_(t?.checkVariables,!0),ignore:G_(t),replacements:W_(t),shorthandConfiguration:q_(t)}}function Y_(e,t){if(T_(e)||t.allowList.get(e)===!0)return[];let n=t.replacements.get(O_(e))??t.replacements.get(e)??t.replacements.get(D_(e));if(n===void 0)return[];let r=w_.get(n);return r===void 0?[]:E_(e)?r.upperFirst:r.lowerFirst}function X_(e,t){if(e.length===0)return;let n=A_(e),r=[],i=!1;for(let e of n){let n=L_(e,t);n!==void 0&&(i=!0,r.push(n))}if(!i)return;let a=``,o=0;for(let e of n){let t=r[o];if(t?.matchedWord===e){a+=t.replacement,o+=1;continue}a+=e}return{matches:r,replaced:a}}function Z_(e,t){if(R_(e,t))return!0;let n=A_(e),r=!1;for(let e of n){let n=L_(e,t);if(n!==void 0&&(r=!0,!R_(n.matchedWord,t)))return!1}return r}function Q_(e,t,n){if(n.has(e))return!0;for(let e of t.matches)if(!n.has(e.matchedWord))return!1;return t.matches.length>0}function $_(e,t,n=3){if(t.allowList.get(e)===!0||t.ignore.some(t=>t.test(e)))return{total:0};let r=X_(e,t.shorthandConfiguration);if(r!==void 0)return Z_(e,t.shorthandConfiguration)?{total:0}:{samples:[r.replaced],total:1};if(T_(e))return{total:0};let i=Y_(e,t);if(i.length>0)return{samples:i.slice(0,n),total:i.length};let a=e.split(d_).filter(Boolean),o=!1,s=[],c=0;for(let e of a){let n=Y_(e,t);if(n.length>0){o=!0,s[c++]=n;continue}s[c++]=[e]}if(!o)return{total:0};let l=s.reduce((e,t)=>e*t.length,1);return{samples:ev(s,l,n).map(e=>e.join(``)),total:l}}function ev(e,t,n){let r=Math.min(t,n),i=Array.from({length:r},(t,n)=>{let r=n,i=[];for(let t=e.length-1;t>=0;--t){let n=e[t]??[],a=r%n.length;r=(r-a)/n.length;let o=n[a];o!==void 0&&i.unshift(o)}return i});for(let e of i)for(let t=e.length-1;t>0;--t){let n=e[t]??``;p_.test(n)&&e[t-1]?.endsWith(n)===!0&&e.splice(t,1)}return i}function tv(e,t){let n=t.replacements.get(e);if(n===void 0)return!1;let r=w_.get(n);return r!==void 0&&r.lowerFirst.length>0}function nv(e,t,n){let{samples:r=[],total:i}=t;if(i===1)return{data:{discouragedName:e,nameTypeText:n,replacement:r[0]??``},messageId:r_};let a=r.map(e=>`\`${e}\``).join(`, `),o=i-r.length;return o>0&&(a+=`, ... (${o>99?`99+`:o} more omitted)`),{data:{discouragedName:e,nameTypeText:n,replacementsText:a},messageId:i_}}function rv(e){let t=[e],n=1;for(let r of e.childScopes){let e=rv(r);for(let r of e)t[n++]=r}return t}function iv(e,t){return!t.some(t=>E(t,e)!==void 0)}function av(e,t,n){let r=e;if(!(!__(r)&&(r=`${r}_`,!__(r)))){for(;!(iv(r,t)&&n(r,t));)r=`${r}_`;return r}}function ov(e){let t=new Set;for(let n of e.identifiers)t.add(n);for(let{identifier:n}of e.references)t.add(n);return[...t]}function sv(e,t){return e.range[0]===t.range[0]&&e.range[1]===t.range[1]}function cv(e){let{parent:t}=e;return!ye(t)||t.local!==e?!1:sv(t.local,t.imported)}function lv(e){let{parent:t}=e;return!be(t)||t.local!==e?!1:sv(t.local,t.exported)}function uv(e){if(!A(e))return!1;let{parent:t}=e;return xe(t)&&t.shorthand&&t.value===e}function dv(e){if(!A(e))return!1;let{parent:t}=e;if(!$e(t)||t.left!==e)return!1;let n=t.parent;return xe(n)?n.shorthand:!1}function fv(e){if(!A(e))return!1;let{parent:t}=e;if(Ae(t)&&t.local===e||je(t)&&t.local===e)return!0;if(ye(t)&&t.local===e){let{imported:e}=t;if(j(e)&&e.name==="default")return!0}return k(t)&&t.id===e&&t.init!==null&&tt(t.init)}function pv(e){if(!A(e))return!1;let{parent:t}=e;if(k(t)&&t.id===e){let e=t.parent;return Me(e)?Ne(e.parent):!1}return Pe(t)&&t.id===e||Le(t)&&t.id===e||Re(t)&&t.id===e?Ne(t.parent):!1}function mv(e){return ov(e).every(e=>!(pv(e)||me(e)))}function hv(e,t,n){if(A(e))return uv(e)||dv(e)?n.replaceText(e,`${e.name}: ${t}`):cv(e)?n.replaceText(e,`${e.name} as ${t}`):lv(e)?n.replaceText(e,`${t} as ${e.name}`):n.replaceText(e,t)}function gv(e,t,n){let r=[],i=0;for(let a of ov(e)){let e=hv(a,t,n);e!==void 0&&(r[i++]=e)}return r}function _v(e){if(!A(e))return!1;let{parent:t}=e;if(M(t)&&t.property===e&&!t.computed){let e=t.parent;if(Se(e)&&e.left===t)return!0}return xe(t)&&t.key===e&&!t.computed&&!t.shorthand&&(qe(t.parent)||Je(t.parent))||ze(t)&&t.key===e&&!t.computed||be(t)&&t.exported===e&&t.local!==e?!0:(Oe(t)||ke(t))&&t.key===e&&!t.computed}function vv(e){if(!A(e))return!1;let{parent:t}=e;return xe(t)&&t.key===e&&!t.computed&&!t.shorthand&&(qe(t.parent)||Je(t.parent))}function yv(e){if(e.type===`ImportBinding`){let{parent:t}=e;if(t!==null&&ge(t)&&_e(t.source))return t.source.value}if(e.type===`Variable`){let{node:t}=e;if(k(t)&&t.init!==null&&tt(t.init)){let[e]=t.init.arguments;if(e!==void 0&&_e(e))return e.value}}}function bv(e){let t=yv(e);return t!==void 0&&!t.includes(`node_modules`)&&(t.startsWith(`.`)||t.startsWith(`/`))}function xv(e,t){return e===!1?!1:e!==`internal`||bv(t)}function Sv(e){return e.defs.length===1&&e.defs[0]?.type===`ClassName`}function Cv(e){return function(t,n){return n.every(n=>{let r=e.get(n);return r===void 0||!r.has(t)})}}function wv(e){let{parent:t}=e;return M(t)&&t.property===e&&!t.computed||Ue(t)&&t.right===e}function Tv(e,t){let{parent:n}=e,r;return M(n)&&n.property===e&&!n.computed?r=n.object:Ue(n)&&n.right===e&&(r=n.left),r===void 0||!A(r)?!1:E(t.getScope(e),r.name)?.defs[0]?.type===`ImportBinding`}function Ev(e,t,n,r){r({...nv(e.name,{samples:[t],total:1},n?`property`:`variable`),node:e})}function Dv(e,t,n){return fv(t)&&!xv(n.checkDefaultAndNamespaceImports,e)||cv(t)&&!xv(n.checkShorthandImports,e)?!0:!n.checkShorthandProperties&&uv(t)}function Ov(e){if(e.name!==`plr`)return;let[t]=e.defs;if(t?.type!==`Variable`||!k(t.node)||t.node.init===null)return;let{init:n}=t.node;if(M(n)&&!n.computed&&j(n.object)&&n.object.name===`Players`&&j(n.property)&&n.property.name===`LocalPlayer`)return`localPlayer`}function kv(e,t,n,r){let i=[],a=0,o=0;for(let s of e){let e=av(s,t,n);if(e!==void 0){if(e!==s&&tv(s,r)){o+=1;continue}e.length>0&&(i[a++]=e)}}return{droppedDiscouraged:o,safeSamples:i}}function Av(e,t,n){let r=e.type===`Variable`&&k(e.node)&&e.node.init===null,i=e.type===`Parameter`&&t.scope.type===`function`&&t.scope.block.type===`ArrowFunctionExpression`,a=r||i;return(e,t)=>!(!n(e,t)||a&&e===`arguments`)}function jv(e,t,n,r,i,a,o){for(let e of i)a.has(e)||a.set(e,new Set),a.get(e)?.add(r);e({...t,fix(e){return gv(n,r,e)},node:o})}function Mv(e,t,n,r,i){let[a]=e.defs;if(a===void 0)return;let o=a.name;if(!j(o)||Dv(a,o,t))return;let s=Av(a,e,r),c=Ov(e),l=c===void 0?$_(e.name,t):{samples:[c],total:1};if(l.total===0||!l.samples)return;let{references:u}=e,d=[...u.map(e=>e.from),e.scope],{droppedDiscouraged:f,safeSamples:p}=kv(l.samples,d,s,t),m=p.length>0?p:l.samples,h=b(l.samples.length)&&l.samples.length===l.total?Math.max(0,l.total-f):l.total,g=e.name===`fn`&&h>1?m.map(e=>e===`function_`?`function`:e):m,_=nv(o.name,{samples:g,total:h},`variable`);if(h===1&&p.length===1&&mv(e)){let[t]=p;if(t!==void 0){jv(i,_,e,t,d,n,o);return}}i({..._,node:o})}function Nv(e,t){if(!Sv(e)){t(e);return}if(e.scope.type===`class`){let[n]=e.defs;if(n===void 0){t(e);return}let r=n.name;if(!j(r)){t(e);return}t(e)}}function Pv(e,t){for(let n of rv(e))for(let e of n.variables)Nv(e,t)}function Fv(e,t,n,r){let i=_v(e),a=wv(e);a&&Tv(e,r)||Iv(e,i,a,t,n)||t.checkProperties&&i&&Lv(e,t,n)}function Iv(e,t,n,r,i){let a=X_(e.name,r.shorthandConfiguration);return a===void 0||!(t||n)?!1:(Z_(e.name,r.shorthandConfiguration)||!r.checkShorthandProperties||n&&Q_(e.name,a,r.allowPropertyAccess)||Ev(e,a.replaced,!0,i),!0)}function Lv(e,t,n){let r=$_(e.name,t);if(r.total===0)return;let i=nv(e.name,r,`property`),a=Rv(e,r.samples);if(a!==void 0){n({...i,fix(t){return t.replaceText(e,a)},node:e});return}n({...i,node:e})}function Rv(e,t){if(t?.length!==1||!vv(e))return;let[n]=t,{parent:r}=e;if(n!==void 0&&xe(r)&&_e(r.value)&&__(n))return n}const zv=t({create(e){let t=J_(e.options[0]),n=e.physicalFilename,r=new WeakMap,i=Cv(r),{sourceCode:a}=e;function o(n){Mv(n,t,r,i,e.report)}return{Identifier(n){!A(n)||n.name===`__proto__`||Fv(n,t,e.report,a)},JSXOpeningElement({name:n}){if(!(t.checkVariables&&me(n)&&E_(n.name)))return;let r=$_(n.name,t);if(r.total===0)return;let i=nv(n.name,r,`variable`);e.report({...i,node:n})},"Program:exit"(r){if(t.checkFilenames&&n!==`<input>`&&n!==`<text>`){let i=Math.max(n.lastIndexOf(`/`),n.lastIndexOf(`\\`)),a=n.slice(i+1),o=a.lastIndexOf(`.`),s=o===-1?``:a.slice(o),c=$_(o===-1?a:a.slice(0,o),t);if(c.total>0&&c.samples){let t=c.samples.map(e=>`${e}${s}`);e.report({...nv(a,{samples:t,total:c.total},`filename`),node:r})}}t.checkVariables&&Pv(a.getScope(r),o)}}},meta:{docs:{description:`Prevent abbreviations.`,recommended:!1},fixable:`code`,messages:{[r_]:`The {{nameTypeText}} \`{{discouragedName}}\` should be named \`{{replacement}}\`. ${a_}`,[i_]:`Please rename the {{nameTypeText}} \`{{discouragedName}}\`. Suggested names are: {{replacementsText}}. ${a_}`},schema:[{additionalProperties:!1,properties:{allowList:{additionalProperties:{type:`boolean`},type:`object`},allowPropertyAccess:{items:{type:`string`},type:`array`},checkDefaultAndNamespaceImports:{enum:[!1,!0,`internal`]},checkFilenames:{type:`boolean`},checkProperties:{type:`boolean`},checkShorthandImports:{enum:[!1,!0,`internal`]},checkShorthandProperties:{type:`boolean`},checkVariables:{type:`boolean`},extendDefaultAllowList:{type:`boolean`},extendDefaultReplacements:{type:`boolean`},ignore:{items:{oneOf:[{type:`object`},{type:`string`}]},type:`array`},ignoreShorthands:{items:{type:`string`},type:`array`},replacements:{additionalProperties:{oneOf:[{enum:[!1]},{additionalProperties:{type:`boolean`},type:`object`}]},type:`object`},shorthands:{additionalProperties:{type:`string`},type:`object`}},type:`object`}],type:`suggestion`}}),Bv=/^use[A-Z0-9].*$/u;function Vv(e){return Bv.test(e)}function Hv(e){if(e.id!==null)return e.id.name}function Uv(e){return e.id.type===`Identifier`?e.id.name:void 0}function Wv(e){let t=Hv(e);return t!==void 0&&Vv(t)}function Gv({parent:e}){if(e.type!==`VariableDeclarator`)return!1;let t=Uv(e);return t!==void 0&&Vv(t)}function Kv(e,t){let n=e.get(t);if(!(n===void 0||n.length===0))return n.at(-1)}function qv(e){for(let t=e.defs.length-1;t>=0;--t){let n=e.defs[t];if(!(n?.node.type!==`VariableDeclarator`||n.node.init?.type!==`ArrayExpression`))return n.node.init}}function Jv(e){for(let t=e.defs.length-1;t>=0;--t){let n=e.defs[t];if(n?.node.type===`VariableDeclarator`&&n.node.init?.type===`ObjectExpression`)return!0}return!1}function Yv(e,t,n,r){let i=E(e.getScope(t),n);if(i!==void 0){let e=qv(i);if(e!==void 0)return e}return Kv(r,n)}function Xv(e,t,n){if(e.argument.type===`Identifier`){let r=Yv(t,e,e.argument.name,n);return r===void 0?1:Zv(r,t,n)}return e.argument.type===`ArrayExpression`?Zv(e.argument,t,n):1}function Zv(e,t,n){let r=0;for(let i of e.elements){if(i===null){r+=1;continue}if(i.type===`SpreadElement`){r+=Xv(i,t,n);continue}r+=1}return r}function Qv(e,t){let n=E(e.getScope(t),t.name);return n!==void 0&&Jv(n)}function $v(e){let t=Uv(e);if(!(t===void 0||e.init?.type!==`ArrayExpression`))return{init:e.init,name:t}}function ey(e,t){let n=$v(e);if(n===void 0)return;let{init:r,name:i}=n,a=t.get(i)??[];a.push(r),t.set(i,a)}function ty(e,t){let n=$v(e);if(n===void 0)return;let{name:r}=n,i=t.get(r);i===void 0||i.length===0||(i.pop(),i.length===0&&t.delete(r))}const ny=t({create(e){let{sourceCode:t}=e,n=new Map,r=0;function i(e){Wv(e)&&(r+=1)}function a(e){Wv(e)&&--r}function o(e){Gv(e)&&(r+=1)}function s(e){Gv(e)&&--r}function c(t){e.report({data:{count:`2`},messageId:`tooManyReturnValues`,node:t})}function l(e){if(!(r===0||e.argument===null||e.argument.type===`ObjectExpression`)){if(e.argument.type===`Identifier`){if(Qv(t,e.argument))return;let r=Yv(t,e,e.argument.name,n);if(r===void 0)return;Zv(r,t,n)>2&&c(e);return}e.argument.type===`ArrayExpression`&&Zv(e.argument,t,n)>2&&c(e)}}return{ArrowFunctionExpression:o,"ArrowFunctionExpression:exit":s,FunctionDeclaration:i,"FunctionDeclaration:exit":a,FunctionExpression:i,"FunctionExpression:exit":a,ReturnStatement:l,VariableDeclarator(e){ey(e,n)},"VariableDeclarator:exit"(e){ty(e,n)}}},meta:{docs:{description:`Restrict React hooks to object returns or short tuples.`},messages:{tooManyReturnValues:`Hook returns more than {{count}} values. Return an object with named properties instead.`},schema:[],type:`suggestion`}});function ry(e){return e.endsWith(`Async`)}function iy(e){let{parent:t}=e;if(t.type!==`ObjectExpression`)return!1;let{parent:n}=t;return n.type===`CallExpression`||n.type===`NewExpression`?n.arguments.includes(t):!1}const ay=t({create(e){let t=e.options[0]?.except,n=t===void 0?new Set:new Set(t);function r(e){return ry(e)||n.has(e)}function i(t){r(t.name)||e.report({messageId:`missingAsyncSuffix`,node:t})}return{FunctionDeclaration(e){!e.async||e.id===null||i(e.id)},MethodDefinition(e){!e.value.async||e.key.type!==`Identifier`||i(e.key)},Property(e){!e.method||e.value.type!==`FunctionExpression`||!e.value.async||e.key.type===`Identifier`&&(iy(e)||i(e.key))},PropertyDefinition(e){e.value?.type!==`ArrowFunctionExpression`&&e.value?.type!==`FunctionExpression`||!e.value.async||e.key.type!==`Identifier`||i(e.key)},VariableDeclarator(e){e.id.type===`Identifier`&&(e.init?.type!==`ArrowFunctionExpression`&&e.init?.type!==`FunctionExpression`||e.init.async&&i(e.id))}}},meta:{docs:{description:`Require async function names to end with Async.`},messages:{missingAsyncSuffix:`Async functions must have names that end with Async.`},schema:[{additionalProperties:!1,properties:{except:{items:{type:`string`},type:`array`}},type:`object`}],type:`problem`}});function oy(e){if(!(x(e)&&`classes`in e&&x(e.classes)))return new Map;let{classes:t}=e,n=new Map;for(let[e,r]of Object.entries(t))y(r)&&n.set(e,r);return n}function sy(e){return e?.type===`module`||e?.type===`global`}function cy(e){if(e.type===`ImportDefaultSpecifier`)return e.local.name;if(e.type===`ImportSpecifier`){if(e.imported.type===`Identifier`)return e.imported.name;if(y(e.imported.value))return e.imported.value}}function ly(e,t,n){if(e.callee.type===`Identifier`){let r=t.get(e.callee.name);if(r===void 0)return;let i=n.get(r);return i===void 0?void 0:{className:r,importSource:i}}if(e.callee.type===`MemberExpression`&&e.callee.property.type===`Identifier`){let t=e.callee.property.name,r=n.get(t);return r===void 0?void 0:{className:t,importSource:r}}}function uy(e,t,n){if(!y(e.source.value))return;let r=e.source.value;for(let[i,a]of t)if(a===r)for(let t of e.specifiers)cy(t)===i&&n.set(t.local.name,i)}const dy=t({create(e){let{sourceCode:t}=e,n=oy(e.options[0]);if(n.size===0)return{};let r=new Map;return{ImportDeclaration(e){uy(e,n,r)},NewExpression(i){let a=ly(i,r,n);a!==void 0&&(sy(t.getScope(i))||e.report({data:{className:a.className,importSource:a.importSource},messageId:`mustBeModuleLevel`,node:i}))}}},meta:{docs:{description:`Require configured classes to be instantiated at module level only.`},messages:{mustBeModuleLevel:`'{{className}}' from '{{importSource}}' must be instantiated at module level only.`},schema:[{additionalProperties:!1,properties:{classes:{additionalProperties:{type:`string`},type:`object`}},type:`object`}],type:`problem`}}),fy=[{allowAsync:!1,name:`useEffect`},{allowAsync:!1,name:`useLayoutEffect`},{allowAsync:!1,name:`useInsertionEffect`}];function py(e){return x(e)&&y(e.name)&&typeof e.allowAsync==`boolean`}function my(e){if(!x(e))return{environment:`roblox-ts`,hooks:fy};let t=hn(e.environment)?e.environment:`roblox-ts`,n=e.hooks;if(!Array.isArray(n))return{environment:t,hooks:fy};let r=[];for(let e of n)py(e)&&r.push(e);return r.length===0?{environment:t,hooks:fy}:{environment:t,hooks:r}}function hy(e){for(let t of e.defs){let{node:e}=t;if(e.type===`FunctionDeclaration`)return{isAsync:e.async,node:e,type:`function-declaration`};if(e.type===`VariableDeclarator`){if(e.init===null)continue;if(e.init.type===`ArrowFunctionExpression`)return{isAsync:e.init.async,node:e.init,type:`arrow`};if(e.init.type===`FunctionExpression`)return{isAsync:e.init.async,node:e.init,type:`function-expression`}}}}function gy(e,t){let n=E(e.getScope(t),t.name);if(n===void 0)return!1;for(let e of n.defs){let{node:t}=e;if(t.type!==`VariableDeclarator`||t.init?.type!==`CallExpression`)continue;let n=L(t.init);if(n===`useCallback`||n===`useMemo`)return!0}return!1}const _y=t({create(e){let{environment:t,hooks:n}=my(e.options[0]),r=new Map(n.map(e=>[e.name,e.allowAsync])),i=new Set(r.keys()),a=t===`roblox-ts`;function o(e){let t=r.get(e);return typeof t==`boolean`&&t}function s(t,n,r){e.report({data:{hook:t},messageId:r,node:n})}function c(t,n,r){let i=E(e.sourceCode.getScope(r),r.name);if(i===void 0){gy(e.sourceCode,r)&&s(t,n,`identifierReferencesCallback`);return}let a=hy(i);if(a===void 0){gy(e.sourceCode,r)&&s(t,n,`identifierReferencesCallback`);return}l(t,n,a)}function l(e,t,n){if(n.type===`arrow`){n.isAsync&&!o(e)?s(e,t,`identifierReferencesAsyncArrow`):n.isAsync||s(e,t,`identifierReferencesArrow`);return}if(n.type===`function-expression`){u(e,t,n.node);return}n.isAsync&&!o(e)&&s(e,t,`identifierReferencesAsyncFunction`)}function u(e,t,n){n.id===null?s(e,t,`anonymousFunction`):a&&s(e,t,`functionExpression`)}function d(e,t,n){let r=n.id!==null;r&&n.async?s(e,t,`asyncFunctionExpression`):r&&a?s(e,t,`functionExpression`):!r&&n.async?s(e,t,`asyncAnonymousFunction`):r||s(e,t,`anonymousFunction`)}return{CallExpression(e){let t=L(e);if(t===void 0||!i.has(t))return;let[n]=e.arguments;if(n!==void 0){if(n.type===`Identifier`){c(t,e,n);return}if(n.type===`ArrowFunctionExpression`){n.async?s(t,e,`asyncArrowFunction`):s(t,e,`arrowFunction`);return}n.type===`FunctionExpression`&&d(t,e,n)}}}},meta:{docs:{description:`Enforce named effect functions for better debuggability. Prevents inline arrow functions in useEffect and similar hooks.`,recommended:!1},messages:{anonymousFunction:`Anonymous function passed to {{hook}}. debug.info returns empty string for anonymous functions, making stack traces useless for debugging. Extract to: function effectName() { ... } then pass effectName.`,arrowFunction:`Arrow function passed to {{hook}}. Arrow functions have no debug name and create new instances each render. Extract to: function effectName() { ... } then pass effectName.`,asyncAnonymousFunction:`Async anonymous function in {{hook}}. Two issues: (1) no debug name makes stack traces useless, (2) async effects require cancellation logic for unmount. Extract to: async function effectName() { ... } with cleanup.`,asyncArrowFunction:`Async arrow function in {{hook}}. Two issues: (1) arrow functions have no debug name, (2) async effects require cancellation logic. Extract to: async function effectName() { ... } with cleanup.`,asyncFunctionDeclaration:`Async function declaration passed to {{hook}}. Async effects require cancellation logic to handle component unmount. Implement cleanup or set allowAsync: true if cancellation is handled.`,asyncFunctionExpression:`Async function expression in {{hook}}. Async effects require cancellation logic for unmount. Extract to a named async function declaration with cleanup, then pass the reference.`,functionExpression:`Function expression passed to {{hook}}. Function expressions create new instances each render, breaking referential equality. Extract to: function effectName() { ... } at module or component top-level.`,identifierReferencesArrow:`{{hook}} receives identifier pointing to arrow function. Arrow functions have no debug name and lack referential stability. Convert to: function effectName() { ... } then pass effectName.`,identifierReferencesAsyncArrow:`{{hook}} receives identifier pointing to async arrow function. Two issues: (1) no debug name, (2) async effects require cancellation logic. Convert to: async function effectName() { ... } with cleanup.`,identifierReferencesAsyncFunction:`{{hook}} receives identifier pointing to async function. Async effects require cancellation logic for unmount. Implement cleanup or set allowAsync: true if cancellation is handled.`,identifierReferencesCallback:`{{hook}} receives identifier from useCallback/useMemo. These hooks return new references when dependencies change, causing unexpected effect re-runs. Use a stable function declaration: function effectName() { ... }`},schema:[{additionalProperties:!1,properties:{environment:{default:`roblox-ts`,description:`Environment mode: 'roblox-ts' only allows identifiers, 'standard' allows both identifiers and named function expressions`,enum:[`roblox-ts`,`standard`],type:`string`},hooks:{description:`Array of hook configuration objects with name and allowAsync settings`,items:{additionalProperties:!1,properties:{allowAsync:{description:`Whether async functions are allowed for this hook`,type:`boolean`},name:{description:`Hook name to check`,type:`string`}},required:[`name`,`allowAsync`],type:`object`},type:`array`}},type:`object`}],type:`problem`}});h({"alternatives?":h(`string[]`).readonly().or(`undefined`),closer:h(`string[]`).readonly().or(`string`),opener:`string`,"openerAlternatives?":h(`string[]`).readonly().or(`undefined`),"platform?":h(`"roblox" | undefined`),"requireSync?":`boolean | undefined`,"yieldingFunctions?":h(`string[]`).readonly().or(`undefined`)}).readonly();const vy=new Set([`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`WhileStatement`]),yy=[`task.wait`,`wait`,`*.WaitForChild`,`*.*Async`];function by(e,t){for(let n of t){let t=!1;for(let r of n)if(r.index===e.index){t=!0;break}if(!t)return!1}return!0}function xy(e,t){return t.filter(t=>t.some(t=>t.index===e.index))}function Sy({callee:e}){if(e.type===`Identifier`)return e.name;if(e.type===`MemberExpression`){let t=e.object.type===`Identifier`?e.object.name:void 0,n=e.property.type===`Identifier`?e.property.name:void 0;if(t!==void 0&&n!==void 0)return`${t}.${n}`}}function Q(e){let t=[];if(S(e.closer)?t.push(...e.closer):y(e.closer)&&t.push(e.closer),e.alternatives)for(let n of e.alternatives)t.push(n);return t}function Cy(e){let t=[e.opener];return e.openerAlternatives&&t.push(...e.openerAlternatives),t}function wy(e){return e.length===0?`configured opener`:e.length===1?e[0]??`configured opener`:e.join(`' or '`)}function Ty(e){return e?vy.has(e.type):!1}function Ey(e){return e?.type===`SwitchStatement`}function Dy(e,t){if(e.type!==`Identifier`)return;let n=t;for(;n;){if(n.type===`LabeledStatement`&&n.label.name===e.name)return n.body;n=n.parent??void 0}}function Oy(e,t){let n=e.label?Dy(e.label,e.parent):void 0;if(n)return Ty(n)?n:void 0;let r=e.parent;for(;r;){if(Ty(r))return r;if(t&&Ey(r))return;r=r.parent??void 0}}function ky(e){return Oy(e,!0)}function Ay(e){return Oy(e,!1)}function jy(e){return{...e,loopAncestors:[...e.loopAncestors]}}const My=t({create(e){let[t]=e.options,n={allowConditionalClosers:t?.allowConditionalClosers??!1,allowMultipleOpeners:t?.allowMultipleOpeners??!0,maxNestingDepth:t?.maxNestingDepth??1/0,pairs:t?.pairs??[]},r=n.pairs.length===0?[{closer:`debug.profileend`,opener:`debug.profilebegin`,platform:`roblox`,requireSync:!0,yieldingFunctions:[...yy]}]:n.pairs,i={...n.allowConditionalClosers===void 0?{}:{allowConditionalClosers:n.allowConditionalClosers},...n.allowMultipleOpeners===void 0?{}:{allowMultipleOpeners:n.allowMultipleOpeners},...n.maxNestingDepth===void 0?{}:{maxNestingDepth:n.maxNestingDepth},pairs:r},a=[],o=[],s=0,c=[],l=!1,u=!1,d=[],f=new Map,p=new Map,m=new Map;function h(e){if(m.has(e))return m.get(e)??[];let t=[],n=0;for(let r of i.pairs){if(!Cy(r).includes(e))continue;let i=Q(r);for(let e of i)t.includes(e)||(t[n++]=e)}return m.set(e,t),t}function g(){return d.length>0?d.at(-1):{asyncContext:!1,currentFunction:void 0,hasEarlyExit:!1,inCatch:!1,inConditional:!1,inFinally:!1,inLoop:!1,inTry:!1}}function _(e){let t=g();d.push({...t,...e})}function v(){d.pop()}function ee(e){let t=d.at(-1);t&&(d[d.length-1]={...t,...e})}function te(){return a.map(jy)}function y(e){f.set(e,te())}function b(e,t){return i.pairs.find(n=>(t?Cy(n):Q(n)).includes(e))}function x(e,t){return t.platform===`roblox`&&(t.yieldingFunctions??yy).some(t=>{if(t.startsWith(`*.`)){let n=t.slice(2);return e.endsWith(`.${n}`)}return e===t})}function ne(e){let t=Q(e);return t.length===1?t[0]??`closer`:t.join(`' or '`)}function S(t,n){e.report({data:{closer:ne(t.config),opener:t.opener,paths:n},messageId:`unpairedOpener`,node:t.node})}function C(e){a.length=0;for(let t of e)a.push({...t})}function re(e){let t=p.get(e)??[];t.push(te()),p.set(e,t)}function w(e,t,n){for(let r of e){let e=xy(r,t);e.length<=0||e.length>=t.length||i.allowConditionalClosers===!1&&S(r,n)}}function T(e){e.type!==`FunctionDeclaration`&&e.type!==`FunctionExpression`&&e.type!==`ArrowFunctionExpression`||(c.push([...a]),a.length=0,l=!1,u=!1,_({asyncContext:e.async,currentFunction:e,hasEarlyExit:!1,inCatch:!1,inConditional:!1,inFinally:!1,inLoop:!1,inTry:!1}))}function E(){if(a.length>0)for(let e of a)S(e,`function exit`);let e=c.pop();e?(a.length=0,a.push(...e)):a.length=0,v()}function ie(e){e.type===`IfStatement`&&(_({inConditional:!0}),y(e))}function ae(e){if(e.type!==`IfStatement`)return;v();let t=f.get(e),n=p.get(e);if(t&&n&&n.length>0){let r=e.alternate!==null;for(let e of n)for(let n of e)t.some(({index:e})=>e===n.index)||S(n,`conditional branch`);if(r){w(t,n,`not all execution paths`);let e=t.filter(e=>by(e,n));a.length=0,a.push(...e)}else C(t)}f.delete(e),p.delete(e)}function oe(e){let{parent:t}=e;if(t?.type===`IfStatement`){re(t);let e=f.get(t);if(!e)return;C(e)}}function D(e){let{parent:t}=e;t?.type===`IfStatement`&&re(t)}function se(e){e.type===`TryStatement`&&y(e)}function O(t){if(t.type!==`TryStatement`)return;let n=f.get(t),r=p.get(t);if(t.finalizer){f.delete(t),p.delete(t);return}if(n&&r&&r.length>0){for(let t of n){let n=r.filter(e=>e.some(e=>e.index===t.index));if(n.length>0&&n.length<r.length&&i.allowConditionalClosers===!1){let n=Q(t.config),r=n.length===1?n[0]??`closer`:n.join(`' or '`);e.report({data:{closer:r,opener:t.opener,paths:`not all execution paths`},messageId:`unpairedOpener`,node:t.node})}}let t=n.filter(e=>by(e,r));a.length=0,a.push(...t)}f.delete(t),p.delete(t)}function k(){_({inTry:!0})}function ce(e,t){if(e.type!==t)return;let{parent:n}=e;if(n.type===`TryStatement`){re(n);let e=f.get(n);e&&C(e)}v()}function le(e){ce(e,`BlockStatement`)}function ue(){_({inCatch:!0})}function de(e){ce(e,`CatchClause`)}function fe(){_({inFinally:!0})}function pe(e){e.type===`SwitchStatement`&&(_({inConditional:!0}),y(e))}function A(e){if(e.type!==`SwitchStatement`)return;v();let t=f.get(e),n=p.get(e);if(t&&n&&n.length>0)if(e.cases.some(e=>e.test===null)&&n.length===e.cases.length){w(t,n,`not all execution paths`);let e=t.filter(e=>by(e,n));a.length=0,a.push(...e)}else C(t);f.delete(e),p.delete(e)}function j(e){if(e.type!==`SwitchCase`)return;let{parent:t}=e;if(t.type===`SwitchStatement`){re(t);let e=f.get(t);if(!e)return;C(e)}}function me(e){Ty(e)&&(o.push(e),_({inLoop:!0}))}function he(){o.length>0&&o.pop(),v()}function ge(t){if(ee({hasEarlyExit:!0}),!(g().inFinally||a.length===0))for(let{config:n,node:r,opener:i}of a){let a=Q(n),o=a.length===1?a[0]??`closer`:a.join(`' or '`),s=t.type===`ReturnStatement`?`return`:`throw`;e.report({data:{closer:o,opener:i,paths:`${s} at line ${t.loc.start.line}`},messageId:`unpairedOpener`,node:r})}}function _e(t){if(t.type!==`BreakStatement`&&t.type!==`ContinueStatement`||a.length===0)return;let n=t.type===`ContinueStatement`?Ay(t):ky(t);if(n)for(let{config:r,loopAncestors:i,node:o,opener:s}of a){if(!i.some(e=>e===n))continue;let a=Q(r),c=a.length===1?a[0]??`closer`:a.join(`' or '`),l=t.type===`BreakStatement`?`break`:`continue`,u=t.loc.start.line;e.report({data:{closer:c,opener:s,paths:`${l} at line ${u}`},messageId:`unpairedOpener`,node:o})}}function ve(t,n,r){let c=i.maxNestingDepth??0;c>0&&a.length>=c&&e.report({data:{max:String(c)},messageId:`maxNestingExceeded`,node:t}),i.allowMultipleOpeners===!1&&a.length>0&&a.at(-1)?.opener===n&&e.report({data:{opener:n},messageId:`multipleOpeners`,node:t});let l={config:r,index:s++,location:t.loc,loopAncestors:[...o],node:t,opener:n};a.push(l)}function ye(t,n){let r=a.findLastIndex(e=>Q(e.config).includes(n));if(r===-1){if(l&&!u){u=!0;return}if(a.length===0){e.report({data:{closer:n},messageId:`unpairedCloser`,node:t});return}let r=wy(h(a.at(-1).opener));e.report({data:{closer:n,expected:r},messageId:`unexpectedCloser`,node:t});return}let i=a[r];if(i){if(r!==a.length-1){let r=a.at(-1);r&&e.report({data:{actual:r.opener,closer:n,expected:i.opener},messageId:`wrongOrder`,node:t})}a.splice(r,1)}}function be(t,n,r){let i=Q(r.config),a=i.length===1?i[0]??`closer`:i.join(`' or '`);e.report({data:{closer:a,yieldingFunction:n},messageId:`robloxYieldViolation`,node:t})}function xe(t){if(!(t.type!==`AwaitExpression`&&t.type!==`YieldExpression`&&t.type!==`ForOfStatement`))for(let{config:n,opener:r}of a){if(n.requireSync!==!0)continue;let i=Q(n),a=i.length===1?i[0]??`closer`:i.join(`' or '`),o=t.type===`YieldExpression`?`yield`:`await`;e.report({data:{asyncType:o,closer:a,opener:r},messageId:`asyncViolation`,node:t})}}function M(e){if(e.type!==`CallExpression`)return;let t=Sy(e);if(t===void 0||t===``)return;let n=b(t,!0);if(n){ve(e,t,n);return}if(b(t,!1)){ye(e,t);return}for(let n of a)if(x(t,n.config)){be(e,t,n),a.length=0,l=!0;return}}return{ArrowFunctionExpression:T,"ArrowFunctionExpression:exit":E,AwaitExpression:xe,BreakStatement:_e,CallExpression:M,CatchClause:ue,"CatchClause:exit":de,ContinueStatement:_e,DoWhileStatement:me,"DoWhileStatement:exit":he,ForInStatement:me,"ForInStatement:exit":he,ForOfStatement:e=>{e.await&&xe(e),me(e)},"ForOfStatement:exit":he,ForStatement:me,"ForStatement:exit":he,FunctionDeclaration:T,"FunctionDeclaration:exit":E,FunctionExpression:T,"FunctionExpression:exit":E,IfStatement:ie,"IfStatement > .alternate:exit":D,"IfStatement > .consequent:exit":oe,"IfStatement:exit":ae,ReturnStatement:ge,"SwitchCase:exit":j,SwitchStatement:pe,"SwitchStatement:exit":A,ThrowStatement:ge,TryStatement:se,"TryStatement > .block":k,"TryStatement > .block:exit":le,"TryStatement > .finalizer":fe,"TryStatement > .finalizer:exit":v,"TryStatement:exit":O,WhileStatement:me,"WhileStatement:exit":he,YieldExpression:xe}},meta:{docs:{description:`Enforces balanced opener/closer function calls across all execution paths`,recommended:!1},fixable:`code`,messages:{asyncViolation:`Cannot use {{asyncType}} between '{{opener}}' and '{{closer}}' (requireSync: true)`,conditionalOpener:`Conditional opener '{{opener}}' at {{location}} may not have matching closer on all paths`,maxNestingExceeded:`Maximum nesting depth of {{max}} exceeded for paired calls`,multipleOpeners:`Multiple consecutive calls to '{{opener}}' without matching closers (allowMultipleOpeners: false)`,robloxYieldViolation:`Yielding function '{{yieldingFunction}}' auto-closes all profiles - subsequent '{{closer}}' will error`,unexpectedCloser:`Unexpected call to '{{closer}}' - expected one of: {{expected}}`,unpairedCloser:`Unexpected call to '{{closer}}' - no matching opener on stack`,unpairedOpener:`Unpaired call to '{{opener}}' - missing '{{closer}}' on {{paths}}`,wrongOrder:`Closer '{{closer}}' called out of order - expected to close '{{expected}}' but '{{actual}}' is still open`},schema:[{additionalProperties:!1,properties:{allowConditionalClosers:{default:!1,type:`boolean`},allowMultipleOpeners:{default:!0,type:`boolean`},maxNestingDepth:{default:0,minimum:0,type:`number`},pairs:{items:{additionalProperties:!1,properties:{alternatives:{items:{minLength:1,type:`string`},type:`array`},closer:{oneOf:[{minLength:1,type:`string`},{items:{minLength:1,type:`string`},minItems:1,type:`array`}]},opener:{minLength:1,type:`string`},openerAlternatives:{items:{minLength:1,type:`string`},type:`array`},platform:{enum:[`roblox`],type:`string`},requireSync:{default:!1,type:`boolean`},yieldingFunctions:{items:{minLength:1,type:`string`},type:`array`}},required:[`opener`,`closer`],type:`object`},minItems:1,type:`array`}},required:[`pairs`],type:`object`}],type:`problem`}}),Ny={allowRootKeys:!1,ignoreCallExpressions:[`ReactTree.mount`,`CreateReactStory`,`createReactStory`,`createPlatformStory`],iterationMethods:[`map`,`filter`,`forEach`,`flatMap`,`reduce`,`reduceRight`,`some`,`every`,`find`,`findIndex`],memoizationHooks:[`useCallback`,`useMemo`]},Py=new Set([`ChainExpression`,`ParenthesizedExpression`,`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]),Fy=new Set([...Py,`AwaitExpression`,`ConditionalExpression`,`LogicalExpression`,`SequenceExpression`,`SpreadElement`]),Iy={iteration:!1,memoization:!1},Ly=new Set([`ConditionalExpression`,`LogicalExpression`]),Ry=new Set([`BlockStatement`,`CatchClause`,`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`IfStatement`,`LabeledStatement`,`SwitchCase`,`SwitchStatement`,`TryStatement`,`WhileStatement`,`WithStatement`]);function $(e){return e.parent??void 0}function zy(e){let t=e;for(;t!==void 0&&Py.has(t.type);)t=$(t);return t}function By(e){let t=$(e);for(;t!==void 0;){if(N(t))return t;t=$(t)}}function Vy(e,t,n){let{callee:r}=e;if(r.type===`Identifier`)return{iteration:t.has(r.name),memoization:n.has(r.name)};if(r.type===`MemberExpression`&&r.property.type===`Identifier`){let{name:i}=r.property,a={iteration:t.has(i),memoization:n.has(i)};return i===`from`&&r.object.type===`Identifier`&&r.object.name===`Array`&&e.arguments.length>=2||i===`call`&&r.object.type===`MemberExpression`&&r.object.property.type===`Identifier`&&t.has(r.object.property.name)?{...a,iteration:!0}:a}return Iy}function Hy(e){let t=e,n=$(e);for(;n!==void 0;){if(n.type===`CallExpression`){for(let e of n.arguments)if(e===t||e.type===`SpreadElement`&&e.argument===t)return n;return}if(Fy.has(n.type)){t=n,n=$(n);continue}break}}function Uy(e,t){if(t.type===`FunctionDeclaration`){let n=e.getDeclaredVariables(t);return n.length>0?n[0]:void 0}let n=$(t);if(n!==void 0&&(n.type===`VariableDeclarator`||n.type===`AssignmentExpression`)){let t=e.getDeclaredVariables(n);if(t.length>0)return t[0]}}function Wy(e,t){e.iteration||=t.iteration,e.memoization||=t.memoization}function Gy(e,t,n){if(e.isWrite())return Iy;let r=Hy(e.identifier);return r===void 0||Oo(r)?Iy:Vy(r,t,n)}function Ky(e,t,n,r){let i=Hy(t);if(i!==void 0)return Oo(i)?Iy:Vy(i,n,r);let a=Uy(e,t);if(a===void 0)return Iy;let o={iteration:!1,memoization:!1};for(let e of a.references)if(Wy(o,Gy(e,n,r)),o.iteration&&o.memoization)return o;return o}function qy(e){let t=Jy(e);return t===void 0?!1:t.type===`ReturnStatement`?Xy(t):t.type===`ArrowFunctionExpression`}function Jy(e){let t=Yy(zy($(e)));for(;t!==void 0&&Ly.has(t.type);)t=zy($(t));return Yy(t)}function Yy(e){return e?.type===`JSXExpressionContainer`?zy($(e)):e}function Xy(e){let t=zy($(e));for(;t!==void 0&&Ry.has(t.type);)t=zy($(t));return t!==void 0&&N(t)}function Zy(e){if(!qy(e))return!1;let t=By(e);if(t===void 0)return!1;let n=zy($(t));return n?.type!==`CallExpression`||Oo(n)}function Qy(e,t){let n=$(e);if(n===void 0||n.type===`JSXExpressionContainer`&&(n=$(n),n===void 0))return!1;for(let e=0;e<20&&n!==void 0;e+=1){if(n.type===`CallExpression`){let{callee:e}=n;return e.type===`Identifier`?t.includes(e.name):e.type===`MemberExpression`&&e.object.type===`Identifier`&&e.property.type===`Identifier`&&t.includes(`${e.object.name}.${e.property.name}`)}n=$(n)}return!1}function $y(e){return e.toLowerCase().endsWith(`children`)}function eb(e){let t=$(e);if(t===void 0)return!1;for(;t!==void 0&&(t.type===`ConditionalExpression`||t.type===`LogicalExpression`);)t=$(t);if(t===void 0||t.type===`JSXExpressionContainer`&&(t=$(t),t===void 0)||t.type!==`JSXAttribute`)return!1;let n=ko(t);return n===void 0||!$y(n)}function tb(e){let t=e,n=$(e);for(;n!==void 0&&Py.has(n.type);)t=n,n=$(n);return n===void 0?!1:n.type===`VariableDeclarator`?n.init===t:n.type===`AssignmentExpression`&&n.right===t}function nb(e,t){let n=$(e);if(n===void 0)return!1;let r=!1;for(;n!==void 0&&(n.type===t||Py.has(n.type));)n.type===t&&(r=!0),n=$(n);if(!r||n?.type!==`JSXExpressionContainer`)return!1;let i=$(n);return i===void 0?!1:i.type===`JSXElement`||i.type===`JSXFragment`}function rb(e){return nb(e,`ConditionalExpression`)}function ib(e){return nb(e,`LogicalExpression`)}const ab=t({create(e){let[t]=e.options,n={allowRootKeys:Ny.allowRootKeys,ignoreCallExpressions:Ny.ignoreCallExpressions,iterationMethods:Ny.iterationMethods,memoizationHooks:Ny.memoizationHooks,...t},r=new Set(n.iterationMethods),i=new Set(n.memoizationHooks);function a(t){let a=By(t),o=a===void 0?Iy:Ky(e.sourceCode,a,r,i),s=o.iteration||o.memoization;if(Zy(t)&&!s){!n.allowRootKeys&&t.type===`JSXElement`&&Ao(t,`key`)&&e.report({messageId:`rootComponentWithKey`,node:t});return}if(!Qy(t,n.ignoreCallExpressions)&&!(tb(t)||eb(t)||rb(t))&&!(t.type===`JSXFragment`&&ib(t))&&!(t.type===`JSXFragment`&&o.memoization&&!o.iteration&&qy(t))){if(t.type===`JSXFragment`){e.report({messageId:`missingKey`,node:t});return}Ao(t,`key`)||e.report({messageId:`missingKey`,node:t})}}return{JSXElement:a,JSXFragment:a}},meta:{docs:{description:`Require keys on React components when used in lists or iteration.`},messages:{missingKey:"JSX element in list/callback lacks key prop. React Luau warns about missing keys in _G.__DEV__ mode. Add a unique `key` prop using a stable identifier (not array index).",rootComponentWithKey:"Root return has unnecessary key prop. The key gets overwritten by the parent anyway. Remove the `key` prop."},schema:[{additionalProperties:!1,properties:{allowRootKeys:{default:!1,description:`Allow key props on root component returns`,type:`boolean`},ignoreCallExpressions:{default:[`ReactTree.mount`],description:`Function calls where JSX arguments don't need keys`,items:{type:`string`},type:`array`},iterationMethods:{default:Ny.iterationMethods,description:`Array method names that indicate iteration contexts where keys are required`,items:{type:`string`},type:`array`},memoizationHooks:{default:[`useCallback`,`useMemo`],description:`Hook names that indicate memoization contexts where keys are required`,items:{type:`string`},type:`array`}},type:`object`}],type:`problem`}});function ob(e){if(e.id.type===`Identifier`)return e.id.name}function sb(e,t,n){return de(e,t,n,`memo`)}function cb(e,t,n){return e.callee.type===`Identifier`?t.has(e.callee.name):e.callee.type!==`MemberExpression`||e.callee.property.type!==`Identifier`||e.callee.property.name!==`createContext`||e.callee.object.type!==`Identifier`?!1:n.has(e.callee.object.name)}function lb(e){let t=e;for(;t!==null;){if(t.type===`ExportNamedDeclaration`||t.type===`ExportDefaultDeclaration`)return!0;t=t.parent}return!1}function ub(e){return e.parent.type===`VariableDeclaration`?e.parent.parent.type===`ExportNamedDeclaration`||e.parent.parent.type===`ExportDefaultDeclaration`:!1}function db(e,t,n){for(let r of e.getDeclaredVariables(t))if(r.name===n){for(let{identifier:e}of r.references)if(lb(e))return!0;return!1}return!1}function fb(e,t,n,r){return r.has(t)||ub(n)?!0:db(e,n,t)}function pb(e,t,n){e.report({data:{variableName:n},messageId:t.kind===`context`?`missingContextDisplayName`:`missingMemoDisplayName`,node:t.node})}const mb=t({create(e){let t=yn(e.options[0]),n=new Set,r=new Set,i=new Set,a=new Map,o=new Set;return{'AssignmentExpression[left.type="MemberExpression"]'(e){let{left:t}=e;if(t.type!==`MemberExpression`||t.property.type!==`Identifier`||t.property.name!==`displayName`||t.object.type!==`Identifier`)return;let n=a.get(t.object.name);n!==void 0&&(n.hasDisplayName=!0)},ExportDefaultDeclaration(t){if(t.declaration.type===`CallExpression`){if(sb(t.declaration,n,i)){e.report({messageId:`directMemoExport`,node:t});return}cb(t.declaration,r,i)&&e.report({messageId:`directContextExport`,node:t});return}t.declaration.type===`Identifier`&&o.add(t.declaration.name)},ExportNamedDeclaration(e){for(let t of e.specifiers)t.exported.type!==`Identifier`||t.exported.name!=="default"||t.local.type!==`Identifier`||o.add(t.local.name)},ImportDeclaration(e){if(bn(e,t))for(let t of e.specifiers){if(t.type===`ImportSpecifier`){let e=pe(t);e===`memo`&&n.add(t.local.name),e===`createContext`&&r.add(t.local.name);continue}i.add(t.local.name)}},"Program:exit"(){for(let[t,n]of a)n.hasDisplayName||fb(e.sourceCode,t,n.node,o)&&pb(e,n,t)},VariableDeclarator(e){if(e.init?.type!==`CallExpression`)return;let t=ob(e);if(t!==void 0){if(sb(e.init,n,i)){a.set(t,{hasDisplayName:!1,kind:`memo`,node:e});return}cb(e.init,r,i)&&a.set(t,{hasDisplayName:!1,kind:`context`,node:e})}}}},meta:{docs:{description:`Require displayName on exported memo components and contexts.`},messages:{directContextExport:`Directly exporting createContext() result prevents setting displayName.`,directMemoExport:`Directly exporting memo() result prevents setting displayName.`,missingContextDisplayName:`Context '{{variableName}}' must have a displayName assigned.`,missingMemoDisplayName:`Memo component '{{variableName}}' must have a displayName assigned.`},schema:[{additionalProperties:!1,properties:{environment:mn},type:`object`}],type:`problem`}});function hb(e){return x(e)&&e.metric===`statements`?`statements`:`lines`}function gb(e,t){let n=e.consequent.length;if(n===0)return!1;let[r]=e.consequent;if(r===void 0||n===1&&r.type===`BlockStatement`)return!1;if(t===`statements`)return n>1;let i=e.consequent[n-1];return i!==void 0&&r.loc.start.line!==i.loc.end.line}const _b=t({create(e){let t=hb(e.options[0]);return{SwitchCase(n){if(!gb(n,t))return;let[r]=n.consequent,i=n.consequent.at(-1);r===void 0||i===void 0||e.report({fix(e){return[e.insertTextBefore(r,`{
11
11
  `),e.insertTextAfter(i,`
12
- }`)]},messageId:`wrapCaseBody`,node:r})}}},meta:{docs:{description:`Require braces around switch case bodies that span multiple lines.`},fixable:`code`,messages:{wrapCaseBody:`Wrap this switch case body in braces.`},schema:[{additionalProperties:!1,properties:{metric:{default:`lines`,enum:[`lines`,`statements`],type:`string`}},type:`object`}],type:`problem`}});function Zy(e){let t=e.parent;for(;t!==null;){switch(t.type){case`FunctionDeclaration`:return t.id?.name;case`FunctionExpression`:return t.id?t.id.name:Qy(t);case`ArrowFunctionExpression`:return Qy(t);default:break}t=t.parent}}function Qy({parent:e}){if(e?.type===`VariableDeclarator`&&e.id.type===`Identifier`)return e.id.name;if(e?.type===`PropertyDefinition`||e?.type===`MethodDefinition`){if(e.key.type===`PrivateIdentifier`)return`#${e.key.name}`;if(e.key.type===`Identifier`)return e.key.name}}function $y(e){let t=e.parent;for(;t!==null;){switch(t.type){case`FunctionDeclaration`:return!1;case`FunctionExpression`:return(t.parent?.type===`MethodDefinition`||t.parent?.type===`PropertyDefinition`)&&t.parent.parent?.type===`ClassBody`;case`ArrowFunctionExpression`:return t.parent?.type===`PropertyDefinition`&&t.parent.parent?.type===`ClassBody`;default:break}t=t.parent}return!1}function eb(e,t,n){try{let r=e.getScope(t),i=new Set(r.variables.map(e=>e.name)),a=t.parent;for(;a!==null;)a.type===`CatchClause`&&a.param?.type===`Identifier`&&i.add(a.param.name),a=a.parent;if(!i.has(n))return n;for(let e=2;e<100;e+=1){let t=`${n}${e}`;if(!i.has(t))return t}}catch{}return n}function tb(e,t){try{let n=e.getScope(t);for(;n!==null;){let e=n.set.get(t.name);if(e!==void 0){let t=e.defs.find(e=>e.type===`ImportBinding`);return t?.parent?.type===`ImportDeclaration`?t.parent.source.value:void 0}n=n.upper}}catch{}}function nb(e,t){try{let n=e.getScope(t);for(;n!==null;){if(n.set.has(t.name))return!0;n=n.upper}}catch{}return!1}function rb(e,t){return y(e)?t===e:(Array.isArray(e.name)?e.name:[e.name]).includes(t)}function ib(e,t,n,r){if(!rb(r,n.name))return!1;if(y(r))return!0;switch(r.from){case void 0:return!0;case`package`:return tb(e,n)===r.package;case`file`:return nb(e,n)&&tb(e,n)===void 0?r.path===void 0?!0:t===`<input>`||t===`<text>`?!1:t.endsWith(r.path):!1;case`library`:return e.isGlobalReference(n);default:return!1}}function ab(e,t,n,r){return r.some(r=>ib(e,t,n,r))}const ob=t({create(e){let{sourceCode:t}=e,n=e.options[0]?.allow??[],r=e.physicalFilename??`<input>`;return{ThrowStatement(i){let{argument:a}=i;if(a.type!==`NewExpression`)return;let{callee:o}=a;if(o.type!==`Identifier`||!o.name.endsWith(`Error`)||ab(t,r,o,n))return;let s=Zy(i);if(s===void 0)return;let c=$y(i)?`this.${s}`:s;e.report({fix(e){let n=eb(t,i,`error`),r=[`const ${n} = ${t.getText(a)};`,`Error.captureStackTrace(${n}, ${c});`,`throw ${n};`].join(`
13
- `);return i.parent?.type===`BlockStatement`?e.replaceText(i,r):e.replaceText(i,`{\n${r}\n}`)},messageId:`missingCaptureStackTrace`,node:i})}}},meta:{docs:{description:`Require 'Error.captureStackTrace' before throwing errors to produce accurate stack traces.`,recommended:!1},fixable:`code`,messages:{missingCaptureStackTrace:`Call 'Error.captureStackTrace' on this error before throwing it so the stack trace points to the throw site.`},schema:[{additionalProperties:!1,properties:{allow:{description:`Error classes that do not need Error.captureStackTrace`,items:{anyOf:[{type:`string`},{additionalProperties:!1,properties:{from:{description:`Where the error class is declared`,enum:[`file`,`library`,`package`],type:`string`},name:{anyOf:[{type:`string`},{items:{type:`string`},type:`array`}],description:`Name(s) of the error class`},package:{description:`Package the error class is imported from (required when from is 'package')`,type:`string`},path:{description:`Optional file path filter for file specifiers (matched against the end of the file path)`,type:`string`}},required:[`name`],type:`object`}]},type:`array`}},type:`object`}],type:`suggestion`}});function sb(e){return e.includes(`u`)||e.includes(`v`)}function cb(e,t){return e.type===`Identifier`&&e.name===t}function lb(e){if(!(e.type!==`Literal`||!y(e.value)))return e.value}function ub(e){return e.type!==`SpreadElement`}const db=t({createOnce(e){return{CallExpression(t){if(!cb(t.callee,`regex`))return;if(t.arguments.length<2){e.report({messageId:`requireUnicodeFlag`,node:t});return}let[,n]=t.arguments;if(n===void 0||!ub(n))return;let r=lb(n);r!==void 0&&(sb(r)||e.report({messageId:`requireUnicodeFlag`,node:t}))}}},meta:{docs:{description:`Require the 'u' or 'v' unicode flag on arktype regex() calls.`},messages:{requireUnicodeFlag:`Missing the 'u' or 'v' unicode flag on this regex() call. Use the unicode flag to avoid silently creating invalid regex patterns.`},schema:[],type:`problem`}});function fb(e,t){t.type===`ObjectExpression`&&t.properties.length===0&&e.report({messageId:`emptyObjectDefault`,node:t}),t.type===`ArrayExpression`&&t.elements.length===0&&e.report({messageId:`emptyArrayDefault`,node:t})}function pb(e,t){for(let n of t){if(n.type===`AssignmentPattern`&&n.left.type===`ObjectPattern`){mb(e,n.left),D(n.right)&&fb(e,n.right);continue}n.type===`ObjectPattern`&&mb(e,n)}}function mb(e,t){for(let n of t.properties){let t=hb(n);t!==void 0&&fb(e,t)}}function hb(e){if(e.type!==`Property`||e.value.type!==`AssignmentPattern`)return;let t=e.value.right;return D(t)?t:void 0}function gb(e){if(!(e.type!==`FunctionDeclaration`||!lo(e)))return[...e.params]}function _b(e){if(!(e.type!==`VariableDeclarator`||!vo(e)||e.init===null)&&!(e.init.type!==`ArrowFunctionExpression`&&e.init.type!==`FunctionExpression`))return[...e.init.params]}const vb=t({create(e){return{FunctionDeclaration(t){let n=gb(t);n!==void 0&&pb(e,n)},VariableDeclarator(t){let n=_b(t);n!==void 0&&pb(e,n)}}},meta:{docs:{description:`Prevent inline empty object and array defaults in component prop destructuring.`,recommended:!0},messages:{emptyArrayDefault:`Default prop value [] creates a new array reference every render — extract to a module-level constant`,emptyObjectDefault:`Default prop value {} creates a new object reference every render — extract to a module-level constant`},type:`problem`}}),yb=/(?<first>[\p{Ll}\d])(?<second>\p{Lu})/gu,bb=/(?<first>\p{Lu})(?<second>\p{Lu}\p{Ll})/gu,xb=`$<first>\0$<second>`;function Sb(e){let t=e.trim();if(t.length===0)return``;let n=t.replace(yb,xb).replace(bb,xb),r=0,{length:i}=n;for(;n.charCodeAt(r)===0;)r+=1;if(r===i)return``;for(;n.charCodeAt(i-1)===0;)--i;let a=``,o=r;for(let e=r;e<=i;e+=1)if(!(e!==i&&n.charCodeAt(e)!==0)){if(e>o){let t=n.slice(o,e),r=t.charCodeAt(0);a.length>0&&r>=48&&r<=57&&(a+=`_`),a+=t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}o=e+1}return a}function Cb(e){return e.split(`/`).filter(e=>!e.startsWith(`.`))}function wb(e){return e.split(`/`).filter(e=>e===`..`).length}function Tb(e){return e.some(e=>e===Sb(e)&&!e.includes(`.`))}function Eb(e){return r.basename(e,r.extname(e))===`index`}function Db(e){if(!e.includes(`fixtures`))return!1;let t=e.indexOf(`fixtures`);return!Tb(e.slice(0,t))}const Ob=t({create(e){let t=e.options?.[0],{allow:n=[],maxDepth:i=1}=typeof t==`object`&&t?t:{allow:[],maxDepth:1},a=n.map(e=>new RegExp(e,`u`));return{ImportDeclaration(t){let n=t.source.value;if(!(y(n)&&n.startsWith(`.`))||a.some(e=>e.test(n)))return;let{filename:o}=e;if(o===``)return;let s=Qs(n,o);if(!s.found)return;let c=r.relative(o,s.path).replaceAll(`\\`,`/`),l=Cb(c);if((wb(c)>1||l.includes(`components`))&&Tb(l)&&l.length>i&&!Eb(c)&&!Db(l)){e.report({messageId:`noReachingIntoComponent`,node:t});return}l.includes(`components`)&&l.length>i+1&&!Eb(c)&&!Db(l)&&e.report({messageId:`noReachingIntoComponent`,node:t})}}},meta:{docs:{description:`Prevent module imports between components.`},messages:{noReachingIntoComponent:`Do not reach into an individual component's folder for nested modules. Import from the closest shared components folder instead.`},schema:[{additionalProperties:!1,properties:{allow:{items:{type:`string`},type:`array`},maxDepth:{type:`integer`}},type:`object`}],type:`problem`}}),kb=new Set([`ArrayExpression`,`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`,`ObjectExpression`]),Ab=new Map([[`useCallback`,{closureIndex:0,dependenciesIndex:1}],[`useEffect`,{closureIndex:0,dependenciesIndex:1}],[`useImperativeHandle`,{closureIndex:1,dependenciesIndex:2}],[`useInsertionEffect`,{closureIndex:0,dependenciesIndex:1}],[`useLayoutEffect`,{closureIndex:0,dependenciesIndex:1}],[`useMemo`,{closureIndex:0,dependenciesIndex:1}],[`useSpring`,{closureIndex:0,dependenciesIndex:1}],[`useSprings`,{closureIndex:1,dependenciesIndex:2}],[`useTrail`,{closureIndex:1,dependenciesIndex:2}]]),jb=new Map([[`useBinding`,!0],[`useReducer`,new Set([1])],[`useRef`,!0],[`useState`,new Set([1])],[`useTransition`,new Set([1])]]),Mb=new Set([`ClassDeclaration`,`FunctionDeclaration`,`FunctionName`,`ImportBinding`]),Nb=new Set(`Array.BigInt.Boolean.clearInterval.clearTimeout.console.Date.decodeURI.decodeURIComponent.Document.Element.encodeURI.encodeURIComponent.Error.Event.Exclude.Extract.Function.Infinity.InstanceType.isFinite.isNaN.JSON.Map.Math.NaN.Node.NonNullable.null.Number.Object.Omit.Parameters.parseFloat.parseInt.Partial.Pick.Promise.Readonly.ReadonlyArray.ReadonlyMap.ReadonlySet.Record.RegExp.Required.ReturnType.Set.setInterval.setTimeout.String.Symbol.undefined.WeakMap.WeakSet.Window`.split(`.`));function Pb(e){let{callee:t}=e;if(t.type===`Identifier`)return t.name;if(t.type===`MemberExpression`&&t.property.type===`Identifier`)return t.property.name}function Fb(e){let t=0,n=e;for(;;){if(n.type===`ChainExpression`||n.type===`ParenthesizedExpression`||n.type===`TSAsExpression`||n.type===`TSNonNullExpression`||n.type===`TSSatisfiesExpression`||n.type===`TSTypeAssertion`){n=n.expression;continue}if(n.type!==`MemberExpression`)break;t+=1,n=n.object}return t}function Ib(e){let t=e;for(;;){if(t.type===`ChainExpression`||t.type===`ParenthesizedExpression`||t.type===`TSAsExpression`||t.type===`TSNonNullExpression`||t.type===`TSSatisfiesExpression`||t.type===`TSTypeAssertion`){t=t.expression;continue}if(t.type!==`MemberExpression`)break;t=t.object}return t.type===`Identifier`?t:void 0}function Lb(e){return e.type===`Identifier`?[e.name]:e.type===`MemberExpression`?Lb(e.object):e.type===`ChainExpression`||e.type===`ParenthesizedExpression`||e.type===`TSNonNullExpression`||e.type===`TSAsExpression`||e.type===`TSSatisfiesExpression`||e.type===`TSTypeAssertion`?Lb(e.expression):e.type===`BinaryExpression`||e.type===`LogicalExpression`?[...Lb(e.left),...Lb(e.right)]:e.type===`UnaryExpression`?Lb(e.argument):e.type===`ConditionalExpression`?[...Lb(e.test),...Lb(e.consequent),...Lb(e.alternate)]:[]}function Rb(e){return Qb.has(e.type)}function zb(e,t){if(e.type===`Identifier`)return e.name;if(e.type===`ChainExpression`||e.type===`ParenthesizedExpression`||Rb(e))return zb(e.expression,t);if(e.type===`MemberExpression`){let n=zb(e.object,t);if(e.computed)return`${n}[${t.getText(e.property)}]`;let r=e.property.type===`Identifier`?e.property.name:``;return`${n}${e.optional?`?.`:`.`}${r}`}return t.getText(e)}function Bb(e,t){return e.type===`VariableDeclarator`&&e.id.type===t}function Vb(e,t,n){if(e===void 0||!(e instanceof Set&&Bb(t,`ArrayPattern`)))return!1;let{elements:r}=t.id,i=0;for(let t of r){if((t?.type===`Identifier`?t.name:void 0)===n)return e.has(i);i+=1}return!1}function Hb(e,t,n){if(e===void 0||!(e instanceof Set&&Bb(t,`ObjectPattern`)))return!1;for(let r of t.id.properties){if(r.type!==`Property`||Gr(r)?.name!==n)continue;let t=Wr(r);return t!==void 0&&e.has(t)}return!1}function Ub(e,t,n,r){if(e?.type!==`CallExpression`)return!1;let i=Pb(e);if(i===void 0)return!1;let a=r.get(i);return a===!0||Vb(a,t,n)||Hb(a,t,n)}function Wb(e){if(e?.type!==`CallExpression`)return!1;let{callee:t}=e;return t.type===`MemberExpression`&&t.object.type===`Identifier`&&t.object.name===`React`&&t.property.type===`Identifier`&&t.property.name===`joinBindings`}function Gb(e){if(e?.type!==`CallExpression`)return!1;let{callee:t}=e;return t.type===`MemberExpression`&&t.property.type===`Identifier`&&t.property.name===`map`}function Kb(e){return e?.type===`Literal`||e?.type===`TemplateLiteral`||e?.type===`UnaryExpression`&&e.argument.type===`Literal`}function qb(e,t){let n=e.defs.find(e=>e.node===t);if(n?.node.type!==`VariableDeclarator`)return!1;let r=n.node.parent.parent;return r?.type===`Program`||r?.type===`ExportNamedDeclaration`}function Jb(e,t,n,r){let{node:i,type:a}=t;if(Mb.has(a))return!0;if(a!==`Variable`||i.type!==`VariableDeclarator`)return!1;let{parent:o}=i;if(o.type!==`VariableDeclaration`||o.kind!==`const`)return!1;let{init:s}=i;return Ub(s,i,n,r)||Wb(s)||Gb(s)||Kb(s)||qb(e,i)}function Yb(e,t,n){if(!e)return!1;let r=e.defs;if(r.length===0)return!1;for(let i of r)if(Jb(e,i,t,n))return!0;return!1}function Xb(e,t){let n=t,r=e;for(;n;){if(n.type===`CallExpression`&&n.callee===r){if(r.type===`MemberExpression`)return r.object;break}let e=n.type===`MemberExpression`&&n.object===r,t=n.type===`ChainExpression`,i=n.type===`TSNonNullExpression`;if(!(e||t||i))break;r=n,n=r.parent??void 0}return r}const Zb=new Set([`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`,`VariableDeclarator`]),Qb=new Set([`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]);function $b(e){if(e.type!==`Identifier`)return!1;let{parent:t}=e;return t.type===`Property`&&t.computed&&t.key===e}function ex(e){if(e.type!==`Identifier`)return!1;let t=e.parent??void 0;for(;t;){if(Qb.has(t.type)){t=t.parent??void 0;continue}if(t.type.startsWith(`TS`))return!0;if(Zb.has(t.type))return!1;t=t.parent??void 0}return!1}function tx(e,t){let n=t.parent??void 0;for(;n;){if(N(n)){let t=n;return e.defs.some(e=>e.type===`Parameter`&&e.node===t)?!0:e.defs.some(e=>{let n=e.node.parent??void 0;for(;n&&n!==t;)n=n.parent??void 0;return n===t})}n=n.parent??void 0}return!1}function nx(e,t){if(e.type!==`Identifier`)return;let n,r=t;for(;r;){let t=r.set.get(e.name);if(t){n=t;break}r=r.upper}if(!(!n||n.defs.length===0))for(let e of n.defs){let t=e.node;if(t.type===`FunctionDeclaration`)return t;if(t.type===`VariableDeclarator`&&t.init&&(t.init.type===`ArrowFunctionExpression`||t.init.type===`FunctionExpression`))return t.init}}function rx(e,t){let n=t;for(;n;){let t=n.set.get(e);if(t)return t;n=n.upper}}function ix(e,t){let n=e.node;for(;n;){if(n===t)return!0;n=n.parent??void 0}return!1}function ax(e,t){return e!==void 0&&!e.defs.some(e=>ix(e,t))}function ox(e,t,n,r){let i=Xb(e,e.parent??void 0);return{depth:Fb(i),forceDependency:$b(e),name:t,node:i,usagePath:zb(i,r),variable:n}}function sx(e){return e.type===`ParenthesizedExpression`||e.type===`TSSatisfiesExpression`||e.type===`TSAsExpression`||e.type===`TSTypeAssertion`||e.type===`TSNonNullExpression`}function cx(e,t,n){let r=t.visitorKeys[e.type]??[];for(let t of r){if(!x(e))break;let r=e[t];if(Array.isArray(r))for(let e of r)D(e)&&n(e);else D(r)&&n(r)}}function lx(e,t){let n=[],r=new Set;function i(i){if(i.type!==`Identifier`)return;let{name:a}=i;if(r.has(a)||Nb.has(a)||ex(i))return;let o=rx(a,t.getScope(i));ax(o,e)&&o!==void 0&&tx(o,e)&&(r.add(a),n.push(ox(i,a,o,t)))}function a(e){if(e.type===`Identifier`&&i(e),sx(e)){a(e.expression);return}if(e.type===`MemberExpression`){a(e.object),e.computed&&a(e.property);return}if(e.type===`ChainExpression`){a(e.expression);return}if(e.type===`Property`){e.computed&&a(e.key),a(e.value);return}cx(e,t,a)}return a(e),n}function ux(e,t){let n=[];for(let r of e.elements){if(!r)continue;let e=r.type===`SpreadElement`?r.argument:r,i=zb(e,t),a=Fb(e);n.push({depth:a,name:i,node:e})}return n}function dx({name:e}){return e}function fx(e){return e?kb.has(e.type):!1}function px(e,{parent:t}){return t.type===`VariableDeclarator`?e.variable?.defs.some(e=>e.node===t)??!1:!1}function mx(e){return e.length>0&&b(e[0])}function hx(e){return e.length>0&&y(e[0])}function gx(e){return typeof e==`boolean`?e:b(e)?new Set([e]):Array.isArray(e)&&(mx(e)||hx(e))?new Set(e):!1}function _x(e,t,n,r){let i=[],a=0;for(let{name:e}of t)e!==n.name&&(i[a++]=e);let o=`[${i.join(`, `)}]`;e.report({data:{name:n.name},fix(e){return e.replaceText(r,o)},messageId:`unnecessaryDependency`,node:n.node,suggest:[{data:{name:n.name},fix(e){return e.replaceText(r,o)},messageId:`removeDependencySuggestion`}]})}function vx(e){return e!==void 0&&N(e)}function yx(e,t){return e.filter(e=>e.forceDependency||!Yb(e.variable,e.name,t))}function bx(e,t,n,r){if(r.length===0)return;let i=[...new Set(r.map(dx))].join(`, `),a=`[${[...new Set(r.map(({usagePath:e})=>e))].toSorted().join(`, `)}]`;e.report({data:{deps:i},fix(e){return e.insertTextAfter(n,`, ${a}`)},messageId:`missingDependenciesArray`,node:t,suggest:[{data:{dependencies:a},fix(e){return e.insertTextAfter(n,`, ${a}`)},messageId:`addDependenciesArraySuggestion`}]})}function xx(e){let t=Ib(e);return t?.type===`Identifier`?t.name:void 0}function Sx(e,t){let n=xx(t.node);return n===void 0?[]:e.filter(e=>xx(e.node)===n)}function Cx(e,t){return e.length>0&&e.every(e=>!e.forceDependency&&Yb(e.variable,e.name,t))}function wx(e,t,n,r,i,a,o){for(let s of t){let c=Sx(n,s);if(c.length===0){a&&_x(e,t,s,r);continue}if(o&&Cx(c,i)){_x(e,t,s,r);continue}let l=Math.max(...c.map(({depth:e})=>e));a&&s.depth>l&&_x(e,t,s,r)}}function Tx(e,t,n){let r=Ib(e.node);if(r?.type===`Identifier`&&e.depth<=t.depth)return r.name===xx(t.node);if(!n)return!1;let i=xx(t.node);return i!==void 0&&Lb(e.node).includes(i)}function Ex(e,t,n,r){let i=[];for(let a of yx(e,n))xx(a.node)!==void 0&&(t.some(e=>Tx(e,a,r))||i.push(a));return i}function Dx(e,t,n,r){if(r.length===0)return;let i=n.map(({name:e})=>e),a=r.map(({usagePath:e})=>e),o=`[${[...i,...a].toSorted().join(`, `)}]`,s=n.at(-1)?.node??t,c=r.at(0);if(r.length===1&&c!==void 0){e.report({data:{name:c.usagePath},fix(e){return e.replaceText(t,o)},messageId:`missingDependency`,node:s,suggest:[{data:{name:c.usagePath},fix(e){return e.replaceText(t,o)},messageId:`addDependencySuggestion`}]});return}e.report({data:{names:a.join(`, `)},fix(e){return e.replaceText(t,o)},messageId:`missingDependencies`,node:s,suggest:[{fix(e){return e.replaceText(t,o)},messageId:`addMissingDependenciesSuggestion`}]})}function Ox(e){let t=e.variable?.defs[0];return t?.node.type===`VariableDeclarator`?t.node.init??void 0:void 0}function kx(e,t,n,r){for(let i of yx(t,r)){let t=xx(i.node);if(t!==void 0){for(let r of n)if(xx(r.node)===t&&r.depth===i.depth){r.depth===0&&fx(Ox(i))&&e.report({data:{name:i.usagePath},messageId:`unstableDependency`,node:r.node});break}}}}const Ax=t({create(e){let[t]=e.options,n={hooks:t?.hooks??[],reportMissingDependenciesArray:t?.reportMissingDependenciesArray??!0,reportUnnecessaryDependencies:t?.reportUnnecessaryDependencies??!0,reportUnnecessaryStableDependencies:t?.reportUnnecessaryStableDependencies??!1,resolveExpressionDependencies:t?.resolveExpressionDependencies??!0},r=new Map(Ab);for(let e of n.hooks)e.closureIndex===void 0||e.dependenciesIndex===void 0||r.set(e.name,{closureIndex:e.closureIndex,dependenciesIndex:e.dependenciesIndex});let i=new Map(jb);for(let e of n.hooks)e.stableResult!==void 0&&i.set(e.name,gx(e.stableResult));let a=new WeakMap;function o(t){let n=a.get(t);if(n)return n;let r=e.sourceCode.getScope(t);return a.set(t,r),r}function s(e,t){if(e.type===`ArrowFunctionExpression`)return e;if(!(N(e)||e.type===`Identifier`))return;let n=nx(e,o(t));return vx(n)?n:void 0}return{CallExpression(t){let a=Pb(t);if(a===void 0||a===``)return;let o=r.get(a);if(!o)return;let{closureIndex:c,dependenciesIndex:l}=o,u=t.arguments,d=u[c];if(d===void 0)return;let f=s(d,t);if(!f)return;let p=u[l];if(!p&&n.reportMissingDependenciesArray){bx(e,t,d,yx(lx(f,e.sourceCode).filter(e=>!px(e,t)),i));return}if(!p||p.type!==`ArrayExpression`)return;let m=p,h=lx(f,e.sourceCode).filter(e=>!px(e,t)),g=ux(m,e.sourceCode);(n.reportUnnecessaryDependencies||n.reportUnnecessaryStableDependencies)&&wx(e,g,h,m,i,n.reportUnnecessaryDependencies,n.reportUnnecessaryStableDependencies),Dx(e,m,g,Ex(h,g,i,n.resolveExpressionDependencies)),kx(e,h,g,i)}}},meta:{docs:{description:`Enforce exhaustive and correct dependency specification in React hooks to prevent stale closures and unnecessary re-renders`},fixable:`code`,hasSuggestions:!0,messages:{addDependenciesArraySuggestion:`Add dependencies array: {{dependencies}}`,addDependencySuggestion:`Add '{{name}}' to dependencies array`,addMissingDependenciesSuggestion:`Add missing dependencies to array`,missingDependencies:`This hook does not specify all its dependencies. Missing: {{names}}`,missingDependenciesArray:`This hook does not specify its dependencies array. Missing: {{deps}}`,missingDependency:`This hook does not specify its dependency on {{name}}.`,removeDependencySuggestion:`Remove '{{name}}' from dependencies array`,unnecessaryDependency:`This dependency {{name}} can be removed from the list.`,unstableDependency:`{{name}} changes on every re-render. Wrap the definition in useCallback() or useMemo() to stabilize it.`},schema:[{additionalProperties:!1,properties:{hooks:{description:`Array of custom hook entries to check for exhaustive dependencies`,items:{additionalProperties:!1,properties:{closureIndex:{description:`Index of the closure argument for dependency validation`,type:`number`},dependenciesIndex:{description:`Index of the dependencies array for validation`,type:`number`},name:{description:`The name of the hook`,type:`string`},stableResult:{description:`Specify stable results: true (whole result), number (array index), number[] (multiple indices), or string[] (object properties)`,oneOf:[{type:`boolean`},{type:`number`},{items:{type:`number`},type:`array`},{items:{type:`string`},type:`array`}]}},required:[`name`],type:`object`},type:`array`},reportMissingDependenciesArray:{default:!0,description:`Report when the dependencies array is completely missing`,type:`boolean`},reportUnnecessaryDependencies:{default:!0,description:`Report when unnecessary dependencies are specified`,type:`boolean`},reportUnnecessaryStableDependencies:{default:!1,description:`Report when stable values (useRef, useState setter, etc.) are included as dependencies`,type:`boolean`},resolveExpressionDependencies:{default:!0,description:"Recognize expression dependencies like `value !== undefined` as covering a capture",type:`boolean`}},type:`object`}],type:`problem`}}),jx=/^use[A-Z]/u;function Mx(e){return jx.test(e)}function Nx(e){return x(e)?e:{}}function Px(e){if((e.type===`FunctionDeclaration`||e.type===`FunctionExpression`)&&e.id!==null)return O(e.id.name)||Mx(e.id.name);let{parent:t}=e;return t.type===`VariableDeclarator`&&j(t.id)?O(t.id.name)||Mx(t.id.name):t.type===`Property`&&j(t.key)||t.type===`MethodDefinition`&&j(t.key)?O(t.key.name)||Mx(t.key.name):!1}function Fx(e){let t=L(e);return t!==void 0&&Mx(t)}function Ix(e){let t=e.parent,n=!1;for(let r=0;r<20&&t!==null&&!N(t);r+=1){if(t.type===`TryStatement`){let r=e;for(;r!==null&&r!==t;){if(r===t.finalizer){n=!0;break}r=r.parent}break}t=t.parent}return n}function Lx(e,t){return t!==void 0&&e.callee.type===`Identifier`&&`name`in e.callee&&e.callee.name===t}function Rx(e,t){return{afterEarlyReturn:!1,functionDepth:t,inConditional:!1,inLoop:!1,inNestedFunction:!1,inTryBlock:!1,isComponentOrHook:!1,...e}}function zx(e){if(e.type===`FunctionDeclaration`||e.type===`FunctionExpression`)return e.id?.name??void 0}function Bx(e){return j(e)?e.name:void 0}function Vx(e,t,n,r){if(n===void 0||Object.keys(n).length===0)return!1;let i=Hx(t,n);if(i!==void 0)return i;let a=t.callee.type===`Identifier`?r.get(e):void 0;return a!==void 0&&n[a]===!1?!0:(a!==void 0&&n[a],!1)}function Hx(e,t){if(e.callee.type!==`MemberExpression`)return;let n=Bx(e.callee.object);if(n!==void 0&&t[n]===!1)return!0;if(n!==void 0&&t[n]===!0)return!1}const Ux=e({meta:{name:`small-rules`},rules:{"array-type-generic":te,"ban-instances":ut,"ban-react-fc":mt,"ban-types":vt,"directive-disable-enable-pair":Kt,"directive-no-aggregating-enable":qt,"directive-no-duplicate-disable":Jt,"directive-no-restricted-disable":Yt,"directive-no-unlimited-disable":Xt,"directive-no-unused-enable":Zt,"directive-no-use":Qt,"directive-require-description":tn,"enforce-ianitor-check-type":pn,"memoized-effect-dependencies":Ln,"no-array-constructor-elements":mr,"no-array-constructor-index-assignment":wr,"no-array-size-assignment":Pr,"no-async-constructor":ai,"no-async-in-system":gi,"no-cascading-set-state":vi,"no-color3-constructor":Si,"no-commented-code":la,"no-constant-condition-with-break":Ua,"no-error":Ga,"no-events-in-events-callback":so,"no-giant-component":So,"no-god-components":Ao,"no-ianitor-in-function-body":Mo,"no-ianitor-success-access":Ro,"no-identity-map":qo,"no-increment-decrement":Yo,"no-inline-property-on-memo-component":Qo,"no-instance-methods-without-this":os,"no-native-properties-spread":As,"no-new-instance-in-use-memo":Gs,"no-print":Ks,"no-recursive":Ys,"no-redundant-aspect-ratio-constraint":dc,"no-render-helper-functions":Oc,"no-restricted-property-assignment":zc,"no-spec-file-extension":Vc,"no-static-react-create-element":tl,"no-table-create-map":il,"no-task-wait":ol,"no-underscore-react-props":sl,"no-unused-imports":_l,"no-unused-use-memo":vl,"no-use-memo-simple-expression":bl,"no-useless-constants":Hl,"no-useless-default":ku,"no-useless-use-effect":cf,"no-useless-use-memo":mf,"no-useless-use-spring":Sf,"no-warn":Cf,"only-type-imports":wf,"prefer-class-properties":Af,"prefer-constant-dispatch":Bf,"prefer-context-stack":Cp,"prefer-early-return":Op,"prefer-expect-assertions":$p,"prefer-hoisted-jsx-elements":dm,"prefer-hoisted-jsx-object-properties":ym,"prefer-idiv":Sm,"prefer-local-portal-component":Nm,"prefer-math-min-max":Wm,"prefer-modding-inspect":Ym,"prefer-module-scope-constants":Qm,"prefer-padding-components":mh,"prefer-pascal-case-enums":Ch,"prefer-sequence-overloads":kh,"prefer-single-world-query":Yh,"prefer-singular-enums":cg,"prefer-ternary-conditional-rendering":Tg,"prefer-udim2-shorthand":Ng,"prefer-use-reducer":Fg,"prevent-abbreviations":vv,"react-hooks-strict-return":Fv,"require-async-suffix":Rv,"require-module-level-instantiation":Wv,"require-named-effect-functions":Xv,"require-paired-calls":dy,"require-react-component-keys":Ry,"require-react-display-names":qy,"require-switch-case-braces":Xy,"require-throw-error-capture":ob,"require-unicode-regex":db,"rerender-memo-with-default-value":vb,"strict-component-boundaries":Ob,"use-exhaustive-dependencies":Ax,"use-hook-at-top-level":t({create(e){let t=Nx(e.options[0]),n=[],r=[],i,a=new Map;function o(){return n.length>0?n.at(-1):void 0}function s(e){n.push(e)}function c(){n.pop()}function l(e){let t=o();t!==void 0&&(n[n.length-1]={...t,...e})}function u(e,n){let{ignoreHooks:r,importSources:i,onlyHooks:o}=t;return o!==void 0&&o.length>0?!o.includes(e):r?.includes(e)===!0||Vx(e,n,i,a)}function d(e){let t=o(),n=t===void 0?0:t.functionDepth+1,a=Px(e);r.push(i);let c=zx(e);c!==void 0&&(i=c),t?.isComponentOrHook===!0?s(Rx({functionDepth:n,inNestedFunction:!0},n)):a&&s(Rx({functionDepth:n,isComponentOrHook:!0},n))}function f(){o()!==void 0&&c(),i=r.pop()}return{ArrowFunctionExpression:d,"ArrowFunctionExpression:exit":f,CallExpression(t){if(!Fx(t))return;let n=L(t);if(n===void 0||u(n,t))return;let r=o();if(!(r===void 0||!(r.isComponentOrHook||r.inNestedFunction)||Ix(t))){if(Lx(t,i)){e.report({messageId:`recursiveHookCall`,node:t});return}if(r.inNestedFunction){e.report({messageId:`nestedFunction`,node:t});return}if(r.inConditional){e.report({messageId:`conditionalHook`,node:t});return}if(r.inLoop){e.report({messageId:`loopHook`,node:t});return}if(r.inTryBlock){e.report({messageId:`tryBlockHook`,node:t});return}r.afterEarlyReturn&&e.report({messageId:`afterEarlyReturn`,node:t})}},ConditionalExpression(){l({inConditional:!0})},"ConditionalExpression:exit"(){l({inConditional:!1})},DoWhileStatement(){l({inLoop:!0})},"DoWhileStatement:exit"(){l({inLoop:!1})},ForInStatement(){l({inLoop:!0})},"ForInStatement:exit"(){l({inLoop:!1})},ForOfStatement(){l({inLoop:!0})},"ForOfStatement:exit"(){l({inLoop:!1})},ForStatement(){l({inLoop:!0})},"ForStatement:exit"(){l({inLoop:!1})},FunctionDeclaration:d,"FunctionDeclaration:exit":f,FunctionExpression:d,"FunctionExpression:exit":f,IfStatement(){l({inConditional:!0})},"IfStatement:exit"(){l({inConditional:!1})},ImportDeclaration(e){let n=e.source.value;if(!(t.importSources===void 0||Object.keys(t.importSources).length===0))for(let t of e.specifiers)t.type===`ImportSpecifier`&&j(t.imported)&&Mx(t.imported.name)&&a.set(t.local.name,n)},LogicalExpression(){l({inConditional:!0})},"LogicalExpression:exit"(){l({inConditional:!1})},"ReturnStatement:exit"(){l({afterEarlyReturn:!0})},SwitchStatement(){l({inConditional:!0})},"SwitchStatement:exit"(){l({inConditional:!1})},TryStatement(){l({inTryBlock:!0})},"TryStatement:exit"(){l({inTryBlock:!1})},WhileStatement(){l({inLoop:!0})},"WhileStatement:exit"(){l({inLoop:!1})}}},meta:{docs:{description:`Enforce that React hooks are only called at the top level of components or custom hooks, never conditionally or in nested functions`,recommended:!0},messages:{afterEarlyReturn:`This hook is being called after an early return. Hooks must be called unconditionally and in the same order every render.`,conditionalHook:`This hook is being called conditionally. All hooks must be called in the exact same order in every component render.`,loopHook:`This hook is being called inside a loop. All hooks must be called in the exact same order in every component render.`,nestedFunction:`This hook is being called from a nested function. All hooks must be called unconditionally from the top-level component.`,recursiveHookCall:`This hook is being called recursively. Recursive calls require a condition to terminate, which violates hook rules.`,tryBlockHook:`This hook is being called inside a try block. Hooks must be called unconditionally at the top level.`},schema:[{additionalProperties:!1,properties:{ignoreHooks:{items:{type:`string`},type:`array`},importSources:{additionalProperties:{type:`boolean`},type:`object`},onlyHooks:{items:{type:`string`},type:`array`}},type:`object`}],type:`problem`}})}});export{Ux as default};
12
+ }`)]},messageId:`wrapCaseBody`,node:r})}}},meta:{docs:{description:`Require braces around switch case bodies that span multiple lines.`},fixable:`code`,messages:{wrapCaseBody:`Wrap this switch case body in braces.`},schema:[{additionalProperties:!1,properties:{metric:{default:`lines`,enum:[`lines`,`statements`],type:`string`}},type:`object`}],type:`problem`}});function vb(e){let t=e.parent;for(;t!==null;){switch(t.type){case`FunctionDeclaration`:return t.id?.name;case`FunctionExpression`:return t.id?t.id.name:yb(t);case`ArrowFunctionExpression`:return yb(t);default:break}t=t.parent}}function yb({parent:e}){if(e?.type===`VariableDeclarator`&&e.id.type===`Identifier`)return e.id.name;if(e?.type===`PropertyDefinition`||e?.type===`MethodDefinition`){if(e.key.type===`PrivateIdentifier`)return`#${e.key.name}`;if(e.key.type===`Identifier`)return e.key.name}}function bb(e){let t=e.parent;for(;t!==null;){switch(t.type){case`FunctionDeclaration`:return!1;case`FunctionExpression`:return(t.parent?.type===`MethodDefinition`||t.parent?.type===`PropertyDefinition`)&&t.parent.parent?.type===`ClassBody`;case`ArrowFunctionExpression`:return t.parent?.type===`PropertyDefinition`&&t.parent.parent?.type===`ClassBody`;default:break}t=t.parent}return!1}function xb(e,t,n){try{let r=e.getScope(t),i=new Set(r.variables.map(e=>e.name)),a=t.parent;for(;a!==null;)a.type===`CatchClause`&&a.param?.type===`Identifier`&&i.add(a.param.name),a=a.parent;if(!i.has(n))return n;for(let e=2;e<100;e+=1){let t=`${n}${e}`;if(!i.has(t))return t}}catch{}return n}function Sb(e,t){try{let n=e.getScope(t);for(;n!==null;){let e=n.set.get(t.name);if(e!==void 0){let t=e.defs.find(e=>e.type===`ImportBinding`);return t?.parent?.type===`ImportDeclaration`?t.parent.source.value:void 0}n=n.upper}}catch{}}function Cb(e,t){try{let n=e.getScope(t);for(;n!==null;){if(n.set.has(t.name))return!0;n=n.upper}}catch{}return!1}function wb(e,t){return y(e)?t===e:(Array.isArray(e.name)?e.name:[e.name]).includes(t)}function Tb(e,t,n,r){if(!wb(r,n.name))return!1;if(y(r))return!0;switch(r.from){case void 0:return!0;case`package`:return Sb(e,n)===r.package;case`file`:return Cb(e,n)&&Sb(e,n)===void 0?r.path===void 0?!0:t===`<input>`||t===`<text>`?!1:t.endsWith(r.path):!1;case`library`:return e.isGlobalReference(n);default:return!1}}function Eb(e,t,n,r){return r.some(r=>Tb(e,t,n,r))}const Db=t({create(e){let{sourceCode:t}=e,n=e.options[0]?.allow??[],r=e.physicalFilename??`<input>`;return{ThrowStatement(i){let{argument:a}=i;if(a.type!==`NewExpression`)return;let{callee:o}=a;if(o.type!==`Identifier`||!o.name.endsWith(`Error`)||Eb(t,r,o,n))return;let s=vb(i);if(s===void 0)return;let c=bb(i)?`this.${s}`:s;e.report({fix(e){let n=xb(t,i,`error`),r=[`const ${n} = ${t.getText(a)};`,`Error.captureStackTrace(${n}, ${c});`,`throw ${n};`].join(`
13
+ `);return i.parent?.type===`BlockStatement`?e.replaceText(i,r):e.replaceText(i,`{\n${r}\n}`)},messageId:`missingCaptureStackTrace`,node:i})}}},meta:{docs:{description:`Require 'Error.captureStackTrace' before throwing errors to produce accurate stack traces.`,recommended:!1},fixable:`code`,messages:{missingCaptureStackTrace:`Call 'Error.captureStackTrace' on this error before throwing it so the stack trace points to the throw site.`},schema:[{additionalProperties:!1,properties:{allow:{description:`Error classes that do not need Error.captureStackTrace`,items:{anyOf:[{type:`string`},{additionalProperties:!1,properties:{from:{description:`Where the error class is declared`,enum:[`file`,`library`,`package`],type:`string`},name:{anyOf:[{type:`string`},{items:{type:`string`},type:`array`}],description:`Name(s) of the error class`},package:{description:`Package the error class is imported from (required when from is 'package')`,type:`string`},path:{description:`Optional file path filter for file specifiers (matched against the end of the file path)`,type:`string`}},required:[`name`],type:`object`}]},type:`array`}},type:`object`}],type:`suggestion`}});function Ob(e){return e.includes(`u`)||e.includes(`v`)}function kb(e,t){return e.type===`Identifier`&&e.name===t}function Ab(e){if(!(e.type!==`Literal`||!y(e.value)))return e.value}function jb(e){return e.type!==`SpreadElement`}const Mb=t({createOnce(e){return{CallExpression(t){if(!kb(t.callee,`regex`))return;if(t.arguments.length<2){e.report({messageId:`requireUnicodeFlag`,node:t});return}let[,n]=t.arguments;if(n===void 0||!jb(n))return;let r=Ab(n);r!==void 0&&(Ob(r)||e.report({messageId:`requireUnicodeFlag`,node:t}))}}},meta:{docs:{description:`Require the 'u' or 'v' unicode flag on arktype regex() calls.`},messages:{requireUnicodeFlag:`Missing the 'u' or 'v' unicode flag on this regex() call. Use the unicode flag to avoid silently creating invalid regex patterns.`},schema:[],type:`problem`}});function Nb(e,t){t.type===`ObjectExpression`&&t.properties.length===0&&e.report({messageId:`emptyObjectDefault`,node:t}),t.type===`ArrayExpression`&&t.elements.length===0&&e.report({messageId:`emptyArrayDefault`,node:t})}function Pb(e,t){for(let n of t){if(n.type===`AssignmentPattern`&&n.left.type===`ObjectPattern`){Fb(e,n.left),D(n.right)&&Nb(e,n.right);continue}n.type===`ObjectPattern`&&Fb(e,n)}}function Fb(e,t){for(let n of t.properties){let t=Ib(n);t!==void 0&&Nb(e,t)}}function Ib(e){if(e.type!==`Property`||e.value.type!==`AssignmentPattern`)return;let t=e.value.right;return D(t)?t:void 0}function Lb(e){if(!(e.type!==`FunctionDeclaration`||!Eo(e)))return[...e.params]}function Rb(e){if(!(e.type!==`VariableDeclarator`||!Po(e)||e.init===null)&&!(e.init.type!==`ArrowFunctionExpression`&&e.init.type!==`FunctionExpression`))return[...e.init.params]}const zb=t({create(e){return{FunctionDeclaration(t){let n=Lb(t);n!==void 0&&Pb(e,n)},VariableDeclarator(t){let n=Rb(t);n!==void 0&&Pb(e,n)}}},meta:{docs:{description:`Prevent inline empty object and array defaults in component prop destructuring.`,recommended:!0},messages:{emptyArrayDefault:`Default prop value [] creates a new array reference every render — extract to a module-level constant`,emptyObjectDefault:`Default prop value {} creates a new object reference every render — extract to a module-level constant`},type:`problem`}}),Bb=/(?<first>[\p{Ll}\d])(?<second>\p{Lu})/gu,Vb=/(?<first>\p{Lu})(?<second>\p{Lu}\p{Ll})/gu,Hb=`$<first>\0$<second>`;function Ub(e){let t=e.trim();if(t.length===0)return``;let n=t.replace(Bb,Hb).replace(Vb,Hb),r=0,{length:i}=n;for(;n.charCodeAt(r)===0;)r+=1;if(r===i)return``;for(;n.charCodeAt(i-1)===0;)--i;let a=``,o=r;for(let e=r;e<=i;e+=1)if(!(e!==i&&n.charCodeAt(e)!==0)){if(e>o){let t=n.slice(o,e),r=t.charCodeAt(0);a.length>0&&r>=48&&r<=57&&(a+=`_`),a+=t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}o=e+1}return a}function Wb(e){return e.split(`/`).filter(e=>!e.startsWith(`.`))}function Gb(e){return e.split(`/`).filter(e=>e===`..`).length}function Kb(e){return e.some(e=>e===Ub(e)&&!e.includes(`.`))}function qb(e){return r.basename(e,r.extname(e))===`index`}function Jb(e){if(!e.includes(`fixtures`))return!1;let t=e.indexOf(`fixtures`);return!Kb(e.slice(0,t))}const Yb=t({create(e){let t=e.options?.[0],{allow:n=[],maxDepth:i=1}=typeof t==`object`&&t?t:{allow:[],maxDepth:1},a=n.map(e=>new RegExp(e,`u`));return{ImportDeclaration(t){let n=t.source.value;if(!(y(n)&&n.startsWith(`.`))||a.some(e=>e.test(n)))return;let{filename:o}=e;if(o===``)return;let s=mc(n,o);if(!s.found)return;let c=r.relative(o,s.path).replaceAll(`\\`,`/`),l=Wb(c);if((Gb(c)>1||l.includes(`components`))&&Kb(l)&&l.length>i&&!qb(c)&&!Jb(l)){e.report({messageId:`noReachingIntoComponent`,node:t});return}l.includes(`components`)&&l.length>i+1&&!qb(c)&&!Jb(l)&&e.report({messageId:`noReachingIntoComponent`,node:t})}}},meta:{docs:{description:`Prevent module imports between components.`},messages:{noReachingIntoComponent:`Do not reach into an individual component's folder for nested modules. Import from the closest shared components folder instead.`},schema:[{additionalProperties:!1,properties:{allow:{items:{type:`string`},type:`array`},maxDepth:{type:`integer`}},type:`object`}],type:`problem`}}),Xb=new Set([`ArrayExpression`,`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`,`ObjectExpression`]),Zb=new Map([[`useCallback`,{closureIndex:0,dependenciesIndex:1}],[`useEffect`,{closureIndex:0,dependenciesIndex:1}],[`useImperativeHandle`,{closureIndex:1,dependenciesIndex:2}],[`useInsertionEffect`,{closureIndex:0,dependenciesIndex:1}],[`useLayoutEffect`,{closureIndex:0,dependenciesIndex:1}],[`useMemo`,{closureIndex:0,dependenciesIndex:1}],[`useSpring`,{closureIndex:0,dependenciesIndex:1}],[`useSprings`,{closureIndex:1,dependenciesIndex:2}],[`useTrail`,{closureIndex:1,dependenciesIndex:2}]]),Qb=new Map([[`useBinding`,!0],[`useReducer`,new Set([1])],[`useRef`,!0],[`useState`,new Set([1])],[`useTransition`,new Set([1])]]),$b=new Set([`ClassDeclaration`,`FunctionDeclaration`,`FunctionName`,`ImportBinding`]),ex=new Set(`Array.BigInt.Boolean.clearInterval.clearTimeout.console.Date.decodeURI.decodeURIComponent.Document.Element.encodeURI.encodeURIComponent.Error.Event.Exclude.Extract.Function.Infinity.InstanceType.isFinite.isNaN.JSON.Map.Math.NaN.Node.NonNullable.null.Number.Object.Omit.Parameters.parseFloat.parseInt.Partial.Pick.Promise.Readonly.ReadonlyArray.ReadonlyMap.ReadonlySet.Record.RegExp.Required.ReturnType.Set.setInterval.setTimeout.String.Symbol.undefined.WeakMap.WeakSet.Window`.split(`.`));function tx(e){let{callee:t}=e;if(t.type===`Identifier`)return t.name;if(t.type===`MemberExpression`&&t.property.type===`Identifier`)return t.property.name}function nx(e){let t=0,n=e;for(;;){if(n.type===`ChainExpression`||n.type===`ParenthesizedExpression`||n.type===`TSAsExpression`||n.type===`TSNonNullExpression`||n.type===`TSSatisfiesExpression`||n.type===`TSTypeAssertion`){n=n.expression;continue}if(n.type!==`MemberExpression`)break;t+=1,n=n.object}return t}function rx(e){let t=e;for(;;){if(t.type===`ChainExpression`||t.type===`ParenthesizedExpression`||t.type===`TSAsExpression`||t.type===`TSNonNullExpression`||t.type===`TSSatisfiesExpression`||t.type===`TSTypeAssertion`){t=t.expression;continue}if(t.type!==`MemberExpression`)break;t=t.object}return t.type===`Identifier`?t:void 0}function ix(e){return e.type===`Identifier`?[e.name]:e.type===`MemberExpression`?ix(e.object):e.type===`ChainExpression`||e.type===`ParenthesizedExpression`||e.type===`TSNonNullExpression`||e.type===`TSAsExpression`||e.type===`TSSatisfiesExpression`||e.type===`TSTypeAssertion`?ix(e.expression):e.type===`BinaryExpression`||e.type===`LogicalExpression`?[...ix(e.left),...ix(e.right)]:e.type===`UnaryExpression`?ix(e.argument):e.type===`ConditionalExpression`?[...ix(e.test),...ix(e.consequent),...ix(e.alternate)]:[]}function ax(e){return yx.has(e.type)}function ox(e,t){if(e.type===`Identifier`)return e.name;if(e.type===`ChainExpression`||e.type===`ParenthesizedExpression`||ax(e))return ox(e.expression,t);if(e.type===`MemberExpression`){let n=ox(e.object,t);if(e.computed)return`${n}[${t.getText(e.property)}]`;let r=e.property.type===`Identifier`?e.property.name:``;return`${n}${e.optional?`?.`:`.`}${r}`}return t.getText(e)}function sx(e,t){return e.type===`VariableDeclarator`&&e.id.type===t}function cx(e,t,n){if(e===void 0||!(e instanceof Set&&sx(t,`ArrayPattern`)))return!1;let{elements:r}=t.id,i=0;for(let t of r){if((t?.type===`Identifier`?t.name:void 0)===n)return e.has(i);i+=1}return!1}function lx(e,t,n){if(e===void 0||!(e instanceof Set&&sx(t,`ObjectPattern`)))return!1;for(let r of t.id.properties){if(r.type!==`Property`||Gr(r)?.name!==n)continue;let t=Wr(r);return t!==void 0&&e.has(t)}return!1}function ux(e,t,n,r){if(e?.type!==`CallExpression`)return!1;let i=tx(e);if(i===void 0)return!1;let a=r.get(i);return a===!0||cx(a,t,n)||lx(a,t,n)}function dx(e){if(e?.type!==`CallExpression`)return!1;let{callee:t}=e;return t.type===`MemberExpression`&&t.object.type===`Identifier`&&t.object.name===`React`&&t.property.type===`Identifier`&&t.property.name===`joinBindings`}function fx(e){if(e?.type!==`CallExpression`)return!1;let{callee:t}=e;return t.type===`MemberExpression`&&t.property.type===`Identifier`&&t.property.name===`map`}function px(e){return e?.type===`Literal`||e?.type===`TemplateLiteral`||e?.type===`UnaryExpression`&&e.argument.type===`Literal`}function mx(e,t){let n=e.defs.find(e=>e.node===t);if(n?.node.type!==`VariableDeclarator`)return!1;let r=n.node.parent.parent;return r?.type===`Program`||r?.type===`ExportNamedDeclaration`}function hx(e,t,n,r){let{node:i,type:a}=t;if($b.has(a))return!0;if(a!==`Variable`||i.type!==`VariableDeclarator`)return!1;let{parent:o}=i;if(o.type!==`VariableDeclaration`||o.kind!==`const`)return!1;let{init:s}=i;return ux(s,i,n,r)||dx(s)||fx(s)||px(s)||mx(e,i)}function gx(e,t,n){if(!e)return!1;let r=e.defs;if(r.length===0)return!1;for(let i of r)if(hx(e,i,t,n))return!0;return!1}function _x(e,t){let n=t,r=e;for(;n;){if(n.type===`CallExpression`&&n.callee===r){if(r.type===`MemberExpression`)return r.object;break}let e=n.type===`MemberExpression`&&n.object===r,t=n.type===`ChainExpression`,i=n.type===`TSNonNullExpression`;if(!(e||t||i))break;r=n,n=r.parent??void 0}return r}const vx=new Set([`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`,`VariableDeclarator`]),yx=new Set([`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]);function bx(e){if(e.type!==`Identifier`)return!1;let{parent:t}=e;return t.type===`Property`&&t.computed&&t.key===e}function xx(e){if(e.type!==`Identifier`)return!1;let t=e.parent??void 0;for(;t;){if(yx.has(t.type)){t=t.parent??void 0;continue}if(t.type.startsWith(`TS`))return!0;if(vx.has(t.type))return!1;t=t.parent??void 0}return!1}function Sx(e,t){let n=t.parent??void 0;for(;n;){if(N(n)){let t=n;return e.defs.some(e=>e.type===`Parameter`&&e.node===t)?!0:e.defs.some(e=>{let n=e.node.parent??void 0;for(;n&&n!==t;)n=n.parent??void 0;return n===t})}n=n.parent??void 0}return!1}function Cx(e,t){if(e.type!==`Identifier`)return;let n,r=t;for(;r;){let t=r.set.get(e.name);if(t){n=t;break}r=r.upper}if(!(!n||n.defs.length===0))for(let e of n.defs){let t=e.node;if(t.type===`FunctionDeclaration`)return t;if(t.type===`VariableDeclarator`&&t.init&&(t.init.type===`ArrowFunctionExpression`||t.init.type===`FunctionExpression`))return t.init}}function wx(e,t){let n=t;for(;n;){let t=n.set.get(e);if(t)return t;n=n.upper}}function Tx(e,t){let n=e.node;for(;n;){if(n===t)return!0;n=n.parent??void 0}return!1}function Ex(e,t){return e!==void 0&&!e.defs.some(e=>Tx(e,t))}function Dx(e,t,n,r){let i=_x(e,e.parent??void 0);return{depth:nx(i),forceDependency:bx(e),name:t,node:i,usagePath:ox(i,r),variable:n}}function Ox(e){return e.type===`ParenthesizedExpression`||e.type===`TSSatisfiesExpression`||e.type===`TSAsExpression`||e.type===`TSTypeAssertion`||e.type===`TSNonNullExpression`}function kx(e,t,n){let r=t.visitorKeys[e.type]??[];for(let t of r){if(!x(e))break;let r=e[t];if(Array.isArray(r))for(let e of r)D(e)&&n(e);else D(r)&&n(r)}}function Ax(e,t){let n=[],r=new Set;function i(i){if(i.type!==`Identifier`)return;let{name:a}=i;if(r.has(a)||ex.has(a)||xx(i))return;let o=wx(a,t.getScope(i));Ex(o,e)&&o!==void 0&&Sx(o,e)&&(r.add(a),n.push(Dx(i,a,o,t)))}function a(e){if(e.type===`Identifier`&&i(e),Ox(e)){a(e.expression);return}if(e.type===`MemberExpression`){a(e.object),e.computed&&a(e.property);return}if(e.type===`ChainExpression`){a(e.expression);return}if(e.type===`Property`){e.computed&&a(e.key),a(e.value);return}kx(e,t,a)}return a(e),n}function jx(e,t){let n=[];for(let r of e.elements){if(!r)continue;let e=r.type===`SpreadElement`?r.argument:r,i=ox(e,t),a=nx(e);n.push({depth:a,name:i,node:e})}return n}function Mx({name:e}){return e}function Nx(e){return e?Xb.has(e.type):!1}function Px(e,{parent:t}){return t.type===`VariableDeclarator`?e.variable?.defs.some(e=>e.node===t)??!1:!1}function Fx(e){return e.length>0&&b(e[0])}function Ix(e){return e.length>0&&y(e[0])}function Lx(e){return typeof e==`boolean`?e:b(e)?new Set([e]):Array.isArray(e)&&(Fx(e)||Ix(e))?new Set(e):!1}function Rx(e,t,n,r){let i=[],a=0;for(let{name:e}of t)e!==n.name&&(i[a++]=e);let o=`[${i.join(`, `)}]`;e.report({data:{name:n.name},fix(e){return e.replaceText(r,o)},messageId:`unnecessaryDependency`,node:n.node,suggest:[{data:{name:n.name},fix(e){return e.replaceText(r,o)},messageId:`removeDependencySuggestion`}]})}function zx(e){return e!==void 0&&N(e)}function Bx(e,t){return e.filter(e=>e.forceDependency||!gx(e.variable,e.name,t))}function Vx(e,t,n,r){if(r.length===0)return;let i=[...new Set(r.map(Mx))].join(`, `),a=`[${[...new Set(r.map(({usagePath:e})=>e))].toSorted().join(`, `)}]`;e.report({data:{deps:i},fix(e){return e.insertTextAfter(n,`, ${a}`)},messageId:`missingDependenciesArray`,node:t,suggest:[{data:{dependencies:a},fix(e){return e.insertTextAfter(n,`, ${a}`)},messageId:`addDependenciesArraySuggestion`}]})}function Hx(e){let t=rx(e);return t?.type===`Identifier`?t.name:void 0}function Ux(e,t){let n=Hx(t.node);return n===void 0?[]:e.filter(e=>Hx(e.node)===n)}function Wx(e,t){return e.length>0&&e.every(e=>!e.forceDependency&&gx(e.variable,e.name,t))}function Gx(e,t,n,r,i,a,o){for(let s of t){let c=Ux(n,s);if(c.length===0){a&&Rx(e,t,s,r);continue}if(o&&Wx(c,i)){Rx(e,t,s,r);continue}let l=Math.max(...c.map(({depth:e})=>e));a&&s.depth>l&&Rx(e,t,s,r)}}function Kx(e,t,n){let r=rx(e.node);if(r?.type===`Identifier`&&e.depth<=t.depth)return r.name===Hx(t.node);if(!n)return!1;let i=Hx(t.node);return i!==void 0&&ix(e.node).includes(i)}function qx(e,t,n,r){let i=[];for(let a of Bx(e,n))Hx(a.node)!==void 0&&(t.some(e=>Kx(e,a,r))||i.push(a));return i}function Jx(e,t,n,r){if(r.length===0)return;let i=n.map(({name:e})=>e),a=r.map(({usagePath:e})=>e),o=`[${[...i,...a].toSorted().join(`, `)}]`,s=n.at(-1)?.node??t,c=r.at(0);if(r.length===1&&c!==void 0){e.report({data:{name:c.usagePath},fix(e){return e.replaceText(t,o)},messageId:`missingDependency`,node:s,suggest:[{data:{name:c.usagePath},fix(e){return e.replaceText(t,o)},messageId:`addDependencySuggestion`}]});return}e.report({data:{names:a.join(`, `)},fix(e){return e.replaceText(t,o)},messageId:`missingDependencies`,node:s,suggest:[{fix(e){return e.replaceText(t,o)},messageId:`addMissingDependenciesSuggestion`}]})}function Yx(e){let t=e.variable?.defs[0];return t?.node.type===`VariableDeclarator`?t.node.init??void 0:void 0}function Xx(e,t,n,r){for(let i of Bx(t,r)){let t=Hx(i.node);if(t!==void 0){for(let r of n)if(Hx(r.node)===t&&r.depth===i.depth){r.depth===0&&Nx(Yx(i))&&e.report({data:{name:i.usagePath},messageId:`unstableDependency`,node:r.node});break}}}}const Zx=t({create(e){let[t]=e.options,n={hooks:t?.hooks??[],reportMissingDependenciesArray:t?.reportMissingDependenciesArray??!0,reportUnnecessaryDependencies:t?.reportUnnecessaryDependencies??!0,reportUnnecessaryStableDependencies:t?.reportUnnecessaryStableDependencies??!1,resolveExpressionDependencies:t?.resolveExpressionDependencies??!0},r=new Map(Zb);for(let e of n.hooks)e.closureIndex===void 0||e.dependenciesIndex===void 0||r.set(e.name,{closureIndex:e.closureIndex,dependenciesIndex:e.dependenciesIndex});let i=new Map(Qb);for(let e of n.hooks)e.stableResult!==void 0&&i.set(e.name,Lx(e.stableResult));let a=new WeakMap;function o(t){let n=a.get(t);if(n)return n;let r=e.sourceCode.getScope(t);return a.set(t,r),r}function s(e,t){if(e.type===`ArrowFunctionExpression`)return e;if(!(N(e)||e.type===`Identifier`))return;let n=Cx(e,o(t));return zx(n)?n:void 0}return{CallExpression(t){let a=tx(t);if(a===void 0||a===``)return;let o=r.get(a);if(!o)return;let{closureIndex:c,dependenciesIndex:l}=o,u=t.arguments,d=u[c];if(d===void 0)return;let f=s(d,t);if(!f)return;let p=u[l];if(!p&&n.reportMissingDependenciesArray){Vx(e,t,d,Bx(Ax(f,e.sourceCode).filter(e=>!Px(e,t)),i));return}if(!p||p.type!==`ArrayExpression`)return;let m=p,h=Ax(f,e.sourceCode).filter(e=>!Px(e,t)),g=jx(m,e.sourceCode);(n.reportUnnecessaryDependencies||n.reportUnnecessaryStableDependencies)&&Gx(e,g,h,m,i,n.reportUnnecessaryDependencies,n.reportUnnecessaryStableDependencies),Jx(e,m,g,qx(h,g,i,n.resolveExpressionDependencies)),Xx(e,h,g,i)}}},meta:{docs:{description:`Enforce exhaustive and correct dependency specification in React hooks to prevent stale closures and unnecessary re-renders`},fixable:`code`,hasSuggestions:!0,messages:{addDependenciesArraySuggestion:`Add dependencies array: {{dependencies}}`,addDependencySuggestion:`Add '{{name}}' to dependencies array`,addMissingDependenciesSuggestion:`Add missing dependencies to array`,missingDependencies:`This hook does not specify all its dependencies. Missing: {{names}}`,missingDependenciesArray:`This hook does not specify its dependencies array. Missing: {{deps}}`,missingDependency:`This hook does not specify its dependency on {{name}}.`,removeDependencySuggestion:`Remove '{{name}}' from dependencies array`,unnecessaryDependency:`This dependency {{name}} can be removed from the list.`,unstableDependency:`{{name}} changes on every re-render. Wrap the definition in useCallback() or useMemo() to stabilize it.`},schema:[{additionalProperties:!1,properties:{hooks:{description:`Array of custom hook entries to check for exhaustive dependencies`,items:{additionalProperties:!1,properties:{closureIndex:{description:`Index of the closure argument for dependency validation`,type:`number`},dependenciesIndex:{description:`Index of the dependencies array for validation`,type:`number`},name:{description:`The name of the hook`,type:`string`},stableResult:{description:`Specify stable results: true (whole result), number (array index), number[] (multiple indices), or string[] (object properties)`,oneOf:[{type:`boolean`},{type:`number`},{items:{type:`number`},type:`array`},{items:{type:`string`},type:`array`}]}},required:[`name`],type:`object`},type:`array`},reportMissingDependenciesArray:{default:!0,description:`Report when the dependencies array is completely missing`,type:`boolean`},reportUnnecessaryDependencies:{default:!0,description:`Report when unnecessary dependencies are specified`,type:`boolean`},reportUnnecessaryStableDependencies:{default:!1,description:`Report when stable values (useRef, useState setter, etc.) are included as dependencies`,type:`boolean`},resolveExpressionDependencies:{default:!0,description:"Recognize expression dependencies like `value !== undefined` as covering a capture",type:`boolean`}},type:`object`}],type:`problem`}}),Qx=/^use[A-Z]/u;function $x(e){return Qx.test(e)}function eS(e){return x(e)?e:{}}function tS(e){if((e.type===`FunctionDeclaration`||e.type===`FunctionExpression`)&&e.id!==null)return O(e.id.name)||$x(e.id.name);let{parent:t}=e;return t.type===`VariableDeclarator`&&j(t.id)?O(t.id.name)||$x(t.id.name):t.type===`Property`&&j(t.key)||t.type===`MethodDefinition`&&j(t.key)?O(t.key.name)||$x(t.key.name):!1}function nS(e){let t=L(e);return t!==void 0&&$x(t)}function rS(e){let t=e.parent,n=!1;for(let r=0;r<20&&t!==null&&!N(t);r+=1){if(t.type===`TryStatement`){let r=e;for(;r!==null&&r!==t;){if(r===t.finalizer){n=!0;break}r=r.parent}break}t=t.parent}return n}function iS(e,t){return t!==void 0&&e.callee.type===`Identifier`&&`name`in e.callee&&e.callee.name===t}function aS(e,t){return{afterEarlyReturn:!1,functionDepth:t,inConditional:!1,inLoop:!1,inNestedFunction:!1,inTryBlock:!1,isComponentOrHook:!1,...e}}function oS(e){if(e.type===`FunctionDeclaration`||e.type===`FunctionExpression`)return e.id?.name??void 0}function sS(e){return j(e)?e.name:void 0}function cS(e,t,n,r){if(n===void 0||Object.keys(n).length===0)return!1;let i=lS(t,n);if(i!==void 0)return i;let a=t.callee.type===`Identifier`?r.get(e):void 0;return a!==void 0&&n[a]===!1?!0:(a!==void 0&&n[a],!1)}function lS(e,t){if(e.callee.type!==`MemberExpression`)return;let n=sS(e.callee.object);if(n!==void 0&&t[n]===!1)return!0;if(n!==void 0&&t[n]===!0)return!1}const uS=e({meta:{name:`small-rules`},rules:{"array-type-generic":te,"ban-instances":ut,"ban-react-fc":mt,"ban-types":vt,"directive-disable-enable-pair":Kt,"directive-no-aggregating-enable":qt,"directive-no-duplicate-disable":Jt,"directive-no-restricted-disable":Yt,"directive-no-unlimited-disable":Xt,"directive-no-unused-enable":Zt,"directive-no-use":Qt,"directive-require-description":tn,"enforce-ianitor-check-type":pn,"memoized-effect-dependencies":Ln,"no-array-constructor-elements":mr,"no-array-constructor-index-assignment":wr,"no-array-size-assignment":Pr,"no-async-constructor":ai,"no-async-in-system":Mi,"no-cascading-set-state":Pi,"no-color3-constructor":Ri,"no-commented-code":Ta,"no-constant-condition-with-break":ao,"no-error":so,"no-events-in-events-callback":wo,"no-giant-component":Ro,"no-god-components":Ko,"no-ianitor-in-function-body":Jo,"no-ianitor-success-access":es,"no-identity-map":ls,"no-increment-decrement":ds,"no-inline-property-on-memo-component":ms,"no-instance-methods-without-this":Ss,"no-native-properties-spread":Ks,"no-new-instance-in-use-memo":sc,"no-print":cc,"no-recursive":dc,"no-redundant-aspect-ratio-constraint":Dc,"no-render-helper-functions":Wc,"no-restricted-property-assignment":tl,"no-spec-file-extension":rl,"no-static-react-create-element":_l,"no-table-create-map":bl,"no-task-wait":Sl,"no-underscore-react-props":Cl,"no-unused-imports":Nl,"no-unused-use-memo":Pl,"no-use-memo-simple-expression":Il,"no-useless-constants":iu,"no-useless-default":Xu,"no-useless-use-effect":kf,"no-useless-use-memo":Ff,"no-useless-use-spring":Uf,"no-warn":Wf,"only-type-imports":Gf,"prefer-class-properties":Zf,"prefer-constant-dispatch":sp,"prefer-context-stack":Wp,"prefer-early-return":Yp,"prefer-expect-assertions":bm,"prefer-hoisted-jsx-elements":Mm,"prefer-hoisted-jsx-object-properties":Bm,"prefer-idiv":Um,"prefer-local-portal-component":eh,"prefer-math-min-max":dh,"prefer-modding-inspect":gh,"prefer-module-scope-constants":yh,"prefer-padding-components":Fh,"prefer-pascal-case-enums":Wh,"prefer-sequence-overloads":Xh,"prefer-single-world-query":gg,"prefer-singular-enums":kg,"prefer-ternary-conditional-rendering":Kg,"prefer-udim2-shorthand":e_,"prefer-use-reducer":n_,"prevent-abbreviations":zv,"react-hooks-strict-return":ny,"require-async-suffix":ay,"require-module-level-instantiation":dy,"require-named-effect-functions":_y,"require-paired-calls":My,"require-react-component-keys":ab,"require-react-display-names":mb,"require-switch-case-braces":_b,"require-throw-error-capture":Db,"require-unicode-regex":Mb,"rerender-memo-with-default-value":zb,"strict-component-boundaries":Yb,"use-exhaustive-dependencies":Zx,"use-hook-at-top-level":t({create(e){let t=eS(e.options[0]),n=[],r=[],i,a=new Map;function o(){return n.length>0?n.at(-1):void 0}function s(e){n.push(e)}function c(){n.pop()}function l(e){let t=o();t!==void 0&&(n[n.length-1]={...t,...e})}function u(e,n){let{ignoreHooks:r,importSources:i,onlyHooks:o}=t;return o!==void 0&&o.length>0?!o.includes(e):r?.includes(e)===!0||cS(e,n,i,a)}function d(e){let t=o(),n=t===void 0?0:t.functionDepth+1,a=tS(e);r.push(i);let c=oS(e);c!==void 0&&(i=c),t?.isComponentOrHook===!0?s(aS({functionDepth:n,inNestedFunction:!0},n)):a&&s(aS({functionDepth:n,isComponentOrHook:!0},n))}function f(){o()!==void 0&&c(),i=r.pop()}return{ArrowFunctionExpression:d,"ArrowFunctionExpression:exit":f,CallExpression(t){if(!nS(t))return;let n=L(t);if(n===void 0||u(n,t))return;let r=o();if(!(r===void 0||!(r.isComponentOrHook||r.inNestedFunction)||rS(t))){if(iS(t,i)){e.report({messageId:`recursiveHookCall`,node:t});return}if(r.inNestedFunction){e.report({messageId:`nestedFunction`,node:t});return}if(r.inConditional){e.report({messageId:`conditionalHook`,node:t});return}if(r.inLoop){e.report({messageId:`loopHook`,node:t});return}if(r.inTryBlock){e.report({messageId:`tryBlockHook`,node:t});return}r.afterEarlyReturn&&e.report({messageId:`afterEarlyReturn`,node:t})}},ConditionalExpression(){l({inConditional:!0})},"ConditionalExpression:exit"(){l({inConditional:!1})},DoWhileStatement(){l({inLoop:!0})},"DoWhileStatement:exit"(){l({inLoop:!1})},ForInStatement(){l({inLoop:!0})},"ForInStatement:exit"(){l({inLoop:!1})},ForOfStatement(){l({inLoop:!0})},"ForOfStatement:exit"(){l({inLoop:!1})},ForStatement(){l({inLoop:!0})},"ForStatement:exit"(){l({inLoop:!1})},FunctionDeclaration:d,"FunctionDeclaration:exit":f,FunctionExpression:d,"FunctionExpression:exit":f,IfStatement(){l({inConditional:!0})},"IfStatement:exit"(){l({inConditional:!1})},ImportDeclaration(e){let n=e.source.value;if(!(t.importSources===void 0||Object.keys(t.importSources).length===0))for(let t of e.specifiers)t.type===`ImportSpecifier`&&j(t.imported)&&$x(t.imported.name)&&a.set(t.local.name,n)},LogicalExpression(){l({inConditional:!0})},"LogicalExpression:exit"(){l({inConditional:!1})},"ReturnStatement:exit"(){l({afterEarlyReturn:!0})},SwitchStatement(){l({inConditional:!0})},"SwitchStatement:exit"(){l({inConditional:!1})},TryStatement(){l({inTryBlock:!0})},"TryStatement:exit"(){l({inTryBlock:!1})},WhileStatement(){l({inLoop:!0})},"WhileStatement:exit"(){l({inLoop:!1})}}},meta:{docs:{description:`Enforce that React hooks are only called at the top level of components or custom hooks, never conditionally or in nested functions`,recommended:!0},messages:{afterEarlyReturn:`This hook is being called after an early return. Hooks must be called unconditionally and in the same order every render.`,conditionalHook:`This hook is being called conditionally. All hooks must be called in the exact same order in every component render.`,loopHook:`This hook is being called inside a loop. All hooks must be called in the exact same order in every component render.`,nestedFunction:`This hook is being called from a nested function. All hooks must be called unconditionally from the top-level component.`,recursiveHookCall:`This hook is being called recursively. Recursive calls require a condition to terminate, which violates hook rules.`,tryBlockHook:`This hook is being called inside a try block. Hooks must be called unconditionally at the top level.`},schema:[{additionalProperties:!1,properties:{ignoreHooks:{items:{type:`string`},type:`array`},importSources:{additionalProperties:{type:`boolean`},type:`object`},onlyHooks:{items:{type:`string`},type:`array`}},type:`object`}],type:`problem`}})}});export{uS as default};