@pobammer-ts/small-rules 2.6.0 → 2.8.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
@@ -1,13 +1,13 @@
1
- import{definePlugin as e,defineRule as t}from"oxlint-plugin-utilities";import n from"ignore";import r,{basename as i,dirname as a,extname as o,isAbsolute as s,join as c,relative as l}from"node:path";import{parseSync as u}from"oxc-parser";import{existsSync as d,readFileSync as f,readdirSync as p}from"node:fs";import{ResolverFactory as m}from"oxc-resolver";import{type as h}from"arktype";import{Minimatch as g,minimatch as _}from"minimatch";function v(e,t){return e.type===`TSParenthesizedType`?v(e.typeAnnotation,t):e.type===`TSArrayType`?`Array<${v(e.elementType,t)}>`:e.type===`TSTypeOperator`&&e.operator===`readonly`&&e.typeAnnotation.type===`TSArrayType`?`ReadonlyArray<${v(e.typeAnnotation.elementType,t)}>`:t.getText(e)}function ee({parent:e}){let t=e.type===`TSParenthesizedType`?e.parent:e;return!(t.type===`TSRestType`&&t.parent.type===`TSTupleType`||t.type===`TSTupleType`||t.type===`TSArrayType`||t.type===`TSTypeOperator`&&t.operator===`readonly`)}const te=t({createOnce(e){function t(t){e.report({fix(n){return n.replaceText(t,v(t,e.sourceCode))},messageId:`useGenericArrayType`,node:t})}return{TSArrayType(e){ee(e)&&t(e)},TSTypeOperator(e){e.operator!==`readonly`||e.typeAnnotation.type!==`TSArrayType`||ee(e)&&t(e)}}},meta:{docs:{description:`Disallow bracket array type syntax and require Array<T> / ReadonlyArray<T>.`},fixable:`code`,messages:{useGenericArrayType:`Bracket array type syntax is not allowed. Use Array<T> or ReadonlyArray<T> generic syntax.`},schema:[],type:`problem`}});function y(e){return typeof e==`string`}function b(e){return typeof e==`number`}function x(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ne(e){return y(e)&&e.length>0}function S(e){if(!Array.isArray(e))return!1;for(let t of e)if(!y(t))return!1;return!0}function C(e){if(!x(e))return!1;for(let t of Object.values(e))if(!y(t))return!1;return!0}function re(e){return b(e)&&!Number.isNaN(e)}function w(e){let t=e;for(;;)switch(t.type){case`ChainExpression`:case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:t=t.expression;break;default:return t}}function T(e){return e.computed?e.property.type===`Literal`&&y(e.property.value)?e.property.value:void 0:e.property.type===`Identifier`?e.property.name:void 0}function E(e,t){let n=e;for(;n!==null;){let e=n.set.get(t);if(e!==void 0)return e;n=n.upper}}function D(e,t,n){let r=e.getScope(t);for(;r!==null;){let e=r.set.get(n);if(e!==void 0&&e.defs.length>0)return!0;r=r.upper}return!1}const ie=/^[A-Z]/v,ae=new Set([`end`,`loc`,`parent`,`range`,`start`,`type`]);function O(e){return x(e)&&y(e.type)}function oe(e){return ae.has(e)}function k(e){return ie.test(e)}function A(e){return e.type===`VariableDeclarator`}function se(e){return ce(e.typeAnnotation)?e.typeAnnotation:void 0}function ce(e){return x(e)&&`type`in e&&e.type===`TSTypeAnnotation`}function le(e,t){return e.type===`Identifier`&&e.name===t}function ue(e,t,n,r){return e.callee.type===`Identifier`?t.has(e.callee.name):e.callee.type!==`MemberExpression`||e.callee.object.type!==`Identifier`?!1:n.has(e.callee.object.name)&&T(e.callee)===r}function de(e,t,n){return ue(e,t,n,`useMemo`)}function fe({imported:e}){return e.type===`Identifier`?e.name:e.value}function j(e){return e.type===`Identifier`&&y(e.name)}function M(e){return e.type===`Identifier`}function pe(e){return e.type===`JSXIdentifier`&&`name`in e}function me(e){return e.type===`JSXOpeningElement`}function he(e){return e.type===`ImportDeclaration`}function ge(e){return e.type===`Literal`&&y(e.value)}function _e(e){return e.type===`CallExpression`}function ve(e){return e.type===`ImportSpecifier`}function ye(e){return e.type===`ExportSpecifier`}function be(e){return e.type===`Property`}function N(e){return e.type===`MemberExpression`}function xe(e){return e.type===`AssignmentExpression`}function Se(e){return e.type===`UnaryExpression`}function Ce(e){return e.type===`BinaryExpression`}function we(e){return e.type===`LogicalExpression`}function Te(e){return e.type===`ConditionalExpression`}function Ee(e){return e.type===`SequenceExpression`}function De(e){return e.type===`MethodDefinition`||e.type===`TSAbstractMethodDefinition`}function Oe(e){return e.type===`PropertyDefinition`||e.type===`TSAbstractPropertyDefinition`}function ke(e){return e.type===`ImportDefaultSpecifier`}function Ae(e){return e.type===`ImportNamespaceSpecifier`}function je(e){return e.type===`VariableDeclaration`}function Me(e){return e.type===`ExportNamedDeclaration`}function Ne(e){return e.type===`FunctionDeclaration`||e.type===`FunctionExpression`}function Pe(e){return e.type===`ArrowFunctionExpression`||e.type===`FunctionExpression`}function P(e){return e.type===`ArrowFunctionExpression`||e.type===`FunctionDeclaration`||e.type===`FunctionExpression`}function Fe(e,t){return le(e.callee,t)}function Ie(e){return e.type===`ClassDeclaration`||e.type===`ClassExpression`}function Le(e){return e.type===`TSTypeAliasDeclaration`}function Re(e){return e.type===`TSPropertySignature`}function ze(e){return e.type===`Literal`}function Be(e){return e.type===`ArrowFunctionExpression`}function Ve(e){return Ne(e)||Be(e)}function He(e){return e.type===`TSQualifiedName`}function Ue(e){return e.type===`Literal`&&b(e.value)}function We(e){return e.type===`NewExpression`}function Ge(e){return e.type===`ArrayExpression`}function Ke(e){return e.type===`ObjectExpression`}function qe(e){return e.type===`ObjectPattern`}function Je(e){return e.type===`TemplateLiteral`}function Ye(e){return e.type===`ExpressionStatement`}function Xe(e){return e.type===`TSTypeAssertion`}function Ze(e){return e.type===`TSAsExpression`}function Qe(e){return e.type===`AssignmentPattern`}function $e(e){return e.type===`ThisExpression`}function et(e){if(!_e(e)||e.optional)return!1;let{callee:t}=e;if(!M(t)||t.name!==`require`||e.arguments.length!==1)return!1;let[n]=e.arguments;return n!==void 0&&ge(n)}function tt(e){return e.type===`Identifier`}function nt(e){return e.type!==`PrivateIdentifier`}function rt(e){return e.type===`JSXIdentifier`?e.name:e.name.name}function it(e){if(!(x(e)&&`bannedInstances`in e))return new Map;let{bannedInstances:t}=e,n=new Map;if(S(t)){for(let e of t)n.set(e.toLowerCase(),{message:void 0,originalName:e});return n}if(C(t))for(let[e,r]of Object.entries(t))n.set(e.toLowerCase(),{message:r,originalName:e});return n}function at(e){if(!(x(e)&&`bannedProperties`in e))return new Map;let{bannedProperties:t}=e,n=new Map;if(!x(t))return n;for(let[e,r]of Object.entries(t)){if(!x(r))continue;let t=new Map;for(let[e,n]of Object.entries(r))y(n)&&t.set(e.toLowerCase(),{message:n,propertyName:e});t.size>0&&n.set(e.toLowerCase(),t)}return n}function ot(e){let t=e;for(;t.upper!==null&&t.type!==`function`&&t.type!==`module`&&t.type!==`global`;)t=t.upper;return t}function st(e){if(!Fe(e,`Instance`))return;let[t]=e.arguments;if(!(t?.type!==`Literal`||!y(t.value)))return t.value}function ct(e){let{parent:t}=e;if(!(t?.type!==`VariableDeclarator`||t.init!==e||t.id.type!==`Identifier`))return t}const lt=t({create(e){let{sourceCode:t}=e,[n]=e.options;if(n===void 0||typeof n!=`object`||!n)return{};let r=it(n),i=at(n);if(r.size===0&&i.size===0)return{};let a=new Map,o=new Set;function s(t,n){if(n.message!==void 0&&n.message!==``){e.report({data:{className:n.originalName,customMessage:n.message},messageId:`bannedInstanceCustom`,node:t});return}e.report({data:{className:n.originalName},messageId:`bannedInstance`,node:t})}function c(t,n,r){if(r.message!==``){e.report({data:{className:n,customMessage:r.message,propertyName:r.propertyName},messageId:`bannedPropertyCustom`,node:t});return}e.report({data:{className:n,propertyName:r.propertyName},messageId:`bannedProperty`,node:t})}function l(e){if(o.has(e)||e.id.type!==`Identifier`||e.init===null)return;let n=w(e.init);if(n.type!==`NewExpression`)return;let r=st(n);if(r===void 0)return;let i=E(t.getScope(e),e.id.name);i!==void 0&&(a.set(i,{className:r,functionScope:ot(i.scope)}),o.add(e))}function u(e){let n=t.getScope(e),r=E(n,e.name);if(r===void 0)return;let i=a.get(r);if(i!==void 0)return i.functionScope===ot(n)?i:void 0}return{AssignmentExpression(e){if(e.left.type!==`MemberExpression`)return;let t=T(e.left);if(t===void 0)return;let n=w(e.left.object);if(n.type!==`Identifier`)return;let r=u(n);if(r===void 0)return;let a=i.get(r.className.toLowerCase());if(a===void 0)return;let o=a.get(t.toLowerCase());o!==void 0&&c(e.left,r.className,o)},JSXOpeningElement(e){if(e.name.type!==`JSXIdentifier`)return;let{name:t}=e.name,n=t.charAt(0);if(n!==n.toLowerCase())return;let a=r.get(t.toLowerCase());a!==void 0&&s(e,a);let o=i.get(t.toLowerCase());if(o!==void 0)for(let n of e.attributes){if(n.type!==`JSXAttribute`)continue;let e=rt(n.name);if(e===void 0)continue;let r=o.get(e.toLowerCase());r!==void 0&&c(n,t,r)}},NewExpression(e){let t=st(e);if(t===void 0)return;let n=ct(e);n!==void 0&&l(n);let i=r.get(t.toLowerCase());i!==void 0&&s(e,i)},VariableDeclarator(e){l(e)}}},meta:{docs:{description:`Ban specified Roblox Instance classes in new Instance() calls and JSX elements.`},messages:{bannedInstance:`Instance class '{{className}}' is banned by project configuration. This class may cause performance issues, is deprecated, or has a better alternative. Check project guidelines for the recommended replacement.`,bannedInstanceCustom:`{{customMessage}}`,bannedProperty:`Property '{{propertyName}}' on Instance class '{{className}}' is banned by project configuration. This property may cause performance issues, is deprecated, or has a better alternative. Check project guidelines for the recommended replacement.`,bannedPropertyCustom:`{{customMessage}}`},schema:[{additionalProperties:!1,properties:{bannedInstances:{description:`Map of banned class names to custom messages, or an array of class names.`,oneOf:[{items:{type:`string`},type:`array`},{additionalProperties:{type:`string`},type:`object`}]},bannedProperties:{additionalProperties:{additionalProperties:{type:`string`},type:`object`},description:`Map of banned class names to maps of banned property names and custom messages.`,type:`object`}},type:`object`}],type:`problem`}}),ut=new Set([`FC`,`FunctionComponent`,`VFC`,`VoidFunctionComponent`]);function dt(e){if(e.type===`Identifier`&&ut.has(e.name))return e.name;if(e.type===`TSQualifiedName`&&ut.has(e.right.name))return e.right.name}function ft(e){let{typeAnnotation:t}=e.id;return ce(t)?t:void 0}const pt=t({createOnce(e){return{VariableDeclarator(t){let n=ft(t);if(n===void 0)return;let r=n.typeAnnotation;r.type!==`TSTypeReference`||dt(r.typeName)===void 0||t.init?.type!==`ArrowFunctionExpression`||e.report({messageId:`banReactFC`,node:t})}}},meta:{docs:{description:`Ban React.FC and similar component type annotations. Use explicit function declarations instead.`},messages:{banReactFC:"Avoid React.FC/FunctionComponent/VFC/VoidFunctionComponent types. They break debug information and profiling. Use explicit function declarations instead: `function Component(props: Props) { ... }`"},schema:[],type:`problem`}}),mt=new Map([[`omit`,{originalName:`Omit`,replacementName:`Except`}]]);function ht(e){let t=new Map(mt);if(!(x(e)&&`bannedTypes`in e))return t;let{bannedTypes:n}=e;if(S(n)){for(let e of n)t.set(e.toLowerCase(),{originalName:e,replacementName:void 0});return t}if(C(n))for(let[e,r]of Object.entries(n))t.set(e.toLowerCase(),{originalName:e,replacementName:r});return t}function gt(e){if(e.type===`Identifier`)return e.name;if(e.type===`TSQualifiedName`)return e.right.name}const _t=t({create(e){let[t]=e.options,n=ht(t);return{TSTypeReference(t){let r=gt(t.typeName);if(r===void 0)return;let i=n.get(r.toLowerCase());if(i!==void 0){if(i.replacementName!==void 0&&i.replacementName!==``){e.report({data:{replacementName:i.replacementName,typeName:i.originalName},messageId:`bannedTypeWithReplacement`,node:t.typeName});return}e.report({data:{typeName:i.originalName},messageId:`bannedType`,node:t.typeName})}}}},meta:{docs:{description:`Ban configured TypeScript utility types, defaulting to Omit in favor of Except.`},messages:{bannedType:`Type '{{typeName}}' is banned by project configuration. Use the project-preferred alternative for this type.`,bannedTypeWithReplacement:`Type '{{typeName}}' is banned. Use '{{replacementName}}' instead.`},schema:[{additionalProperties:!1,properties:{bannedTypes:{description:`Array of banned type names or an object mapping banned type names to preferred replacement names.`,oneOf:[{items:{type:`string`},type:`array`},{additionalProperties:{type:`string`},type:`object`}]}},type:`object`}],type:`problem`}}),vt=/^(?:eslint|oxlint)-disable-(?:next-)?line$/u,yt=/[\s,]+/gu,bt=/\s/u,xt=new Set([`eslint-disable`,`eslint-disable-line`,`eslint-disable-next-line`,`oxlint-disable`,`oxlint-disable-line`,`oxlint-disable-next-line`]),St=new Set([...xt,`eslint-enable`,`oxlint-enable`]),Ct=new Set([`eslint`,`eslint-disable`,`eslint-disable-line`,`eslint-disable-next-line`,`eslint-enable`,`eslint-env`,`exported`,`global`,`globals`,`oxlint`,`oxlint-disable`,`oxlint-disable-line`,`oxlint-disable-next-line`,`oxlint-enable`,`oxlint-env`]);function wt(e){return xt.has(e)}function Tt(e){return St.has(e)}function Et(e,t){if(typeof e!=`object`||!e)return;let n=Reflect.get(e,t);if(n===void 0||!Array.isArray(n))return;let r=[],i=0;for(let e of n){if(!y(e))return;r[i++]=e}return r}function Dt(e){let t=Ot(e.value);if(t===void 0)return;let n=vt.test(t.kind);if(!(e.type===`Line`&&!n||(t.kind===`eslint-disable-line`||t.kind===`oxlint-disable-line`)&&e.loc.start.line!==e.loc.end.line))return{comment:e,description:t.description,kind:t.kind,value:t.value}}function Ot(e){let{description:t,text:n}=At(e),r=n.search(bt),i=r===-1?n:n.slice(0,r);if(Ct.has(i))return{description:t,kind:i,value:r===-1?``:n.slice(r).trim()}}const kt=/\s-{2,}\s/u;function At(e){let[t,n]=e.split(kt);return t===void 0?{description:void 0,text:``}:{description:n?.trim(),text:t.trim()}}function jt(e,t){return e.line<t.line||e.line===t.line&&e.column<=t.column}function Mt(e){return{end:e.end,start:{column:0,line:e.start.line}}}const Nt=/\r\n|[\r\n\u2028\u2029]/u;function Pt(e,t){if(t===void 0)return Mt(e.loc);let n=e.value.split(Nt),[r]=n;if(r===void 0)return e.loc;let i=RegExp(`([\\s,]|^)${Lt(t)}(?:[\\s,]|$)`,`u`),a=e.loc.start,o=i.exec(r);if(o!==null){let[,n]=o;return n===void 0?e.loc:{end:{column:2+a.column+o.index+n.length+t.length,line:a.line},start:{column:2+a.column+o.index+n.length,line:a.line}}}for(let e=1;e<n.length;e+=1){let r=n[e];if(r===void 0)continue;let o=i.exec(r);if(o!==null){let[,n]=o;if(n===void 0)continue;return{end:{column:o.index+n.length+t.length,line:a.line+e},start:{column:o.index+n.length,line:a.line+e}}}}return e.loc}const Ft=/[|\\{}()[\]^$+*?.]/gu,It=String.raw`\$&`;function Lt(e){return e.replaceAll(Ft,It)}function Rt(e){let t={areas:[],duplicateDisableDirectives:[],numberOfRelatedDisableDirectives:new Map,unusedEnableDirectives:[]};for(let n of e.getAllComments()){let e=Dt(n);if(e===void 0)continue;let{kind:r}=e;if(!Tt(r))continue;let i=e.value!==void 0&&e.value!==``?e.value.split(yt):void 0;switch(r){case`eslint-disable`:case`oxlint-disable`:zt(t,n,n.loc.start,i,`block`);break;case`eslint-disable-line`:case`oxlint-disable-line`:{let{line:e}=n.loc.start;zt(t,n,{column:0,line:e},i,`line`),Bt(t,n,{column:-1,line:e+1},i,`line`);break}case`eslint-disable-next-line`:case`oxlint-disable-next-line`:{let{line:e}=n.loc.start;zt(t,n,{column:0,line:e+1},i,`line`),Bt(t,n,{column:-1,line:e+2},i,`line`);break}case`eslint-enable`:case`oxlint-enable`:Bt(t,n,n.loc.start,i,`block`);break}}return t}function zt(e,t,n,r,i){if(r===void 0){Wt(e.areas,void 0,n)!==void 0&&e.duplicateDisableDirectives.push({comment:t,ruleId:void 0}),e.areas.push({comment:t,end:void 0,kind:i,ruleId:void 0,start:n});return}for(let a of r)Wt(e.areas,a,n)!==void 0&&e.duplicateDisableDirectives.push({comment:t,ruleId:a}),e.areas.push({comment:t,end:void 0,kind:i,ruleId:a,start:n})}function Bt(e,t,n,r,i){let a=new Set;if(r===void 0){Vt(e.areas,n,i,void 0,a)||Ut(e,t,void 0),e.numberOfRelatedDisableDirectives.set(t,a.size);return}for(let o of r)Vt(e.areas,n,i,o,a)||Ut(e,t,o);e.numberOfRelatedDisableDirectives.set(t,a.size)}function Vt(e,t,n,r,i){let a=!1;for(let o=e.length-1;o>=0;--o){let s=e[o];s===void 0||!Ht(s,n,r)||(i.add(s.comment),s.end=t,a=!0)}return a}function Ht(e,t,n){return e.end!==void 0||e.kind!==t?!1:n===void 0||e.ruleId===n}function Ut(e,t,n){e.unusedEnableDirectives.push({comment:t,ruleId:n})}function Wt(e,t,n){for(let r=e.length-1;r>=0;--r){let i=e[r];if(i!==void 0&&(i.ruleId===void 0||i.ruleId===t)&&jt(i.start,n)&&(i.end===void 0||jt(n,i.end)))return i}}const Gt=t({create(e){let[t]=e.options,n=t?.allowWholeFile===!0,r=Rt(e.sourceCode),[i]=e.sourceCode.ast.tokens;if(n&&i===void 0)return{};for(let t of r.areas)t.end===void 0&&(n&&i!==void 0&&jt(t.start,i.loc.start)||e.report({data:{ruleId:t.ruleId??``},loc:Pt(t.comment,t.ruleId),messageId:t.ruleId===void 0?`missingPair`:`missingRulePair`}));return{}},meta:{docs:{description:"require a `eslint-enable` comment for every `eslint-disable` comment"},messages:{missingPair:`Requires 'eslint-enable' directive.`,missingRulePair:`Requires 'eslint-enable' directive for '{{ruleId}}'.`},schema:[{additionalProperties:!1,properties:{allowWholeFile:{type:`boolean`}},type:`object`}],type:`suggestion`}}),Kt=t({create(e){let t=Rt(e.sourceCode);for(let[n,r]of t.numberOfRelatedDisableDirectives)r>1&&e.report({data:{kind:`eslint-enable`},loc:Mt(n.loc),messageId:`aggregatingEnable`});return{}},meta:{docs:{description:"disallow `eslint-enable` comments for multiple `eslint-disable` directives"},messages:{aggregatingEnable:`'{{kind}}' comment enables rules for multiple disable directives. Please move '{{kind}}' after each disable directive.`},schema:[],type:`suggestion`}}),qt=t({create(e){let t=Rt(e.sourceCode);for(let n of t.duplicateDisableDirectives)e.report({data:{ruleId:n.ruleId??``},loc:Pt(n.comment,n.ruleId),messageId:n.ruleId===void 0?`duplicate`:`duplicateRule`});return{}},meta:{docs:{description:"disallow duplicate `eslint-disable` comments"},messages:{duplicate:`ESLint rules have been disabled already.`,duplicateRule:`'{{ruleId}}' rule has been disabled already.`},schema:[],type:`problem`}}),Jt=t({create(e){let t=Rt(e.sourceCode),r=e.options;if(r.length===0)return{};let i=n();for(let e of r)i.add(e);for(let n of t.areas)(n.ruleId===void 0||i.ignores(n.ruleId))&&e.report({data:{ruleId:n.ruleId??String(r)},loc:Pt(n.comment,n.ruleId),messageId:`disallow`});return{}},meta:{docs:{description:"disallow `eslint-disable` comments about specific rules"},messages:{disallow:`Disabling '{{ruleId}}' is not allowed.`},schema:{items:{type:`string`},type:`array`,uniqueItems:!0},type:`suggestion`}}),Yt=t({create(e){for(let t of e.sourceCode.getAllComments()){let n=Dt(t);if(n===void 0)continue;let{kind:r}=n;wt(r)&&(n.value===void 0||n.value===``)&&e.report({data:{kind:n.kind},loc:Mt(n.comment.loc),messageId:`unexpected`})}return{}},meta:{docs:{description:"disallow `eslint-disable` comments without rule names"},messages:{unexpected:`Unexpected unlimited '{{kind}}' comment. Specify some rule names to disable.`},schema:[],type:`suggestion`}}),Xt=t({create(e){let t=Rt(e.sourceCode);for(let n of t.unusedEnableDirectives)e.report({data:{kind:`eslint-enable`,ruleId:n.ruleId??``},loc:Pt(n.comment,n.ruleId),messageId:n.ruleId===void 0?`unused`:`unusedRule`});return{}},meta:{docs:{description:"disallow unused `eslint-enable` comments"},messages:{unused:`Unused '{{kind}}' comment. No reported rules are disabled.`,unusedRule:`'{{ruleId}}' rule is disabled but never reported. Please remove unnecessary '{{kind}}' comment.`},schema:[],type:`suggestion`}}),Zt=t({create(e){let t=new Set(Et(e.options[0],`allow`));for(let n of e.sourceCode.getAllComments()){let r=Dt(n);r===void 0||n.type===`Line`||t.has(r.kind)||e.report({loc:Mt(r.comment.loc),messageId:`disallow`})}return{}},meta:{docs:{description:`disallow ESLint directive-comments`},messages:{disallow:`Unexpected ESLint directive comment.`},schema:[{additionalProperties:!1,properties:{allow:{items:{type:`string`},type:`array`,uniqueItems:!0}},type:`object`}],type:`suggestion`}}),Qt=/\s-{2,}\s/u,$t=/^(?<kind>oxlint-disable|oxlint-enable)(?:\s|$)/u,en=t({create(e){let t=new Set(Et(e.options[0],`ignore`));function n(n){let r=Dt(n);if(r!==void 0){let{kind:n}=r;if(!Tt(n)||t.has(n)||r.description!==void 0)return;e.report({data:{kind:r.kind},loc:r.comment.loc,messageId:`missingDescription`});return}if(n.type!==`Line`)return;let i=n.value.trim(),a=$t.exec(i);if(a===null)return;let o=a.groups?.kind;o!==void 0&&Tt(o)&&(t.has(o)||Qt.test(i)||e.report({data:{kind:o},loc:n.loc,messageId:`missingDescription`}))}for(let t of e.sourceCode.getAllComments())n(t);return{}},meta:{docs:{description:"require description for `eslint-disable` and `eslint-enable` directives"},messages:{missingDescription:`Missing description for '{{kind}}' comment.`},schema:[{additionalProperties:!1,properties:{ignore:{items:{type:`string`},type:`array`,uniqueItems:!0}},type:`object`}],type:`suggestion`}}),tn={baseThreshold:10,errorThreshold:25,interfacePenalty:20,performanceMode:!0,warnThreshold:15};function nn(e){let{callee:t}=e;return t.type===`MemberExpression`&&t.object.type===`Identifier`&&t.object.name===`Ianitor`}function rn(e){if(e.type!==`TSTypeReference`)return e;let{typeName:t,typeArguments:n}=e;return t.type!==`Identifier`||t.name!==`Readonly`?e:n?.params[0]??e}function an(e){let t=rn(e);if(t.type!==`TSTypeReference`)return;let{typeName:n,typeArguments:r}=t;if(n.type!==`TSQualifiedName`)return;let{left:i,right:a}=n;if(i.type!==`Identifier`||i.name!==`Ianitor`||a.type!==`Identifier`||a.name!==`Static`)return;let o=r?.params[0];if(o?.type!==`TSTypeQuery`)return;let{exprName:s}=o;return s.type===`Identifier`?s.name:void 0}function on(e){let t=rn(e);if(t.type!==`TSTypeReference`)return!1;let{typeName:n,typeArguments:r}=t;if(n.type!==`TSQualifiedName`)return!1;let{left:i,right:a}=n;return i.type!==`Identifier`||i.name!==`Ianitor`||a.type!==`Identifier`||a.name!==`Static`?!1:r?.params[0]?.type===`TSTypeQuery`}function sn(e){let{callee:t}=e;if(t.type!==`MemberExpression`||t.property.type!==`Identifier`)return 0;switch(t.property.name){case`array`:case`instanceIsA`:case`instanceOf`:case`optional`:return 2;case`boolean`:case`number`:case`string`:return 1;case`interface`:case`strictInterface`:{let[t]=e.arguments;return t?.type===`ObjectExpression`?10+t.properties.length*3:0}case`intersection`:case`union`:return e.arguments.length*2;case`map`:case`record`:return 3;default:return 1}}function F(e,t,n,r){let i=e+t;return n.performanceMode?Math.min(i,r):i}function cn(e,t,n,r,i,a,o,s=0){return F(e,I(t,n,r,i,a,o)+s,r,o)}function ln(e,t,n,r,i,a,o){let s=e;for(let e of t){if(!(`typeAnnotation`in e))continue;let{typeAnnotation:t}=e;t?.type===`TSTypeAnnotation`&&(s=cn(s,t.typeAnnotation,n,r,i,a,o))}return s}function un(e,t,n,r,i,a,o,s,c){if(`types`in t){let l=e,{types:u}=t;for(let e of u)l=cn(l,e,n,r,i,a,o);return F(l,s*(u.length+c),r,o)}return e}function dn(e,t){let n=t.get(e);if(n!==void 0)return n;let r=Math.log2(e+1);return t.set(e,r),r}function I(e,t,n,r,i,a){let o=r.nodeCache.get(e);if(o!==void 0)return o;if(r.visitedNodes.has(e))return 50;r.visitedNodes.add(e);let s=0,c=t+1;switch(e.type){case`TSAnyKeyword`:case`TSNeverKeyword`:case`TSUnknownKeyword`:break;case`TSArrayType`:if(`elementType`in e){let{elementType:t}=e;s=F(I(t,c,n,r,i,a),1,n,a);break}s=1;break;case`TSBigIntKeyword`:case`TSBooleanKeyword`:case`TSNullKeyword`:case`TSNumberKeyword`:case`TSStringKeyword`:case`TSSymbolKeyword`:case`TSUndefinedKeyword`:case`TSVoidKeyword`:s=1;break;case`TSConditionalType`:{s=3;let{checkType:t,extendsType:o,trueType:l,falseType:u}=e;t!==void 0&&(s=F(s,I(t,c,n,r,i,a),n,a)),o!==void 0&&(s=F(s,I(o,c,n,r,i,a),n,a)),l!==void 0&&(s=F(s,I(l,c,n,r,i,a),n,a)),u!==void 0&&(s=F(s,I(u,c,n,r,i,a),n,a));break}case`TSFunctionType`:case`TSMethodSignature`:{s=2;let{params:t}=e;for(let e of t){if(!(`typeAnnotation`in e))continue;let{typeAnnotation:t}=e;t?.type===`TSTypeAnnotation`&&(s=F(s,I(t.typeAnnotation,c,n,r,i,a),n,a))}if(`returnType`in e){let{returnType:t}=e;t?.type===`TSTypeAnnotation`&&(s=F(s,I(t.typeAnnotation,c,n,r,i,a),n,a))}break}case`TSInterfaceDeclaration`:{s=n.interfacePenalty;let{extends:t,body:o}=e;t!==void 0&&t.length>0&&(s=F(s,t.length*5,n,a));let l=o.body;s=F(s,l.length*2,n,a),s=ln(s,l,c,n,r,i,a);break}case`TSIntersectionType`:s=un(s,e,c,n,r,i,a,3,0);break;case`TSMappedType`:{s=5;let{constraint:t,typeAnnotation:o}=e;t!==void 0&&(s=cn(s,t,c,n,r,i,a)),o!=null&&(s=cn(s,o,c,n,r,i,a));break}case`TSTupleType`:{let{elementTypes:t}=e;s=1;for(let e of t)e.type===`TSRestType`||e.type===`TSOptionalType`||(s=cn(s,e,c,n,r,i,a));s=F(s,1.5*t.length,n,a);break}case`TSTypeLiteral`:{let{members:t}=e;s=2+t.length*.5,s=ln(s,t,c,n,r,i,a);break}case`TSTypeReference`:{s=2;let{typeArguments:t}=e,o=t?.params??[];for(let e of o)s=cn(s,e,c,n,r,i,a,2);break}case`TSUnionType`:s=un(s,e,c,n,r,i,a,2,-1);break;default:s=1}return s*=dn(t,i),r.nodeCache.set(e,s),r.visitedNodes.delete(e),s}const fn=t({create(e){let t=e.options[0]??{},n={...tn,...t},r={nodeCache:new WeakMap,visitedNodes:new WeakSet},i=new Set,a=new Map,o=n.errorThreshold*2,s=!1,c=new Map,l=new Map,u=new Map;return{Identifier(e){e.name===`Ianitor`&&(s=!0)},"Program:exit"(){if(s){for(let[t,n]of l.entries())e.report({data:{score:n.complexity.toFixed(1)},messageId:`missingIanitorCheckType`,node:t});for(let[t]of c.entries())e.report({data:{name:t.id.name},messageId:`complexInterfaceNeedsCheck`,node:t});for(let[t,n]of u.entries()){let{id:r}=t;r.type===`Identifier`&&i.has(r.name)||e.report({data:{score:n.complexity.toFixed(1)},messageId:`missingIanitorCheckType`,node:r})}}},TSInterfaceDeclaration(e){let t=I(e,0,n,r,a,o);t<n.interfacePenalty||c.set(e,{complexity:t})},TSTypeAliasDeclaration(e){let t=an(e.typeAnnotation);if(t!==void 0&&(s=!0,i.add(t)),on(e.typeAnnotation))return;let c=I(e.typeAnnotation,0,n,r,a,o);c<n.baseThreshold||l.set(e,{complexity:c})},VariableDeclarator(e){let{init:t,id:r}=e;if(t?.type!==`CallExpression`||!nn(t)||(s=!0,r.type===`Identifier`&&r.typeAnnotation!==void 0&&r.typeAnnotation!==null))return;let i=sn(t);i<n.baseThreshold||u.set(e,{complexity:i})}}},meta:{docs:{description:`Enforce Ianitor.Check<T> type annotations on complex TypeScript types`,recommended:!0},messages:{complexInterfaceNeedsCheck:`Interface '{{name}}' requires Ianitor.Check<T> annotation (interfaces always need explicit checking)`,missingIanitorCheckType:`Complex type (score: {{score}}) requires Ianitor.Check<T> annotation for type safety`},schema:[{additionalProperties:!1,properties:{baseThreshold:{minimum:1,type:`number`},errorThreshold:{minimum:1,type:`number`},interfacePenalty:{minimum:1,type:`number`},performanceMode:{type:`boolean`},warnThreshold:{minimum:1,type:`number`}},type:`object`}],type:`problem`}}),pn={enum:[`roblox-ts`,`standard`],type:`string`};function mn(e){return e===`roblox-ts`||e===`standard`}const hn=new Set([`react`,`react-dom`]),gn=new Set([`@rbxts/react`,`@rbxts/roact`]);function _n(e){return e===`standard`?hn:gn}function vn(e){return _n(xn(e))}function yn(e,t){return t.has(e.source.value)}function bn(e,t,n,r){if(yn(e,t))for(let t of e.specifiers){if(t.type===`ImportDefaultSpecifier`||t.type===`ImportNamespaceSpecifier`){n.add(t.local.name);continue}let e=fe(t);e!==void 0&&r(e,t.local.name)}}function xn(e){return!x(e)||e.environment!==`standard`?`roblox-ts`:`standard`}const Sn=new Map([[`useEffect`,1],[`useInsertionEffect`,1],[`useLayoutEffect`,1]]),Cn=new Set([`useCallback`,`useMemo`]),wn=new Set([`useBinding`,`useRef`]),Tn=new Set([`useReducer`,`useState`,`useTransition`]),En=new Set([...wn,...Tn]),Dn=new Set([`ArrayExpression`,`ArrowFunctionExpression`,`ClassExpression`,`FunctionExpression`,`NewExpression`,`ObjectExpression`]);function On(e){return e===`aggressive`||e===`definite`||e===`moderate`}function kn(e,t){if(!e.computed&&e.object.type===`Identifier`&&t.has(e.object.name))return e.property.type===`Identifier`?e.property.name:void 0}function An(e){let t=w(e);for(;t.type===`MemberExpression`;)t=w(t.object);return t.type===`Identifier`?t:void 0}function jn(e){return Dn.has(e.type)}function Mn(e){if(e!==null){if(e.type===`Identifier`)return e.name;if(e.type===`AssignmentPattern`&&e.left.type===`Identifier`)return e.left.name;if(e.type===`RestElement`&&e.argument.type===`Identifier`)return e.argument.name}}function Nn(e,t,n){let r=e.elements[n];return r!=null&&Mn(r)===t}function Pn(e){return e.scope.type===`module`||e.scope.type===`global`}function Fn(e,t){if(`hooks`in e&&Array.isArray(e.hooks))for(let n of e.hooks){if(!(x(n)&&`name`in n&&y(n.name)))continue;let e=`dependenciesIndex`in n&&b(n.dependenciesIndex)?n.dependenciesIndex:1;t.set(n.name,e)}}const In=t({create(e){let[t]=e.options,n=x(t)?t:{},r=`mode`in n&&On(n.mode)?n.mode:`definite`,i=`environment`in n&&mn(n.environment)?n.environment:`roblox-ts`,a=new Map(Sn);Fn(n,a);let o=_n(i),s=new Set,c=new Map,l=new Set,u=new Map,d=new WeakMap,f=new WeakMap,p=new WeakMap,{sourceCode:m}=e;function h(e){let t=d.get(e);if(t!==void 0)return t;let n=m.getScope(e);return d.set(e,n),n}function g(e){let t=h(e),n=f.get(t);if(n===void 0)n=new Map,f.set(t,n);else if(n.has(e.name))return n.get(e.name);let r=t;for(;r!==null;){let t=r.set.get(e.name);if(t!==void 0)return n.set(e.name,t),t;r=r.upper}n.set(e.name,void 0)}function _(e){let{callee:t}=e;if(t.type===`Identifier`)return l.has(t.name);if(t.type===`MemberExpression`){let e=kn(t,s);return e!==void 0&&Cn.has(e)}return!1}function v(e){let{callee:t}=e;if(t.type===`Identifier`){let e=u.get(t.name);return e===void 0?void 0:wn.has(e)?`whole`:Tn.has(e)?`index1`:void 0}if(t.type===`MemberExpression`){let e=kn(t,s);if(e===void 0)return;if(wn.has(e))return`whole`;if(Tn.has(e))return`index1`}}function ee(e,t){if(e.type===`Parameter`)return`unknown`;if(e.type===`ImportBinding`)return`memoized`;let{node:n}=e;if(n.type===`FunctionDeclaration`||n.type===`ClassDeclaration`)return`unmemoized`;if(n.type!==`VariableDeclarator`)return`unknown`;let i=n.parent;if(i.type===`VariableDeclaration`&&i.kind!==`const`)return r===`definite`?`unknown`:`unmemoized`;let a=n.init===null?void 0:w(n.init);return a===void 0?`unknown`:jn(a)?`unmemoized`:a.type===`CallExpression`?te(a,n.id,t):`unknown`}function te(e,t,n){if(_(e))return`memoized`;let i=v(e);return i===`whole`||i===`index1`&&t.type===`ArrayPattern`&&Nn(t,n,1)?`memoized`:r===`definite`?`unknown`:`unmemoized`}function y(e){let t=p.get(e);if(t!==void 0)return t;if(Pn(e))return p.set(e,`memoized`),`memoized`;let n=!1;for(let t of e.defs){let r=ee(t,e.name);if(r===`unmemoized`)return p.set(e,`unmemoized`),`unmemoized`;r===`memoized`&&(n=!0)}let i=n?`memoized`:`unknown`;return r===`aggressive`&&i!==`memoized`&&(i=`unmemoized`),p.set(e,i),i}function b(e){let t=w(e);if(jn(t))return`unmemoized`;if(t.type===`CallExpression`)return r===`definite`?`unknown`:`unmemoized`;let n=An(t);if(n===void 0)return`unknown`;let i=g(n);return i===void 0?`unknown`:y(i)}function ne(e){let{callee:t}=e;if(t.type===`Identifier`)return c.get(t.name);if(t.type===`MemberExpression`){let e=kn(t,s);return e===void 0?void 0:a.get(e)}}return{CallExpression(t){let n=ne(t);if(n===void 0)return;let i=t.arguments[n];if(i?.type===`ArrayExpression`)for(let t of i.elements){if(t===null)continue;if(t.type===`SpreadElement`){if(r===`definite`)continue;let n=t.argument,i=m.getText(n);e.report({data:{name:i},messageId:`unmemoizedDependency`,node:n});continue}if(b(t)!==`unmemoized`)continue;let n=m.getText(t);e.report({data:{name:n},messageId:`unmemoizedDependency`,node:t})}},ImportDeclaration(e){bn(e,o,s,(e,t)=>{if(a.has(e)){let n=a.get(e);c.set(t,n??1)}Cn.has(e)&&l.add(t),En.has(e)&&u.set(t,e)})}}},meta:{docs:{description:`Flags effect dependencies that are not memoized. Unmemoized dependencies can cause unnecessary re-renders or infinite loops.`},messages:{unmemoizedDependency:`{{name}} is not memoized. Wrap it in useMemo/useCallback or move it to module scope.`},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:{description:`Array of effect hook entries to check for memoized dependencies`,items:{additionalProperties:!1,properties:{dependenciesIndex:{description:`Index of the dependencies array for validation`,type:`number`},name:{description:`The name of the hook`,type:`string`}},required:[`name`],type:`object`},type:`array`},mode:{default:`definite`,description:`Strictness for memoization detection: definite (only obvious), moderate (unknown calls and non-const), aggressive (any non-module).`,enum:[`aggressive`,`definite`,`moderate`],type:`string`}},type:`object`}],type:`problem`}});function Ln(e){return e.type===`Identifier`||e.type===`PrivateIdentifier`||L(e)}function L(e){let t=w(e);return t.type===`Identifier`||$e(t)?!0:N(t)?Rn(t):Se(t)?t.operator!==`delete`&&L(t.argument):Ce(t)||we(t)?zn(t):Te(t)?Bn(t):Je(t)?Un(t.expressions):Ge(t)?Vn(t):Ke(t)?Hn(t):Ee(t)?Un(t.expressions):ze(t)}function Rn(e){return e.optional||e.object.type===`Super`||!L(e.object)?!1:!e.computed||L(e.property)}function zn(e){return L(e.left)&&L(e.right)}function Bn(e){return L(e.test)&&L(e.consequent)&&L(e.alternate)}function Vn(e){for(let t of e.elements)if(t!==null&&(t.type===`SpreadElement`||!L(t)))return!1;return!0}function Hn(e){for(let t of e.properties)if(t.type===`SpreadElement`||t.kind!==`init`||t.method||t.computed&&!Ln(t.key)||!L(t.value))return!1;return!0}function Un(e){for(let t of e)if(!L(t))return!1;return!0}const Wn={environment:`roblox-ts`,requireExplicitGenericOnNewArray:!0};function Gn(e){return e.type===`Identifier`}function Kn(e,t){let n=w(t.callee);return!Gn(n)||n.name!==`Array`?!1:!D(e,n,`Array`)}function qn(e,t){if(e.type!==`TSTypeReference`||!Gn(e.typeName)||e.typeName.name!==`Array`&&e.typeName.name!==`ReadonlyArray`||e.typeArguments?.params.length!==1)return;let[n]=e.typeArguments.params;return n===void 0?void 0:t.getText(n)}const Jn=/:\s*(?:Array<.+>|ReadonlyArray<.+>)\s*=/u;function Yn(e){return Jn.exec(e)!==null}function Xn(e){if(Gn(e)||e.type===`ArrayPattern`||e.type===`ObjectPattern`)return e.typeAnnotation??void 0}function Zn(e,t){let{parent:n}=e;if(A(n)&&n.init===e){let e=Xn(n.id);return e!==void 0&&qn(e.typeAnnotation,t)!==void 0}return Qe(n)&&n.right===e?Yn(t.getText(n)):Oe(n)&&n.value===e&&n.typeAnnotation!==void 0&&n.typeAnnotation!==null?qn(n.typeAnnotation.typeAnnotation,t)!==void 0:Ze(n)&&n.expression===e||Xe(n)&&n.expression===e?qn(n.typeAnnotation,t)!==void 0:!1}function Qn(e){if(e===void 0)return!1;let{typeAnnotation:t}=e;return t.type!==`TSTypeReference`||!Gn(t.typeName)?!1:t.typeName.name===`ReadonlyArray`}function $n(e){let t=w(e);return ze(t)&&`value`in t?!b(t.value):Ge(t)||Ke(t)||Be(t)||Ne(t)||Ie(t)?!0:Je(t)?t.expressions.length===0:Se(t)?t.operator===`void`||t.operator===`typeof`&&!t.prefix:!1}function er(e,t){let n=w(e);if(!(!_e(n)||n.optional)&&!(!N(n.callee)||n.callee.optional)&&!(!Gn(n.callee.object)||n.callee.object.name!==t))return T(n.callee)===`push`?n:void 0}function tr(e,t,n){for(let r=t;r<e.length;r+=1){let t=e[r];if(!(t===void 0||!Ye(t))&&er(t.expression,n)!==void 0)return!0}return!1}function nr(e,t){let n=[],r=0;for(let i of e){if(i.type===`SpreadElement`){n[r++]=`...${t.getText(i.argument)}`;continue}n[r++]=t.getText(i)}return`[${n.join(`, `)}]`}function rr(e,t,n,r,i){if(n.init===null||r.length===0)return[];let[a]=r,o=r.at(-1);if(a===void 0||o===void 0)return[];let[s]=a.range;for(;s>0;){let e=t.text[s-1];if(e===` `||e===` `){--s;continue}e===`
2
- `&&--s;break}return[e.replaceText(n.init,i),e.removeRange([s,o.range[1]])]}function ir(e,t,n){let{sourceCode:r}=e;if(t.arguments.length===0){ar(e,t,n);return}if(t.arguments.length>1){or(e,t,n);return}sr(e,t,n,r)}function ar(e,t,n){n.requireExplicitGenericOnNewArray&&(t.typeArguments!==void 0&&t.typeArguments!==null&&t.typeArguments.params.length>0||Zn(t,e.sourceCode)||e.report({messageId:`requireExplicitGenericOnNewArray`,node:t}))}function or(e,t,n){let[r]=t.arguments;if(r===void 0||r.type!==`SpreadElement`&&n.environment===`roblox-ts`&&!$n(r))return;let i=nr(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 sr(e,t,n,r){let[i]=t.arguments;if(i===void 0)return;if(i.type===`SpreadElement`){cr(e,t,r.getText(i.argument));return}if(!$n(i)){lr(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 cr(e,t,n){e.report({messageId:`avoidSingleArgumentConstructor`,node:t,suggest:[{fix(e){return e.replaceText(t,`[...${n}]`)},messageId:`suggestArrayLiteral`}]})}function lr(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 ur(e,t,n){let r=t[n];if(r===void 0||!je(r)||r.kind!==`const`&&r.kind!==`let`||r.declarations.length!==1)return;let[i]=r.declarations;if(i===void 0||!Gn(i.id)||i.init===null||!We(i.init)||!Kn(e,i.init)||i.init.arguments.length>0||Qn(Xn(i.id)))return;let a=i.id.name,o=dr(e,t,n+1,a);if(o.pushStatements.length!==0&&!tr(t,o.nextIndex,a))return{arrayIdentifierName:a,declarator:i,hasUnsafeArgument:o.hasUnsafeArgument,literalText:`[${o.argumentParts.join(`, `)}]`,pushStatements:o.pushStatements,statement:r}}function dr(e,t,n,r){let i=[],a=[],o=!1,s=n;for(;s<t.length;){let n=t[s];if(n===void 0||!Ye(n))break;let c=er(n.expression,r);if(c===void 0||c.arguments.length===0)break;i.push(n),o=fr(e,c,a)||o,s+=1}return{argumentParts:a,hasUnsafeArgument:o,nextIndex:s,pushStatements:i}}function fr(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}L(i)||(r=!0),n.push(e.getText(i))}return r}const pr=t({create(e){let t=e.options?.[0],n=typeof t==`object`&&t?{...Wn,...t}:{...Wn},{sourceCode:r}=e;function i(t){for(let n=0;n<t.length;n+=1){let i=ur(r,t,n);if(i!==void 0){if(!i.hasUnsafeArgument){e.report({fix(e){return rr(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 rr(e,r,i.declarator,i.pushStatements,i.literalText)},messageId:`suggestCollapseArrayPushInitialization`}]})}}}return{BlockStatement(e){i(e.body)},NewExpression(t){Kn(r,t)&&ir(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`}}),mr=new Set([`parent`,`range`,`loc`,`tokens`,`comments`]);function hr(e){return e.type===`Identifier`}function gr(e){return`type`in e&&typeof e.type==`string`}function _r(e,t){for(let n of Object.keys(e)){if(mr.has(n))continue;let r=Reflect.get(e,n);r!=null&&t.push(r)}}function vr(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(gr(e)){if(e.type===`Identifier`&&e.name===t)return!0;_r(e,n)}}}return!1}function yr(e,t){let n=w(t.callee);return!hr(n)||n.name!==`Array`?!1:!D(e,n,`Array`)}function br(e,t,n){if(!Ye(e))return;let{expression:r}=e;if(!xe(r)||r.operator!==`=`)return;let{left:i}=r;if(!(N(i)&&i.computed))return;let{object:a,property:o}=i;if(!(!hr(a)||a.name!==t)&&!(!Ue(o)||o.value!==n))return{expression:r,statement:e}}function xr(e,t,n){let r=t[n];if(r===void 0||!je(r)||r.declarations.length!==1)return;let[i]=r.declarations;if(i===void 0||!A(i)||i.init===null)return;let{init:a}=i;if(!We(a)||a.arguments.length>0||!yr(e,a)||!tt(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=br(e,o,l);if(n!==void 0){s.push(n),l+=1,c+=1;continue}if(vr(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 Sr(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]===`
1
+ import{definePlugin as e,defineRule as t}from"oxlint-plugin-utilities";import n from"ignore";import r,{basename as i,dirname as a,extname as o,isAbsolute as s,join as c,relative as l}from"node:path";import{parse as u}from"yuku-parser";import{existsSync as d,readFileSync as f,readdirSync as p}from"node:fs";import{ResolverFactory as m}from"oxc-resolver";import{type as h}from"arktype";import{Minimatch as g,minimatch as _}from"minimatch";function v(e,t){return e.type===`TSParenthesizedType`?v(e.typeAnnotation,t):e.type===`TSArrayType`?`Array<${v(e.elementType,t)}>`:e.type===`TSTypeOperator`&&e.operator===`readonly`&&e.typeAnnotation.type===`TSArrayType`?`ReadonlyArray<${v(e.typeAnnotation.elementType,t)}>`:t.getText(e)}function ee({parent:e}){let t=e.type===`TSParenthesizedType`?e.parent:e;return!(t.type===`TSRestType`&&t.parent.type===`TSTupleType`||t.type===`TSTupleType`||t.type===`TSArrayType`||t.type===`TSTypeOperator`&&t.operator===`readonly`)}const te=t({createOnce(e){function t(t){e.report({fix(n){return n.replaceText(t,v(t,e.sourceCode))},messageId:`useGenericArrayType`,node:t})}return{TSArrayType(e){ee(e)&&t(e)},TSTypeOperator(e){e.operator===`readonly`&&e.typeAnnotation.type===`TSArrayType`&&ee(e)&&t(e)}}},meta:{docs:{description:`Disallow bracket array type syntax and require Array<T> / ReadonlyArray<T>.`},fixable:`code`,messages:{useGenericArrayType:`Bracket array type syntax is not allowed. Use Array<T> or ReadonlyArray<T> generic syntax.`},schema:[],type:`problem`}});function y(e){return typeof e==`string`}function b(e){return typeof e==`number`}function x(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ne(e){return y(e)&&e.length>0}function S(e){if(!Array.isArray(e))return!1;for(let t of e)if(!y(t))return!1;return!0}function re(e){if(!x(e))return!1;for(let t of Object.values(e))if(!y(t))return!1;return!0}function ie(e){return b(e)&&!Number.isNaN(e)}function C(e){let t=e;for(;;)switch(t.type){case`ChainExpression`:case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:t=t.expression;break;default:return t}}function w(e){return e.computed?e.property.type===`Literal`&&y(e.property.value)?e.property.value:void 0:e.property.type===`Identifier`?e.property.name:void 0}function T(e,t){let n=e;for(;n!==null;){let e=n.set.get(t);if(e!==void 0)return e;n=n.upper}}function E(e,t,n){let r=e.getScope(t);for(;r!==null;){let e=r.set.get(n);if(e!==void 0&&e.defs.length>0)return!0;r=r.upper}return!1}const ae=/^[A-Z]/v,oe=new Set([`end`,`loc`,`parent`,`range`,`start`,`type`]);function D(e){return x(e)&&y(e.type)}function se(e){return oe.has(e)}function O(e){return ae.test(e)}function k(e){return e.type===`VariableDeclarator`}function ce(e){return le(e.typeAnnotation)?e.typeAnnotation:void 0}function le(e){return x(e)&&`type`in e&&e.type===`TSTypeAnnotation`}function ue(e,t){return e.type===`Identifier`&&e.name===t}function de(e,t,n,r){return e.callee.type===`Identifier`?t.has(e.callee.name):e.callee.type!==`MemberExpression`||e.callee.object.type!==`Identifier`?!1:n.has(e.callee.object.name)&&w(e.callee)===r}function fe(e,t,n){return de(e,t,n,`useMemo`)}function pe({imported:e}){return e.type===`Identifier`?e.name:e.value}function A(e){return e.type===`Identifier`&&y(e.name)}function j(e){return e.type===`Identifier`}function me(e){return e.type===`JSXIdentifier`&&`name`in e}function he(e){return e.type===`JSXOpeningElement`}function ge(e){return e.type===`ImportDeclaration`}function M(e){return e.type===`Literal`&&y(e.value)}function _e(e){return e.type===`CallExpression`}function ve(e){return e.type===`ImportSpecifier`}function ye(e){return e.type===`ExportSpecifier`}function be(e){return e.type===`Property`}function N(e){return e.type===`MemberExpression`}function xe(e){return e.type===`AssignmentExpression`}function Se(e){return e.type===`UnaryExpression`}function Ce(e){return e.type===`BinaryExpression`}function we(e){return e.type===`LogicalExpression`}function Te(e){return e.type===`ConditionalExpression`}function Ee(e){return e.type===`SequenceExpression`}function De(e){return e.type===`MethodDefinition`||e.type===`TSAbstractMethodDefinition`}function Oe(e){return e.type===`PropertyDefinition`||e.type===`TSAbstractPropertyDefinition`}function ke(e){return e.type===`ImportDefaultSpecifier`}function Ae(e){return e.type===`ImportNamespaceSpecifier`}function je(e){return e.type===`VariableDeclaration`}function Me(e){return e.type===`ExportNamedDeclaration`}function Ne(e){return e.type===`FunctionDeclaration`||e.type===`FunctionExpression`}function Pe(e){return e.type===`ArrowFunctionExpression`||e.type===`FunctionExpression`}function P(e){return e.type===`ArrowFunctionExpression`||e.type===`FunctionDeclaration`||e.type===`FunctionExpression`}function Fe(e,t){return ue(e.callee,t)}function Ie(e){return e.type===`ClassDeclaration`||e.type===`ClassExpression`}function Le(e){return e.type===`TSTypeAliasDeclaration`}function Re(e){return e.type===`TSPropertySignature`}function ze(e){return e.type===`Literal`}function Be(e){return e.type===`ArrowFunctionExpression`}function Ve(e){return Ne(e)||Be(e)}function He(e){return e.type===`TSQualifiedName`}function Ue(e){return e.type===`Literal`&&b(e.value)}function We(e){return e.type===`NewExpression`}function Ge(e){return e.type===`ArrayExpression`}function Ke(e){return e.type===`ObjectExpression`}function qe(e){return e.type===`ObjectPattern`}function Je(e){return e.type===`TemplateLiteral`}function Ye(e){return e.type===`ExpressionStatement`}function Xe(e){return e.type===`TSTypeAssertion`}function Ze(e){return e.type===`TSAsExpression`}function Qe(e){return e.type===`AssignmentPattern`}function $e(e){return e.type===`ThisExpression`}function et(e){if(!_e(e)||e.optional)return!1;let{callee:t}=e;if(!j(t)||t.name!==`require`||e.arguments.length!==1)return!1;let[n]=e.arguments;return n!==void 0&&M(n)}function tt(e){return e.type===`Identifier`}function nt(e){return e.type!==`PrivateIdentifier`}function rt(e){return e.type===`JSXIdentifier`?e.name:e.name.name}function it(e){if(!(x(e)&&`bannedInstances`in e))return new Map;let{bannedInstances:t}=e,n=new Map;if(S(t)){for(let e of t)n.set(e.toLowerCase(),{message:void 0,originalName:e});return n}if(re(t))for(let[e,r]of Object.entries(t))n.set(e.toLowerCase(),{message:r,originalName:e});return n}function at(e){if(!(x(e)&&`bannedProperties`in e))return new Map;let{bannedProperties:t}=e,n=new Map;if(!x(t))return n;for(let[e,r]of Object.entries(t)){if(!x(r))continue;let t=new Map;for(let[e,n]of Object.entries(r))y(n)&&t.set(e.toLowerCase(),{message:n,propertyName:e});t.size>0&&n.set(e.toLowerCase(),t)}return n}function ot(e){let t=e;for(;t.upper!==null&&t.type!==`function`&&t.type!==`module`&&t.type!==`global`;)t=t.upper;return t}function st(e){if(!Fe(e,`Instance`))return;let[t]=e.arguments;if(!(t?.type!==`Literal`||!y(t.value)))return t.value}function ct(e){let{parent:t}=e;if(t?.type===`VariableDeclarator`&&t.init===e&&t.id.type===`Identifier`)return t}const lt=t({create(e){let{sourceCode:t}=e,[n]=e.options;if(n===void 0||typeof n!=`object`||!n)return{};let r=it(n),i=at(n);if(r.size===0&&i.size===0)return{};let a=new Map,o=new Set;function s(t,n){if(n.message!==void 0&&n.message!==``){e.report({data:{className:n.originalName,customMessage:n.message},messageId:`bannedInstanceCustom`,node:t});return}e.report({data:{className:n.originalName},messageId:`bannedInstance`,node:t})}function c(t,n,r){if(r.message!==``){e.report({data:{className:n,customMessage:r.message,propertyName:r.propertyName},messageId:`bannedPropertyCustom`,node:t});return}e.report({data:{className:n,propertyName:r.propertyName},messageId:`bannedProperty`,node:t})}function l(e){if(o.has(e)||e.id.type!==`Identifier`||e.init===null)return;let n=C(e.init);if(n.type!==`NewExpression`)return;let r=st(n);if(r===void 0)return;let i=T(t.getScope(e),e.id.name);i!==void 0&&(a.set(i,{className:r,functionScope:ot(i.scope)}),o.add(e))}function u(e){let n=t.getScope(e),r=T(n,e.name);if(r===void 0)return;let i=a.get(r);if(i!==void 0)return i.functionScope===ot(n)?i:void 0}return{AssignmentExpression(e){if(e.left.type!==`MemberExpression`)return;let t=w(e.left);if(t===void 0)return;let n=C(e.left.object);if(n.type!==`Identifier`)return;let r=u(n);if(r===void 0)return;let a=i.get(r.className.toLowerCase());if(a===void 0)return;let o=a.get(t.toLowerCase());o!==void 0&&c(e.left,r.className,o)},JSXOpeningElement(e){if(e.name.type!==`JSXIdentifier`)return;let{name:t}=e.name,n=t.charAt(0);if(n!==n.toLowerCase())return;let a=r.get(t.toLowerCase());a!==void 0&&s(e,a);let o=i.get(t.toLowerCase());if(o!==void 0)for(let n of e.attributes){if(n.type!==`JSXAttribute`)continue;let e=rt(n.name);if(e===void 0)continue;let r=o.get(e.toLowerCase());r!==void 0&&c(n,t,r)}},NewExpression(e){let t=st(e);if(t===void 0)return;let n=ct(e);n!==void 0&&l(n);let i=r.get(t.toLowerCase());i!==void 0&&s(e,i)},VariableDeclarator(e){l(e)}}},meta:{docs:{description:`Ban specified Roblox Instance classes and configured Instance properties.`},messages:{bannedInstance:`Instance class '{{className}}' is banned by project configuration. This class may cause performance issues, is deprecated, or has a better alternative. Check project guidelines for the recommended replacement.`,bannedInstanceCustom:`{{customMessage}}`,bannedProperty:`Property '{{propertyName}}' on Instance class '{{className}}' is banned by project configuration. This property may cause performance issues, is deprecated, or has a better alternative. Check project guidelines for the recommended replacement.`,bannedPropertyCustom:`{{customMessage}}`},schema:[{additionalProperties:!1,properties:{bannedInstances:{description:`Map of banned class names to custom messages, or an array of class names.`,oneOf:[{items:{type:`string`},type:`array`},{additionalProperties:{type:`string`},type:`object`}]},bannedProperties:{additionalProperties:{additionalProperties:{type:`string`},type:`object`},description:`Map of banned class names to maps of banned property names and custom messages.`,type:`object`}},type:`object`}],type:`problem`}}),ut=new Set([`FC`,`FunctionComponent`,`VFC`,`VoidFunctionComponent`]);function dt(e){if(e.type===`Identifier`&&ut.has(e.name))return e.name;if(e.type===`TSQualifiedName`&&ut.has(e.right.name))return e.right.name}function ft(e){let{typeAnnotation:t}=e.id;return le(t)?t:void 0}const pt=t({createOnce(e){return{VariableDeclarator(t){let n=ft(t);if(n===void 0)return;let r=n.typeAnnotation;r.type===`TSTypeReference`&&dt(r.typeName)!==void 0&&t.init?.type===`ArrowFunctionExpression`&&e.report({messageId:`banReactFC`,node:t})}}},meta:{docs:{description:`Ban React.FC and similar component type annotations. Use explicit function declarations instead.`},messages:{banReactFC:"Avoid React.FC/FunctionComponent/VFC/VoidFunctionComponent types. They break debug information and profiling. Use explicit function declarations instead: `function Component(props: Props) { ... }`"},schema:[],type:`problem`}}),mt=new Map([[`omit`,{originalName:`Omit`,replacementName:`Except`}]]);function ht(e){let t=new Map(mt);if(!(x(e)&&`bannedTypes`in e))return t;let{bannedTypes:n}=e;if(n===void 0)return t;if(S(n)){for(let e of n)t.set(e.toLowerCase(),{originalName:e,replacementName:void 0});return t}if(re(n))for(let[e,r]of Object.entries(n))t.set(e.toLowerCase(),{originalName:e,replacementName:r});return t}function gt(e){if(e.type===`Identifier`)return e.name;if(e.type===`TSQualifiedName`)return e.right.name}const _t=t({create(e){let[t]=e.options,n=ht(t);return{TSTypeReference(t){let r=gt(t.typeName);if(r===void 0)return;let i=n.get(r.toLowerCase());if(i!==void 0){if(i.replacementName!==void 0&&i.replacementName!==``){e.report({data:{replacementName:i.replacementName,typeName:i.originalName},messageId:`bannedTypeWithReplacement`,node:t.typeName});return}e.report({data:{typeName:i.originalName},messageId:`bannedType`,node:t.typeName})}}}},meta:{docs:{description:`Ban configured TypeScript utility types, defaulting to Omit in favor of Except.`},messages:{bannedType:`Type '{{typeName}}' is banned by project configuration. Use the project-preferred alternative for this type.`,bannedTypeWithReplacement:`Type '{{typeName}}' is banned. Use '{{replacementName}}' instead.`},schema:[{additionalProperties:!1,properties:{bannedTypes:{default:{Omit:`Except`},description:`Array of banned type names or an object mapping banned type names to preferred replacement names.`,oneOf:[{items:{type:`string`},type:`array`},{additionalProperties:{type:`string`},type:`object`}]}},type:`object`}],type:`problem`}}),vt=/^(?:eslint|oxlint)-disable-(?:next-)?line$/u,yt=/[\s,]+/gu,bt=/\s/u,xt=new Set([`eslint-disable`,`eslint-disable-line`,`eslint-disable-next-line`,`oxlint-disable`,`oxlint-disable-line`,`oxlint-disable-next-line`]),St=new Set([...xt,`eslint-enable`,`oxlint-enable`]),Ct=new Set([`eslint`,`eslint-disable`,`eslint-disable-line`,`eslint-disable-next-line`,`eslint-enable`,`eslint-env`,`exported`,`global`,`globals`,`oxlint`,`oxlint-disable`,`oxlint-disable-line`,`oxlint-disable-next-line`,`oxlint-enable`,`oxlint-env`]);function wt(e){return xt.has(e)}function Tt(e){return St.has(e)}function Et(e,t){if(typeof e!=`object`||!e)return;let n=Reflect.get(e,t);if(n===void 0||!Array.isArray(n))return;let r=[],i=0;for(let e of n){if(!y(e))return;r[i++]=e}return r}function Dt(e){let t=Ot(e.value);if(t===void 0)return;let n=vt.test(t.kind);if(!(e.type===`Line`&&!n||(t.kind===`eslint-disable-line`||t.kind===`oxlint-disable-line`)&&e.loc.start.line!==e.loc.end.line))return{comment:e,description:t.description,kind:t.kind,value:t.value}}function Ot(e){let{description:t,text:n}=At(e),r=n.search(bt),i=r===-1?n:n.slice(0,r);if(Ct.has(i))return{description:t,kind:i,value:r===-1?``:n.slice(r).trim()}}const kt=/\s-{2,}\s/u;function At(e){let[t,n]=e.split(kt);return t===void 0?{description:void 0,text:``}:{description:n?.trim(),text:t.trim()}}function jt(e,t){return e.line<t.line||e.line===t.line&&e.column<=t.column}function Mt(e){return{end:e.end,start:{column:0,line:e.start.line}}}const Nt=/\r\n|[\r\n\u2028\u2029]/u;function Pt(e,t){if(t===void 0)return Mt(e.loc);let n=e.value.split(Nt),[r]=n;if(r===void 0)return e.loc;let i=RegExp(`([\\s,]|^)${Lt(t)}(?:[\\s,]|$)`,`u`),a=e.loc.start,o=i.exec(r);if(o!==null){let[,n]=o;return n===void 0?e.loc:{end:{column:2+a.column+o.index+n.length+t.length,line:a.line},start:{column:2+a.column+o.index+n.length,line:a.line}}}for(let e=1;e<n.length;e+=1){let r=n[e];if(r===void 0)continue;let o=i.exec(r);if(o!==null){let[,n]=o;if(n===void 0)continue;return{end:{column:o.index+n.length+t.length,line:a.line+e},start:{column:o.index+n.length,line:a.line+e}}}}return e.loc}const Ft=/[|\\{}()[\]^$+*?.]/gu,It=String.raw`\$&`;function Lt(e){return e.replaceAll(Ft,It)}function Rt(e){let t={areas:[],duplicateDisableDirectives:[],numberOfRelatedDisableDirectives:new Map,unusedEnableDirectives:[]};for(let n of e.getAllComments()){let e=Dt(n);if(e===void 0)continue;let{kind:r}=e;if(!Tt(r))continue;let{start:i}=n.loc,a=e.value!==void 0&&e.value!==``?e.value.split(yt):void 0;switch(r){case`eslint-disable`:case`oxlint-disable`:zt(t,n,i,a,`block`);break;case`eslint-disable-line`:case`oxlint-disable-line`:{let{line:e}=i;zt(t,n,{column:0,line:e},a,`line`),Bt(t,n,{column:-1,line:e+1},a,`line`);break}case`eslint-disable-next-line`:case`oxlint-disable-next-line`:{let{line:e}=i;zt(t,n,{column:0,line:e+1},a,`line`),Bt(t,n,{column:-1,line:e+2},a,`line`);break}case`eslint-enable`:case`oxlint-enable`:Bt(t,n,i,a,`block`);break}}return t}function zt(e,t,n,r,i){if(r===void 0){Wt(e.areas,void 0,n)!==void 0&&e.duplicateDisableDirectives.push({comment:t,ruleId:void 0}),e.areas.push({comment:t,end:void 0,kind:i,ruleId:void 0,start:n});return}for(let a of r)Wt(e.areas,a,n)!==void 0&&e.duplicateDisableDirectives.push({comment:t,ruleId:a}),e.areas.push({comment:t,end:void 0,kind:i,ruleId:a,start:n})}function Bt(e,t,n,r,i){let a=new Set;if(r===void 0){Vt(e.areas,n,i,void 0,a)||Ut(e,t,void 0),e.numberOfRelatedDisableDirectives.set(t,a.size);return}for(let o of r)Vt(e.areas,n,i,o,a)||Ut(e,t,o);e.numberOfRelatedDisableDirectives.set(t,a.size)}function Vt(e,t,n,r,i){let a=!1;for(let o=e.length-1;o>=0;--o){let s=e[o];s===void 0||!Ht(s,n,r)||(i.add(s.comment),s.end=t,a=!0)}return a}function Ht(e,t,n){return e.end!==void 0||e.kind!==t?!1:n===void 0||e.ruleId===n}function Ut(e,t,n){e.unusedEnableDirectives.push({comment:t,ruleId:n})}function Wt(e,t,n){for(let r=e.length-1;r>=0;--r){let i=e[r];if(i!==void 0&&(i.ruleId===void 0||i.ruleId===t)&&jt(i.start,n)&&(i.end===void 0||jt(n,i.end)))return i}}const Gt=t({create(e){let[t]=e.options,n=t?.allowWholeFile===!0,r=Rt(e.sourceCode),[i]=e.sourceCode.ast.tokens;if(n&&i===void 0)return{};for(let t of r.areas)t.end===void 0&&(n&&i!==void 0&&jt(t.start,i.loc.start)||e.report({data:{ruleId:t.ruleId??``},loc:Pt(t.comment,t.ruleId),messageId:t.ruleId===void 0?`missingPair`:`missingRulePair`}));return{}},meta:{docs:{description:"Require a matching enable comment for every `oxlint-disable` or `eslint-disable` block directive."},messages:{missingPair:`Requires 'eslint-enable' directive.`,missingRulePair:`Requires 'eslint-enable' directive for '{{ruleId}}'.`},schema:[{additionalProperties:!1,properties:{allowWholeFile:{description:`Allow a disable directive that covers the entire file.`,type:`boolean`}},type:`object`}],type:`suggestion`}}),Kt=t({create(e){let t=Rt(e.sourceCode);for(let[n,r]of t.numberOfRelatedDisableDirectives)r>1&&e.report({data:{kind:`eslint-enable`},loc:Mt(n.loc),messageId:`aggregatingEnable`});return{}},meta:{docs:{description:"Disallow aggregating `oxlint-enable` or `eslint-enable` comments across multiple disable directives."},messages:{aggregatingEnable:`'{{kind}}' comment enables rules for multiple disable directives. Please move '{{kind}}' after each disable directive.`},schema:[],type:`suggestion`}}),qt=t({create(e){let t=Rt(e.sourceCode);for(let n of t.duplicateDisableDirectives)e.report({data:{ruleId:n.ruleId??``},loc:Pt(n.comment,n.ruleId),messageId:n.ruleId===void 0?`duplicate`:`duplicateRule`});return{}},meta:{docs:{description:"Disallow duplicate `oxlint-disable` or `eslint-disable` comments."},messages:{duplicate:`ESLint rules have been disabled already.`,duplicateRule:`'{{ruleId}}' rule has been disabled already.`},schema:[],type:`problem`}}),Jt=t({create(e){let t=Rt(e.sourceCode),r=e.options;if(r.length===0)return{};let i=n();for(let e of r)i.add(e);for(let n of t.areas)(n.ruleId===void 0||i.ignores(n.ruleId))&&e.report({data:{ruleId:n.ruleId??String(r)},loc:Pt(n.comment,n.ruleId),messageId:`disallow`});return{}},meta:{docs:{description:"Disallow `oxlint-disable` or `eslint-disable` comments for configured rules."},messages:{disallow:`Disabling '{{ruleId}}' is not allowed.`},schema:{items:{type:`string`},type:`array`,uniqueItems:!0},type:`suggestion`}}),Yt=t({create(e){for(let t of e.sourceCode.getAllComments()){let n=Dt(t);if(n===void 0)continue;let{kind:r}=n;wt(r)&&(n.value===void 0||n.value===``)&&e.report({data:{kind:n.kind},loc:Mt(n.comment.loc),messageId:`unexpected`})}return{}},meta:{docs:{description:"Disallow `oxlint-disable` or `eslint-disable` comments without rule names."},messages:{unexpected:`Unexpected unlimited '{{kind}}' comment. Specify some rule names to disable.`},schema:[],type:`suggestion`}}),Xt=t({create(e){let t=Rt(e.sourceCode);for(let n of t.unusedEnableDirectives)e.report({data:{kind:`eslint-enable`,ruleId:n.ruleId??``},loc:Pt(n.comment,n.ruleId),messageId:n.ruleId===void 0?`unused`:`unusedRule`});return{}},meta:{docs:{description:"Disallow unused `oxlint-enable` or `eslint-enable` comments."},messages:{unused:`Unused '{{kind}}' comment. No reported rules are disabled.`,unusedRule:`'{{ruleId}}' rule is disabled but never reported. Please remove unnecessary '{{kind}}' comment.`},schema:[],type:`suggestion`}}),Zt=t({create(e){let t=new Set(Et(e.options[0],`allow`));for(let n of e.sourceCode.getAllComments()){let r=Dt(n);r===void 0||n.type===`Line`||t.has(r.kind)||e.report({loc:Mt(r.comment.loc),messageId:`disallow`})}return{}},meta:{docs:{description:`Disallow block ESLint/Oxlint directive comments.`},messages:{disallow:`Unexpected ESLint directive comment.`},schema:[{additionalProperties:!1,properties:{allow:{description:`Directive kinds that are still allowed in block comments.`,items:{type:`string`},type:`array`,uniqueItems:!0}},type:`object`}],type:`suggestion`}}),Qt=/\s-{2,}\s/u,$t=/^(?<kind>oxlint-disable|oxlint-enable)(?:\s|$)/u,en=t({create(e){let t=new Set(Et(e.options[0],`ignore`));function n(n){let r=Dt(n);if(r!==void 0){let{kind:n}=r;if(!Tt(n)||t.has(n)||r.description!==void 0)return;e.report({data:{kind:r.kind},loc:r.comment.loc,messageId:`missingDescription`});return}if(n.type!==`Line`)return;let i=n.value.trim(),a=$t.exec(i);if(a===null)return;let o=a.groups?.kind;o!==void 0&&Tt(o)&&(t.has(o)||Qt.test(i)||e.report({data:{kind:o},loc:n.loc,messageId:`missingDescription`}))}for(let t of e.sourceCode.getAllComments())n(t);return{}},meta:{docs:{description:"Require descriptions for `oxlint` and `eslint` disable/enable directives."},messages:{missingDescription:`Missing description for '{{kind}}' comment.`},schema:[{additionalProperties:!1,properties:{ignore:{description:`Directive kinds that do not require a description.`,items:{type:`string`},type:`array`,uniqueItems:!0}},type:`object`}],type:`suggestion`}}),tn={baseThreshold:10,errorThreshold:25,interfacePenalty:20,performanceMode:!0};function nn(e){let{callee:t}=e;return t.type===`MemberExpression`&&t.object.type===`Identifier`&&t.object.name===`Ianitor`}function rn(e){if(e.type!==`TSTypeReference`)return e;let{typeName:t,typeArguments:n}=e;return t.type!==`Identifier`||t.name!==`Readonly`?e:n?.params[0]??e}function an(e){let t=rn(e);if(t.type!==`TSTypeReference`)return;let{typeName:n,typeArguments:r}=t;if(n.type!==`TSQualifiedName`)return;let{left:i,right:a}=n;if(i.type!==`Identifier`||i.name!==`Ianitor`||a.type!==`Identifier`||a.name!==`Static`)return;let o=r?.params[0];if(o?.type!==`TSTypeQuery`)return;let{exprName:s}=o;return s.type===`Identifier`?s.name:void 0}function on(e){let t=rn(e);if(t.type!==`TSTypeReference`)return!1;let{typeName:n,typeArguments:r}=t;if(n.type!==`TSQualifiedName`)return!1;let{left:i,right:a}=n;return i.type!==`Identifier`||i.name!==`Ianitor`||a.type!==`Identifier`||a.name!==`Static`?!1:r?.params[0]?.type===`TSTypeQuery`}function sn(e){let{callee:t}=e;if(t.type!==`MemberExpression`||t.property.type!==`Identifier`)return 0;switch(t.property.name){case`array`:case`instanceIsA`:case`instanceOf`:case`optional`:return 2;case`boolean`:case`number`:case`string`:return 1;case`interface`:case`strictInterface`:{let[t]=e.arguments;return t?.type===`ObjectExpression`?10+t.properties.length*3:0}case`intersection`:case`union`:return e.arguments.length*2;case`map`:case`record`:return 3;default:return 1}}function F(e,t,n,r){let i=e+t;return n.performanceMode?Math.min(i,r):i}function cn(e,t,n,r,i,a,o,s=0){return F(e,I(t,n,r,i,a,o)+s,r,o)}function ln(e,t,n,r,i,a,o){let s=e;for(let e of t){if(!(`typeAnnotation`in e))continue;let{typeAnnotation:t}=e;t?.type===`TSTypeAnnotation`&&(s=cn(s,t.typeAnnotation,n,r,i,a,o))}return s}function un(e,t,n,r,i,a,o,s,c){if(`types`in t){let l=e,{types:u}=t;for(let e of u)l=cn(l,e,n,r,i,a,o);return F(l,s*(u.length+c),r,o)}return e}function dn(e,t){let n=t.get(e);if(n!==void 0)return n;let r=Math.log2(e+1);return t.set(e,r),r}function I(e,t,n,r,i,a){let o=r.nodeCache.get(e);if(o!==void 0)return o;if(r.visitedNodes.has(e))return 50;r.visitedNodes.add(e);let s=0,c=t+1;switch(e.type){case`TSAnyKeyword`:case`TSNeverKeyword`:case`TSUnknownKeyword`:break;case`TSArrayType`:if(`elementType`in e){let{elementType:t}=e;s=F(I(t,c,n,r,i,a),1,n,a);break}s=1;break;case`TSBigIntKeyword`:case`TSBooleanKeyword`:case`TSNullKeyword`:case`TSNumberKeyword`:case`TSStringKeyword`:case`TSSymbolKeyword`:case`TSUndefinedKeyword`:case`TSVoidKeyword`:s=1;break;case`TSConditionalType`:{s=3;let{checkType:t,extendsType:o,trueType:l,falseType:u}=e;t!==void 0&&(s=F(s,I(t,c,n,r,i,a),n,a)),o!==void 0&&(s=F(s,I(o,c,n,r,i,a),n,a)),l!==void 0&&(s=F(s,I(l,c,n,r,i,a),n,a)),u!==void 0&&(s=F(s,I(u,c,n,r,i,a),n,a));break}case`TSFunctionType`:case`TSMethodSignature`:{s=2;let{params:t}=e;for(let e of t){if(!(`typeAnnotation`in e))continue;let{typeAnnotation:t}=e;t?.type===`TSTypeAnnotation`&&(s=F(s,I(t.typeAnnotation,c,n,r,i,a),n,a))}if(`returnType`in e){let{returnType:t}=e;t?.type===`TSTypeAnnotation`&&(s=F(s,I(t.typeAnnotation,c,n,r,i,a),n,a))}break}case`TSInterfaceDeclaration`:{s=n.interfacePenalty;let{extends:t,body:o}=e;t!==void 0&&t.length>0&&(s=F(s,t.length*5,n,a));let l=o.body;s=F(s,l.length*2,n,a),s=ln(s,l,c,n,r,i,a);break}case`TSIntersectionType`:s=un(s,e,c,n,r,i,a,3,0);break;case`TSMappedType`:{s=5;let{constraint:t,typeAnnotation:o}=e;t!==void 0&&(s=cn(s,t,c,n,r,i,a)),o!=null&&(s=cn(s,o,c,n,r,i,a));break}case`TSTupleType`:{let{elementTypes:t}=e;s=1;for(let e of t)e.type!==`TSRestType`&&e.type!==`TSOptionalType`&&(s=cn(s,e,c,n,r,i,a));s=F(s,1.5*t.length,n,a);break}case`TSTypeLiteral`:{let{members:t}=e;s=2+t.length*.5,s=ln(s,t,c,n,r,i,a);break}case`TSTypeReference`:{s=2;let{typeArguments:t}=e,o=t?.params??[];for(let e of o)s=cn(s,e,c,n,r,i,a,2);break}case`TSUnionType`:s=un(s,e,c,n,r,i,a,2,-1);break;default:s=1}return s*=dn(t,i),r.nodeCache.set(e,s),r.visitedNodes.delete(e),s}const fn=t({create(e){let t=e.options[0]??{},n={...tn,...t},r={nodeCache:new WeakMap,visitedNodes:new WeakSet},i=new Set,a=new Map,o=n.errorThreshold*2,s=!1,c=new Map,l=new Map,u=new Map;return{Identifier(e){e.name===`Ianitor`&&(s=!0)},"Program:exit"(){if(s){for(let[t,n]of l.entries())e.report({data:{score:n.complexity.toFixed(1)},messageId:`missingIanitorCheckType`,node:t});for(let[t]of c.entries())e.report({data:{name:t.id.name},messageId:`complexInterfaceNeedsCheck`,node:t});for(let[t,n]of u.entries()){let{id:r}=t;r.type===`Identifier`&&i.has(r.name)||e.report({data:{score:n.complexity.toFixed(1)},messageId:`missingIanitorCheckType`,node:r})}}},TSInterfaceDeclaration(e){let t=I(e,0,n,r,a,o);t<n.interfacePenalty||c.set(e,{complexity:t})},TSTypeAliasDeclaration(e){let t=an(e.typeAnnotation);if(t!==void 0&&(s=!0,i.add(t)),on(e.typeAnnotation))return;let c=I(e.typeAnnotation,0,n,r,a,o);c<n.baseThreshold||l.set(e,{complexity:c})},VariableDeclarator(e){let{init:t,id:r}=e;if(t?.type!==`CallExpression`||!nn(t)||(s=!0,r.type===`Identifier`&&r.typeAnnotation!==void 0&&r.typeAnnotation!==null))return;let i=sn(t);i<n.baseThreshold||u.set(e,{complexity:i})}}},meta:{docs:{description:`Enforce Ianitor.Check<T> type annotations on complex TypeScript types`,recommended:!0},messages:{complexInterfaceNeedsCheck:`Interface '{{name}}' requires Ianitor.Check<T> annotation (interfaces always need explicit checking)`,missingIanitorCheckType:`Complex type (score: {{score}}) requires Ianitor.Check<T> annotation for type safety`},schema:[{additionalProperties:!1,properties:{baseThreshold:{default:tn.baseThreshold,description:`Minimum complexity score before missing Ianitor.Check<T> annotations are reported.`,minimum:1,type:`number`},errorThreshold:{default:tn.errorThreshold,description:`Complexity score used to cap recursive analysis before reporting is determined.`,minimum:1,type:`number`},interfacePenalty:{default:tn.interfacePenalty,description:`Complexity penalty applied when an Ianitor validator builds an interface-like shape.`,minimum:1,type:`number`},performanceMode:{default:tn.performanceMode,description:`Whether repeated type nodes are cached during complexity analysis.`,type:`boolean`}},type:`object`}],type:`problem`}}),pn={default:`roblox-ts`,description:`The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.`,enum:[`roblox-ts`,`standard`],type:`string`};function mn(e){return e===`roblox-ts`||e===`standard`}const hn=new Set([`react`,`react-dom`]),gn=new Set([`@rbxts/react`,`@rbxts/roact`]);function _n(e){return e===`standard`?hn:gn}function vn(e){return _n(xn(e))}function yn(e,t){return t.has(e.source.value)}function bn(e,t,n,r){if(yn(e,t))for(let t of e.specifiers){if(t.type===`ImportDefaultSpecifier`||t.type===`ImportNamespaceSpecifier`){n.add(t.local.name);continue}let e=pe(t);e!==void 0&&r(e,t.local.name)}}function xn(e){return!x(e)||e.environment!==`standard`?`roblox-ts`:`standard`}const Sn=new Map([[`useEffect`,1],[`useInsertionEffect`,1],[`useLayoutEffect`,1]]),Cn=new Set([`useCallback`,`useMemo`]),wn=new Set([`useBinding`,`useRef`]),Tn=new Set([`useReducer`,`useState`,`useTransition`]),En=new Set([...wn,...Tn]),Dn=new Set([`ArrayExpression`,`ArrowFunctionExpression`,`ClassExpression`,`FunctionExpression`,`NewExpression`,`ObjectExpression`]);function On(e){return e===`aggressive`||e===`definite`||e===`moderate`}function kn(e,t){if(!(e.computed||e.object.type!==`Identifier`||!t.has(e.object.name)))return e.property.type===`Identifier`?e.property.name:void 0}function An(e){let t=C(e);for(;t.type===`MemberExpression`;)t=C(t.object);return t.type===`Identifier`?t:void 0}function jn(e){return Dn.has(e.type)}function Mn(e){if(e!==null){if(e.type===`Identifier`)return e.name;if(e.type===`AssignmentPattern`&&e.left.type===`Identifier`)return e.left.name;if(e.type===`RestElement`&&e.argument.type===`Identifier`)return e.argument.name}}function Nn(e,t,n){let r=e.elements[n];return r!=null&&Mn(r)===t}function Pn(e){return e.scope.type===`module`||e.scope.type===`global`}function Fn(e,t){if(`hooks`in e&&Array.isArray(e.hooks))for(let n of e.hooks){if(!(x(n)&&`name`in n&&y(n.name)))continue;let e=`dependenciesIndex`in n&&b(n.dependenciesIndex)?n.dependenciesIndex:1;t.set(n.name,e)}}const In=t({create(e){let[t]=e.options,n=x(t)?t:{},r=`mode`in n&&On(n.mode)?n.mode:`definite`,i=`environment`in n&&mn(n.environment)?n.environment:`roblox-ts`,a=new Map(Sn);Fn(n,a);let o=_n(i),s=new Set,c=new Map,l=new Set,u=new Map,d=new WeakMap,f=new WeakMap,p=new WeakMap,{sourceCode:m}=e;function h(e){let t=d.get(e);if(t!==void 0)return t;let n=m.getScope(e);return d.set(e,n),n}function g(e){let t=h(e),n=f.get(t);if(n===void 0)n=new Map,f.set(t,n);else if(n.has(e.name))return n.get(e.name);let r=t;for(;r!==null;){let t=r.set.get(e.name);if(t!==void 0)return n.set(e.name,t),t;r=r.upper}n.set(e.name,void 0)}function _(e){let{callee:t}=e;if(t.type===`Identifier`)return l.has(t.name);if(t.type===`MemberExpression`){let e=kn(t,s);return e!==void 0&&Cn.has(e)}return!1}function v(e){let{callee:t}=e;if(t.type===`Identifier`){let e=u.get(t.name);return e===void 0?void 0:wn.has(e)?`whole`:Tn.has(e)?`index1`:void 0}if(t.type===`MemberExpression`){let e=kn(t,s);if(e===void 0)return;if(wn.has(e))return`whole`;if(Tn.has(e))return`index1`}}function ee(e,t){if(e.type===`Parameter`)return`unknown`;if(e.type===`ImportBinding`)return`memoized`;let{node:n}=e;if(n.type===`FunctionDeclaration`||n.type===`ClassDeclaration`)return`unmemoized`;if(n.type!==`VariableDeclarator`)return`unknown`;let i=n.parent;if(i.type===`VariableDeclaration`&&i.kind!==`const`)return r===`definite`?`unknown`:`unmemoized`;let a=n.init===null?void 0:C(n.init);return a===void 0?`unknown`:jn(a)?`unmemoized`:a.type===`CallExpression`?te(a,n.id,t):`unknown`}function te(e,t,n){if(_(e))return`memoized`;let i=v(e);return i===`whole`||i===`index1`&&t.type===`ArrayPattern`&&Nn(t,n,1)?`memoized`:r===`definite`?`unknown`:`unmemoized`}function y(e){let t=p.get(e);if(t!==void 0)return t;if(Pn(e))return p.set(e,`memoized`),`memoized`;let n=!1;for(let t of e.defs){let r=ee(t,e.name);if(r===`unmemoized`)return p.set(e,`unmemoized`),`unmemoized`;r===`memoized`&&(n=!0)}let i=n?`memoized`:`unknown`;return r===`aggressive`&&i!==`memoized`&&(i=`unmemoized`),p.set(e,i),i}function b(e){let t=C(e);if(jn(t))return`unmemoized`;if(t.type===`CallExpression`)return r===`definite`?`unknown`:`unmemoized`;let n=An(t);if(n===void 0)return`unknown`;let i=g(n);return i===void 0?`unknown`:y(i)}function ne(e){let{callee:t}=e;if(t.type===`Identifier`)return c.get(t.name);if(t.type===`MemberExpression`){let e=kn(t,s);return e===void 0?void 0:a.get(e)}}return{CallExpression(t){let n=ne(t);if(n===void 0)return;let i=t.arguments[n];if(i?.type===`ArrayExpression`)for(let t of i.elements){if(t===null)continue;if(t.type===`SpreadElement`){if(r===`definite`)continue;let n=t.argument,i=m.getText(n);e.report({data:{name:i},messageId:`unmemoizedDependency`,node:n});continue}if(b(t)!==`unmemoized`)continue;let n=m.getText(t);e.report({data:{name:n},messageId:`unmemoizedDependency`,node:t})}},ImportDeclaration(e){bn(e,o,s,(e,t)=>{if(a.has(e)){let n=a.get(e);c.set(t,n??1)}Cn.has(e)&&l.add(t),En.has(e)&&u.set(t,e)})}}},meta:{docs:{description:`Flags effect dependencies that are not memoized. Unmemoized dependencies can cause unnecessary re-renders or infinite loops.`},messages:{unmemoizedDependency:`{{name}} is not memoized. Wrap it in useMemo/useCallback or move it to module scope.`},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:Array.from(Sn,([e,t])=>({dependenciesIndex:t,name:e})),description:`Effect hooks checked by default; configured entries are added to this set.`,items:{additionalProperties:!1,properties:{dependenciesIndex:{description:`Index of the dependencies array for validation`,type:`number`},name:{description:`The name of the hook`,type:`string`}},required:[`name`],type:`object`},type:`array`},mode:{default:`definite`,description:`Strictness for memoization detection: definite (only obvious), moderate (unknown calls and non-const), aggressive (any non-module).`,enum:[`aggressive`,`definite`,`moderate`],type:`string`}},type:`object`}],type:`problem`}});function Ln(e){return e.type===`Identifier`||e.type===`PrivateIdentifier`||L(e)}function L(e){let t=C(e);return t.type===`Identifier`||$e(t)?!0:N(t)?Rn(t):Se(t)?t.operator!==`delete`&&L(t.argument):Ce(t)||we(t)?zn(t):Te(t)?Bn(t):Je(t)?Un(t.expressions):Ge(t)?Vn(t):Ke(t)?Hn(t):Ee(t)?Un(t.expressions):ze(t)}function Rn(e){return e.optional||e.object.type===`Super`||!L(e.object)?!1:!e.computed||L(e.property)}function zn(e){return L(e.left)&&L(e.right)}function Bn(e){return L(e.test)&&L(e.consequent)&&L(e.alternate)}function Vn(e){for(let t of e.elements)if(t!==null&&(t.type===`SpreadElement`||!L(t)))return!1;return!0}function Hn(e){for(let t of e.properties)if(t.type===`SpreadElement`||t.kind!==`init`||t.method||t.computed&&!Ln(t.key)||!L(t.value))return!1;return!0}function Un(e){for(let t of e)if(!L(t))return!1;return!0}const Wn={environment:`roblox-ts`,requireExplicitGenericOnNewArray:!0};function Gn(e){return e.type===`Identifier`}function Kn(e,t){let n=C(t.callee);return!Gn(n)||n.name!==`Array`?!1:!E(e,n,`Array`)}function qn(e,t){if(e.type!==`TSTypeReference`||!Gn(e.typeName)||e.typeName.name!==`Array`&&e.typeName.name!==`ReadonlyArray`||e.typeArguments?.params.length!==1)return;let[n]=e.typeArguments.params;return n===void 0?void 0:t.getText(n)}const Jn=/:\s*(?:Array<.+>|ReadonlyArray<.+>)\s*=/u;function Yn(e){return Jn.exec(e)!==null}function Xn(e){if(Gn(e)||e.type===`ArrayPattern`||e.type===`ObjectPattern`)return e.typeAnnotation??void 0}function Zn(e,t){let{parent:n}=e;if(k(n)&&n.init===e){let e=Xn(n.id);return e!==void 0&&qn(e.typeAnnotation,t)!==void 0}return Qe(n)&&n.right===e?Yn(t.getText(n)):Oe(n)&&n.value===e&&n.typeAnnotation!==void 0&&n.typeAnnotation!==null?qn(n.typeAnnotation.typeAnnotation,t)!==void 0:Ze(n)&&n.expression===e||Xe(n)&&n.expression===e?qn(n.typeAnnotation,t)!==void 0:!1}function Qn(e){if(e===void 0)return!1;let{typeAnnotation:t}=e;return t.type!==`TSTypeReference`||!Gn(t.typeName)?!1:t.typeName.name===`ReadonlyArray`}function $n(e){let t=C(e);return ze(t)&&`value`in t?!b(t.value):Ge(t)||Ke(t)||Be(t)||Ne(t)||Ie(t)?!0:Je(t)?t.expressions.length===0:Se(t)?t.operator===`void`||t.operator===`typeof`&&!t.prefix:!1}function er(e,t){let n=C(e);if(!(!_e(n)||n.optional)&&!(!N(n.callee)||n.callee.optional)&&!(!Gn(n.callee.object)||n.callee.object.name!==t))return w(n.callee)===`push`?n:void 0}function tr(e,t,n){for(let r=t;r<e.length;r+=1){let t=e[r];if(!(t===void 0||!Ye(t))&&er(t.expression,n)!==void 0)return!0}return!1}function nr(e,t){let n=[],r=0;for(let i of e){if(i.type===`SpreadElement`){n[r++]=`...${t.getText(i.argument)}`;continue}n[r++]=t.getText(i)}return`[${n.join(`, `)}]`}function rr(e,t,n,r,i){if(n.init===null||r.length===0)return[];let[a]=r,o=r.at(-1);if(a===void 0||o===void 0)return[];let[s]=a.range;for(;s>0;){let e=t.text[s-1];if(e===` `||e===` `){--s;continue}e===`
2
+ `&&--s;break}return[e.replaceText(n.init,i),e.removeRange([s,o.range[1]])]}function ir(e,t,n){let{sourceCode:r}=e;if(t.arguments.length===0){ar(e,t,n);return}if(t.arguments.length>1){or(e,t,n);return}sr(e,t,n,r)}function ar(e,t,n){n.requireExplicitGenericOnNewArray&&(t.typeArguments!==void 0&&t.typeArguments!==null&&t.typeArguments.params.length>0||Zn(t,e.sourceCode)||e.report({messageId:`requireExplicitGenericOnNewArray`,node:t}))}function or(e,t,n){let[r]=t.arguments;if(r===void 0||r.type!==`SpreadElement`&&n.environment===`roblox-ts`&&!$n(r))return;let i=nr(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 sr(e,t,n,r){let[i]=t.arguments;if(i===void 0)return;if(i.type===`SpreadElement`){cr(e,t,r.getText(i.argument));return}if(!$n(i)){lr(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 cr(e,t,n){e.report({messageId:`avoidSingleArgumentConstructor`,node:t,suggest:[{fix(e){return e.replaceText(t,`[...${n}]`)},messageId:`suggestArrayLiteral`}]})}function lr(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 ur(e,t,n){let r=t[n];if(r===void 0||!je(r)||r.kind!==`const`&&r.kind!==`let`||r.declarations.length!==1)return;let[i]=r.declarations;if(i===void 0||!Gn(i.id)||i.init===null||!We(i.init)||!Kn(e,i.init)||i.init.arguments.length>0||Qn(Xn(i.id)))return;let a=i.id.name,o=dr(e,t,n+1,a);if(o.pushStatements.length!==0&&!tr(t,o.nextIndex,a))return{arrayIdentifierName:a,declarator:i,hasUnsafeArgument:o.hasUnsafeArgument,literalText:`[${o.argumentParts.join(`, `)}]`,pushStatements:o.pushStatements,statement:r}}function dr(e,t,n,r){let i=[],a=[],o=!1,s=n;for(;s<t.length;){let n=t[s];if(n===void 0||!Ye(n))break;let c=er(n.expression,r);if(c===void 0||c.arguments.length===0)break;i.push(n),o=fr(e,c,a)||o,s+=1}return{argumentParts:a,hasUnsafeArgument:o,nextIndex:s,pushStatements:i}}function fr(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}L(i)||(r=!0),n.push(e.getText(i))}return r}const pr=t({create(e){let t=e.options?.[0],n=typeof t==`object`&&t?{...Wn,...t}:{...Wn},{sourceCode:r}=e;function i(t){for(let n=0;n<t.length;n+=1){let i=ur(r,t,n);if(i!==void 0){if(!i.hasUnsafeArgument){e.report({fix(e){return rr(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 rr(e,r,i.declarator,i.pushStatements,i.literalText)},messageId:`suggestCollapseArrayPushInitialization`}]})}}}return{BlockStatement(e){i(e.body)},NewExpression(t){Kn(r,t)&&ir(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`}}),mr=new Set([`parent`,`range`,`loc`,`tokens`,`comments`]);function hr(e){return e.type===`Identifier`}function gr(e){return`type`in e&&typeof e.type==`string`}function _r(e,t){for(let n of Object.keys(e)){if(mr.has(n))continue;let r=Reflect.get(e,n);r!=null&&t.push(r)}}function vr(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(gr(e)){if(e.type===`Identifier`&&e.name===t)return!0;_r(e,n)}}}return!1}function yr(e,t){let n=C(t.callee);return!hr(n)||n.name!==`Array`?!1:!E(e,n,`Array`)}function br(e,t,n){if(!Ye(e))return;let{expression:r}=e;if(!xe(r)||r.operator!==`=`)return;let{left:i}=r;if(!(N(i)&&i.computed))return;let{object:a,property:o}=i;if(!(!hr(a)||a.name!==t)&&!(!Ue(o)||o.value!==n))return{expression:r,statement:e}}function xr(e,t,n){let r=t[n];if(r===void 0||!je(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(!We(a)||a.arguments.length>0||!yr(e,a)||!tt(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=br(e,o,l);if(n!==void 0){s.push(n),l+=1,c+=1;continue}if(vr(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 Sr(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 Cr=t({create(e){let{sourceCode:t}=e;function n(n){let r=0;for(;r<n.length;){let i=xr(t,n,r);if(i===void 0){r+=1;continue}e.report({fix(e){return Sr(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 wr(e){return typeof e!=`object`||!e?!1:`allowAutofix`in e?e.allowAutofix===void 0||typeof e.allowAutofix==`boolean`:!0}function Tr(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`&&Er(e,t,n);case`Super`:return t.type===`Super`;case`ThisExpression`:return t.type===`ThisExpression`;default:return!1}}function Er(e,t,n){return e.computed!==t.computed||e.optional!==t.optional||!Tr(e.object,t.object,n)?!1:e.computed?Dr(e.property,t.property,n):Or(e.property,t.property)}function Dr(e,t,n){return nt(e)&&nt(t)&&Tr(e,t,n)}function Or(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 kr(e,t){switch(e.type){case`Identifier`:case`ThisExpression`:return!0;case`Literal`:return t;case`MemberExpression`:return e.optional||!kr(e.object,!1)?!1:e.computed?nt(e.property)?kr(e.property,!0):!1:e.property.type===`Identifier`||e.property.type===`PrivateIdentifier`;default:return!1}}function Ar(e){return kr(e,!1)}function jr(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 Mr(e,t,n){if(!(e.operator!==`=`||e.left.type!==`MemberExpression`||!e.left.computed)){if(n===`roblox-ts`&&jr(e.left.property))return Tr(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 Tr(e.left.object,n.object,t)?e.left:void 0}}}const Nr=t({create(e){let[t]=e.options,n=wr(t)&&t.allowAutofix,r=t?.environment===`standard`?`standard`:`roblox-ts`,{sourceCode:i}=e;return{AssignmentExpression(t){let a=Mr(t,i,r);if(a===void 0)return;let o=t.parent.type===`ExpressionStatement`?t.parent:void 0;if(!(n&&o!==void 0&&Ar(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:{...pn,default:`roblox-ts`,description:`Array environment mode: 'roblox-ts' checks array[array.size()]; 'standard' checks array[array.length].`}},type:`object`}],type:`problem`}}),Pr=/^set[A-Z]/u;function R({callee:e}){if(e.type===`Identifier`)return e.name;if(e.type===`MemberExpression`&&e.property.type===`Identifier`)return e.property.name}function Fr(e){return Pr.test(e)}function Ir(e){let[t]=e.arguments;return t?.type===`ArrowFunctionExpression`||t?.type===`FunctionExpression`?t:void 0}function Lr(e,t){let n=[e];for(;n.length>0;){let e=n.pop();if(e===void 0)break;t(e),zr(e,n)}}function Rr(e,t){t(e);for(let n of Object.values(e))Hr(n,e,t)}function zr(e,t){for(let n in e)oe(n)||Br(Reflect.get(e,n),e,t)}function Br(e,t,n){if(!(typeof e!=`object`||!e||e===t.parent)){if(Array.isArray(e)){Vr(e,t,n);return}O(e)&&n.push(e)}}function Vr(e,t,n){for(let r=e.length-1;r>=0;--r){let i=e[r];i!==t.parent&&O(i)&&n.push(i)}}function Hr(e,t,n){if(Array.isArray(e)){for(let r of e)Hr(r,t,n);return}e===t.parent||!O(e)||Rr(e,n)}function Ur(e){let{key:t}=e;if(t.type===`Identifier`)return t.name;if(t.type===`Literal`&&y(t.value))return t.value}function Wr(e){let{value:t}=e;if(t.type===`Identifier`)return t;if(t.type===`AssignmentPattern`&&t.left.type===`Identifier`)return t.left}function Gr(e){let t=0;return Lr(e,e=>{e.type!==`CallExpression`||e.callee.type!==`Identifier`||Fr(e.callee.name)&&(t+=1)}),t}function Kr(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 qr=new Set([`catch`,`finally`,`then`]);function Jr(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 Yr(e){return e.callee.type!==`MemberExpression`||e.callee.property.type!==`Identifier`?!1:qr.has(e.callee.property.name)}function Xr({callee:e}){let t=w(e);return Pe(t)&&t.async}function Zr({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 Qr(e){let{parent:t}=e;return t?.type!==`AssignmentExpression`||t.right!==e?!1:t.left.type===`MemberExpression`&&t.left.object.type===`ThisExpression`}function $r(e){let{parent:t}=e;if(!(t?.type!==`VariableDeclarator`||t.init!==e))return t.id.type===`Identifier`?t.id.name:void 0}function ei(e){return!Pe(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 ti(e,t){let n=e;for(;n!==t;){let{parent:e}=n;if(e===null)return!1;if(ei(e))return!0;n=e}return!1}function ni(e,t){let n=Zr(e,t);if(n===void 0||Qr(e))return;if(e.parent.type===`ExpressionStatement`)return{data:{methodName:n},messageId:`unhandledAsyncCall`,node:e};let r=$r(e);if(r!==void 0)return{data:{variableName:r},messageId:`orphanedPromise`,node:e}}function ri(e,t){let n=[],r=0;function i(i){if(i!==e&&ti(i,e))return;if(i.type===`AwaitExpression`){n[r++]={messageId:`awaitInConstructor`,node:i};return}if(i.type!==`CallExpression`)return;Yr(i)&&(n[r++]={messageId:`promiseChainInConstructor`,node:i}),Xr(i)&&(n[r++]={messageId:`asyncIifeInConstructor`,node:i});let a=ni(i,t);a!==void 0&&(n[r++]=a)}return Rr(e,i),n}const ii=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=Jr(e.parent),r=e.value.body,i=ri(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`}}),ai=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(`,`)),oi=new Set(`WaitForChild`.split(`,`)),si={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 ci(e,t){return ai.has(e)?oi.has(t)?!0:si[e]?.split(`,`).includes(t)===!0:!1}const li=[`PlanckSystem`,`System`,`SystemFunction`,`SystemReturn`,`SystemTableLike`],ui=new Set([`comments`,`loc`,`parent`,`range`,`tokens`]);function di(e,t){if(e.type===`Identifier`)return e.name;if(t&&e.type===`TSQualifiedName`)return di(e.right,t)}function fi(e,t=!0){if(e!=null){if(e.type===`TSTypeAnnotation`)return fi(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=fi(r,t);if(e===void 0||n!==void 0)return;n=e}return n}if(e.type===`TSTypeReference`)return di(e.typeName,t)}}function pi(e,t){let n=fi(e);return n!==void 0&&t.has(n)}function mi(e,t){for(let n of Object.keys(e)){if(ui.has(n))continue;let r=Reflect.get(e,n);r!=null&&t.push(r)}}function hi(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}O(e)&&t(e)!==!1&&mi(e,n)}}}function gi(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 _i(e,t,n){for(let r of e.properties)if(!(gi(r)!==`system`||r.type!==`Property`)){if(P(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 vi(e){if(e.type===`ImportSpecifier`)return e.imported.type===`Identifier`?e.imported.name:e.imported.value}function yi(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=vi(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 bi(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 xi(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function Si(e,t){return E(e.getScope(t),t.name)}function Ci(e,t,n,r,i){hi(e,e=>{if(e.type!==`CallExpression`||e.callee.type!==`MemberExpression`)return;let a=bi(e.callee);if(a===void 0)return;let o=Si(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||!xi(a.path,n.memberPath))continue;let r=e.arguments[n.callbackArgumentIndex];if(r===void 0||r.type===`SpreadElement`||!P(r))continue;let o=r.params[n.parameterIndex];if(o?.type!==`Identifier`)continue;let c=Si(t,o);c!==void 0&&i.set(c,n.className)}})}function wi(e,t,n,r){hi(e,e=>{if(e.type===`VariableDeclarator`&&e.id.type===`Identifier`){let i=e.id.name,a=fi(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(!P(e))return;let i=t.getDeclaredVariables(e);for(let t of e.params){if(t.type!==`Identifier`)continue;let e=t.name,a=fi(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 Ti(e){let t=new Set;return hi(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 Ei(e,t){let n=Si(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 Di(e,t,n,r,i){let a=w(e);if(a.type===`Identifier`)return Oi(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`&&!D(t,a.callee.object,`game`)))return;let[o]=a.arguments;return o?.type===`Literal`&&typeof o.value==`string`?o.value:void 0}function Oi(e,t,n,r,i){let a=Si(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=Ei(e,t);if(!(o===void 0||i.has(o)))return i.add(o),Di(o,t,n,r,i)}function ki(e,t,n,r){if(e.callee.type!==`MemberExpression`)return!1;let i=T(e.callee);if(i===void 0)return!1;let a=Di(e.callee.object,t,n,r,new Set);return a!==void 0&&ci(a,i)}function Ai(e,t,n,r,i){e.async||e.body===null||hi(e.body,a=>P(a)&&a!==e&&a.async?!1:(a.type===`CallExpression`&&ki(a,t,n,r)&&i(a),!0))}const ji=t({create(e){let t=e.options[0]?.additionalSystemTypeNames??[],n=e.options[0]?.callbackParameterTypes??[],r=new Set([...li,...t]);return{"Program:exit"(t){let i=new Map,a=new Set,o=[],s=yi(t,e.sourceCode),c=new Map;wi(t,e.sourceCode,Ti(t),c),Ci(t,e.sourceCode,s,n,c),hi(t,e=>{if(P(e)){e.id!==null&&i.set(e.id.name,e),pi(e.returnType,r)&&a.add(e);return}if(e.type===`VariableDeclarator`&&e.id.type===`Identifier`){if(!pi(e.id.typeAnnotation,r)||e.init===null)return;P(e.init)?a.add(e.init):e.init.type===`ObjectExpression`&&o.push(e.init);return}e.type===`TSSatisfiesExpression`&&pi(e.typeAnnotation,r)&&e.expression.type===`ObjectExpression`&&o.push(e.expression)});for(let e of o)_i(e,i,a);for(let t of a)Ai(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`}}),Mi=new Set([`useAsyncEffect`,`useEffect`,`useInsertionEffect`,`useLayoutEffect`,`useMountEffect`,`useReactiveEffect`,`useUnmountEffect`,`useUpdateEffect`]),Ni=t({create(e){return{CallExpression(t){let n=R(t);if(n===void 0||!Mi.has(n))return;let r=Ir(t);if(r===void 0)return;let i=Gr(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 Pi(e){return Math.round(e>1?e:e*255)}function Fi(e){return{reportUnknownComponents:typeof e==`object`&&e&&`reportUnknownComponents`in e?e.reportUnknownComponents===!0:!0}}function Ii(e){let t=[],n=0,r=!0;for(let i of e){if(!Ue(i))return;let e=Pi(i.value);t[n++]=e,e!==0&&(r=!1)}return[r,t]}const Li=t({create(e){let t=Fi(e.options[0]);return{NewExpression(n){if(!Fe(n,`Color3`))return;let r=n.arguments;if(r.length===0)return;let i=Ii(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 Ri(e,t){let n=e.scan(t);return n===0?0:1-(1-e.probability)**n}function zi(e,t){let n=0;for(let r of e){let e=Ri(r,t);n=1-(1-n)*(1-e)}return n}function Bi(e,t){return zi(e,t)>=.9}function Vi(e,t){return t.some(t=>Bi(e,t))}function Hi(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 Ui=/\s+/gu;function Wi(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 Gi(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(Ui,``),r=0;for(let e of n){if(e.type===`string`){r+=Wi(t,e.pattern);continue}e.pattern.lastIndex=0;let n=t.match(e.pattern);n&&(r+=n.length)}return r}}}const Ki=/\s/u;function qi(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(!Ki.test(r)&&r!==`*`&&r!==`/`)return 0}return 0}}}const Ji=/[ \t(),{}]/u;function Yi(e,t){let n=new Set(t);return{probability:e,scan(e){let t=e.split(Ji),r=0;for(let e of t)n.has(e)&&(r+=1);return r}}}const Xi=`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(`.`),Zi=[`++`,`||`,`&&`,`===`,`?.`,`??`],Qi=[`for(`,`if(`,`while(`,`catch(`,`switch(`,`try{`,`else{`,`this.`,`window.`,/;\s+\/\//u,`import '`,`import "`,`require(`],$i=[`}`,`;`,`{`];function ea(){return[qi(.95,$i),Yi(.7,Zi),Yi(.3,Xi),Gi(.95,Qi),Hi(.5)]}const ta=new Set([`BreakStatement`,`ContinueStatement`,`LabeledStatement`]);function na(e){return ta.has(e.type)}function ra(e){return{comments:e,value:e.map(({value:e})=>e).join(`
6
- `)}}const ia=ea();function aa(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 oa(e,t){let n=[],r=0,i=[],a=0;for(let o of e)if(o.type===`Block`)a>0&&(n[r++]=ra(i),i=[],a=0),n[r++]=ra([o]);else if(a===0)i[a++]=o;else{let e=i.at(-1);e&&aa(e,o,t)?i[a++]=o:(n[r++]=ra(i),i=[o],a=1)}return a>0&&(n[r]=ra(i)),n}const sa=/\{/gu,ca=/\}/gu;function la(e){let t=(e.match(sa)??[]).length-(e.match(ca)??[]).length;return t>0?e+`}`.repeat(t):t<0?`{`.repeat(-t)+e:e}function ua(e){return Vi(ia,e.split(`
7
- `))}function da(e){return e.type!==`ReturnStatement`&&e.type!==`ThrowStatement`?!1:e.argument?.type===`Identifier`}function fa(e){return e.type===`UnaryExpression`&&(e.operator===`-`||e.operator===`+`)}function pa(e){return e.type===`Literal`&&(y(e.value)||b(e.value))}function ma(e){return x(e)&&y(e.type)}function ha(e){let t=[],n=0;for(let r of e)ma(r)&&(t[n++]=r);return t}function ga(e,t){if(e.type!==`ExpressionStatement`)return!1;let{expression:n}=e;return n.type===`Identifier`||n.type===`SequenceExpression`||fa(n)||pa(n)||!t.trimEnd().endsWith(`;`)}function _a(e,t){if(e.length!==1)return!1;let n=e.at(0);return n?na(n)||da(n)||ga(n,t):!1}const va=[/A 'return' statement can only be used within a function body/u];function ya(e){for(let t of e){let e=!1;for(let n of va)if(n.test(t.message)){e=!0;break}if(!e)return!1}return!0}function ba(e){return(e.errors.length===0||ya(e.errors))&&e.program.body.length>0}function xa(e,t){let n=o(t),r=u(`file${n||`.js`}`,e);if(ba(r))return r;if(n!==`.tsx`&&n!==`.jsx`){let t=u(`file.tsx`,e);if(ba(t))return t}}function Sa(e,t){if(!ua(e))return!1;let n=xa(e,t);return n?!_a(ha(n.program.body),e):!1}function Ca(e){let t=1;for(let n of e)n===`
8
- `&&(t+=1);return t}const wa=t({create(e){let{maxLines:t=0}=e.options[0]??{};return{"Program:exit"(){let n=oa(e.sourceCode.getAllComments(),e.sourceCode);for(let r of n){let n=r.value.trim();if(n===`}`||Ca(r.value)<=t||!Sa(la(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 z(e){return{constant:!0,value:e}}function Ta(){return{constant:!1}}function Ea(e){return{constant:!0,value:e}}function Da(){return{constant:!1}}function Oa(e){let t=new Set;if(!e?.loopExitCalls)return t;for(let n of e.loopExitCalls)ne(n)&&t.add(n);return t}function ka(e){let t=w(e);if(t.type===`Identifier`)return t.name;if(t.type!==`MemberExpression`)return;let n=ka(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 Aa(e,t){if(t.size===0)return!1;let n=ka(e.callee);return n===void 0||n.length===0?!1:t.has(n)}function ja(e,t){return B(e.type===`SpreadElement`?e.argument:e,t)}function B(e,t){if(t.size===0)return!1;let n=w(e);switch(n.type){case`ArrayExpression`:return Ma(n,t);case`ArrowFunctionExpression`:case`ClassExpression`:case`FunctionExpression`:return!1;case`AssignmentExpression`:return B(n.right,t);case`AwaitExpression`:return B(n.argument,t);case`BinaryExpression`:return Na(n,t);case`CallExpression`:return Pa(n,t);case`ConditionalExpression`:return Fa(n,t);case`LogicalExpression`:return Ia(n,t);case`MemberExpression`:return La(n,t);case`NewExpression`:return Ra(n,t);case`SequenceExpression`:return n.expressions.some(e=>B(e,t));case`TaggedTemplateExpression`:return za(n,t);case`TemplateLiteral`:return n.expressions.some(e=>B(e,t));case`UnaryExpression`:case`UpdateExpression`:return B(n.argument,t);case`YieldExpression`:return n.argument?B(n.argument,t):!1;default:return!1}}function Ma(e,t){for(let n of e.elements)if(n!==null&&ja(n,t))return!0;return!1}function Na(e,t){let{left:n}=e;return n.type!==`PrivateIdentifier`&&B(n,t)?!0:B(e.right,t)}function Pa(e,t){return Aa(e,t)||B(e.callee,t)?!0:e.arguments.some(e=>ja(e,t))}function Fa(e,t){return B(e.test,t)||B(e.consequent,t)||B(e.alternate,t)}function Ia(e,t){return B(e.left,t)||B(e.right,t)}function La(e,t){return B(e.object,t)?!0:e.computed&&B(e.property,t)}function Ra(e,t){return B(e.callee,t)?!0:e.arguments.some(e=>ja(e,t))}function za(e,t){return B(e.tag,t)?!0:e.quasi.expressions.some(e=>B(e,t))}function Ba(e){let t=w(e);switch(t.type){case`ArrayExpression`:return z([]);case`ArrowFunctionExpression`:case`ClassExpression`:case`FunctionExpression`:return z(!0);case`Identifier`:return t.name===`undefined`?z(void 0):t.name===`NaN`?z(NaN):t.name===`Infinity`?z(1/0):Ta();case`Literal`:return z(t.value);case`LogicalExpression`:return Va(t);case`ObjectExpression`:return z({});case`SequenceExpression`:{let e=t.expressions.at(-1);return e?Ba(e):Ta()}case`TemplateLiteral`:return t.expressions.length>0?Ta():t.quasis.length===0?z(``):z(t.quasis[0]?.value.cooked??``);case`UnaryExpression`:return Ha(t);default:return Ta()}}function Va(e){let t=Ba(e.left);return t.constant?e.operator===`&&`?t.value===!0?Ba(e.right):z(t.value):e.operator===`||`?t.value===!0?z(t.value):Ba(e.right):t.value===void 0?Ba(e.right):z(t.value):Ta()}function Ha(e){if(e.operator===`typeof`)return z(`string`);if(e.operator===`void`)return z(void 0);let t=Ba(e.argument);return t.constant?e.operator===`!`?z(!t.value):e.operator===`+`&&b(t.value)?z(t.value):e.operator===`-`&&b(t.value)?z(-t.value):e.operator===`~`&&b(t.value)?z(~t.value):Ta():Ta()}function V(e){let t=w(e);if(t.type===`ConditionalExpression`)return Ua(t);if(t.type===`LogicalExpression`)return Wa(t);if(t.type===`SequenceExpression`){let e=t.expressions.at(-1);return e?V(e):Da()}let n=Ba(t);return n.constant?Ea(!!n.value):Da()}function Ua(e){let t=V(e.test);if(t.constant)return V(t.value===!0?e.consequent:e.alternate);let n=V(e.consequent),r=V(e.alternate);return n.constant&&r.constant&&n.value===r.value?n:Da()}function Wa(e){let t=V(e.left);if(!t.constant)return Da();if(e.operator===`&&`)return t.value?V(e.right):Ea(!1);if(e.operator===`||`)return t.value===!0?Ea(!0):V(e.right);let n=Ba(e.left);return n.constant?n.value===void 0?V(e.right):Ea(!!n.value):Da()}const Ga=new Set([`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`WhileStatement`]);function Ka(e){return Ga.has(e.type)}function qa(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 Ja(e,t){if(e.label)return qa(e.label.name,e.parent)===t;let n=e.parent;for(;n!==null;){if(n.type===`Program`||P(n)||n.type===`SwitchStatement`)return!1;if(Ka(n))return n===t;n=n.parent}return!1}function Ya(e,t){return e?e.type===`VariableDeclaration`?e.declarations.some(e=>e.init?B(e.init,t):!1):B(e,t):!1}function Xa(e,t){switch(e.type){case`DoWhileStatement`:case`WhileStatement`:return B(e.test,t);case`ForInStatement`:case`ForOfStatement`:return B(e.right,t);case`ForStatement`:return!!(Ya(e.init,t)||e.test&&B(e.test,t)||e.update&&B(e.update,t));default:return!1}}function H(e,t,n){switch(e.type){case`BlockStatement`:return e.body.some(e=>H(e,t,n));case`BreakStatement`:return Ja(e,t);case`DoWhileStatement`:case`WhileStatement`:return Za(e,t,n);case`ExpressionStatement`:return B(e.expression,n);case`ForInStatement`:case`ForOfStatement`:return Qa(e,t,n);case`ForStatement`:return $a(e,t,n);case`IfStatement`:return eo(e,t,n);case`LabeledStatement`:return H(e.body,t,n);case`ReturnStatement`:return!0;case`SwitchStatement`:return e.cases.some(e=>e.consequent.some(e=>H(e,t,n)));case`TryStatement`:return to(e,t,n);case`VariableDeclaration`:return e.declarations.some(e=>e.init?B(e.init,n):!1);case`WithStatement`:return no(e,t,n);default:return!1}}function Za(e,t,n){return B(e.test,n)?!0:H(e.body,t,n)}function Qa(e,t,n){return B(e.right,n)?!0:H(e.body,t,n)}function $a(e,t,n){return Ya(e.init,n)||e.test&&B(e.test,n)||e.update&&B(e.update,n)?!0:H(e.body,t,n)}function eo(e,t,n){return H(e.consequent,t,n)?!0:e.alternate?H(e.alternate,t,n):!1}function to(e,t,n){return!!(H(e.block,t,n)||e.handler&&H(e.handler.body,t,n)||e.finalizer&&H(e.finalizer,t,n))}function no(e,t,n){return B(e.object,n)?!0:H(e.body,t,n)}function ro(e,t,n){return e.constant?!e.value||!Xa(t,n)&&!H(t.body,t,n):!1}const io=t({create(e){let t=e.options?.[0],n=Oa(typeof t==`object`&&t?t:void 0);function r(t){V(t).constant&&e.report({messageId:`unexpected`,node:t})}function i(t,r){ro(V(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 ao(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 oo=ao({alternative:`throw`,message:`Replace {{name}}(...) with {{alternative}}.`,messageId:`noError`,name:`error`});function so(e){let t=new Set;if(!e?.eventsImportPaths)return t;for(let n of e.eventsImportPaths)ne(n)&&t.add(n);return t}function co(e){switch(e.type){case`ChainExpression`:case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSTypeAssertion`:return co(e.expression);default:return e}}function lo(e){let t=co(e);if(t.type===`Identifier`)return t.name;if(t.type===`MemberExpression`)return lo(t.object)}function uo(e,t){let n=co(e.callee);if(n.type!==`MemberExpression`||T(n)!==`connect`)return;let r=lo(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 fo(e,t){let n=co(e.callee);if(n.type!==`MemberExpression`)return!1;let r=lo(n);return r!==void 0&&t.has(r)}function po(e,t){return e.has(t)?!1:(e.add(t),!0)}function mo(e,t){return po(t.playerValues,e)}function ho(e,t){return po(t.playerContainers,e)}function U(e,t){switch(e.type){case`ArrayPattern`:{let n=!1;for(let r of e.elements)r&&(n=U(r,t)||n);return n}case`AssignmentPattern`:return U(e.left,t);case`Identifier`:return mo(e.name,t);case`ObjectPattern`:{let n=!1;for(let r of e.properties){if(r.type===`RestElement`){n=U(r.argument,t)||n;continue}n=U(r.value,t)||n}return n}case`RestElement`:return U(e.argument,t);default:return!1}}function go(e,t,n){return t===0?!1:e.type===`Identifier`?t===2?mo(e.name,n):ho(e.name,n):U(e,n)}function _o(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?mo(e.name,n):ho(e.name,n):U(e,n):!1}function W(e,t){let n=co(e);switch(n.type){case`ArrayExpression`:return vo(n,t);case`AssignmentExpression`:return W(n.right,t);case`ConditionalExpression`:return yo(n,t);case`Identifier`:return t.playerValues.has(n.name)?2:+!!t.playerContainers.has(n.name);case`MemberExpression`:return bo(n,t);case`ObjectExpression`:return xo(n,t);case`SequenceExpression`:{let e=n.expressions.at(-1);return e===void 0?0:W(e,t)}default:return 0}}function vo(e,t){for(let n of e.elements)if(n!==null&&W(n.type===`SpreadElement`?n.argument:n,t)!==0)return 1;return 0}function yo(e,t){let n=W(e.consequent,t);return n===W(e.alternate,t)?n:0}function bo(e,t){return W(e.object,t)===1?2:0}function xo(e,t){for(let n of e.properties)if(W(n.type===`SpreadElement`?n.argument:n.value,t)!==0)return 1;return 0}function So(e,t){if(e.type===`TSParameterProperty`){U(e.parameter,t);return}U(e,t)}const Co=t({create(e){let t=so(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=W(e.right,t);n!==0&&_o(e.left,n,t)},CallExpression(t){let i=uo(t,n);if(i){let e={playerContainers:new Set,playerValues:new Set},[t]=i.params;t&&So(t,e),r.set(i,e)}let o=a();if(!(o&&fo(t,n)))return;let[s]=t.arguments;!s||s.type===`SpreadElement`||W(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=W(e.init,t);n!==0&&go(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`}}),wo=/^[A-Z]/u;function G(e){return wo.test(e)}function To(e){return e.type===`FunctionDeclaration`&&e.id!==null&&G(e.id.name)}function Eo(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 Do({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 Oo({name:e}){return e.type===`JSXIdentifier`?e.name:e.name.name}function ko(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 Ao(e,t){if(e.type!==`JSXIdentifier`)return!1;let n=e.name.charAt(0);return n!==``&&n===n.toLowerCase()||t.has(e.name)}function jo(e){if(e.type===`BinaryExpression`)switch(e.operator){case`%`:case`*`:case`**`:case`+`:case`-`:case`/`:return jo(e.left)&&jo(e.right);default:return!1}return e.type===`Identifier`||e.type===`Literal`?!0:e.type===`MemberExpression`?!e.computed&&jo(e.object):e.type===`ParenthesizedExpression`?jo(e.expression):e.type===`TemplateLiteral`?e.expressions.length===0:e.type===`UnaryExpression`&&jo(e.argument)}function Mo(e,t){return e?.type===`CallExpression`&&e.callee.type===`Identifier`&&(y(t)?e.callee.name===t:t.has(e.callee.name))}function No(e){return e.type===`VariableDeclarator`&&e.id.type===`Identifier`&&G(e.id.name)&&e.init!==null&&(e.init.type===`ArrowFunctionExpression`||e.init.type===`FunctionExpression`)}function Po(e){return e.loc.end.line-e.loc.start.line+1}function Fo(e){if(!(e.type!==`FunctionDeclaration`||!To(e)||e.id===null||e.body===null)&&O(e.id)&&`name`in e.id&&y(e.id.name))return{body:e.body,name:e.id.name,nameNode:e.id}}function Io(e){if(e.type!==`VariableDeclarator`||!No(e)||e.init===null||!(`name`in e.id&&y(e.id.name))||e.init.type!==`ArrowFunctionExpression`&&e.init.type!==`FunctionExpression`||!O(e.init.body))return;let{name:t}=e.id;return{body:e.init.body,name:t,nameNode:e.id}}const Lo=t({create(e){function t(t,n,r){let i=Po(r);i<=300||e.report({data:{lineCount:String(i),name:n},messageId:`giantComponent`,node:t})}return{FunctionDeclaration(e){let n=Fo(e);n!==void 0&&t(n.nameNode,n.name,n.body)},VariableDeclarator(e){let n=Io(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`}}),Ro=new Set([`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`]);function zo(e){if(e.type===`FunctionDeclaration`&&e.id!==null&&k(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`&&k(t.id.name))return t.id.name;if(t.type===`Property`&&t.key.type===`Identifier`&&k(t.key.name)||t.type===`MethodDefinition`&&t.key.type===`Identifier`&&k(t.key.name))return t.key.name}}function Bo(e){let{parent:t}=e;if(t.type===`VariableDeclarator`&&t.id.type===`Identifier`&&k(t.id.name))return t.id.name;if(t.type===`AssignmentExpression`&&t.left.type===`Identifier`&&k(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&&k(t.id.name)&&(n=t.id.name)}return n}function Vo(e){if(!Ve(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 Ho(e,t){return t?.type===`TSLiteralType`}function Uo(e,t){if(!Ve(e)||e.body===null)return{maxJsxDepth:0,nullLiterals:[],stateHookCount:0};let n=0,r=0,i=[],a=0;return Lr(e.body,o=>{if(!(Ro.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=R(o);e!==void 0&&e.length>0&&t.has(e)&&(r+=1)}o.type===`Literal`&&o.value===null&&!Ho(o,o.parent)&&i.push(o)}}),{maxJsxDepth:n,nullLiterals:i,stateHookCount:r}}function Wo(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 Go=t({create(e){let t=Wo(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=Vo(a);b(l)&&l>t.maxDestructuredProps&&e.report({data:{count:String(l),max:String(t.maxDestructuredProps),name:o},messageId:`tooManyProps`,node:a});let u=Uo(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=zo(e);t===void 0||t.length===0||a(e,t)}return{ArrowFunctionExpression:o,CallExpression(e){if(!Do(e))return;let[t]=e.arguments;if(!t||t.type!==`FunctionExpression`&&t.type!==`ArrowFunctionExpression`)return;let n=Bo(e),r=zo(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 Ko({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 qo=t({create(e){let t=0;function n(){t+=1}function r(){--t}return{ArrowFunctionExpression:n,"ArrowFunctionExpression:exit":r,CallExpression(n){t===0||!Ko(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 Jo(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 Yo(e){for(let{node:t}of e.defs){if(t.type!==`VariableDeclarator`)continue;let{init:e}=t;if(e!==null&&Jo(e))return!0}return!1}function Xo(e,t){let n=w(e.callee);if(n.type===`CallExpression`)return Jo(n);if(n.type===`Identifier`){let r=E(t.getScope(e),n.name);return r!==void 0&&Yo(r)}return!1}function Zo(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 Qo(e){for(let t of e.properties)if(t.type===`Property`&&t.key.type===`Identifier`&&t.key.name===`success`)return t.key}const $o=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`){Xo(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`&&Jo(o)){n.add(i.name);return}if(i.type===`ObjectPattern`&&Xo(o,t)&&Zo(i)){let t=Qo(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`}}),es=[`binding`];function ts(e){if(e.type===`Identifier`)return e.name;if(e.type===`AssignmentPattern`&&e.left.type===`Identifier`)return e.left.name}function ns({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 rs(e){if(e.params.length!==1)return;let[t]=e.params;return t===void 0?void 0:ts(t)}function is(e){if(e.type===`ArrowFunctionExpression`){let t=rs(e);if(t===void 0)return!1;let{body:n}=e;switch(n.type){case`BlockStatement`:return ns(n,t);case`Identifier`:return n.name===t;default:return!1}}if(e.type===`FunctionExpression`){let t=rs(e);return t===void 0||e.body===null?!1:ns(e.body,t)}return!1}function as(e){return R(e)===`joinBindings`}function os(e){for(let t of e.defs){if(t.node.type!==`VariableDeclarator`)continue;let{init:e}=t.node;if(e?.type===`CallExpression`&&(R(e)===`useBinding`||as(e)||e.callee.type===`MemberExpression`&&T(e.callee)===`map`))return!0}return!1}function ss(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&&os(i))return!0}return t.type===`CallExpression`&&(t.callee.type===`MemberExpression`&&T(t.callee)===`map`||as(t))}const cs=t({create(e){let{sourceCode:t}=e,[n]=e.options,r=n?.bindingPatterns??es;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`||!is(a))return;let o=ss(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:[...es],description:`Variable name patterns to recognize as Bindings (case insensitive)`,items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}});function ls(e){let{parent:t}=e;return t?.type===`ExpressionStatement`||t?.type===`ForStatement`&&t.update===e}const us=t({create(e){let[t]=e.options,n=wr(t)&&t.allowAutofix,{sourceCode:r}=e;return{UpdateExpression(t){if(!ls(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 ds(e){return e.name.type===`JSXIdentifier`?e.name.name:void 0}function fs(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 ps=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(!me(r))return;let i=ds(r);if(i===void 0||!t.has(i))return;let a=fs(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&&Eo(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`}}),ms={checkPrivate:!0,checkProtected:!0,checkPublic:!0};function hs(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}:ms}function gs(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 _s(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)&&vs(e[n],t))return!0;return!1}function vs(e,t){if(Array.isArray(e)){for(let n of e)if(O(n)&&_s(n,t))return!0;return!1}return O(e)&&_s(e,t)}function ys({value:e}){return e.type===`FunctionExpression`&&_s(e,new WeakSet)}function bs(e){return e.key.type===`Identifier`?e.key.name:`unknown`}const xs=t({create(e){let t=hs(e.options[0]);return{MethodDefinition(n){!gs(n,t)||ys(n)||e.report({data:{methodName:bs(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`,`~`]),ws=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 Ts(e){return ws.has(e.type)}function K(e){return e.type===`module`||e.type===`global`}function Es(e){for(let t of e.defs)if(t.type===`ImportBinding`)return!0;return!1}function Ds(e){return e.type===`Variable`}function Os(e){if(!Ds(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 ks(e,t){let n=E(e.getScope(t),t.name);if(!(n===void 0||!K(n.scope)))for(let e of n.defs){let t=Os(e);if(t!==void 0)return t}}function As(e,t){let n=E(e.getScope(t),t.name);if(n!==void 0)for(let e of n.defs){let t=Os(e);if(t!==void 0)return t}}function js(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=As(e,r);return i!==void 0&&js(e,i,n)}function Ms(e,t,n,r){return t.type===`Identifier`?!0:Ts(t)?q(e,t,n,r):!1}function Ns(e,t,n,r){let i=w(t);return i.type===`Identifier`?Fs(e,i,n,r):i.type!==`MemberExpression`||!q(e,i.object,n,r)?!1:i.computed?q(e,i.property,n,r):i.property.type===`Identifier`}function Ps(e,t,n,r,i){return Ns(e,n,r,i)?t.every(t=>t.type!==`SpreadElement`&&q(e,t,r,i)):!1}function q(e,t,n,r){let i=w(t);if(n.has(i))return!1;switch(n.add(i),i.type){case`ArrayExpression`:return Rs(e,i,n,r);case`BinaryExpression`:case`LogicalExpression`:return Ts(i.left)?q(e,i.left,n,r)&&q(e,i.right,n,r):!1;case`CallExpression`:return Ps(e,i.arguments,i.callee,n,r);case`ChainExpression`:return q(e,i.expression,n,r);case`ConditionalExpression`:return q(e,i.test,n,r)&&q(e,i.consequent,n,r)&&q(e,i.alternate,n,r);case`Identifier`:return Fs(e,i,n,r);case`Literal`:return!0;case`MemberExpression`:return q(e,i.object,n,r)&&(!i.computed||Ms(e,i.property,n,r));case`NewExpression`:return Ps(e,i.arguments,i.callee,n,r);case`ObjectExpression`:return Ls(e,i,n,r);case`SequenceExpression`:return i.expressions.length>0&&i.expressions.every(t=>q(e,t,n,r));case`TemplateLiteral`:return i.expressions.length===0;case`UnaryExpression`:return Cs.has(i.operator)&&q(e,i.argument,n,r);default:return!1}}function Fs(e,t,n,r){let i=E(e.getScope(t),t.name);if(i===void 0)return r.staticGlobalFactories.has(t.name);if(!K(i.scope))return!1;if(Es(i))return!0;for(let t of i.defs){let i=Os(t);if(i!==void 0&&q(e,i,n,r))return!0}return!1}function Is(e){return e.type!==`PrivateIdentifier`&&e.type!==`Identifier`}function Ls(e,t,n,r){for(let i of t.properties)if(i.type!==`Property`||i.kind!==`init`||i.computed&&Is(i.key)&&!q(e,i.key,n,r)||!q(e,i.value,n,r))return!1;return!0}function Rs(e,{elements:t},n,r){for(let i of t)if(i===null||i.type===`SpreadElement`||!q(e,i,n,r))return!1;return!0}function zs(e){return e.type===`JSXIdentifier`?e.name:e.name.name}function Bs(e){return e===`nativeProperties`||e.endsWith(`NativeProperties`)}function Vs(e){if(!(e.type!==`Variable`||e.node.type!==`VariableDeclarator`))return e.node.init??void 0}function Hs(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 Us(e,t){let n=w(t);if(n.type===`ObjectExpression`)return!0;let r=Hs(n);if(r===void 0)return!1;let i=E(e.getScope(r),r.name);return i===void 0?!1:Es(i)||K(i.scope)}function Ws(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||K(i.scope)))for(let t of i.defs){let r=Vs(t);if(r===void 0)continue;let i=Ws(e,r,n);if(i!==void 0)return i}}const Gs=t({create(e){let{sourceCode:t}=e;function n(n,r){for(let i of n.properties){if(i.type!==`SpreadElement`||!Us(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=zs(e.name);if(r===void 0||!Bs(r))return;let{value:i}=e;if(i?.type!==`JSXExpressionContainer`)return;let{expression:a}=i;if(a.type===`JSXEmptyExpression`)return;let o=Ws(t,a,new Set);o!==void 0&&n(o,{messageId:`noNativePropertiesSpread`,propertyName:r})},JSXSpreadAttribute(e){let r=Ws(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 Ks(e){return e.parent.type===`ExpressionStatement`?!0:e.parent.type!==`UnaryExpression`||e.parent.operator!==`void`?!1:e.parent.parent.type===`ExpressionStatement`}function qs(e,t,n,r){if(yn(e,t))for(let t of e.specifiers){if(t.type===`ImportSpecifier`){le(t.imported,`useMemo`)&&n.add(t.local.name);continue}r.add(t.local.name)}}const Js=new Set([`Instance`]);function Ys(e){let t=x(e)&&S(e.constructors)?new Set(e.constructors):Js,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 Xs(e){return e?.type===`CallExpression`}function Zs(e,t,n){let r=e.parent;for(;r!==null;){if(Pe(r)){let{parent:e}=r;if(Xs(e)&&e.arguments[0]===r){if(!de(e,t,n)){r=e.parent;continue}return!0}}r=r.parent}return!1}function Qs(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=$s(a,t,n,r,i);for(let t of e)o.add(t)}return i.delete(e),r.set(e,o),o}function $s(e,t,n,r,i){if(e.type===`FunctionName`)return ec(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(Pe(o))return tc(o,n);if(o.type!==`Identifier`)return new Set;let s=E(t.getScope(o),o.name);return s===void 0?new Set:Qs(s,t,n,r,i)}function ec(e,t){let{node:n}=e;return n.type===`FunctionDeclaration`?tc(n,t):new Set}function tc(e,t){let n=t.get(e)?.id;return n===void 0?new Set:new Set([n])}function nc(e,t,n,r){let i=E(t.getScope(e),e.name);return i===void 0?new Set:Qs(i,t,n,r,new Set)}function rc(e,t,n,r){for(let i of t.values())for(let t of i.callIdentifiers){let a=nc(t,e,n,r);for(let e of a)i.callees.add(e)}}function ic(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 ac(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=nc(t,e,r,i);for(let e of n)a.add(e)}return a}const oc=t({create(e){let t=Ys(e.options[0]);if(t.constructors.size===0)return{};let n=_n(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),!de(e,r,i))return;let[t]=e.arguments;if(t!==void 0){if(t.type===`Identifier`){l.push(t);return}Pe(t)&&u.push(t)}},FunctionDeclaration:h,"FunctionDeclaration:exit":g,FunctionExpression:h,"FunctionExpression:exit":g,ImportDeclaration(e){qs(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:Zs(e,r,i),node:e})},"Program:exit"(){rc(e.sourceCode,o,a,d);let n=ic(ac(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`}}),sc=ao({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 cc(e,t){let n=t;for(;n;){if(n.set.has(e))return!0;n=n.upper}return!1}function lc(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 uc=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=cc(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=lc(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`}]}}),dc=new m({extensions:[`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`,`.json`,`.node`]}),fc={found:!1};function pc(e,t){if(!e.startsWith(`.`))return fc;let{path:n}=dc.sync(a(t),e);return n===void 0||n===``?fc:{found:!0,path:n}}const mc=`uiaspectratioconstraint`,hc=new Set([`ButtonSpritesheet`,`GenericSpritesheet`,`LabelSpritesheet`]);function gc({openingElement:e}){let{name:t}=e;return t.type===`JSXIdentifier`?t.name:void 0}function _c(e){let t=!1;return Lr(e,e=>{t||e.type===`JSXElement`&&gc(e)===mc&&(t=!0)}),t}function vc(e){if(e.type===`FunctionDeclaration`)return e.id?.name;if(Pe(e)){let{parent:t}=e;if(t.type===`VariableDeclarator`&&t.id.type===`Identifier`)return t.id.name}}function yc(e){if(e.body.type!==`BlockStatement`)return w(e.body)}function bc(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 xc=new Map;function Sc(e,t){if(!e.startsWith(`.`))return!1;let n=pc(e,t);if(!n.found)return!1;let r=xc.get(n.path);if(r!==void 0)return r;try{let e=f(n.path,`utf8`).includes(`<uiaspectratioconstraint`);return xc.set(n.path,e),e}catch{return xc.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 wc(e){return e.type===`JSXElement`?gc(e)===mc:e.type===`JSXExpressionContainer`&&e.expression.type===`Identifier`&&e.expression.name===`UI_ASPECT_RATIO_CONSTRAINT`}function Tc(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||!Es(i))return!1;let a=bc(i);return a!==void 0&&(Sc(a,r)||hc.has(e))}const Ec=t({create(e){let{filename:t,sourceCode:n}=e,r=new Set,i=[],a;return{ArrowFunctionExpression(e){let t=vc(e),n=yc(e);t===void 0||n===void 0||n.type!==`JSXElement`&&n.type!==`JSXFragment`||_c(n)&&r.add(t)},FunctionDeclaration(e){let t=vc(e);if(t===void 0||e.body?.body.length!==1)return;let[n]=e.body.body;n?.type!==`ReturnStatement`||n.argument===null||_c(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=gc(n);if(i!==void 0&&!(!Tc(i,r,o,t)||Cc(n)))for(let t of n.children)wc(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`}}),Dc=new Set([`JSXElement`,`ReactElement`,`ReactNode`]),Oc=new Set([`ChainExpression`,`ParenthesizedExpression`,`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]),kc=/^use[A-Z]/u;function Ac(e){return kc.test(e)}function jc(e){if(e?.type!==`TSTypeReference`)return!1;let{typeName:t}=e;return t.type===`Identifier`?Dc.has(t.name):t.type===`TSQualifiedName`&&Dc.has(t.right.name)}function Mc({returnType:e}){return e?.typeAnnotation??void 0}function Nc(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 Rr(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 Pc({parent:e}){return e.type===`CallExpression`||e.type===`JSXExpressionContainer`||e.type===`ArrayExpression`}function Fc(e){if(!(e.parent?.type!==`VariableDeclarator`||e.parent.id.type!==`Identifier`))return e.parent.id.name}function Ic(e){return e.type===`Identifier`?e.name:void 0}function Lc(e){let t=e;for(;t!==void 0&&Oc.has(t.type);)t=t.parent??void 0;return t}function Rc(e){let t=Lc(e.parent??void 0);return t?.type===`Property`&&zc(t.value)===e}function zc(e){let t=e;for(;Bc(t);)t=t.expression;return t}function Bc(e){return Oc.has(e.type)}function Vc(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 Hc(e,t){let n=Vc(t,e);if(n===void 0)return!1;let r=!1;for(let e of n.references)if(!e.isWrite()&&(r=!0,!Rc(e.identifier)))return!1;return r}const Uc=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=Fc(r);if(a!==void 0&&G(a)){--t;return}if(t>0||Pc(r)||i.type!==`VariableDeclarator`)return;let o=Ic(i.id);if(o===void 0||G(o)||Ac(o)||Hc(r,e.sourceCode))return;let s=se(i.id),c=s!==void 0&&jc(s.typeAnnotation),l=jc(Mc(r));(c||l||Nc(r))&&n(i,o)}return{ArrowFunctionExpression(e){let n=Fc(e);n!==void 0&&G(n)&&(t+=1)},"ArrowFunctionExpression:exit":r,FunctionDeclaration({id:e}){e!==null&&G(e.name)&&(t+=1)},"FunctionDeclaration:exit"(r){if(r.id===null)return;let i=r.id.name;if(G(i)){--t;return}t>0||Ac(i)||Hc(r,e.sourceCode)||(jc(Mc(r))||Nc(r))&&n(r,i)},FunctionExpression(e){let n=Fc(e);n!==void 0&&G(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`}}),Wc=h({"message?":`string | undefined`,object:`string`,properties:h(`string[]`).readonly()}).readonly(),Gc=h({"allowFiles?":h(`string[]`).readonly().or(`undefined`),"checkComputed?":`boolean | undefined`,restrictions:Wc.array().readonly()}).readonly(),Kc={matchBase:!0},qc={dot:!0,magicalBraces:!0};function Jc(e){return e.replaceAll(`\\`,`/`)}function Yc(e){let t=Jc(e);if(!s(e))return[t];let n=Jc(l(process.cwd(),e));return n.length===0||n.startsWith(`..`)?[t]:[t,n]}function Xc(e,t){let n=new g(e,t),r=n.hasMagic();return{hasMagic:r,matches:r?e=>n.match(e):t=>t===e}}function Zc(e){let t=new Set,n=[],r=0;for(let i of e){let e=Xc(i,qc);e.hasMagic?n[r++]=e.matches:t.add(i)}return e=>t.has(e)||n.some(t=>t(e))}function Qc(e){return{matchesObject:Xc(e.object,qc).matches,matchesProperty:Zc(e.properties),message:e.message}}function $c(e){let[t]=e.options;if(!Gc.allows(t))return{checkComputed:!0,isAllowedFile:!1,restrictions:[]};let{allowFiles:n,checkComputed:r,restrictions:i}=t,a=Yc(e.filename),o=n?.some(e=>a.some(t=>_(t,e,Kc)))??!1;return{checkComputed:r??!0,isAllowedFile:o,restrictions:i.map(Qc)}}const el=t({create(e){let{checkComputed:t,isAllowedFile:n,restrictions:r}=$c(e);function i(i,a){if(n||!N(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`}}),tl=/\.spec\.(?:ts|tsx)$/u,nl=t({createOnce(e){return{Program(t){let{filename:n}=e;n&&tl.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`}}),rl=`Fragment`;function il(e){return e.parent?.type===`ImportDeclaration`?e.parent:void 0}function al(e,t){if(e.type!==`ImportBinding`)return!1;let n=il(e.node);return n!==void 0&&t.has(n.source.value)}function ol(e,t){if(e===void 0)return!1;for(let n of e.defs)if(al(n,t)&&(n.node.type===`ImportDefaultSpecifier`||n.node.type===`ImportNamespaceSpecifier`))return!0;return!1}function sl(e,t,n){if(e===void 0)return!1;for(let r of e.defs)if(al(r,n)&&r.node.type===`ImportSpecifier`&&fe(r.node)===t)return!0;return!1}function cl(e,t,n){let{callee:r}=t;return r.type===`Identifier`?sl(E(e.getScope(r),r.name),`createElement`,n):r.type!==`MemberExpression`||r.computed||T(r)!==`createElement`||r.object.type!==`Identifier`?!1:ol(E(e.getScope(r.object),r.object.name),n)}function ll(e){return e.type===`Literal`&&y(e.value)}function ul(e,t){if(Es(e))return k(t)||t===rl;if(!K(e.scope)||!k(t)&&t!==rl)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&&(Pe(e)||e.type===`ClassExpression`))return!0}return!1}function dl(e,t,n){let r=E(e.getScope(t),t.name);return sl(r,rl,n)?!0:r!==void 0&&ul(r,t.name)}function fl(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 pl(e){if(e.computed)return;let t=T(e);if(t!==void 0)return e.object.type===`MemberExpression`&&pl(e.object)===void 0?void 0:t}function ml(e,t,n){let r=fl(t);if(r===void 0)return!1;let i=pl(t);if(i===void 0)return!1;let a=E(e.getScope(r),r.name);return ol(a,n)&&i===rl?!0:a===void 0||!Es(a)?!1:k(i)}function hl(e,t,n){return t.type===`SpreadElement`?!1:ll(t)?!0:t.type===`Identifier`?dl(e,t,n):t.type===`MemberExpression`&&ml(e,t,n)}const gl=t({create(e){let t=vn(e.options[0]),{sourceCode:n}=e;return{CallExpression(r){if(!cl(n,r,t))return;let[i]=r.arguments;i!==void 0&&hl(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:pn},type:`object`}],type:`problem`}});function _l(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:!D(e,i,`table`)}function vl(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:!D(e,r,`Array`)}const yl=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);(_l(e.sourceCode,r)||vl(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 bl(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 xl=t({createOnce(e){return{CallExpression(t){if(bl(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,wl=/\{@(?:link|linkcode|linkplain|see)\s+(?<identifier>\w+)/gu,Tl=/[@{](?:type|typedef|param|returns?|template|augments|extends|implements)\s+(?<annotation>[^}]*)/gu,El=/\b(?<identifier>\w+)\b/gu;function Dl(e){return e.type===`ImportDefaultSpecifier`||e.type===`ImportNamespaceSpecifier`||e.type===`ImportSpecifier`}function Ol(e){let t=new Set;for(let n of e)n.type===`Block`&&(kl(n.value,t),Al(n.value,t));return t}function kl(e,t){for(let n of[Cl,wl])for(let r of e.matchAll(n)){let e=r.groups?.identifier;e!==void 0&&t.add(e)}}function Al(e,t){for(let n of e.matchAll(Tl)){let e=n.groups?.annotation;if(e!==void 0)for(let n of e.matchAll(El)){let e=n.groups?.identifier;e!==void 0&&t.add(e)}}}function jl(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 Ml=t({create(e){let{sourceCode:t}=e,n=e.options[0]?.checkJSDoc??!0,r=n?Ol(t.getAllComments()):new Set,i=[],a;return{ImportDeclaration(e){a??=e;for(let t of e.specifiers)Dl(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 jl(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`}}),Nl=t({create(e){let t=new Set,n=new Set,r=vn(e.options[0]);return{CallExpression(r){de(r,t,n)&&Ks(r)&&e.report({messageId:`unusedUseMemo`,node:r})},ImportDeclaration(e){qs(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 Pl(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 Fl=t({create(e){return{CallExpression(t){if(!Mo(t,`useMemo`))return;let n=Ir(t);if(n===void 0)return;let r=Pl(n);r===void 0||!jo(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`}}),Il=/^[A-Z][A-Z0-9_]*$/u,Ll={staticGlobalFactories:new Set(Ss)},Rl=[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 zl(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 Bl(e){return Pe(e)||e.type===`ClassExpression`}const Vl=new Set([`ArrayExpression`,`ObjectExpression`,`JSXElement`,`JSXFragment`]);function Hl(e,t,n){if(Vl.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 Ul(e){return e.type===`Program`||e.type===`BlockStatement`}function Wl(e){switch(e.type){case`ChainExpression`:case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:return Wl(e.expression);case`Identifier`:return e.name;case`MemberExpression`:return Wl(e.object);default:return}}function J(e,t){switch(e.type){case`ArrayExpression`:return Gl(e,t);case`BinaryExpression`:case`LogicalExpression`:return Kl(e,t);case`CallExpression`:case`NewExpression`:return ql(e,t);case`ChainExpression`:return J(e.expression,t);case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:return J(e.expression,t);case`ConditionalExpression`:return Jl(e,t);case`MemberExpression`:return Yl(e,t);case`ObjectExpression`:return Xl(e,t);case`SequenceExpression`:return!1;case`SpreadElement`:return!1;case`TemplateLiteral`:return Zl(e.expressions,t);case`UnaryExpression`:return J(e.argument,t);default:return!0}}function Gl(e,t){for(let n of e.elements)if(n===null||!J(n,t))return!1;return!0}function Kl(e,t){return J(e.left,t)&&J(e.right,t)}function ql(e,t){let n=Wl(e.callee);return n===void 0||!t.has(n)||!J(e.callee,t)?!1:Zl(e.arguments,t)}function Jl(e,t){return J(e.test,t)&&J(e.consequent,t)&&J(e.alternate,t)}function Yl(e,t){return J(e.object,t)&&(!e.computed||J(e.property,t))}function Xl(e,t){for(let n of e.properties)if(n.type!==`Property`||n.computed&&!J(n.key,t)||!J(n.value,t))return!1;return!0}function Zl(e,t){for(let n of e)if(!J(n,t))return!1;return!0}function Ql(e,t){return t.type===`Literal`||q(e,t,new Set,Ll)&&J(t,Ll.staticGlobalFactories)}function $l(e,t){let n=t;for(;n.type===`ParenthesizedExpression`;)n=n.expression;return e.getText(n)}function eu(e,t){let{parent:n}=e;if(n==null||!Ul(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 tu(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 nu(e){let t=e.parent,n=e;for(;t!=null;){if(A(t)&&t.init===n)return t;n=t,t=t.parent}}const ru=t({create(e){let{sourceCode:t}=e,[n]=e.options,r=(n?.ignoreCallPatterns??Rl).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(!Il.test(i))return;let[o]=n.defs;if(o?.type!==`Variable`)return;let s=o.node;if(!(A(s)&&tt(s.id))||s.init===null)return;let c=o.parent;if(c===null||!je(c)||c.kind!==`const`||c.declarations.length!==1||Me(c.parent))return;let l=s.init;if(Bl(l)||Hl(l,r,t))return;let u=a(e,n);if(u===void 0||!tt(u.identifier))return;let d=nu(u.identifier);if(d===void 0)return;let f=d.parent;if(!(!je(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=eu(s.declarationNode,s.enclosingDeclaration),l=Ql(t,s.initializer),u=J(s.initializer,Ll.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:$l(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(tu(t.text,a.declarationNode));return r},messageId:n.length===1?`uselessConstant`:`uselessConstants`,node:r.reportNode})}return{"Program:exit"(e){let n=zl(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:[...Rl],items:{type:`string`},type:`array`}},type:`object`}],type:`problem`}});var iu={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 au=Object.keys(iu).length,ou=new Set([`Name`,`Parent`]),su=new Set(Array.from(ou,e=>e.toLowerCase())),cu=new Map(Object.entries(iu).map(([e])=>[e.toLowerCase(),e]));function lu(e){let t=new Map;for(let[n,r]of Object.entries(e)){if(!bu(r))continue;let e=n.toLowerCase();t.has(e)||t.set(e,{propertyName:n,value:r})}return t}const uu=new Map([[`TextLabel`,new Map([[`text`,{propertyName:`Text`,value:{type:`string`,value:``}}]])],[`UICorner`,new Map([[`cornerradius`,{propertyName:`CornerRadius`,value:{type:`UDim`,value:[0,0]}}]])]]),du=new Map(Object.entries(iu).map(([e,t])=>[e,lu(t)]));function fu(e,t){return e.type===`Identifier`&&e.name===t}function pu(e){return e.type===`Literal`&&typeof e.value==`boolean`}function mu(e){if(e.type!==`JSXIdentifier`)return;let t=cu.get(e.name.toLowerCase());if(!(t===void 0||e.name===t))return t}function hu(e){if(e.type===`JSXIdentifier`)return e.name}function gu(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 _u(e,t){let n=t.toLowerCase(),r=uu.get(e)?.get(n);if(r!==void 0)return r;let i=du.get(e);if(i!==void 0)return i.get(n)}function vu(e){return su.has(e.toLowerCase())}function yu(e){return b(e)||e===`inf`||e===`-inf`}function bu(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(yu);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 yu(e.value);case`Rect`:case`UDim2`:return Array.isArray(e.value)&&e.value.length===4&&e.value.every(yu);case`string`:return y(e.value);case`UDim`:case`Vector2`:return Array.isArray(e.value)&&e.value.length===2&&e.value.every(yu);case`Vector3`:return Array.isArray(e.value)&&e.value.length===3&&e.value.every(yu)}return!1}function xu(e){let t=w(e);if(t.type!==`NewExpression`||!fu(t.callee,`Instance`))return;let[n]=t.arguments;if(!(n===void 0||n.type===`SpreadElement`||!ge(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 wu(e){let t=Cu(e);return t?.length===2&&t[0]===`math`&&t[1]===`huge`}function Tu(e){return e===`inf`?1/0:e===`-inf`?-1/0:e}function Eu(e,t){return Tu(e)===t}function Du(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||!Eu(r,e))return!1}return!0}function Y(e){if(Ue(e))return e.value;if(wu(e))return 1/0;if(e.type!==`UnaryExpression`||e.operator!==`+`&&e.operator!==`-`)return;let t=Y(e.argument);if(t!==void 0)return e.operator===`+`?t:-t}function Ou(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 ku(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 Au(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 ju(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`||!fu(e.callee,`Vector2`)))return e.arguments.length===0?[0,0]:Mu(e.arguments)}function Mu(e){let t=Ou(e);if(t===void 0)return;let[n,r]=t,i=Y(n),a=Y(r);if(!(i===void 0||a===void 0))return[i,a]}function Nu(e){let t=ku(e);if(t===void 0)return;let[n,r,i]=t,a=Y(n),o=Y(r),s=Y(i);if(!(a===void 0||o===void 0||s===void 0))return[a,o,s]}function Pu(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`||!fu(e.callee,`Vector3`)))return e.arguments.length===0?[0,0,0]:Nu(e.arguments)}function Fu(e){if(!(e.type!==`NewExpression`||!fu(e.callee,`UDim`)))return e.arguments.length===0?[0,0]:Mu(e.arguments)}function Iu(e){let t=Au(e);if(t===void 0)return;let[n,r,i,a]=t,o=Y(n),s=Y(r),c=Y(i),l=Y(a);if(!(o===void 0||s===void 0||c===void 0||l===void 0))return[o,s,c,l]}function Lu(e){if(e.type===`CallExpression`){let t=Cu(e.callee),n=Mu(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`||!fu(e.callee,`UDim2`)))return e.arguments.length===0?[0,0,0,0]:Iu(e.arguments)}function Ru(e){if(!(e.type!==`NewExpression`||!fu(e.callee,`Rect`)))return e.arguments.length===0?[0,0,0,0]:Iu(e.arguments)}function zu(e){let[t,n,r]=e,i=Y(t),a=Y(n),o=Y(r);if(!(i===void 0||a===void 0||o===void 0))return[i,a,o]}function Bu(e){if(e.type===`CallExpression`){let t=Cu(e.callee),n=ku(e.arguments);if(t?.length!==2||t[0]!==`Color3`||t[1]!==`fromRGB`||n===void 0)return;let r=zu(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`||!fu(e.callee,`Color3`))return;if(e.arguments.length===0)return[0,0,0];let t=ku(e.arguments);if(t!==void 0)return zu(t)}function Vu(e){if(e.type!==`NewExpression`||!fu(e.callee,`CFrame`))return;if(e.arguments.length===0)return[0,0,0,1,0,0,0,1,0,0,0,1];let t=Nu(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 Hu(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 Uu(e,t){switch(t.type){case`bool`:return pu(e)&&e.value===t.value;case`CFrame`:{let n=Vu(e);return n!==void 0&&Du(t.value,n)}case`Color3`:{let n=Bu(e);return n!==void 0&&n[0]===t.value[0]&&n[1]===t.value[1]&&n[2]===t.value[2]}case`Enum`:{let n=Hu(e);return n!==void 0&&n.enumType===t.enumType&&n.value===t.value}case`number`:{let n=Y(e);return n!==void 0&&Eu(t.value,n)}case`Rect`:{let n=Ru(e);return n!==void 0&&Du(t.value,n)}case`string`:return ge(e)&&e.value===t.value;case`UDim`:{let n=Fu(e);return n!==void 0&&Du(t.value,n)}case`UDim2`:{let n=Lu(e);return n!==void 0&&Du(t.value,n)}case`Vector2`:{let n=ju(e);return n!==void 0&&Du(t.value,n)}case`Vector3`:{let n=Pu(e);return n!==void 0&&Du(t.value,n)}default:return!1}}const Wu=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(vu(o))return;let s=_u(a.className,o);if(s===void 0||!Uu(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=xu(n.init);e!==void 0&&t.set(n.id.name,{className:e})}}return{BlockStatement(e){l(e.body)},JSXOpeningElement(t){let n=mu(t.name);if(n!==void 0)for(let r of t.attributes){if(r.type===`JSXSpreadAttribute`)continue;let a=hu(r.name);if(a===void 0||vu(a))continue;let o=_u(n,a);if(o===void 0)continue;let s=gu(r);if(!(r.value===null&&o.value.type===`bool`&&o.value.value)&&(s===void 0||!Uu(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 ${au} default-property classes.`},fixable:`code`,messages:{uselessDefault:`Remove "{{propertyName}}" from {{className}}. It already matches the default value.`},schema:[],type:`suggestion`}}),Gu=[`useEffect`,`useLayoutEffect`,`useInsertionEffect`],Ku=[`on`],qu=[`useRef`],Ju=[`useState`,`useReducer`];function Yu(e){return e===void 0?{environment:`roblox-ts`,hooks:new Set(Gu),propertyCallbackPrefixes:new Set(Ku),refHooks:new Set(qu),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(Ju)}:{environment:mn(e.environment)?e.environment:`roblox-ts`,hooks:new Set(S(e.hooks)?e.hooks:Gu),propertyCallbackPrefixes:new Set(S(e.propertyCallbackPrefixes)?e.propertyCallbackPrefixes:Ku),refHooks:new Set(S(e.refHooks)?e.refHooks:qu),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:Ju)}}function Xu(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 Zu(e){if(!(e.type!==`MemberExpression`||e.computed||e.property.type!==`Identifier`))return e.property.name}function Qu(e,t,n,r){let{callee:i}=e;if(i.type===`Identifier`)return t.has(i.name);let a=Xu(i);return a!==void 0&&n.has(a.objectName)&&r.has(a.propertyName)}function $u(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)&&O(t.key)&&t.key.type===`Identifier`)return t.key.name}function ed(e){return ne(e)&&e.startsWith(`use`)}function td(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 nd(e,t){`body`in e&&O(e.body)&&(e.body.type===`BlockStatement`?t.push(...e.body.body):t.push(e.body))}function rd(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`){nd(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 id(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`:rd(e,t);continue;default:continue}}return!1}function ad(e){if(e.length===0)return e;let[t]=e;return t?.type!==`IfStatement`||t.alternate!==null||!td(t.consequent)?e:e.slice(1)}function od(e){return e.type===`ChainExpression`?e.expression:e}function X(e){if(e.type!==`ExpressionStatement`)return;let t=od(e.expression);return t.type===`CallExpression`?t:void 0}function sd(e,t){return e.callee.type===`Identifier`&&t.has(e.callee.name)}function cd(e){return e.type===`Literal`&&e.value===!1}function ld(e){return e.type===`Literal`||e.type===`UnaryExpression`&&e.operator===`void`&&e.argument.type===`Literal`&&e.argument.value===0}function ud(e){return e.type===`ArrayExpression`&&e.elements.length===0}function dd(e){return e.type===`ObjectExpression`&&e.properties.length===0}function fd(e){if(e.type===`Literal`){let{value:t}=e;return t===``||t===0||t===!1||t===null}return ld(e)?!0:ud(e)||dd(e)}function pd(e,t){let n=X(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||!cd(i)))return r}function md(e,t){let n=X(e);if(!(n===void 0||sd(n,t)))return n}function hd(e,t){return e.type===`UnaryExpression`&&e.operator===`!`&&e.argument.type===`Identifier`&&e.argument.name===t}function gd(e,t){return e.type===`Identifier`&&e.name===t}function Z(e){return e.type===`BlockStatement`?e.body:[e]}function _d(e,t,n){let[r,i,a]=e;if(r?.type!==`IfStatement`||r.alternate!==null||i===void 0||a===void 0)return;let o=pd(i,t),s=pd(a,t),c=td(r.consequent);if(o!==void 0&&s===void 0)return c&&hd(r.test,o)?md(a,n)===void 0?void 0:o:void 0;if(!(s===void 0||o!==void 0)&&c&&hd(r.test,s))return md(i,n)===void 0?void 0:s}function vd(e,t,n){if(e.type!==`IfStatement`||e.alternate!==null)return;let r=Z(e.consequent),[i,a]=r;if(r.length!==2||i===void 0||a===void 0)return;let o=pd(i,t),s=pd(a,t);if(o!==void 0&&s===void 0)return gd(e.test,o)?md(a,n)===void 0?void 0:o:void 0;if(!(s===void 0||o!==void 0)&&gd(e.test,s))return md(i,n)===void 0?void 0:s}function yd(e,t,n){if(e.length===3)return _d(e,t,n);if(e.length===1){let[r]=e;return r===void 0?void 0:vd(r,t,n)}}const bd=new Set([`ArrayExpression`,`BinaryExpression`,`CallExpression`,`ChainExpression`,`ConditionalExpression`,`Identifier`,`LogicalExpression`,`MemberExpression`,`ObjectExpression`,`PrivateIdentifier`,`TemplateLiteral`,`UnaryExpression`]);function xd(e){return bd.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 wd(e,t){t.push(e.object),e.computed||t.push(e.property)}function Td(e,t){for(let n of e.properties)n.type===`Property`&&t.push(n.value)}function Ed(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`:wd(e,t);break;case`ObjectExpression`:Td(e,t);break;case`TemplateLiteral`:t.push(...e.expressions);break;case`UnaryExpression`:t.push(e.argument);break;default:}}function Dd(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;Ed(e,t)}}return!1}function Od(e,t){let n=0;for(let r of e){if(r.type===`IfStatement`){if(r.alternate!==null)return;let e=Od(Z(r.consequent),t);if(e===void 0||e===0)return;n+=e;continue}let e=X(r);if(e===void 0||!t(e))return;n+=1}return n>0?n:void 0}function kd(e,t){return Od(e,e=>sd(e,t)?e.arguments.some(e=>e.type!==`SpreadElement`&&Dd(e)):!1)}function Ad(e,t,n){return Od(e,e=>Pd(e,t,n))}function jd(e,t){for(let n of t)if(e.startsWith(n))return!0;return!1}function Md(e){return e.type===`AssignmentPattern`?e.left:e}function Nd(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=Md(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=Ur(e);if(n===void 0||!jd(n,t))continue;let r=Wr(e);r!==void 0&&i.propertyCallbackIdentifiers.add(r.name)}return i}function Pd(e,t,n){let{callee:r}=e;if(r.type===`Identifier`)return t.propertyCallbackIdentifiers.has(r.name);let i=Xu(r);return i!==void 0&&t.propertyObjectName!==void 0&&i.objectName===t.propertyObjectName&&jd(i.propertyName,n)}function Fd(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 Id(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 Ld(e){let[,t]=e.arguments;return t===void 0||t.type===`ArrayExpression`&&t.elements.length===0}function Rd(e,t){if(e.length===0)return!1;for(let n of e){if(n.type===`IfStatement`){if(n.alternate!==null||!Rd(Z(n.consequent),t))return!1;continue}if(!t(n))return!1}return!0}function zd(e,t){let n=new Set;for(let r of e){if(r.type===`IfStatement`){let e=Z(r.consequent);for(let r of zd(e,t))n.add(r);continue}let e=X(r);e!==void 0&&sd(e,t)&&e.callee.type===`Identifier`&&n.add(e.callee.name)}return n}function Bd(e,t){let{callee:n}=e;if(n.type===`Identifier`)return t.has(n.name);let r=Xu(n);return r!==void 0&&t.has(r.objectName)}function Vd(e,t,n){for(let r of e){if(r.type===`IfStatement`){if(Vd(Z(r.consequent),t,n))return!0;continue}let e=X(r);if(e!==void 0&&!sd(e,t)&&!Bd(e,n))return!0}return!1}function Hd(e,t,n){return Rd(e,e=>{let r=X(e);if(r===void 0||!sd(r,t)||r.arguments.length!==1)return!1;let[i]=r.arguments;return i!==void 0&&n(i)})}function Ud(e){return e.type===`Literal`&&typeof e.value!=`object`||ud(e)||dd(e)}function Wd(e,t){return Hd(e,t,fd)}function Gd(e,t){return Hd(e,t,Ud)}function Kd(e){return Rd(e,e=>{let t=X(e);return t!==void 0&&Xu(t.callee)?.objectName===`console`})}const qd=new Set([`addEventListener`,`addListener`,`on`,`subscribe`]);function Jd(e){return e.some(e=>{let t=X(e);if(t===void 0)return!1;let n=Zu(t.callee);return n!==void 0&&qd.has(n)})}function Yd(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 Xd(e,t,n){return e.callee.type===`Identifier`&&n.has(e.callee.name)&&e.arguments.some(e=>Yd(e,t))}function Zd(e,t,n){for(let r of e){if(r.type===`IfStatement`){if(Zd(Z(r.consequent),t,n))return!0;continue}let e=X(r);if(e!==void 0&&Xd(e,t,n))return!0}return!1}function Qd(e){let t=new Set,n=new Set,r=xd(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}xd(e)&&Ed(e,r)}}return t}function $d(e){return e.alternate===null?[]:e.alternate.type===`BlockStatement`?e.alternate.body:[e.alternate]}function ef(e,t,n){return[...Qd(e.test)].some(e=>n.has(e)&&!t.has(e))}function tf(e,t){return e.some(e=>{let n=X(e);return n!==void 0&&sd(n,t)})}function nf(e,t,n,r){for(let i of e)if(i.type===`IfStatement`&&(ef(i,n,r)&&tf(Z(i.consequent),t)||nf($d(i),t,n,r)))return!0;return!1}const rf=new Set([`alert`,`confirm`,`display`,`hide`,`log`,`navigate`,`notify`,`post`,`prompt`,`redirect`,`report`,`send`,`show`,`submit`,`track`]);function af(e){let t=e.toLowerCase();for(let e of rf)if(t.startsWith(e))return!0;return!1}function of(e,t){let n=X(e);return n===void 0||sd(n,t)?!1:n.callee.type===`Identifier`?af(n.callee.name):n.callee.type!==`MemberExpression`||n.callee.computed||n.callee.property.type!==`Identifier`?!1:af(n.callee.property.name)}function sf(e,t){return[...Qd(e.test)].some(e=>t.has(e))}function cf(e,t,n){for(let r of e)if(r.type===`IfStatement`&&(sf(r,n)&&Z(r.consequent).some(e=>of(e,t))||r.alternate!==null&&cf($d(r),t,n)))return!0;return!1}function lf(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function uf(e,t){return`${e}:${t}`}function df(e){if(e.body?.type===`BlockStatement`)return e.body}function ff(e){return e.body.type===`BlockStatement`}function pf(e){return e.body!==null}const mf=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(`.`)),hf=[`fetch`,`send`,`post`,`track`],gf=new Set([`addEventListener`,`addListener`,`cancelAnimationFrame`,`catch`,`clearInterval`,`clearTimeout`,`finally`,`observe`,`removeEventListener`,`removeListener`,`requestAnimationFrame`,`setInterval`,`setTimeout`,`subscribe`,`then`,`unobserve`,`unsubscribe`]),_f=[`log`,`fetch`,`send`,`track`,`report`,`show`,`navigate`,`submit`,`post`,`notify`];function vf(e){for(let t of _f)if(e.startsWith(t))return!0;return!1}function yf(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 bf(e){for(let t of hf)if(e.startsWith(t))return!0;return gf.has(e)}function xf(e,t,n){let{callee:r}=e;return sd(e,t)?!1:r.type===`Identifier`?n.has(r.name)?!1:mf.has(r.name)||vf(r.name):r.type!==`MemberExpression`||r.computed||r.property.type!==`Identifier`||r.object.type===`Identifier`&&n.has(r.object.name)?!1:yf(r)||bf(r.property.name)}function Sf(e,t,n){for(let r of e){if(r.type===`IfStatement`){if(Sf(Z(r.consequent),t,n))return!0;continue}let e=X(r);if(e!==void 0&&xf(e,t,n))return!0}return!1}const Cf=t({create(e){let t=Yu(e.options[0]),n=_n(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 Qu(e,i,r,t.hooks)}function g(e){return Qu(e,a,r,t.stateHooks)}function _(e){return Qu(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=$u(e);d.push(Nd(e,t.propertyCallbackPrefixes,n,ed(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?yd(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&&td(f[0])),`emptyEffect`],[t.reportInitializeState&&Ld(d)&&Gd(f,o),`initializeState`],[t.reportResetState&&Wd(f,o)&&m,`resetState`],[p!==void 0&&Fd(d,p),`eventFlag`],[t.reportEventSpecificLogic&&cf(f,o,s),`eventSpecificLogic`],[t.reportAdjustState&&nf(f,o,s,r)&&!a,`adjustState`],[t.reportDerivedState&&kd(n,o)!==void 0,`derivedState`],[x(e),`mixedDerivedState`],[t.reportPassRefToParent&&i!==void 0&&Zd(f,u,i.propertyCallbackIdentifiers),`passRefToParent`],[t.reportNotifyParent&&i!==void 0&&!i.isCustomHook&&Ad(n,i,t.propertyCallbackPrefixes)!==void 0,`notifyParent`],[t.reportExternalStore&&Jd(f)&&l,`externalStore`],[t.reportLogOnly&&Kd(f),`logOnly`]].find(([e])=>e)?.[1]}function S(t,n,r){let i=d.at(-1),a=ad(n),s=Id(t),c=zd(n,o),l=Vd(n,o,i?.propertyCallbackIdentifiers??new Set),u=r!==void 0&&id(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=uf(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=uf(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||D(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&&lf(n.depIdentifiers,e.depIdentifiers)&&r.push(i)}return r}function D(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 ie(e,t){let n=p.get(t);if(n===void 0||n.async)return;let r=df(n);r!==void 0&&S(e,r.body.filter(e=>e.type!==`EmptyStatement`),r)}function ae(e,t){if(!t.async){if(t.type===`ArrowFunctionExpression`){if(!ff(t))return;S(e,t.body.body.filter(e=>e.type!==`EmptyStatement`),t.body);return}pf(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`){ie(e,t.name);return}Ve(t)&&ae(e,t)}},FunctionDeclaration:y,"FunctionDeclaration:exit":b,FunctionExpression:y,"FunctionExpression:exit":b,ImportDeclaration(e){bn(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:[...Gu],items:{type:`string`},type:`array`},propertyCallbackPrefixes:{default:[...Ku],items:{type:`string`},type:`array`},refHooks:{default:[...qu],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:[...Ju],description:`State hook names that return [value, setter] pairs.`,items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}});function wf(e){return x(e)&&y(e.dependencyMode)&&(e.dependencyMode===`empty-or-omitted`||e.dependencyMode===`aggressive`)?e.dependencyMode:`non-updating`}function Tf(e){let t=x(e)&&S(e.staticGlobalFactories)?e.staticGlobalFactories:Ss;return{dependencyMode:wf(e),environment:xn(e),staticGlobalFactories:new Set(t)}}function Ef(e){return{staticGlobalFactories:e.staticGlobalFactories}}function Df(e){let t=Ir(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 Of(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,Of),e}}}const kf=t({create(e){let t=Tf(e.options[0]),n=Ef(t),r=_n(t.environment),i=new Set,a=new Set;return{CallExpression(r){if(!de(r,i,a)||Ks(r)||r.arguments.length===0)return;let o=Df(r);if(o===void 0)return;let s=new Set;q(e.sourceCode,o,s,n)&&Of(Kr(e.sourceCode,r.arguments[1],s,n,Rs),t)&&e.report({messageId:`uselessUseMemo`,node:r})},ImportDeclaration(e){qs(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`}}),Af=[`useSpring`];function jf(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 Mf(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||!K(i.scope)||Es(i))return!1;for(let e of i.defs){let t=Os(e);if(t===void 0)continue;let r=w(t);if(r.type===`ObjectExpression`&&n(r))return!0}return!1}function Nf(e,t){return Mf(e,t,jf)}function Pf(e,t,n,r){let i={staticGlobalFactories:r.staticGlobalFactories};return Mf(e,t,t=>Ls(e,t,n,i))}function Ff(e,t){return e===0||e===2||e===1&&t.treatEmptyDepsAsViolation}function If({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 Lf=t({create(e){let[t]=e.options,n={springHooks:new Set(t?.springHooks??Af),staticGlobalFactories:new Set(t?.staticGlobalFactories??Ss),treatEmptyDepsAsViolation:t?.treatEmptyDepsAsViolation??!0};return{CallExpression(t){if(!If(t,n)||t.arguments.length===0)return;let[r]=t.arguments;if(r===void 0||r.type===`SpreadElement`)return;let i=new Set;if(!Pf(e.sourceCode,r,i,n)||Nf(e.sourceCode,r))return;let a=t.arguments.length>1?t.arguments[1]:void 0;Ff(Kr(e.sourceCode,a,i,n,Rs),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`}}),Rf=ao({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`}),zf=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 Bf(e){return!e.computed&&Vf(e.value)}function Vf(e){if(e===void 0)return!1;switch(e.type){case`ArrayExpression`:return e.elements.every(e=>e===null||e.type!==`SpreadElement`&&Vf(e));case`CallExpression`:return e.callee.type===`MemberExpression`&&Vf(e.callee.object);case`Literal`:return!0;case`MemberExpression`:return Vf(e.object);case`ObjectExpression`:return e.properties.every(e=>e.type!==`SpreadElement`&&Bf(e));default:return!1}}function Hf(e){let t=e;for(;t.type===`MemberExpression`;){if(t.computed&&!ze(t.property))return!1;t=t.object}return!0}function Uf(e){return e.type===`MethodDefinition`&&e.kind===`constructor`&&e.key.type===`Identifier`&&e.key.name===`constructor`}function Wf(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`||ze(r))&&Vf(t.right)&&Hf(n)}const Gf=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(!(!Uf(n)||n.value.body===null))for(let t of n.value.body.body)Wf(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 Kf(e){if(!K(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 qf(e,t){let n=E(e.getScope(t),t.name);return n===void 0?!1:Es(n)||Kf(n)}function Jf(e,t){let n=E(e.getScope(t),t.name);return n===void 0?!1:Es(n)||K(n.scope)}function Yf(e,t){let n=t;for(;n.type===`MemberExpression`;){if(n.computed)return!1;n=w(n.object)}return n.type===`Identifier`&&Jf(e,n)}function Xf(e,t){let n=w(t);switch(n.type){case`Identifier`:return qf(e,n);case`Literal`:return!0;case`MemberExpression`:return Yf(e,n);case`TemplateLiteral`:return n.expressions.length===0;case`UnaryExpression`:return n.operator===`-`&&w(n.argument).type===`Literal`;default:return!1}}function Zf(e,t){for(let n of t.properties)if(n.type!==`Property`||n.kind!==`init`||n.computed||!Xf(e,n.value))return!1;return!0}function Qf(e,t){if(t.id.type!==`ArrayPattern`||t.init?.type!==`CallExpression`||R(t.init)!==`useReducer`)return;let n=t.id.elements[1];if(n!=null&&n.type===`Identifier`)return E(e.getScope(n),n.name)}function $f(e){let t=e;for(;t!==void 0;){if(t.type===`Program`)return t;t=t.parent}}function ep(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 tp=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`||!Zf(n,s))return;let c=$f(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[ep(e,n,s,l,c),e.replaceText(s,l)]}}]})},VariableDeclarator(e){let r=Qf(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`}}),np=new Set([`.js`,`.jsx`,`.ts`,`.tsx`]),rp=new Set([`.git`,`.next`,`.turbo`,`__fixtures__`,`__mocks__`,`__tests__`,`coverage`,`dist`,`documentation`,`example`,`examples`,`fixture`,`fixtures`,`node_modules`,`opensrc`,`stories`,`story`,`test`,`tests`]),ip=/\bexport\s+default\b/u,ap=/\/index$/u,op=/\.(?:[cm]?jsx?|tsx?)$/u,sp=new Map,cp=new Map,lp=new Map,up=/[.*+?^${}()|[\]\\]/gu,dp=String.raw`\$&`;function fp(e){return e.replaceAll(up,dp)}const pp=new Map;function mp(e){return e.includes(`u`)||e.includes(`v`)?e:`${e}u`}function hp(e,t){let n=`${t}:${e}`,r=pp.get(n);if(r!==void 0)return r;let i=new RegExp(e,mp(t));if(pp.size>=64){let e=pp.keys().next().value;e!==void 0&&pp.delete(e)}return pp.set(n,i),i}function gp(e){return e.replaceAll(`\\`,`/`)}function _p(e){let t=cp.get(e);if(t!==void 0)return t;let n=f(e,`utf8`);return cp.set(e,n),n}function vp(e,t){let n=fp(t);return hp(`\\bexport\\s+(?:const|function|class)\\s+${n}\\b`,`u`).test(e)||hp(`\\bexport\\s*\\{[^}]*\\b${n}\\b[^}]*\\}`,`u`).test(e)?`named`:ip.test(e)&&hp(`\\b${n}\\b`,`u`).test(e)?`default`:void 0}function yp(e,t){for(let n of t)if(!hp(`\\b${fp(n)}\\b`,`u`).test(e))return!1;return!0}function bp(e){let t=lp.get(e);if(t!==void 0)return t;let n=e;for(;;){if(d(c(n,`package.json`))||d(c(n,`tsconfig.json`)))return lp.set(e,n),n;let t=a(n);if(t===n){lp.set(e,void 0);return}n=t}}function xp(e){let t=sp.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`||rp.has(a))continue;let s=c(e,t.name);if(t.isDirectory()){r(s);continue}let l=o(t.name);if(!np.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 sp.set(e,a),a}function Sp(e,t){let n=gp(l(a(e),t));return n=n.replace(op,``),n=n.replace(ap,``),n.startsWith(`.`)||(n=`./${n}`),n}function Cp(e){let t=bp(a(e)),n=gp(t===void 0?e:l(t,e));for(let e of n.split(`/`))if(rp.has(e.toLowerCase()))return!0;return!1}function wp(e,t){if(Cp(e))return{importStyle:void 0,matches:!1};let n=o(e);if(!np.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=_p(e);if(!hp(`\\b${fp(t.componentName)}\\b`,`u`).test(a)||t.markers!==void 0&&!yp(a,t.markers))return{importStyle:void 0,matches:!1};let s=vp(a,t.componentName);return s===void 0?{importStyle:void 0,matches:!1}:{importStyle:s,matches:!0}}function Tp(e,t,n){let r=e.source.value;if(!(y(r)&&r.startsWith(`.`))||t===``)return{importStyle:void 0,matches:!1};let i=pc(r,t);return i.found?wp(i.path,n):{importStyle:void 0,matches:!1}}function Ep(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 Dp(e,t){let n=bp(a(e));if(n===void 0)return{found:!1};let r=xp(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=>wp(e,t).matches);if(o.length!==1)return{found:!1};let[s]=o;if(s===void 0)return{found:!1};let c=wp(s,t);return{found:!0,importSource:Sp(e,s),importStyle:c.importStyle,path:s}}const Op={componentName:`ContextStack`,fileNames:[`context-stack`],markers:[`providers`]},kp=new Set([`.jsx`,`.tsx`]);function Ap(e){return e.openingElement.name.type===`JSXMemberExpression`&&e.openingElement.name.property.name===`Provider`}function jp(e){return e.children.filter(e=>e.type===`JSXText`?e.value.trim()!==``:e.type!==`JSXExpressionContainer`||e.expression.type!==`JSXEmptyExpression`)}function Mp(e){let{parent:t}=e;if(t.type!==`JSXElement`||!Ap(t))return!1;let n=jp(t);return n.length===1&&n[0]===e}function Np(e){if(!Ap(e))return;let t=[e],n=e;for(;;){let e=jp(n);if(e.length!==1)break;let[r]=e;if(r?.type!==`JSXElement`||!Ap(r))break;t.push(r),n=r}return t.length>1?t:void 0}function Pp(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 Fp(e){let t=0;for(let n of e){let r=e[t+1];if(r===void 0){t+=1;continue}if(!Pp(n,r))return!1;t+=1}return!0}function Ip(e,t){let n=t.getText(e.openingElement);return e.openingElement.selfClosing?n:n.endsWith(`>`)?`${n.slice(0,-1)} />`:void 0}function Lp(e,t,n){let r=[];for(let e of t){let t=Ip(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 Rp=t({create(e){let{filename:t,sourceCode:n}=e,r=t===``?{found:!1}:Dp(t,Op),i=new Set;return{ImportDeclaration(e){Ep(e,Tp(e,t,Op),Op.componentName,i)},JSXElement(a){if(Mp(a))return;let s=Np(a);if(s===void 0||i.size===0&&!r.found)return;let c=kp.has(o(t))&&i.size===1&&Fp(s),[l]=i,u=c&&l!==void 0?Lp(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 zp(e){return x(e)&&b(e.maximumStatements)?e.maximumStatements:1}function Bp(e){return e.type===`IfStatement`&&e.alternate===null}function Vp(e,t){return e.type===`ExpressionStatement`&&t===0||e.type===`BlockStatement`&&e.body.length>t}function Hp(e,t){if(e.body.length!==1)return!1;let[n]=e.body;return n===void 0||!Bp(n)?!1:Vp(n.consequent,t)}const Up=t({create(e){let t=zp(e.options[0]);function n(n){Hp(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 Wp(e){return e.type===`Identifier`&&(e.name===`it`||e.name===`test`)}function Gp(e){if(e.callee.type!==`MemberExpression`||!Wp(e.callee.object))return!1;let t=T(e.callee);return t===`only`||t===`skip`}function Kp(e){return e.callee.type!==`MemberExpression`||!Wp(e.callee.object)?!1:T(e.callee)===`each`}function qp(e){let t=e.arguments.at(-1);return t===void 0||!Ve(t)?void 0:t}function Jp(e){return e.type===`DoWhileStatement`||e.type===`ForInStatement`||e.type===`ForOfStatement`||e.type===`ForStatement`||e.type===`WhileStatement`}function Yp(e,t){return e.type===t.type&&e.range[0]===t.range[0]&&e.range[1]===t.range[1]}function Xp(e,t){return{hasCallback:e.hasCallback||t.hasCallback,hasIndeterminate:e.hasIndeterminate||t.hasIndeterminate,hasLoop:e.hasLoop||t.hasLoop}}function Zp(e,t){if(Yp(e,t))return{hasCallback:!1,hasIndeterminate:!1,hasLoop:!1};let n={hasCallback:Ve(e),hasIndeterminate:Ve(e)||Jp(e)||e.type===`ConditionalExpression`||e.type===`IfStatement`||e.type===`SwitchCase`||e.type===`TryStatement`&&e.handler!==null,hasLoop:Jp(e)};return e.parent===null?n:Xp(n,Zp(e.parent,t))}function Qp(e){return e.callee.type===`Identifier`?Wp(e.callee):Gp(e)?!0:e.callee.type===`CallExpression`&&Kp(e.callee)}function $p(e){return Qp(e)?qp(e):void 0}function em({callee:e}){return e.type!==`MemberExpression`||e.object.type!==`Identifier`||e.object.name!==`expect`?!1:T(e)===`assertions`}function tm({callee:e}){return e.type!==`MemberExpression`||e.object.type!==`Identifier`||e.object.name!==`expect`?!1:T(e)===`hasAssertions`}function nm(e,t=[]){return e.callee.type===`Identifier`&&(e.callee.name===`expect`||t.includes(e.callee.name))}function rm(e,t=[]){let n=0,r=!1,i=!1,a=!1,o=0;return Lr(e,s=>{if(s.type!==`CallExpression`||!nm(s,t))return;let c=Zp(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 im(e){return Array.isArray(e)?e.filter(y):[]}function am(e){return x(e)?{additionalAssertionFunctions:im(e.additionalAssertionFunctions),additionalExpectCallNames:im(e.additionalExpectCallNames),onlyFunctionsWithAsyncKeyword:e.onlyFunctionsWithAsyncKeyword===!0,onlyFunctionsWithExpectInCallback:e.onlyFunctionsWithExpectInCallback===!0,onlyFunctionsWithExpectInLoop:e.onlyFunctionsWithExpectInLoop===!0}:{additionalAssertionFunctions:[],additionalExpectCallNames:[],onlyFunctionsWithAsyncKeyword:!1,onlyFunctionsWithExpectInCallback:!1,onlyFunctionsWithExpectInLoop:!1}}function om(e){return[...new Set([...e.additionalExpectCallNames,...e.additionalAssertionFunctions])]}function sm(e){return e.onlyFunctionsWithAsyncKeyword||e.onlyFunctionsWithExpectInCallback||e.onlyFunctionsWithExpectInLoop}function cm(e){return e.body??void 0}function lm(e){let t=cm(e);return t?.type===`BlockStatement`?t:void 0}function um(e,t,n,r,i,a){return n+r===0?!1:!sm(t)||t.onlyFunctionsWithAsyncKeyword&&e.async||t.onlyFunctionsWithExpectInCallback&&i||t.onlyFunctionsWithExpectInLoop&&a}function dm(e){let t=lm(e);if(t===void 0)return;let[n]=t.body;if(!(n?.type!==`ExpressionStatement`||n.expression.type!==`CallExpression`))return n.expression}function fm(e,t,n,r,i){let a=lm(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 pm(e,t,n,r){if(tm(t)){t.arguments.length>0&&e.report({messageId:`hasAssertionsTakesNoArguments`,node:t});return}if(!em(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`||!Ue(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 mm=t({create(e){let t=am(e.options[0]);return{CallExpression(n){if(!Qp(n))return;let r=$p(n);if(r===void 0)return;let i=cm(r);if(i===void 0)return;let{deterministic:a,indeterminate:o,hasIndeterminate:s,hasExpectInCallback:c,hasExpectInLoop:l}=rm(i,om(t));if(!um(r,t,a,o,c,l))return;let u=dm(r);if(u!==void 0&&(em(u)||tm(u))){if(pm(e,u,a,s),tm(u)&&u.arguments.length===0&&a>0&&!s){let[t]=lm(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}fm(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 hm(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 gm(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 _m(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&&K(i.scope)}function vm(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`||js(e.sourceCode,i.expression,new Set)?!1:q(e.sourceCode,i.expression,n,r)}function ym(e,t,n,r){for(let i of t.attributes)if(i.type===`JSXSpreadAttribute`||!vm(e,i,n,r))return!1;return!0}function bm(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=ks(e.sourceCode,t.expression);if(a?.type===`JSXElement`)return Sm(e,a,n,r,i)}return q(e.sourceCode,t.expression,n,i)}function xm(e,t,n,r,i){for(let a of t.children)if(!bm(e,a,n,r,i))return!1;return!0}function Sm(e,t,n,r,i){return Ao(t.openingElement.name,r)&&ym(e,t.openingElement,n,i)&&xm(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 wm(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&&K(t.scope))return!0}(r.type===`JSXElement`||r.type===`JSXFragment`||r.type===`ParenthesizedExpression`)&&(n=r),{parent:r}=r}return!1}function Tm(e,t){let n=e.sourceCode.getText(t);e.report({data:{elementText:n},messageId:`hoistableJsxElement`,node:t})}const Em=t({create(e){let[t]=e.options,n=hm(t),r=gm(t),i={staticGlobalFactories:new Set([...Ss,...r])};return{JSXElement(t){Sm(e,t,new Set,n,i)&&(_m(e,t)||Cm(e,t,n,i)||wm(e,t)||Tm(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`}}),Dm={staticGlobalFactories:new Set(Ss)};function Om(e){let{value:t}=e;if(t?.type===`JSXExpressionContainer`&&t.expression.type!==`JSXEmptyExpression`)return t.expression}function km(e,t){let n=t;for(;;){let{parent:r}=n;if(r===null)return!1;if(r.type===`VariableDeclarator`)return jm(e,t,r,n);let i=Am(r);if(i===void 0)return!1;n=i}}function Am(e){if(e.type===`JSXElement`||e.type===`JSXFragment`||e.type===`JSXExpressionContainer`||e.type===`ParenthesizedExpression`||e.type===`ArrayExpression`)return e}function jm(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&&K(i.scope)}function Mm(e,t){let n=e.sourceCode.getText(t);e.report({data:{objectText:n},messageId:`hoistableObjectProp`,node:t})}function Nm(e,t){if(t.properties.some(e=>e.type===`Property`&&e.computed))return;let n=new Set;if(q(e.sourceCode,t,n,Dm)){Mm(e,t);return}for(let n of t.properties){if(n.type!==`Property`)continue;let t=w(n.value);t.type===`ObjectExpression`&&Nm(e,t)}}const Pm=t({create(e){return{JSXAttribute(t){let n=Om(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`&&km(e,a)||Nm(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 Fm({type:e}){return e===`Identifier`||e===`MemberExpression`||e===`CallExpression`||e===`NewExpression`||e===`ThisExpression`}function Im(e){let t=e;for(;t.type===`ParenthesizedExpression`;)t=t.expression;return t}const Lm=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`||D(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(Im(a.left)),c=Fm(o)?s:`(${s})`,l=e.sourceCode.getText(Im(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`}}),Rm={componentName:`Portal`,fileNames:[`portal`],markers:[`target`]},zm=new Set([`@rbxts/react-roblox`,`react-dom`]),Bm=new Set([`.jsx`,`.tsx`]);function Vm(e){return e.type===`ImportBinding`}function Hm(e){return e.parent?.type===`ImportDeclaration`?e.parent:void 0}function Um(e){if(e===void 0)return!1;for(let t of e.defs){if(!Vm(t)||t.node.type!==`ImportSpecifier`)continue;let e=Hm(t.node);if(e===void 0||!zm.has(e.source.value))continue;let{imported:n}=t.node;if(n.type===`Identifier`&&n.name===`createPortal`)return!0}return!1}function Wm(e){if(e===void 0)return!1;for(let t of e.defs){if(!Vm(t)||t.node.type!==`ImportNamespaceSpecifier`)continue;let e=Hm(t.node);if(e!==void 0&&zm.has(e.source.value))return!0}return!1}function Gm(e,{callee:t}){return t.type===`Identifier`?Um(E(e.getScope(t),t.name)):t.type!==`MemberExpression`||t.computed||t.property.type!==`Identifier`||t.property.name!==`createPortal`||t.object.type!==`Identifier`?!1:Wm(E(e.getScope(t.object),t.object.name))}function Km(e,t){return e.type===`JSXElement`||e.type===`JSXFragment`?t.getText(e):`{${t.getText(e)}}`}function qm(e,t,n){if(t.arguments.length!==2)return;let[r,i]=t.arguments;if(r===void 0||i===void 0)return;let a=Km(r,n);return`<${e} target={${n.getText(i)}}>${a}</${e}>`}const Jm=t({create(e){let{filename:t,sourceCode:n}=e,r=t===``?{found:!1}:Dp(t,Rm),i=new Set;return{CallExpression(a){if(!Gm(n,a)||a.arguments.length!==2||!(i.size>0||r.found))return;let s=Bm.has(o(t))&&i.size===1,[c]=i,l=s&&c!==void 0?qm(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){Ep(e,Tp(e,t,Rm),Rm.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 Ym(e){return e===void 0?!1:e.type===`TSTypeAnnotation`?Ym(e.typeAnnotation):e.type===`TSNumberKeyword`||e.type===`TSTypeReference`&&e.typeName.type===`Identifier`&&e.typeName.name===`Number`}function Xm(e){return e.type!==`PrivateIdentifier`}function Zm(e){let t=w(e);return t.type===`Literal`&&!b(t.value)}function Qm(e){if(e.type===`Parameter`){let t=e.name;if(t.type===`Identifier`&&t.typeAnnotation!==void 0&&t.typeAnnotation!==null)return!Ym(t.typeAnnotation);let{parent:n}=t;return n?.type===`AssignmentPattern`&&Zm(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?!Ym(t.typeAnnotation):n!=null&&Zm(n)}function $m(e,t){let n=E(e.getScope(t),t.name);if(n===void 0)return!1;for(let e of n.defs)if(Qm(e))return!0;return!1}function eh(e,t){if(t.type===`ParenthesizedExpression`)return eh(e,t.expression);if(t.type===`TSAsExpression`||t.type===`TSTypeAssertion`)return!Ym(t.typeAnnotation);if(Zm(t))return!0;let n=w(t);return n.type===`Identifier`&&$m(e,n)}function th(e,t){return e.getText(w(t))}function nh(e){let t=e;for(;t.type===`ParenthesizedExpression`;)t=t.expression;return t}function rh(e,t){let n=nh(t);return n.type===`SequenceExpression`?`(${e.getText(n)})`:e.getText(n)}function ih(e,t){if(t.test.type!==`BinaryExpression`)return;let{alternate:n,consequent:r,test:i}=t,{left:a,operator:o,right:s}=i;if(!(Xm(a)&&Xm(s))||!(L(a)&&L(s))||eh(e,a)||eh(e,s))return;let c=th(e,a),l=th(e,s),u=th(e,n),d=th(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 ah=t({create(e){let{sourceCode:t}=e;return{ConditionalExpression(n){if(D(t,n,`math`))return;let r=ih(t,n);if(r===void 0||n.test.type!==`BinaryExpression`)return;let{left:i,right:a}=n.test;if(!(Xm(i)&&Xm(a)))return;let o=rh(t,i),s=rh(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`}}),oh=new Set([`ReadonlyRecord`,`Record`]);function sh(e){return e.type===`TSTypeReference`&&e.typeName.type===`Identifier`&&oh.has(e.typeName.name)}function ch(e){if(e.id.type!==`Identifier`)return;let t=se(e.id);if(t===void 0)return;let{typeAnnotation:n}=t;if(!sh(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 lh(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 uh=t({create(e){let{sourceCode:t}=e;return{VariableDeclarator(n){if(n.id.type!==`Identifier`)return;let r=n.id.name;if(!lh(n.init))return;let i=ch(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`}}),dh=/^[A-Z][A-Z0-9_]*$/u;function fh(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 ph=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`||!dh.test(r.name))){if(!t){e.report({messageId:`mustUseConst`,node:n});return}fh(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`}}),mh=new Set([`end`,`loc`,`parent`,`range`,`start`]),hh=new Set([`.jsx`,`.tsx`]),gh=new Set([`PaddingBottom`,`PaddingLeft`,`PaddingRight`,`PaddingTop`]),_h={componentName:`DirectionalPadding`,fileNames:[`directional-padding`],markers:[`horizontal`,`vertical`]},vh={componentName:`EqualPadding`,fileNames:[`equal-padding`],markers:[`padding`]};function yh(e,t){return Object.is(e,t)?!0:Array.isArray(e)?Array.isArray(t)&&bh(e,t):Array.isArray(t)||typeof e!=`object`||typeof t!=`object`||e===null||t===null||!(x(e)&&x(t))?!1:xh(e,t)}function bh(e,t){if(e.length!==t.length)return!1;let n=0;for(let r of e)if(!yh(r,t[n++]))return!1;return!0}function xh(e,t){let n=Object.entries(e).filter(([e])=>!mh.has(e)),r=Object.entries(t).filter(([e])=>!mh.has(e));if(n.length!==r.length)return!1;for(let[e,r]of n)if(!(e in t)||!yh(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 wh(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(!gh.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 Th({value:e},t){if(e!==null)switch(e.type){case`JSXExpressionContainer`:case`Literal`:return t.getText(e);default:return}}function Eh(e,t,n,r){let i=Th(n.paddingTop,r);if(i===void 0)return;if(t===`preferEqualPadding`)return`<${e} padding=${i} />`;let a=Th(n.paddingLeft,r);if(a!==void 0)return`<${e} horizontal=${i} vertical=${a} />`}function Dh(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(yh(i,t)&&yh(i,n)&&yh(i,r))return`preferEqualPadding`;let a=yh(i,t),o=yh(n,r);return a&&o?`preferDirectionalPadding`:void 0}function Oh(e){return e.type===`JSXIdentifier`}const kh=t({create(e){let{filename:t}=e,n=t===``?{found:!1}:Dp(t,_h),r=t===``?{found:!1}:Dp(t,vh),i=new Set,a=new Set;return{ImportDeclaration(e){let n=Tp(e,t,_h),r=Tp(e,t,vh);Ep(e,n,_h.componentName,i),Ep(e,r,vh.componentName,a)},JSXElement(s){if(Sh(s))return;let{openingElement:c}=s;if(!Oh(c.name)||c.name.name!==`uipadding`)return;let l=wh(c);if(l===void 0)return;let u=Dh(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=hh.has(o(t))&&d.size===1,[m]=[...d],h=p&&m!==void 0?Eh(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`}}),Ah=/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/gu,jh=/^[^A-Za-z0-9]+|[^A-Za-z0-9]+$/gu,Mh=/(?<first>[a-z0-9])(?<second>[A-Z])/gu,Nh=/[_\-\s]+/gu;function Ph(e){return e.replaceAll(jh,``).replaceAll(Mh,`$<first> $<second>`).replaceAll(Nh,` `).match(Ah)??[]}function Fh(e){let t=Ph(e),n=``;for(let e of t)e.length!==0&&(n+=`${e.slice(0,1).toUpperCase()}${e.slice(1).toLowerCase()}`);return n}const Ih=/^\d/u;function Lh(e){if(e.id.type===`Identifier`)return e.id.name;if(!(e.id.type!==`Literal`||!y(e.id.value)))return Ih.test(e.id.value)?void 0:e.id.value}const Rh=t({createOnce(e){return{TSEnumDeclaration(t){let n=t.id.name;Fh(n)!==n&&e.report({data:{identifier:n},messageId:`notPascalCase`,node:t.id})},TSEnumMember(t){let n=Lh(t);n===void 0||Fh(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 zh(e,t){return Ue(e)&&e.value===t}function Bh(e){if(e===`ColorSequence`)return`ColorSequenceKeypoint`;if(e===`NumberSequence`)return`NumberSequenceKeypoint`}function Vh(e,t,n){if(e.type!==`NewExpression`||!Fe(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 zh(r,n)?i:void 0}function Hh(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 Uh(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=Vh(a,r,0),c=Vh(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 Wh=t({createOnce(e){return{NewExpression(t){if(t.callee.type!==`Identifier`)return;let n=t.callee.name,r=Bh(n);if(r===void 0)return;let i=Hh(e,t,n)??Uh(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 Gh(e){return e.length===2}function Kh(e){return e.type===`MemberExpression`&&!e.computed}function qh(e,t){if(e.type!==`CallExpression`)return!1;let{callee:n}=e;if(!Kh(n)||n.property.name!==t||!Gh(e.arguments))return!1;let[r,i]=e.arguments;return r.type!==`SpreadElement`&&i.type!==`SpreadElement`}function Jh(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||!qh(i,t))return;let{callee:a}=i;if(!Kh(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 Yh=new Set([`ConditionalExpression`,`DoWhileStatement`,`ForStatement`,`IfStatement`,`WhileStatement`]);function Xh(e){return x(e)&&`parent`in e}function Zh(e){return x(e)&&y(e.type)?e.type:void 0}function Qh(e){return x(e)&&y(e.operator)?e.operator:void 0}function $h(e){return Zh(e)===`LogicalExpression`&&Qh(e)===`&&`}function eg(e){return x(e)&&e.type===`Identifier`&&y(e.name)}function tg(e){let{parent:t}=e;if($h(t))return!0;let n=Zh(t);if(n===void 0||!Yh.has(n))return!1;let r=e;for(;r!==void 0&&r!==t&&Xh(r);){let e=r.parent;if($h(e))return!0;r=e}return!1}function ng(e){if(e.isWrite())return!1;let{identifier:t}=e;return eg(t)?tg(t):!1}function rg(e,t,n){return E(n.getScope(t),e)?.references.some(ng)??!1}function ig(e,t){return e.every(e=>rg(e.variableName,e.variableDeclaration,t))}const ag=/^[\s;]*$/u;function og(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 ag.test(a)}function sg(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));cg(e,t,`const ${o.length===1?o[0]:`[${o.join(`, `)}]`} = ${i}.get(${a}, ${s.join(`, `)});`,`preferSingleGet`,n)}function cg(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 lg(e,t){if(e.length<2)return;let{sourceCode:n}=t;if(!ig(e,n))return;let[r]=e;r!==void 0&&cg(e,t,`const hasAll = ${n.getText(r.worldNode)}.has(${n.getText(r.entityNode)}, ${e.map(e=>n.getText(e.componentNode)).join(`, `)});`,`preferSingleHas`,r)}const ug=t({create(e){let{sourceCode:t}=e,n=[],r=[];function i(){n.length>=2&&sg(n,e),n=[]}function a(){r.length>=2&&lg(r,e),r=[]}function o(){i(),a()}return{":statement:not(VariableDeclaration[kind='const'])":o,"Program:exit":o,"VariableDeclaration[kind='const']"(e){let s=Jh(e,`get`);if(s!==void 0){let e=n.at(-1);e!==void 0&&!og(e,s,t)&&i(),n.push(s),a();return}let c=Jh(e,`has`);if(c!==void 0){let e=r.at(-1);e!==void 0&&!og(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`}}),dg=new Set([`alumni`,`axes`,`cacti`,`children`,`criteria`,`data`,`dice`,`feet`,`fungi`,`geese`,`indices`,`matrices`,`media`,`men`,`mice`,`octopi`,`people`,`phenomena`,`teeth`,`vertices`,`women`]),fg=new Set([`alias`,`analysis`,`axis`,`basis`,`business`,`class`,`crisis`,`glass`,`news`,`series`,`species`,`status`,`thesis`]),pg=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`]),mg=/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/gu,hg=/^[A-Z]{2,}[sS]?$/u;function gg(e){let t=[],n=0;for(let r of e.split(`_`)){let e=r.match(mg);if(e!==null)for(let r of e)t[n++]=r}return t}const _g=/^\d+$/u;function vg(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(!(n===void 0||_g.test(n)))return{lowercased:n.toLowerCase(),original:n}}}const yg=/[sS]$/u,bg=/(?:ches|shes|xes|zes)$/u;function xg(e,t){return dg.has(e)||pg.has(e)?!0:fg.has(e)?!1:hg.test(t)&&yg.test(t)||e.endsWith(`ies`)||e.endsWith(`ves`)||bg.test(e)||e.endsWith(`s`)&&!e.endsWith(`ss`)&&!e.endsWith(`us`)&&!e.endsWith(`is`)}function Sg(e){if(hg.test(e)&&yg.test(e))return!0;let t=vg(gg(e));return t!==void 0&&xg(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 wg(e){return e.type===`JSXElement`||e.type===`JSXFragment`}function Tg(e,t,n){return e.type===`Super`||t.type===`Super`?e.type===`Super`&&t.type===`Super`:Q(e,t,n)}function Eg(e,t,n){return e.type===`SpreadElement`||t.type===`SpreadElement`?e.type!==`SpreadElement`||t.type!==`SpreadElement`?!1:Q(e.argument,t.argument,n):Q(e,t,n)}function Dg(e,t,n){return e.type===`PrivateIdentifier`||t.type===`PrivateIdentifier`?e.type===`PrivateIdentifier`&&t.type===`PrivateIdentifier`&&e.name===t.name:Q(e,t,n)}function Q(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`&&Og(r,i,n);case`CallExpression`:return i.type===`CallExpression`&&kg(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`&&Ag(r,i,n);case`MemberExpression`:return i.type===`MemberExpression`&&jg(r,i,n);case`ThisExpression`:return i.type===`ThisExpression`;case`UnaryExpression`:return i.type===`UnaryExpression`&&r.operator===i.operator&&Q(r.argument,i.argument,n);default:return n.getText(r)===n.getText(i)}}function Og(e,t,n){return e.operator===t.operator&&Dg(e.left,t.left,n)&&Dg(e.right,t.right,n)}function kg(e,t,n){if(e.optional!==t.optional||!Tg(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||!Eg(i,a,n))return!1}return!0}function Ag(e,t,n){return e.operator===t.operator&&Q(e.left,t.left,n)&&Q(e.right,t.right,n)}function jg(e,t,n){return e.computed!==t.computed||e.optional!==t.optional||!Tg(e.object,t.object,n)?!1:e.computed?Dg(e.property,t.property,n):Mg(e.property,t.property)}function Mg(e,t){return(e.type===`Identifier`&&t.type===`Identifier`||e.type===`PrivateIdentifier`&&t.type===`PrivateIdentifier`)&&e.name===t.name}function Ng(e){let t=w(e);if(!(t.type!==`UnaryExpression`||t.operator!==`!`))return w(t.argument)}function Pg(e){let t=w(e);if(t.type===`BinaryExpression`&&!(t.operator!==`===`&&t.operator!==`!==`))return{left:t.left,operator:t.operator,right:t.right}}function Fg(e){let t=w(e);return t.type===`Identifier`||t.type===`ThisExpression`||t.type===`Literal`}function Ig(e){return nt(e)&&Fg(e)}function Lg(e,t,n){let r=Ng(e);if(r&&Q(r,t,n))return{isFixSafe:Fg(r)};let i=Ng(t);if(i&&Q(i,e,n))return{isFixSafe:Fg(i)};let a=Pg(e),o=Pg(t);if(!(a&&o)||!(a.operator===`===`&&o.operator===`!==`||a.operator===`!==`&&o.operator===`===`))return;let s=Dg(a.left,o.left,n)&&Dg(a.right,o.right,n),c=Dg(a.left,o.right,n)&&Dg(a.right,o.left,n);if(s||c)return{isFixSafe:Ig(a.left)&&Ig(a.right)&&Ig(o.left)&&Ig(o.right)}}function Rg(e){return e.type===`JSXText`&&e.value.trim()===``}function zg(e){if(e.type===`JSXExpressionContainer`&&e.expression.type!==`JSXEmptyExpression`&&e.expression.type===`LogicalExpression`&&e.expression.operator===`&&`&&wg(e.expression.right))return{condition:e.expression.left,logical:e.expression,node:e,renderBranch:e.expression.right}}const Bg=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||!Rg(t))break;n+=1}let r=e[n];return r===void 0?void 0:zg(r)}function r(n,r){let i=Lg(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=zg(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 Vg(e){return e.type===`PrivateIdentifier`}function Hg(e){return e===`+`||e===`-`||e===`*`||e===`/`||e===`%`}function Ug(e){return e.type===`BinaryExpression`&&Hg(e.operator)&&!Vg(e.left)&&!Vg(e.right)}function Wg(e){switch(e.type){case`BinaryExpression`:{if(!Ug(e))return;let{left:t,right:n}=e,r=Wg(t),i=Wg(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=Wg(e.argument);return t===void 0||e.operator!==`+`&&e.operator!==`-`?void 0:`${e.operator}${t}`}default:return}}function Gg(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 Kg(e){switch(e.type){case`BinaryExpression`:{if(!Ug(e))return;let{left:t,right:n}=e,r=Kg(t),i=Kg(n);return r===void 0||i===void 0?void 0:Gg(e.operator,r,i)}case`Identifier`:return;case`Literal`:return re(e.value)?e.value:void 0;case`UnaryExpression`:{let t=Kg(e.argument);return t===void 0?void 0:e.operator===`+`?t:e.operator===`-`?-t:void 0}default:return}}function qg(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=Wg(t),o=Wg(n),s=Wg(r),c=Wg(i);if(!(a===void 0||o===void 0||s===void 0||c===void 0))return{offsetXText:o,offsetYText:c,scaleXText:a,scaleYText:s}}const Jg=t({create(e){return{NewExpression(t){if(!Fe(t,`UDim2`))return;let n=qg(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=Kg(r),c=Kg(i),l=Kg(a),u=Kg(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 Yg(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)Mo(t.init,`useState`)&&(r+=1);r<5||e.report({data:{componentName:n,useStateCount:String(r)},messageId:`excessiveUseState`,node:t})}const Xg=t({create(e){return{FunctionDeclaration(t){t.id===null||!G(t.id.name)||`body`in t&&t.body&&Yg(e,t.body,t.id.name)},VariableDeclarator(t){No(t)&&t.init&&`body`in t.init&&t.init.body&&`name`in t.id&&Yg(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`}}),Zg=`replace`,Qg=`suggestion`,$g=`A more descriptive name will do too.`,e_={args:`parameters`,char:`character`,dt:`deltaTime`,plr:`player`},t_=[`char`],n_={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}},r_={EmberENV:!0,defaultProps:!0,devDependencies:!0,getDerivedStateFromProps:!0,getInitialProps:!0,getServerSideProps:!0,getStaticProps:!0,iOS:!0,obj:!0,propTypes:!0,setupFilesAfterEnv:!0},i_=[`i18n`,`l10n`],a_=/(?=[A-Z])|(?<=[_.-])/u,o_=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(`.`)),s_=/^[A-Za-z]+$/u;function c_(e){return e>=65&&e<=90||e>=97&&e<=122||e===36||e===95}function l_(e){return e<192?c_(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 u_(e){return!!(l_(e)||e>=48&&e<=57||e===8204||e===8205||e>=768&&e<=865||e>=8240&&e<=8266)}function d_(e){if(e.length===0||o_.has(e))return!1;let t=e.codePointAt(0);if(t===void 0||!l_(t))return!1;let n=t>65535?2:1;for(;n<e.length;){let t=e.codePointAt(n);if(t===void 0||!u_(t))return!1;n+=t>65535?2:1}return!0}function f_(e,t,n){return e?t:n}const p_=/(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/u,m_=/(?<=[a-zA-Z])(?=\d)|(?<=\d)(?=[a-zA-Z])/u,h_=/[a-zA-Z]+|\d+|[^a-zA-Z\d]+/gu,g_=/[.+^${}()|[\]\\]/gu,__=/^\/(?<first>.+)\/(?<second>[dgimsuvy]*)$/u,v_=new WeakMap;function y_(e){return e===e.toUpperCase()}function b_(e){return y_(e.charAt(0))}function x_(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 w_(e){let t=e.match(h_);if(t===null)return[e];let n=[],r=0;for(let e of t){if(!s_.test(e)){n[r++]=e;continue}r=T_(e,n,r)}return n}function T_(e,t,n){let r=n;for(let n of e.split(m_))if(n.length!==0)for(let e of n.split(p_))e.length>0&&(t[r++]=e);return r}const E_=/\$\d+/gu;function D_(e){let t=e.match(E_);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 O_(e){let t=D_(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 k_(e){let t=[],n=[],r=0;for(let[i,a]of e)a&&(t[r]=S_(i),n[r]=x_(i),r+=1);return{lowerFirst:t.toSorted(),upperFirst:n.toSorted()}}function A_(e,t){if(e.startsWith(`/`)){let n=__.exec(e);if(n?.groups!==void 0)return{matcher:{original:e,pattern:RegExp(`^${n.groups.first}$`,C_(n.groups.second??``)),replacement:t,replacementPatterns:O_(t)},type:`pattern`}}if(e.includes(`*`)||e.includes(`?`)){let n=e.replaceAll(g_,String.raw`\$&`).replaceAll(`*`,`(.*)`).replaceAll(`?`,`(.)`),r=0,i=t.replaceAll(`*`,()=>`$${++r}`);return{matcher:{original:e,pattern:RegExp(`^${n}$`,`u`),replacement:i,replacementPatterns:O_(i)},type:`pattern`}}return{original:e,replacement:t,type:`exact`}}function j_(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 M_(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 N_(e,t){return e===`internal`||typeof e==`boolean`?e:t}function P_(e){if(!x(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r==`boolean`&&(t[n]=r);return t}function F_(e,t){return typeof e==`boolean`?e:t}function I_(e){let t=x(e)?e:void 0,n=P_(t?.allowList),r=f_(F_(t?.extendDefaultAllowList,!0),n===void 0?r_:{...r_,...n},n??{});return new Map(Object.entries(r))}function L_(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 R_(e){let t=x(e)?e:void 0,n=F_(t?.extendDefaultReplacements,!0),r=L_(t?.replacements),i=new Set([...Object.keys(n_),...Object.keys(r)]),a=[];for(let e of i){let t=r[e],i=n?n_[e]??{}:{},o=t===!1?{}:f_(t===void 0,i,{...i,...t}),s=new Map(Object.entries(o));v_.set(s,k_(s)),a.push([e,s])}return new Map(a)}function z_(e){let t=x(e)?e:void 0,n=[];for(let e of i_)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 B_(e){let t=x(e)?e:void 0,n=new Set(t_);if(!S(t?.allowPropertyAccess))return n;for(let e of t.allowPropertyAccess)n.add(e);return n}function V_(e){let t=x(e)?e:void 0,n=new Map,r=new Set,i=[],a=[],o=C(t?.shorthands)?t.shorthands:{},s={...e_,...o};for(let[e,t]of Object.entries(s)){let r=A_(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=A_(e,``);t.type===`exact`?r.add(t.original):i.push(t.matcher)}return{exactMatchers:n,ignoreExact:r,ignoreMatchers:i,matchers:a}}function H_(e){let t=x(e)?e:void 0;return{allowList:I_(t),allowPropertyAccess:B_(t),checkDefaultAndNamespaceImports:N_(t?.checkDefaultAndNamespaceImports,`internal`),checkFilenames:F_(t?.checkFilenames,!0),checkProperties:F_(t?.checkProperties,!1),checkShorthandImports:N_(t?.checkShorthandImports,`internal`),checkShorthandProperties:F_(t?.checkShorthandProperties,!0),checkVariables:F_(t?.checkVariables,!0),ignore:z_(t),replacements:R_(t),shorthandConfiguration:V_(t)}}function U_(e,t){if(y_(e)||t.allowList.get(e)===!0)return[];let n=t.replacements.get(S_(e))??t.replacements.get(e)??t.replacements.get(x_(e));if(n===void 0)return[];let r=v_.get(n);return r===void 0?[]:b_(e)?r.upperFirst:r.lowerFirst}function W_(e,t){if(e.length===0)return;let n=w_(e),r=[],i=!1;for(let e of n){let n=j_(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 G_(e,t){if(M_(e,t))return!0;let n=w_(e),r=!1;for(let e of n){let n=j_(e,t);if(n!==void 0&&(r=!0,!M_(n.matchedWord,t)))return!1}return r}function K_(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 q_(e,t,n=3){if(t.allowList.get(e)===!0||t.ignore.some(t=>t.test(e)))return{total:0};let r=W_(e,t.shorthandConfiguration);if(r!==void 0)return G_(e,t.shorthandConfiguration)?{total:0}:{samples:[r.replaced],total:1};if(y_(e))return{total:0};let i=U_(e,t);if(i.length>0)return{samples:i.slice(0,n),total:i.length};let a=e.split(a_).filter(Boolean),o=!1,s=[],c=0;for(let e of a){let n=U_(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:J_(s,l,n).map(e=>e.join(``)),total:l}}function J_(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]??``;s_.test(n)&&e[t-1]?.endsWith(n)===!0&&e.splice(t,1)}return i}function Y_(e,t){let n=t.replacements.get(e);if(n===void 0)return!1;let r=v_.get(n);return r!==void 0&&r.lowerFirst.length>0}function X_(e,t,n){let{samples:r=[],total:i}=t;if(i===1)return{data:{discouragedName:e,nameTypeText:n,replacement:r[0]??``},messageId:Zg};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:Qg}}function Z_(e){let t=[e],n=1;for(let r of e.childScopes){let e=Z_(r);for(let r of e)t[n++]=r}return t}function Q_(e,t){return!t.some(t=>E(t,e)!==void 0)}function $_(e,t,n){let r=e;if(!(!d_(r)&&(r=`${r}_`,!d_(r)))){for(;!(Q_(r,t)&&n(r,t));)r=`${r}_`;return r}}function ev(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 tv(e,t){return e.range[0]===t.range[0]&&e.range[1]===t.range[1]}function nv(e){let{parent:t}=e;return!ve(t)||t.local!==e?!1:tv(t.local,t.imported)}function rv(e){let{parent:t}=e;return!ye(t)||t.local!==e?!1:tv(t.local,t.exported)}function iv(e){if(!j(e))return!1;let{parent:t}=e;return be(t)&&t.shorthand&&t.value===e}function av(e){if(!j(e))return!1;let{parent:t}=e;if(!Qe(t)||t.left!==e)return!1;let n=t.parent;return be(n)?n.shorthand:!1}function ov(e){if(!j(e))return!1;let{parent:t}=e;if(ke(t)&&t.local===e||Ae(t)&&t.local===e)return!0;if(ve(t)&&t.local===e){let{imported:e}=t;if(M(e)&&e.name==="default")return!0}return A(t)&&t.id===e&&t.init!==null&&et(t.init)}function sv(e){if(!j(e))return!1;let{parent:t}=e;if(A(t)&&t.id===e){let e=t.parent;return je(e)?Me(e.parent):!1}return Ne(t)&&t.id===e||Ie(t)&&t.id===e||Le(t)&&t.id===e?Me(t.parent):!1}function cv(e){return ev(e).every(e=>!(sv(e)||pe(e)))}function lv(e,t,n){if(j(e))return iv(e)||av(e)?n.replaceText(e,`${e.name}: ${t}`):nv(e)?n.replaceText(e,`${e.name} as ${t}`):rv(e)?n.replaceText(e,`${t} as ${e.name}`):n.replaceText(e,t)}function uv(e,t,n){let r=[],i=0;for(let a of ev(e)){let e=lv(a,t,n);e!==void 0&&(r[i++]=e)}return r}function dv(e){if(!j(e))return!1;let{parent:t}=e;if(N(t)&&t.property===e&&!t.computed){let e=t.parent;if(xe(e)&&e.left===t)return!0}return be(t)&&t.key===e&&!t.computed&&!t.shorthand&&(Ke(t.parent)||qe(t.parent))||Re(t)&&t.key===e&&!t.computed||ye(t)&&t.exported===e&&t.local!==e?!0:(De(t)||Oe(t))&&t.key===e&&!t.computed}function fv(e){if(!j(e))return!1;let{parent:t}=e;return be(t)&&t.key===e&&!t.computed&&!t.shorthand&&(Ke(t.parent)||qe(t.parent))}function pv(e){if(e.type===`ImportBinding`){let{parent:t}=e;if(t!==null&&he(t)&&ge(t.source))return t.source.value}if(e.type===`Variable`){let{node:t}=e;if(A(t)&&t.init!==null&&et(t.init)){let[e]=t.init.arguments;if(e!==void 0&&ge(e))return e.value}}}function mv(e){let t=pv(e);return t!==void 0&&!t.includes(`node_modules`)&&(t.startsWith(`.`)||t.startsWith(`/`))}function hv(e,t){return e===!1?!1:e!==`internal`||mv(t)}function gv(e){return e.defs.length===1&&e.defs[0]?.type===`ClassName`}function _v(e){return function(t,n){return n.every(n=>{let r=e.get(n);return r===void 0||!r.has(t)})}}function vv(e){let{parent:t}=e;return N(t)&&t.property===e&&!t.computed||He(t)&&t.right===e}function yv(e,t){let{parent:n}=e,r;return N(n)&&n.property===e&&!n.computed?r=n.object:He(n)&&n.right===e&&(r=n.left),r===void 0||!j(r)?!1:E(t.getScope(e),r.name)?.defs[0]?.type===`ImportBinding`}function bv(e,t,n,r){r({...X_(e.name,{samples:[t],total:1},n?`property`:`variable`),node:e})}function xv(e,t,n){return ov(t)&&!hv(n.checkDefaultAndNamespaceImports,e)||nv(t)&&!hv(n.checkShorthandImports,e)?!0:!n.checkShorthandProperties&&iv(t)}function Sv(e){if(e.name!==`plr`)return;let[t]=e.defs;if(t?.type!==`Variable`||!A(t.node)||t.node.init===null)return;let{init:n}=t.node;if(N(n)&&!n.computed&&M(n.object)&&n.object.name===`Players`&&M(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=$_(s,t,n);if(e!==void 0){if(e!==s&&Y_(s,r)){o+=1;continue}e.length>0&&(i[a++]=e)}}return{droppedDiscouraged:o,safeSamples:i}}function wv(e,t,n){let r=e.type===`Variable`&&A(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 Tv(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 uv(n,r,e)},node:o})}function Ev(e,t,n,r,i){let[a]=e.defs;if(a===void 0)return;let o=a.name;if(!M(o)||xv(a,o,t))return;let s=wv(a,e,r),c=Sv(e),l=c===void 0?q_(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,_=X_(o.name,{samples:g,total:h},`variable`);if(h===1&&p.length===1&&cv(e)){let[t]=p;if(t!==void 0){Tv(i,_,e,t,d,n,o);return}}i({..._,node:o})}function Dv(e,t){if(!gv(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(!M(r)){t(e);return}t(e)}}function Ov(e,t){for(let n of Z_(e))for(let e of n.variables)Dv(e,t)}function kv(e,t,n,r){let i=dv(e),a=vv(e);a&&yv(e,r)||Av(e,i,a,t,n)||t.checkProperties&&i&&jv(e,t,n)}function Av(e,t,n,r,i){let a=W_(e.name,r.shorthandConfiguration);return a===void 0||!(t||n)?!1:(G_(e.name,r.shorthandConfiguration)||!r.checkShorthandProperties||n&&K_(e.name,a,r.allowPropertyAccess)||bv(e,a.replaced,!0,i),!0)}function jv(e,t,n){let r=q_(e.name,t);if(r.total===0)return;let i=X_(e.name,r,`property`),a=Mv(e,r.samples);if(a!==void 0){n({...i,fix(t){return t.replaceText(e,a)},node:e});return}n({...i,node:e})}function Mv(e,t){if(t?.length!==1||!fv(e))return;let[n]=t,{parent:r}=e;if(n!==void 0&&be(r)&&ge(r.value)&&d_(n))return n}const Nv=t({create(e){let t=H_(e.options[0]),n=e.physicalFilename,r=new WeakMap,i=_v(r),{sourceCode:a}=e;function o(n){Ev(n,t,r,i,e.report)}return{Identifier(n){!j(n)||n.name===`__proto__`||kv(n,t,e.report,a)},JSXOpeningElement({name:n}){if(!(t.checkVariables&&pe(n)&&b_(n.name)))return;let r=q_(n.name,t);if(r.total===0)return;let i=X_(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=q_(o===-1?a:a.slice(0,o),t);if(c.total>0&&c.samples){let t=c.samples.map(e=>`${e}${s}`);e.report({...X_(a,{samples:t,total:c.total},`filename`),node:r})}}t.checkVariables&&Ov(a.getScope(r),o)}}},meta:{docs:{description:`Prevent abbreviations.`,recommended:!1},fixable:`code`,messages:{[Zg]:`The {{nameTypeText}} \`{{discouragedName}}\` should be named \`{{replacement}}\`. ${$g}`,[Qg]:`Please rename the {{nameTypeText}} \`{{discouragedName}}\`. Suggested names are: {{replacementsText}}. ${$g}`},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`}}),Pv=/^use[A-Z0-9].*$/u;function Fv(e){return Pv.test(e)}function Iv(e){if(e.id!==null)return e.id.name}function Lv(e){return e.id.type===`Identifier`?e.id.name:void 0}function Rv(e){let t=Iv(e);return t!==void 0&&Fv(t)}function zv({parent:e}){if(e.type!==`VariableDeclarator`)return!1;let t=Lv(e);return t!==void 0&&Fv(t)}function Bv(e,t){let n=e.get(t);if(!(n===void 0||n.length===0))return n.at(-1)}function Vv(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 Hv(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 Uv(e,t,n,r){let i=E(e.getScope(t),n);if(i!==void 0){let e=Vv(i);if(e!==void 0)return e}return Bv(r,n)}function Wv(e,t,n){if(e.argument.type===`Identifier`){let r=Uv(t,e,e.argument.name,n);return r===void 0?1:Gv(r,t,n)}return e.argument.type===`ArrayExpression`?Gv(e.argument,t,n):1}function Gv(e,t,n){let r=0;for(let i of e.elements){if(i===null){r+=1;continue}if(i.type===`SpreadElement`){r+=Wv(i,t,n);continue}r+=1}return r}function Kv(e,t){let n=E(e.getScope(t),t.name);return n!==void 0&&Hv(n)}function qv(e){let t=Lv(e);if(!(t===void 0||e.init?.type!==`ArrayExpression`))return{init:e.init,name:t}}function Jv(e,t){let n=qv(e);if(n===void 0)return;let{init:r,name:i}=n,a=t.get(i)??[];a.push(r),t.set(i,a)}function Yv(e,t){let n=qv(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 Xv=t({create(e){let{sourceCode:t}=e,n=new Map,r=0;function i(e){Rv(e)&&(r+=1)}function a(e){Rv(e)&&--r}function o(e){zv(e)&&(r+=1)}function s(e){zv(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(Kv(t,e.argument))return;let r=Uv(t,e,e.argument.name,n);if(r===void 0)return;Gv(r,t,n)>2&&c(e);return}e.argument.type===`ArrayExpression`&&Gv(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){Jv(e,n)},"VariableDeclarator:exit"(e){Yv(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 Zv(e){return e.endsWith(`Async`)}function Qv(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 $v=t({create(e){let t=e.options[0]?.except,n=t===void 0?new Set:new Set(t);function r(e){return Zv(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`&&(Qv(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 ey(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 ty(e){return e?.type===`module`||e?.type===`global`}function ny(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 ry(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 iy(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)ny(t)===i&&n.set(t.local.name,i)}const ay=t({create(e){let{sourceCode:t}=e,n=ey(e.options[0]);if(n.size===0)return{};let r=new Map;return{ImportDeclaration(e){iy(e,n,r)},NewExpression(i){let a=ry(i,r,n);a!==void 0&&(ty(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`}}),oy=[{allowAsync:!1,name:`useEffect`},{allowAsync:!1,name:`useLayoutEffect`},{allowAsync:!1,name:`useInsertionEffect`}];function sy(e){return x(e)&&y(e.name)&&typeof e.allowAsync==`boolean`}function cy(e){if(!x(e))return{environment:`roblox-ts`,hooks:oy};let t=mn(e.environment)?e.environment:`roblox-ts`,n=e.hooks;if(!Array.isArray(n))return{environment:t,hooks:oy};let r=[];for(let e of n)sy(e)&&r.push(e);return r.length===0?{environment:t,hooks:oy}:{environment:t,hooks:r}}function ly(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 uy(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=R(t.init);if(n===`useCallback`||n===`useMemo`)return!0}return!1}const dy=t({create(e){let{environment:t,hooks:n}=cy(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){uy(e.sourceCode,r)&&s(t,n,`identifierReferencesCallback`);return}let a=ly(i);if(a===void 0){uy(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=R(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 fy=new Set([`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`WhileStatement`]),py=[`task.wait`,`wait`,`*.WaitForChild`,`*.*Async`];function my(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 hy(e,t){return t.filter(t=>t.some(t=>t.index===e.index))}function gy({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 _y(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 vy(e){let t=[e.opener];return e.openerAlternatives&&t.push(...e.openerAlternatives),t}function yy(e){return e.length===0?`configured opener`:e.length===1?e[0]??`configured opener`:e.join(`' or '`)}function by(e){return e?fy.has(e.type):!1}function xy(e){return e?.type===`SwitchStatement`}function Sy(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 Cy(e,t){let n=e.label?Sy(e.label,e.parent):void 0;if(n)return by(n)?n:void 0;let r=e.parent;for(;r;){if(by(r))return r;if(t&&xy(r))return;r=r.parent??void 0}}function wy(e){return Cy(e,!0)}function Ty(e){return Cy(e,!1)}function Ey(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:[...py]}]: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(!vy(r).includes(e))continue;let i=_y(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(Ey)}function y(e){f.set(e,te())}function b(e,t){return i.pairs.find(n=>(t?vy(n):_y(n)).includes(e))}function x(e,t){return t.platform===`roblox`&&(t.yieldingFunctions??py).some(t=>{if(t.startsWith(`*.`)){let n=t.slice(2);return e.endsWith(`.${n}`)}return e===t})}function ne(e){let t=_y(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=hy(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 D(e){e.type===`IfStatement`&&(_({inConditional:!0}),y(e))}function ie(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=>my(e,n));a.length=0,a.push(...e)}else C(t)}f.delete(e),p.delete(e)}function ae(e){let{parent:t}=e;if(t?.type===`IfStatement`){re(t);let e=f.get(t);if(!e)return;C(e)}}function O(e){let{parent:t}=e;t?.type===`IfStatement`&&re(t)}function oe(e){e.type===`TryStatement`&&y(e)}function k(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=_y(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=>my(e,r));a.length=0,a.push(...t)}f.delete(t),p.delete(t)}function A(){_({inTry:!0})}function se(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 ce(e){se(e,`BlockStatement`)}function le(){_({inCatch:!0})}function ue(e){se(e,`CatchClause`)}function de(){_({inFinally:!0})}function fe(e){e.type===`SwitchStatement`&&(_({inConditional:!0}),y(e))}function j(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=>my(e,n));a.length=0,a.push(...e)}else C(t);f.delete(e),p.delete(e)}function M(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 pe(e){by(e)&&(o.push(e),_({inLoop:!0}))}function me(){o.length>0&&o.pop(),v()}function he(t){if(ee({hasEarlyExit:!0}),!(g().inFinally||a.length===0))for(let{config:n,node:r,opener:i}of a){let a=_y(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 ge(t){if(t.type!==`BreakStatement`&&t.type!==`ContinueStatement`||a.length===0)return;let n=t.type===`ContinueStatement`?Ty(t):wy(t);if(n)for(let{config:r,loopAncestors:i,node:o,opener:s}of a){if(!i.some(e=>e===n))continue;let a=_y(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 _e(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 ve(t,n){let r=a.findLastIndex(e=>_y(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=yy(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 ye(t,n,r){let i=_y(r.config),a=i.length===1?i[0]??`closer`:i.join(`' or '`);e.report({data:{closer:a,yieldingFunction:n},messageId:`robloxYieldViolation`,node:t})}function be(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=_y(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 N(e){if(e.type!==`CallExpression`)return;let t=gy(e);if(t===void 0||t===``)return;let n=b(t,!0);if(n){_e(e,t,n);return}if(b(t,!1)){ve(e,t);return}for(let n of a)if(x(t,n.config)){ye(e,t,n),a.length=0,l=!0;return}}return{ArrowFunctionExpression:T,"ArrowFunctionExpression:exit":E,AwaitExpression:be,BreakStatement:ge,CallExpression:N,CatchClause:le,"CatchClause:exit":ue,ContinueStatement:ge,DoWhileStatement:pe,"DoWhileStatement:exit":me,ForInStatement:pe,"ForInStatement:exit":me,ForOfStatement:e=>{e.await&&be(e),pe(e)},"ForOfStatement:exit":me,ForStatement:pe,"ForStatement:exit":me,FunctionDeclaration:T,"FunctionDeclaration:exit":E,FunctionExpression:T,"FunctionExpression:exit":E,IfStatement:D,"IfStatement > .alternate:exit":O,"IfStatement > .consequent:exit":ae,"IfStatement:exit":ie,ReturnStatement:he,"SwitchCase:exit":M,SwitchStatement:fe,"SwitchStatement:exit":j,ThrowStatement:he,TryStatement:oe,"TryStatement > .block":A,"TryStatement > .block:exit":ce,"TryStatement > .finalizer":de,"TryStatement > .finalizer:exit":v,"TryStatement:exit":k,WhileStatement:pe,"WhileStatement:exit":me,YieldExpression:be}},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`}}),Oy={allowRootKeys:!1,ignoreCallExpressions:[`ReactTree.mount`,`CreateReactStory`,`createReactStory`,`createPlatformStory`],iterationMethods:[`map`,`filter`,`forEach`,`flatMap`,`reduce`,`reduceRight`,`some`,`every`,`find`,`findIndex`],memoizationHooks:[`useCallback`,`useMemo`]},ky=new Set([`ChainExpression`,`ParenthesizedExpression`,`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]),Ay=new Set([...ky,`AwaitExpression`,`ConditionalExpression`,`LogicalExpression`,`SequenceExpression`,`SpreadElement`]),jy={iteration:!1,memoization:!1},My=new Set([`ConditionalExpression`,`LogicalExpression`]),Ny=new Set([`BlockStatement`,`CatchClause`,`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`IfStatement`,`LabeledStatement`,`SwitchCase`,`SwitchStatement`,`TryStatement`,`WhileStatement`,`WithStatement`]);function $(e){return e.parent??void 0}function Py(e){let t=e;for(;t!==void 0&&ky.has(t.type);)t=$(t);return t}function Fy(e){let t=$(e);for(;t!==void 0;){if(P(t))return t;t=$(t)}}function Iy(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 jy}function Ly(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(Ay.has(n.type)){t=n,n=$(n);continue}break}}function Ry(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 zy(e,t){e.iteration||=t.iteration,e.memoization||=t.memoization}function By(e,t,n){if(e.isWrite())return jy;let r=Ly(e.identifier);return r===void 0||Do(r)?jy:Iy(r,t,n)}function Vy(e,t,n,r){let i=Ly(t);if(i!==void 0)return Do(i)?jy:Iy(i,n,r);let a=Ry(e,t);if(a===void 0)return jy;let o={iteration:!1,memoization:!1};for(let e of a.references)if(zy(o,By(e,n,r)),o.iteration&&o.memoization)return o;return o}function Hy(e){let t=Uy(e);return t===void 0?!1:t.type===`ReturnStatement`?Gy(t):t.type===`ArrowFunctionExpression`}function Uy(e){let t=Wy(Py($(e)));for(;t!==void 0&&My.has(t.type);)t=Py($(t));return Wy(t)}function Wy(e){return e?.type===`JSXExpressionContainer`?Py($(e)):e}function Gy(e){let t=Py($(e));for(;t!==void 0&&Ny.has(t.type);)t=Py($(t));return t!==void 0&&P(t)}function Ky(e){if(!Hy(e))return!1;let t=Fy(e);if(t===void 0)return!1;let n=Py($(t));return n?.type!==`CallExpression`||Do(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 Jy(e){return e.toLowerCase().endsWith(`children`)}function Yy(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=Oo(t);return n===void 0||!Jy(n)}function Xy(e){let t=e,n=$(e);for(;n!==void 0&&ky.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 Zy(e,t){let n=$(e);if(n===void 0)return!1;let r=!1;for(;n!==void 0&&(n.type===t||ky.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 Qy(e){return Zy(e,`ConditionalExpression`)}function $y(e){return Zy(e,`LogicalExpression`)}const eb=t({create(e){let[t]=e.options,n={allowRootKeys:Oy.allowRootKeys,ignoreCallExpressions:Oy.ignoreCallExpressions,iterationMethods:Oy.iterationMethods,memoizationHooks:Oy.memoizationHooks,...t},r=new Set(n.iterationMethods),i=new Set(n.memoizationHooks);function a(t){let a=Fy(t),o=a===void 0?jy:Vy(e.sourceCode,a,r,i),s=o.iteration||o.memoization;if(Ky(t)&&!s){!n.allowRootKeys&&t.type===`JSXElement`&&ko(t,`key`)&&e.report({messageId:`rootComponentWithKey`,node:t});return}if(!qy(t,n.ignoreCallExpressions)&&!(Xy(t)||Yy(t)||Qy(t))&&!(t.type===`JSXFragment`&&$y(t))&&!(t.type===`JSXFragment`&&o.memoization&&!o.iteration&&Hy(t))){if(t.type===`JSXFragment`){e.report({messageId:`missingKey`,node:t});return}ko(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:Oy.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 tb(e){if(e.id.type===`Identifier`)return e.id.name}function nb(e,t,n){return ue(e,t,n,`memo`)}function rb(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 ib(e){let t=e;for(;t!==null;){if(t.type===`ExportNamedDeclaration`||t.type===`ExportDefaultDeclaration`)return!0;t=t.parent}return!1}function ab(e){return e.parent.type===`VariableDeclaration`?e.parent.parent.type===`ExportNamedDeclaration`||e.parent.parent.type===`ExportDefaultDeclaration`:!1}function ob(e,t,n){for(let r of e.getDeclaredVariables(t))if(r.name===n){for(let{identifier:e}of r.references)if(ib(e))return!0;return!1}return!1}function sb(e,t,n,r){return r.has(t)||ab(n)?!0:ob(e,n,t)}function cb(e,t,n){e.report({data:{variableName:n},messageId:t.kind===`context`?`missingContextDisplayName`:`missingMemoDisplayName`,node:t.node})}const lb=t({create(e){let t=vn(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(nb(t.declaration,n,i)){e.report({messageId:`directMemoExport`,node:t});return}rb(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(yn(e,t))for(let t of e.specifiers){if(t.type===`ImportSpecifier`){let e=fe(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||sb(e.sourceCode,t,n.node,o)&&cb(e,n,t)},VariableDeclarator(e){if(e.init?.type!==`CallExpression`)return;let t=tb(e);if(t!==void 0){if(nb(e.init,n,i)){a.set(t,{hasDisplayName:!1,kind:`memo`,node:e});return}rb(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:pn},type:`object`}],type:`problem`}});function ub(e){return x(e)&&e.metric===`statements`?`statements`:`lines`}function db(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 fb=t({create(e){let t=ub(e.options[0]);return{SwitchCase(n){if(!db(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 Cr=t({create(e){let{sourceCode:t}=e;function n(n){let r=0;for(;r<n.length;){let i=xr(t,n,r);if(i===void 0){r+=1;continue}e.report({fix(e){return Sr(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 wr(e){return typeof e!=`object`||!e?!1:`allowAutofix`in e?e.allowAutofix===void 0||typeof e.allowAutofix==`boolean`:!0}function Tr(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`&&Er(e,t,n);case`Super`:return t.type===`Super`;case`ThisExpression`:return t.type===`ThisExpression`;default:return!1}}function Er(e,t,n){return e.computed!==t.computed||e.optional!==t.optional||!Tr(e.object,t.object,n)?!1:e.computed?Dr(e.property,t.property,n):Or(e.property,t.property)}function Dr(e,t,n){return nt(e)&&nt(t)&&Tr(e,t,n)}function Or(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 kr(e,t){switch(e.type){case`Identifier`:case`ThisExpression`:return!0;case`Literal`:return t;case`MemberExpression`:return e.optional||!kr(e.object,!1)?!1:e.computed?nt(e.property)?kr(e.property,!0):!1:e.property.type===`Identifier`||e.property.type===`PrivateIdentifier`;default:return!1}}function Ar(e){return kr(e,!1)}function jr(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 Mr(e,t,n){if(!(e.operator!==`=`||e.left.type!==`MemberExpression`||!e.left.computed)){if(n===`roblox-ts`&&jr(e.left.property))return Tr(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 Tr(e.left.object,n.object,t)?e.left:void 0}}}const Nr=t({create(e){let[t]=e.options,n=wr(t)&&t.allowAutofix,r=t?.environment===`standard`?`standard`:`roblox-ts`,{sourceCode:i}=e;return{AssignmentExpression(t){let a=Mr(t,i,r);if(a===void 0)return;let o=t.parent.type===`ExpressionStatement`?t.parent:void 0;if(!(n&&o!==void 0&&Ar(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,description:`Allow the fixer to replace safe append assignments with array.push(value).`,type:`boolean`},environment:{...pn,default:`roblox-ts`,description:`Array environment mode: 'roblox-ts' checks array[array.size()]; 'standard' checks array[array.length].`}},type:`object`}],type:`problem`}}),Pr=/^set[A-Z]/u;function R({callee:e}){if(e.type===`Identifier`)return e.name;if(e.type===`MemberExpression`&&e.property.type===`Identifier`)return e.property.name}function Fr(e){return Pr.test(e)}function Ir(e){let[t]=e.arguments;return t?.type===`ArrowFunctionExpression`||t?.type===`FunctionExpression`?t:void 0}function Lr(e,t){let n=[e];for(;n.length>0;){let e=n.pop();if(e===void 0)break;t(e),zr(e,n)}}function Rr(e,t){t(e);for(let n of Object.values(e))Hr(n,e,t)}function zr(e,t){for(let n in e)se(n)||Br(Reflect.get(e,n),e,t)}function Br(e,t,n){if(!(typeof e!=`object`||!e||e===t.parent)){if(Array.isArray(e)){Vr(e,t,n);return}D(e)&&n.push(e)}}function Vr(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 Hr(e,t,n){if(Array.isArray(e)){for(let r of e)Hr(r,t,n);return}e===t.parent||!D(e)||Rr(e,n)}function Ur(e){let{key:t}=e;if(t.type===`Identifier`)return t.name;if(t.type===`Literal`&&y(t.value))return t.value}function Wr(e){let{value:t}=e;if(t.type===`Identifier`)return t;if(t.type===`AssignmentPattern`&&t.left.type===`Identifier`)return t.left}function Gr(e){let t=0;return Lr(e,e=>{e.type===`CallExpression`&&e.callee.type===`Identifier`&&Fr(e.callee.name)&&(t+=1)}),t}function Kr(e,t,n,r,i){if(t===void 0)return 0;if(t.type===`SpreadElement`)return 3;let a=C(t);return a.type===`ArrayExpression`?a.elements.length===0?1:i(e,a,n,r)?2:3:3}const qr=new Set([`catch`,`finally`,`then`]);function Jr(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 Yr(e){return e.callee.type!==`MemberExpression`||e.callee.property.type!==`Identifier`?!1:qr.has(e.callee.property.name)}function Xr({callee:e}){let t=C(e);return Pe(t)&&t.async}function Zr({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 Qr(e){let{parent:t}=e;return t?.type!==`AssignmentExpression`||t.right!==e?!1:t.left.type===`MemberExpression`&&t.left.object.type===`ThisExpression`}function $r(e){let{parent:t}=e;if(t?.type===`VariableDeclarator`&&t.init===e)return t.id.type===`Identifier`?t.id.name:void 0}function ei(e){return!Pe(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 ti(e,t){let n=e;for(;n!==t;){let{parent:e}=n;if(e===null)return!1;if(ei(e))return!0;n=e}return!1}function ni(e,t){let n=Zr(e,t);if(n===void 0||Qr(e))return;if(e.parent.type===`ExpressionStatement`)return{data:{methodName:n},messageId:`unhandledAsyncCall`,node:e};let r=$r(e);if(r!==void 0)return{data:{variableName:r},messageId:`orphanedPromise`,node:e}}function ri(e,t){let n=[],r=0;function i(i){if(i!==e&&ti(i,e))return;if(i.type===`AwaitExpression`){n[r++]={messageId:`awaitInConstructor`,node:i};return}if(i.type!==`CallExpression`)return;Yr(i)&&(n[r++]={messageId:`promiseChainInConstructor`,node:i}),Xr(i)&&(n[r++]={messageId:`asyncIifeInConstructor`,node:i});let a=ni(i,t);a!==void 0&&(n[r++]=a)}return Rr(e,i),n}const ii=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=Jr(e.parent),r=e.value.body,i=ri(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`}}),ai=new Map(`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,EditorSourceService,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,LuauExpression,LuauExpressionService,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,Path3D,PathfindingLink,PathfindingModifier,PathfindingService,PausedState,PausedStateBreakpoint,PausedStateException,PerformanceControlService,PermissionsService,PhysicsService,PhysicsSettings,PinShortcutService,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,RequestOrchestratorService,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,WindowProtocolService,Wire,WireframeHandleAdornment,Workspace,WorkspaceAnnotation,WorldModel,WorldRoot,WrapDeformMeshProvider,WrapDeformer,WrapLayer,WrapTarget,WrapTextureTransfer`.split(`,`).map((e,t)=>[e,t])),oi=new Set(`WaitForChild`.split(`,`)),z=[`AdvanceToNextPageAsync`,`IntersectAsync,SubtractAsync,UnionAsync`,`IsAvailable`],si=new Map([[2,`GetCredentialsHeaders,GetDeviceAccessToken,GetDeviceIntegrityTokenYield`],[4,`GrantAchievement,HasAchieved`],[9,`GetAdAvailabilityNowAsync,GetAdAvailabilityNowForUniverseAsync,GetCampaignEligibilityAsync,RegisterAdOpportunityAsync,ShowRewardedVideoAdAsync,ShowRewardedVideoAdAtClientAsync`],[14,`GetPlayerSegmentsAsync`],[18,`GetAnimationClipAsync,GetAnimations,GetAnimationsAsync,GetClipEvaluatorAsync`],[21,`CreateJob,DownloadJobResult,FullProcess,GetJobStatus`],[22,`CreateAnimationByUploadingVideo,ImportVideoWithPrompt`],[32,`CreateOrUpdateChannelPreferenceAsync,CreateOrUpdatePlacePreferenceAsync,GetChannelPreferenceAsync,GetPlacePreferenceAsync`],[33,`GetAppAgeSignalsAsync`],[41,`GetFilesInDirAsync,PickFileWithPromptAsync,PickImageFileWithPrompt,PickMeshFileWithPrompt,PickMultipleFilesWithPrompt,StartSessionWithPathAsync,UploadAssetFromContentAsync,UploadAssetFromPathAsync,UploadVersionedAssetFromContentAsync,UploadVersionedAssetFromPathAsync`],[43,`AddNewPlace,CreateAlias,DeleteAlias,RemovePlace,RenameAlias,RenameModel,RenamePlace`],[45,`FetchAssetQualitySummaryFromGltfAsync,FetchAssetQualitySummaryFromJobIdAsync,FetchAssetQualityValidationEntriesFromModelsAsync,FetchAssetQualityVisualizationDataFromUrlAsync,GenerateAssetQualityGltfFromInstanceAsync`],[46,`CachePartOperationsAsync,CanEditAssetAsync,ComposeDecalAsync,CreateAssetAsync,CreateAssetVersionAsync,CreateDataModelContentAsync,CreateEditableImageAsync,CreateEditableMeshAsync,CreateMeshPartAsync,CreatePlaceAsync,CreatePlaceInPlayerInventoryAsync,CreateSurfaceAppearanceAsync,GetAssetIdsForPackage,GetAssetIdsForPackageAsync,GetAudioMetadataAsync,GetBundleDetailsAsync,GetCreatorAssetID,GetGamePlacesAsync,LoadAssetAsync,PromptCreateAssetAsync,PromptImportAnimationClipFromVideoAsync,SavePlaceAsync,SearchAudio,SearchAudioAsync`],[69,z[0]],[71,`GetWaveformAsync`],[72,`CanRecordAsync,GetUnrecordableInstancesAsync,RecordAsync`],[76,`GetWaveformAsync,LoadAsync`],[83,`GetClientFeaturesAsync,GetServerFeaturesAsync`],[86,`AutoSetupAvatarAsync,CreateCageMeshPartsWithScaleForExportAsync,GenerateAvatar2DPreviewAsync,GenerateAvatarAsync,GetBatchTokenDetailsAsync,LoadAvatar2DPreviewAsync,LoadGeneratedAvatarAsync,PrepareAvatarForPreviewAsync,PromptCreateAvatarAssetAsync,PromptCreateAvatarAsync,PromptCreateMakeupAsync,PromptSelectAvatarGenerationImageAsync,RequestAvatarGenerationSessionAsync,ValidateUGCAccessoryAsync,ValidateUGCBodyPartAsync,ValidateUGCFullBodyAsync`],[87,`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`],[88,`ImportFBXAnimationFromFilePathUserMayChooseModel,ImportFBXAnimationUserMayChooseModel,ImportFbxRigWithoutSceneLoad,ImportLoadedFBXAnimation,LoadRigAndDetectType`],[93,`AwardBadge,AwardBadgeAsync,CheckUserBadgesAsync,GetBadgeInfoAsync,GetUserBadgesAsync,IsDisabled,IsLegal,UserHasBadge,UserHasBadgeAsync`],[95,z[0]],[98,z[1]],[108,`Invoke`],[129,z[2]],[139,`CheckUploadCaptureStatusAsync,CreatePostAsync,DeleteCapturesAsync,DeleteVideoCaptureAsync,GetCaptureFilePathAsync,GetCaptureSizeAsync,GetCaptureStorageSizeAsync,GetCaptureUploadDataAsync,InternalCheckPlayabilityAsync,InternalGetStartPlaceIdAsync,PromptCaptureGalleryPermissionAsync,ReadCapturesFromGalleryAsync,SaveCapturesToExternalStorageAsync,StartUploadCaptureAsync,StartVideoCaptureAsync,StartVideoCaptureInternalAsync,UploadCaptureAsync`],[140,z[0]],[142,z[0]],[149,`CanUserChatAsync,CanUsersChatAsync,FilterStringAsync,FilterStringForBroadcast,FilterStringForPlayerAsync`],[170,`GetCommerceProductInfoAsync,PrepareCommerceProductPurchase,UserEligibleForRealWorldCommerceAsync`],[174,`GetConfigAsync,GetConfigForPlayerAsync`],[180,`PreloadAsync`],[181,`GetButton`],[195,z[1]],[197,`GetAssetInfoAsync,GetCreatorStoreProductInfoAsync,PerformCreatorStorePurchase`],[207,`GetObjectsAsync,HttpGetAsync,HttpPostAsync,InsertObjectsAndJoinIfLegacyAsync,SavePlace`],[211,`BatchGetAsync,GetAsync,GetVersionAsync,GetVersionAtTimeAsync,IncrementAsync,ListKeysAsync,ListVersionsAsync,RemoveAsync,RemoveVersionAsync,SetAsync,UpdateAsync`],[217,z[0]],[218,z[0]],[221,z[0]],[222,`ListDataStoresAsync`],[224,z[0]],[249,`CommitEdits,GetDrafts,UpdateToLatestVersion`],[267,`CanPromptOptInAsync`],[270,`LoadPlaybackAsync`],[278,`InquiryAsync`],[279,`CheckOrRequestCameraPermission`],[281,`ResolveStateForUser`],[287,`ListFilesInFolderAsync`],[292,z[1]],[297,`EvaluateAsync`],[301,z[1]],[303,z[0]],[304,`GetPlatformFriends`],[306,`PlayerHasPass`],[310,`ConnectAsync,DisconnectAsync,GenerateMeshAsync,GenerateModelAsync,GetVideoGenSessionAsync,GetVideoGenTriggersAsync,InternalGenerateMeshAsync,LoadGeneratedMeshAsync,LoadModelFromGlbAsync,SegmentMeshAsync,StartVideoGenSessionAsync,UpdateVideoGenSessionPromptAsync,UpdateVideoGenSessionTriggersAsync`],[314,`FragmentAsync,HashMeshAsync,IntersectAsync,SubtractAsync,SweepPartAsync,UnionAsync`],[316,`BatchGetAsync,GetAsync,IncrementAsync,RemoveAsync,SetAsync,UpdateAsync`],[322,`GetAlliesAsync,GetEnemiesAsync,GetGroupInfoAsync,GetGroupsAsync,GetRolesInGroupAsync,PromptJoinAsync`],[330,`GetScreenResolution`],[340,`ClientRequestDataAsync,ServerRequestDataAsync`],[343,`GetHeightmapPreviewAsync,ImportHeightmap`],[351,`GetAsync,GetAsyncFullUrl,PostAsync,PostAsyncFullUrl,RequestAsync,RequestLimitedAsync`],[353,`GetAsync,JSONDecodeAsync,JSONEncodeAsync,PostAsync,RequestAccessTokenScopesAsync,RequestAsync`],[354,`ApplyAvatarRules,ApplyDescription,ApplyDescriptionAsync,ApplyDescriptionReset,ApplyDescriptionResetAsync,PlayEmote,PlayEmoteAndGetAnimTrackById,PlayEmoteAsync`],[371,`CreateMeshPartAsync,GetBaseCategories,GetBaseSets,GetCollection,GetFreeDecals,GetFreeDecalsAsync,GetFreeModels,GetFreeModelsAsync,GetLatestAssetVersionAsync,GetUserCategories,GetUserSets,LoadAsset,LoadAssetVersion,LoadAssetWithBytecodeAsync,LoadAssetWithFormat,LoadPackageAssetAsync,loadAsset`],[380,z[1]],[381,z[0]],[389,`GetAnimations,GetAnimationsAsync,GetKeyframeSequenceAsync`],[390,`GetCapabilitiesUsedInPackageAsync`],[398,`OpenUrl,SupportsSwitchToSettingsApp,SwitchToSettingsApp`],[404,`GetCountryRegionForPlayerAsync,GetTranslatorForLocaleAsync,GetTranslatorForPlayerAsync,PromptDownloadGameTableToCSV,PromptExportToCSVs,PromptImportFromCSVs,PromptUploadCSVToGameTable`],[418,`CreateSessionAsync,LoadPostProcessModelAsync`],[419,`ForwardAsync`],[425,`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`],[427,`GenerateMaterialVariantsAsync`],[433,`GetAsync,ListItemsAsync,RemoveAsync,SetAsync,UpdateAsync`],[434,z[0]],[435,`AddAsync,GetSizeAsync,ReadAsync,RemoveAsync`],[437,`GetAsync,GetRangeAsync,GetSizeAsync,RemoveAsync,SetAsync,UpdateAsync`],[440,z[1]],[444,`PublishAsync,SubscribeAsync`],[448,`DumpToFileAsync`],[450,`CreateReviewableContentAsync,InternalRequestReviewableContentReviewAsync`],[458,z[1]],[468,`GetScheduledNotifications`],[474,`CreateUserNotificationAsync`],[475,`HttpRequestAsync,InvokeAsync`],[477,`BatchGetAsync,GetAsync,GetSortedAsync,IncrementAsync,RemoveAsync,SetAsync,UpdateAsync`],[478,z[0]],[483,`UpdateAsync`],[484,`ConvertToPackageAsync,GetPackageInfo,PublishPackage,SetPackageVersion`],[486,z[0]],[489,z[1]],[491,z[1]],[494,`GetEmulatedPartyAsync`],[497,`CheckOcclusionAsync,ComputeAsync`],[502,`ComputeRawPathAsync,ComputeSmoothPathAsync,FindPathAsync`],[517,z[1]],[518,`GetUserDataAsync,SetUserDataAsync`],[519,`GetPartyMembers`],[521,`GetCanManageAsync,GetFriendsOnline,GetFriendsOnlineAsync,GetFriendsWhoPlayedAsync,GetRankInGroup,GetRankInGroupAsync,GetRoleInGroup,GetRoleInGroupAsync,IsBestFriendsWith,IsFriendsWith,IsFriendsWithAsync,IsInGroup,IsInGroupAsync,LoadCharacter,LoadCharacterAsync,LoadCharacterBlocking,LoadCharacterWithAvatarRules,LoadCharacterWithHumanoidDescription,LoadCharacterWithHumanoidDescriptionAsync,PromptSecurityChallengeAsync,RequestStreamAroundAsync,WaitForDataReady,isFriendsWith,waitForDataReady`],[522,`GetRecordAsync`],[523,`ReleaseAsync,RequestFlushAsync`],[533,`BanAsync,CreateHumanoidModelFromDescription,CreateHumanoidModelFromDescriptionAsync,CreateHumanoidModelFromUserId,CreateHumanoidModelFromUserIdAsync,GetBanHistoryAsync,GetCharacterAppearanceAsync,GetCharacterAppearanceInfoAsync,GetFriendsAsync,GetHumanoidDescriptionFromOutfitId,GetHumanoidDescriptionFromOutfitIdAsync,GetHumanoidDescriptionFromUserId,GetHumanoidDescriptionFromUserIdAsync,GetNameFromUserIdAsync,GetProfileConfigurationFromUserIdAsync,GetUserIdFromNameAsync,GetUserThumbnailAsync,UnbanAsync`],[534,`CreateDockWidgetPluginGui,CreateDockWidgetPluginGuiAsync,CreateQWidgetPluginGui,ImportFbxAnimation,ImportFbxAnimationAsync,ImportFbxRig,ImportFbxRigAsync,PromptForExistingAssetId,PromptForExistingAssetIdAsync,PromptSaveSelection,PromptSaveSelectionAsync`],[543,`GetOTAPluginVersion`],[546,`ShowAsync`],[552,`AwardPoints,GetGamePointBalance,GetPointBalance`],[553,`CanViewBrandProjectAsync,GetPolicyInfoForPlayerAsync,GetPolicyInfoForServerRobloxOnlyAsync`],[561,`WaitForGenerationAsync`],[565,`CreateAssetAndWaitForAssetId,CreateAssetOrAssetVersionAndPollAssetWithTelemetryAsync,CreateAssetOrAssetVersionAndPollAssetWithTelemetryAsyncWithAddParam,CreateAssetOrAssetVersionAndPollAssetWithTelemetryAsyncWithAddParamErrorJson,PublishCageMeshAsync,PublishDescendantAssetsAsync`],[571,`ConnectAsync`],[572,z[0]],[573,`GenerateItemListAsync,GetRecommendationItemAsync,RegisterItemAsync,RemoveItemAsync,UpdateItemAsync`],[589,`ExecuteCommandAsync`],[593,`InvokeClient,InvokeServer`],[626,`GetAnimationMemoryAsync,GetAudioMemoryAsync,GetInstanceCompositionAsync,GetScriptMemoryAsync,GetTriangleCompositionAsync,GetUnparentedInstancesAsync`],[639,`CloseAsync,EditTextAsync,ForceSetSelectionAsync,MultiEditTextAsync,RequestSetSelectionAsync,ReviewableTextEditsAsync`],[640,`EditSourceAsyncWithRanges,OpenScriptDocumentAsync,UpdateSourceAsync`],[646,z[1]],[656,`DeserializeInstancesAsync,SerializeInstancesAsync`],[668,z[1]],[682,`CanSendCallInviteAsync,CanSendGameInviteAsync,GetEventRsvpStatusAsync,GetExperienceEventAsync,GetPartyAsync,GetUpcomingExperienceEventsAsync,PromptFeedbackSubmissionAsync,PromptLinkSharing,PromptLinkSharingAsync,PromptRsvpToEventAsync`],[687,`EndRecording,GetRecordingDevices`],[690,z[1]],[698,z[0]],[702,`GetCore`],[707,`GetPaginatedMemoryByTexture`],[714,`AutoSetupAvatarAsync,AutoSetupSerializedAvatarAsync,CancelAutoSetupAvatarAsync,DEPRECATED_SerializeInstances,PromptSaveInstanceToRobloxAsync,RequestAvatarAutosetupAsync,SerializeInstances`],[718,`RequestScreenshotPermissionAsync`],[720,`EmulatePCDeviceWithResolution,GetCurrentDeviceId,GetCurrentOrientation,HasDeviceWithId,SetCurrentDeviceId,SetCurrentOrientation`],[721,`CreateDeviceAsync,GetDeviceAsync,GetDeviceInfoAsync,GetDeviceListAsync,GetOrientationAsync,GetPixelDensityAsync,GetResolutionAsync,GetScalingModeAsync,RemoveDeviceAsync,SetDeviceAsync,SetOrientationAsync,SetPixelDensityAsync,SetResolutionAsync,SetScalingModeAsync,StopSimulationAsync,UpdateDeviceAsync`],[724,`ScaleAsync`],[727,`PromptImportFile,PromptImportFileAsync,PromptImportFiles,PromptImportFilesAsync,TryInstallPlugin`],[728,`ExecuteMultiplayerTestAsync,ExecutePlayModeAsync,ExecuteRunModeAsync`],[748,`getSystemThemeAsync`],[758,`GetPlayerPlaceInstanceAsync,PromptExperienceDetailsAsync,ReserveServer,ReserveServerAsync,TeleportAsync,TeleportPartyAsync,UnblockAsync`],[761,`DrawBufferAsync,IntersectAsync,ReadBufferAsync,SubtractAsync,UnionAsync`],[769,`CaptureScreenshotAsync,RequestValidationAsync,Run,RunAsync,StartVideoCaptureAsync,StopVideoCaptureAsync`],[773,`AddUserAsync,SendAsync,SendDictatedSpeechAsync,SendInternalAsync,SendPresetAsync`],[779,`CanUserChatAsync,CanUsersChatAsync,CanUsersDirectChatAsync,CanUsersWhisperAsync,GetChatGroupsAsync,GetChatableUserCountAsync,GetPresetsAsync,OnUserChatSettingUpdateAsync,SendDictatedSpeechUniverseChatAsync,SendUniverseChatMessageAsync,SendUniverseChatPresetAsync`],[780,`GetChatForUserAsync,GetNonChatStringForBroadcastAsync,GetNonChatStringForUserAsync`],[782,`GenerateTextAsync`],[784,`FilterAndTranslateStringAsync,FilterStringAsync,GetFamilyInfoAsync,GetTextBoundsAsync,GetTextSizeOffsetAsync`],[788,`GetQuotasAsync`],[790,`RegisterActiveUser`],[807,z[1]],[808,z[1]],[814,`CalculateBodyMaxCageDistance,CanLoadAsset,CreateEditableImageOriginalSizeAsync,DoesMeshHaveSkinningData,DoesSurfaceAppearanceMatchTexturePackAsync,FetchAssetWithFormat,GetMeshDataBinaryString,GetMeshVerts,IsDeformedLayeredClothingOutOfRenderBounds`],[836,z[1]],[843,`GetUserFromGlobalUserIdAsync,GetUserInfosByUserIdsAsync`],[854,z[1]],[862,`LoadAsync`],[863,`GetSamplesAtTimesAsync`],[865,`CreateVideoSamplerAsync`],[866,`CaptureSnapshotAsync`],[868,`WaitForInputEventsProcessed`],[875,`IsVoiceEnabledForUserIdAsync`],[876,`GetChatGroupsAsync,IsVoiceEnabledForUserIdAsync`],[877,`ClearAsync,DrawBufferAsync,FromHeightmapAsync,NormalizeAsync,UnclampAsync`],[881,z[2]],[882,z[1]],[893,`CreateEditableMeshAsync,GetDeformedCFrameAsync`]]);function ci(e,t){let n=ai.get(e);return n===void 0?!1:oi.has(t)?!0:si.get(n)?.split(`,`).includes(t)===!0}const li=[`PlanckSystem`,`System`,`SystemFunction`,`SystemReturn`,`SystemTableLike`],ui=new Set([`comments`,`loc`,`parent`,`range`,`tokens`]);function di(e,t){if(e.type===`Identifier`)return e.name;if(t&&e.type===`TSQualifiedName`)return di(e.right,t)}function fi(e,t=!0){if(e!=null){if(e.type===`TSTypeAnnotation`)return fi(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=fi(r,t);if(e===void 0||n!==void 0)return;n=e}return n}if(e.type===`TSTypeReference`)return di(e.typeName,t)}}function pi(e,t){let n=fi(e);return n!==void 0&&t.has(n)}function mi(e,t){for(let n of Object.keys(e)){if(ui.has(n))continue;let r=Reflect.get(e,n);r!=null&&t.push(r)}}function hi(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&&mi(e,n)}}}function gi(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 _i(e,t,n){for(let r of e.properties)if(gi(r)===`system`&&r.type===`Property`){if(P(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 vi(e){if(e.type===`ImportSpecifier`)return e.imported.type===`Identifier`?e.imported.name:e.imported.value}function yi(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=vi(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 bi(e){let t=[],n=C(e);for(;n.type===`MemberExpression`;){let e=w(n);if(e===void 0)return;t.unshift(e),n=C(n.object)}return n.type===`Identifier`?{path:t,root:n}:void 0}function xi(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function Si(e){if(e.type===`Identifier`)return[e.name];if(e.type!==`MemberExpression`)return;let t=bi(e);return t===void 0?void 0:[t.root.name,...t.path]}function Ci(e,t){return T(e.getScope(t),t.name)}function wi(e,t,n,r,i){hi(e,e=>{if(e.type!==`CallExpression`||e.callee.type!==`MemberExpression`)return;let a=bi(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||!xi(a.path,n.memberPath))continue;let r=e.arguments[n.callbackArgumentIndex];if(r===void 0||r.type===`SpreadElement`||!P(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){hi(e,e=>{if(e.type===`VariableDeclarator`&&e.id.type===`Identifier`){let i=e.id.name,a=fi(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(!P(e))return;let i=new Map(t.getDeclaredVariables(e).map(e=>[e.name,e]));for(let t of e.params){if(t.type!==`Identifier`)continue;let e=t.name,a=fi(t.typeAnnotation,!1);if(a===void 0||n.has(a))continue;let o=i.get(e);o!==void 0&&r.set(o,a)}})}function Ei(e){let t=new Set;return hi(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){let n=Ci(t,e);if(n?.defs.length!==1)return;let[r]=n.defs;if(r===void 0)return;if(P(r.node))return r.node;if(r.node.type!==`VariableDeclarator`||r.node.init===null)return;let i=C(r.node.init);return P(i)?i:void 0}function ki(e,t){let n=C(e);return P(n)?n:n.type===`Identifier`?Oi(n,t):void 0}function Ai(e,t,n,r,i){let a=C(e);if(a.type===`Identifier`)return ji(a,t,n,r,i);if(!(a.type===`CallExpression`&&a.callee.type===`MemberExpression`&&w(a.callee)===`GetService`&&a.callee.object.type===`Identifier`&&a.callee.object.name===`game`&&!E(t,a.callee.object,`game`)))return;let[o]=a.arguments;return o?.type===`Literal`&&typeof o.value==`string`?o.value:void 0}function ji(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),Ai(o,t,n,r,i)}function Mi(e,t,n,r){if(e.callee.type!==`MemberExpression`)return!1;let i=w(e.callee);if(i===void 0)return!1;let a=Ai(e.callee.object,t,n,r,new Set);return a!==void 0&&ci(a,i)}function Ni(e,t){let n=new Set;if(e.body===null)return n;if(e.body.type!==`BlockStatement`){let r=ki(e.body,t);return r!==void 0&&n.add(r),n}return hi(e.body,e=>{if(P(e))return!1;if(e.type!==`ReturnStatement`||e.argument===null)return!0;let r=ki(e.argument,t);return r!==void 0&&n.add(r),!1}),n}function Pi(e,t,n){let r=new Set,i=Si(e.callee);if(i===void 0)return r;for(let a of n)if(xi(i,a.calleePath))for(let n of a.callbackArgumentIndexes){let i=e.arguments[n];if(i===void 0||i.type===`SpreadElement`)continue;let a=ki(i,t);a!==void 0&&r.add(a)}return r}function Fi(e,t,n,r,i,a){if(e.async)return;let o=new Set;function s(e){e.async||e.body===null||o.has(e)||(o.add(e),hi(e.body,o=>{if(P(o)&&o!==e)return!1;if(o.type!==`CallExpression`)return!0;Mi(o,t,n,r)&&a(o);for(let e of Pi(o,t,i))s(e);return!0}))}let c=Ni(e,t),l=c.size===0?[e]:c;for(let e of l)s(e)}const Ii=t({create(e){let t=e.options[0]?.additionalSystemTypeNames??[],n=e.options[0]?.callbackParameterTypes??[],r=e.options[0]?.synchronousCallbacks??[],i=new Set([...li,...t]);return{"Program:exit"(t){let a=new Map,o=new Set,s=[],c=yi(t,e.sourceCode),l=new Map;Ti(t,e.sourceCode,Ei(t),l),wi(t,e.sourceCode,c,n,l),hi(t,e=>{if(P(e)){e.id!==null&&a.set(e.id.name,e),pi(e.returnType,i)&&o.add(e);return}if(e.type===`VariableDeclarator`&&e.id.type===`Identifier`){if(!pi(e.id.typeAnnotation,i)||e.init===null)return;P(e.init)?o.add(e.init):e.init.type===`ObjectExpression`&&s.push(e.init);return}e.type===`TSSatisfiesExpression`&&pi(e.typeAnnotation,i)&&e.expression.type===`ObjectExpression`&&s.push(e.expression)});for(let e of s)_i(e,a,o);for(let t of o)Fi(t,e.sourceCode,c,l,r,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`},synchronousCallbacks:{items:{additionalProperties:!1,properties:{callbackArgumentIndexes:{items:{minimum:0,type:`integer`},minItems:1,type:`array`,uniqueItems:!0},calleePath:{items:{type:`string`},minItems:1,type:`array`}},required:[`callbackArgumentIndexes`,`calleePath`],type:`object`},type:`array`}},type:`object`}],type:`problem`}}),Li=new Set([`useAsyncEffect`,`useEffect`,`useInsertionEffect`,`useLayoutEffect`,`useMountEffect`,`useReactiveEffect`,`useUnmountEffect`,`useUpdateEffect`]),Ri=t({create(e){return{CallExpression(t){let n=R(t);if(n===void 0||!Li.has(n))return;let r=Ir(t);if(r===void 0)return;let i=Gr(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 zi(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 Vi(e){let t=[],n=0,r=!0;for(let i of e){if(!Ue(i))return;let e=zi(i.value);t[n++]=e,e!==0&&(r=!1)}return[r,t]}const Hi=t({create(e){let t=Bi(e.options[0]);return{NewExpression(n){if(!Fe(n,`Color3`))return;let r=n.arguments;if(r.length===0)return;let i=Vi(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,description:`Report new Color3(...) calls when one or more components are not numeric literals.`,type:`boolean`}},type:`object`}],type:`problem`}});function Ui(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=Ui(r,t);n=1-(1-n)*(1-e)}return n}function Gi(e,t){return Wi(e,t)>=.9}function Ki(e,t){return t.some(t=>Gi(e,t))}function qi(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 Ji=/\s+/gu;function Yi(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 Xi(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(Ji,``),r=0;for(let e of n){if(e.type===`string`){r+=Yi(t,e.pattern);continue}e.pattern.lastIndex=0;let n=t.match(e.pattern);n&&(r+=n.length)}return r}}}const Zi=/\s/u;function Qi(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(!Zi.test(r)&&r!==`*`&&r!==`/`)return 0}return 0}}}const $i=/[ \t(),{}]/u;function ea(e,t){let n=new Set(t);return{probability:e,scan(e){let t=e.split($i),r=0;for(let e of t)n.has(e)&&(r+=1);return r}}}const ta=`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(`.`),na=[`++`,`||`,`&&`,`===`,`?.`,`??`],ra=[`for(`,`if(`,`while(`,`catch(`,`switch(`,`try{`,`else{`,`this.`,`window.`,/;\s+\/\//u,`import '`,`import "`,`require(`],ia=[`}`,`;`,`{`];function aa(){return[Qi(.95,ia),ea(.7,na),ea(.3,ta),Xi(.95,ra),qi(.5)]}const oa=new Set([`BreakStatement`,`ContinueStatement`,`LabeledStatement`]);function sa(e){return oa.has(e.type)}function ca(e){return{comments:e,value:e.map(({value:e})=>e).join(`
6
+ `)}}const la=aa();function ua(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 da(e,t){let n=[],r=0,i=[],a=0;for(let o of e)if(o.type===`Block`)a>0&&(n[r++]=ca(i),i=[],a=0),n[r++]=ca([o]);else if(a===0)i[a++]=o;else{let e=i.at(-1);e&&ua(e,o,t)?i[a++]=o:(n[r++]=ca(i),i=[o],a=1)}return a>0&&(n[r]=ca(i)),n}const fa=/\{/gu,pa=/\}/gu;function ma(e){let t=(e.match(fa)??[]).length-(e.match(pa)??[]).length;return t>0?e+`}`.repeat(t):t<0?`{`.repeat(-t)+e:e}function ha(e){return Ki(la,e.split(`
7
+ `))}function ga(e){return e.type!==`ReturnStatement`&&e.type!==`ThrowStatement`?!1:e.argument?.type===`Identifier`}function _a(e){return e.type===`UnaryExpression`&&(e.operator===`-`||e.operator===`+`)}function va(e){return e.type===`Literal`&&(y(e.value)||b(e.value))}function ya(e){return x(e)&&y(e.type)}function ba(e){let t=[],n=0;for(let r of e)ya(r)&&(t[n++]=r);return t}function xa(e,t){if(e.type!==`ExpressionStatement`)return!1;let{expression:n}=e;return n.type===`Identifier`||n.type===`SequenceExpression`||_a(n)||va(n)||!t.trimEnd().endsWith(`;`)}function Sa(e,t){if(e.length!==1)return!1;let n=e.at(0);return n?sa(n)||ga(n)||xa(n,t):!1}const Ca=[/'return' statement is only valid inside a function/u];function wa(e){for(let t of e){let e=!1;for(let n of Ca)if(n.test(t.message)){e=!0;break}if(!e)return!1}return!0}function Ta(e){return(e.diagnostics.length===0||wa(e.diagnostics))&&e.program.body.length>0}function Ea(e,t){let n=o(t),r=u(e,{lang:{".jsx":`jsx`,".tsx":`tsx`}[n]??`js`,sourceType:`module`});if(Ta(r))return r;if(n!==`.tsx`&&n!==`.jsx`){let t=u(e,{lang:`tsx`,sourceType:`module`});if(Ta(t))return t}}function Da(e,t){if(!ha(e))return!1;let n=Ea(e,t);return n?!Sa(ba(n.program.body),e):!1}function Oa(e){let t=1;for(let n of e)n===`
8
+ `&&(t+=1);return t}const ka=t({create(e){let{maxLines:t=0}=e.options[0]??{};return{"Program:exit"(){let n=da(e.sourceCode.getAllComments(),e.sourceCode);for(let r of n){let n=r.value.trim();if(n===`}`||Oa(r.value)<=t||!Da(ma(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 B(e){return{constant:!0,value:e}}function Aa(){return{constant:!1}}function ja(e){return{constant:!0,value:e}}function Ma(){return{constant:!1}}function Na(e){let t=new Set;if(!e?.loopExitCalls)return t;for(let n of e.loopExitCalls)ne(n)&&t.add(n);return t}function Pa(e){let t=C(e);if(t.type===`Identifier`)return t.name;if(t.type!==`MemberExpression`)return;let n=Pa(t.object);if(n===void 0||n.length===0)return;let r=w(t);if(r!==void 0&&r.length!==0)return`${n}.${r}`}function Fa(e,t){if(t.size===0)return!1;let n=Pa(e.callee);return n===void 0||n.length===0?!1:t.has(n)}function Ia(e,t){return V(e.type===`SpreadElement`?e.argument:e,t)}function V(e,t){if(t.size===0)return!1;let n=C(e);switch(n.type){case`ArrayExpression`:return La(n,t);case`ArrowFunctionExpression`:case`ClassExpression`:case`FunctionExpression`:return!1;case`AssignmentExpression`:return V(n.right,t);case`AwaitExpression`:return V(n.argument,t);case`BinaryExpression`:return Ra(n,t);case`CallExpression`:return za(n,t);case`ConditionalExpression`:return Ba(n,t);case`LogicalExpression`:return Va(n,t);case`MemberExpression`:return Ha(n,t);case`NewExpression`:return Ua(n,t);case`SequenceExpression`:return n.expressions.some(e=>V(e,t));case`TaggedTemplateExpression`:return Wa(n,t);case`TemplateLiteral`:return n.expressions.some(e=>V(e,t));case`UnaryExpression`:case`UpdateExpression`:return V(n.argument,t);case`YieldExpression`:return n.argument?V(n.argument,t):!1;default:return!1}}function La(e,t){for(let n of e.elements)if(n!==null&&Ia(n,t))return!0;return!1}function Ra(e,t){let{left:n}=e;return n.type!==`PrivateIdentifier`&&V(n,t)?!0:V(e.right,t)}function za(e,t){return Fa(e,t)||V(e.callee,t)?!0:e.arguments.some(e=>Ia(e,t))}function Ba(e,t){return V(e.test,t)||V(e.consequent,t)||V(e.alternate,t)}function Va(e,t){return V(e.left,t)||V(e.right,t)}function Ha(e,t){return V(e.object,t)?!0:e.computed&&V(e.property,t)}function Ua(e,t){return V(e.callee,t)?!0:e.arguments.some(e=>Ia(e,t))}function Wa(e,t){return V(e.tag,t)?!0:e.quasi.expressions.some(e=>V(e,t))}function Ga(e){let t=C(e);switch(t.type){case`ArrayExpression`:return B([]);case`ArrowFunctionExpression`:case`ClassExpression`:case`FunctionExpression`:return B(!0);case`Identifier`:return t.name===`undefined`?B(void 0):t.name===`NaN`?B(NaN):t.name===`Infinity`?B(1/0):Aa();case`Literal`:return B(t.value);case`LogicalExpression`:return Ka(t);case`ObjectExpression`:return B({});case`SequenceExpression`:{let e=t.expressions.at(-1);return e?Ga(e):Aa()}case`TemplateLiteral`:return t.expressions.length>0?Aa():t.quasis.length===0?B(``):B(t.quasis[0]?.value.cooked??``);case`UnaryExpression`:return qa(t);default:return Aa()}}function Ka(e){let t=Ga(e.left);return t.constant?e.operator===`&&`?t.value===!0?Ga(e.right):B(t.value):e.operator===`||`?t.value===!0?B(t.value):Ga(e.right):t.value===void 0?Ga(e.right):B(t.value):Aa()}function qa(e){if(e.operator===`typeof`)return B(`string`);if(e.operator===`void`)return B(void 0);let t=Ga(e.argument);return t.constant?e.operator===`!`?B(!t.value):e.operator===`+`&&b(t.value)?B(t.value):e.operator===`-`&&b(t.value)?B(-t.value):e.operator===`~`&&b(t.value)?B(~t.value):Aa():Aa()}function H(e){let t=C(e);if(t.type===`ConditionalExpression`)return Ja(t);if(t.type===`LogicalExpression`)return Ya(t);if(t.type===`SequenceExpression`){let e=t.expressions.at(-1);return e?H(e):Ma()}let n=Ga(t);return n.constant?ja(!!n.value):Ma()}function Ja(e){let t=H(e.test);if(t.constant)return H(t.value===!0?e.consequent:e.alternate);let n=H(e.consequent),r=H(e.alternate);return n.constant&&r.constant&&n.value===r.value?n:Ma()}function Ya(e){let t=H(e.left);if(!t.constant)return Ma();if(e.operator===`&&`)return t.value?H(e.right):ja(!1);if(e.operator===`||`)return t.value===!0?ja(!0):H(e.right);let n=Ga(e.left);return n.constant?n.value===void 0?H(e.right):ja(!!n.value):Ma()}const Xa=new Set([`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`WhileStatement`]);function Za(e){return Xa.has(e.type)}function Qa(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 $a(e,t){if(e.label)return Qa(e.label.name,e.parent)===t;let n=e.parent;for(;n!==null;){if(n.type===`Program`||P(n)||n.type===`SwitchStatement`)return!1;if(Za(n))return n===t;n=n.parent}return!1}function eo(e,t){return e?e.type===`VariableDeclaration`?e.declarations.some(e=>e.init?V(e.init,t):!1):V(e,t):!1}function to(e,t){switch(e.type){case`DoWhileStatement`:case`WhileStatement`:return V(e.test,t);case`ForInStatement`:case`ForOfStatement`:return V(e.right,t);case`ForStatement`:return!!(eo(e.init,t)||e.test&&V(e.test,t)||e.update&&V(e.update,t));default:return!1}}function U(e,t,n){switch(e.type){case`BlockStatement`:return e.body.some(e=>U(e,t,n));case`BreakStatement`:return $a(e,t);case`DoWhileStatement`:case`WhileStatement`:return no(e,t,n);case`ExpressionStatement`:return V(e.expression,n);case`ForInStatement`:case`ForOfStatement`:return ro(e,t,n);case`ForStatement`:return io(e,t,n);case`IfStatement`:return ao(e,t,n);case`LabeledStatement`:return U(e.body,t,n);case`ReturnStatement`:return!0;case`SwitchStatement`:return e.cases.some(e=>e.consequent.some(e=>U(e,t,n)));case`TryStatement`:return oo(e,t,n);case`VariableDeclaration`:return e.declarations.some(e=>e.init?V(e.init,n):!1);case`WithStatement`:return so(e,t,n);default:return!1}}function no(e,t,n){return V(e.test,n)?!0:U(e.body,t,n)}function ro(e,t,n){return V(e.right,n)?!0:U(e.body,t,n)}function io(e,t,n){return eo(e.init,n)||e.test&&V(e.test,n)||e.update&&V(e.update,n)?!0:U(e.body,t,n)}function ao(e,t,n){return U(e.consequent,t,n)?!0:e.alternate?U(e.alternate,t,n):!1}function oo(e,t,n){return!!(U(e.block,t,n)||e.handler&&U(e.handler.body,t,n)||e.finalizer&&U(e.finalizer,t,n))}function so(e,t,n){return V(e.object,n)?!0:U(e.body,t,n)}function co(e,t,n){return e.constant?!e.value||!to(t,n)&&!U(t.body,t,n):!1}const lo=t({create(e){let t=e.options?.[0],n=Na(typeof t==`object`&&t?t:void 0);function r(t){H(t).constant&&e.report({messageId:`unexpected`,node:t})}function i(t,r){co(H(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:{description:`Call expressions that count as intentional loop exits inside constant loops.`,items:{minLength:1,type:`string`},type:`array`}},type:`object`}],type:`problem`}});function uo(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 fo=uo({alternative:`throw`,message:`Replace {{name}}(...) with {{alternative}}.`,messageId:`noError`,name:`error`});function po(e){let t=new Set;if(!e?.eventsImportPaths)return t;for(let n of e.eventsImportPaths)ne(n)&&t.add(n);return t}function mo(e){switch(e.type){case`ChainExpression`:case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSTypeAssertion`:return mo(e.expression);default:return e}}function ho(e){let t=mo(e);if(t.type===`Identifier`)return t.name;if(t.type===`MemberExpression`)return ho(t.object)}function go(e,t){let n=mo(e.callee);if(n.type!==`MemberExpression`||w(n)!==`connect`)return;let r=ho(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 _o(e,t){let n=mo(e.callee);if(n.type!==`MemberExpression`)return!1;let r=ho(n);return r!==void 0&&t.has(r)}function vo(e,t){return e.has(t)?!1:(e.add(t),!0)}function yo(e,t){return vo(t.playerValues,e)}function bo(e,t){return vo(t.playerContainers,e)}function W(e,t){switch(e.type){case`ArrayPattern`:{let n=!1;for(let r of e.elements)r&&(n=W(r,t)||n);return n}case`AssignmentPattern`:return W(e.left,t);case`Identifier`:return yo(e.name,t);case`ObjectPattern`:{let n=!1;for(let r of e.properties){if(r.type===`RestElement`){n=W(r.argument,t)||n;continue}n=W(r.value,t)||n}return n}case`RestElement`:return W(e.argument,t);default:return!1}}function xo(e,t,n){return t===0?!1:e.type===`Identifier`?t===2?yo(e.name,n):bo(e.name,n):W(e,n)}function So(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?yo(e.name,n):bo(e.name,n):W(e,n):!1}function G(e,t){let n=mo(e);switch(n.type){case`ArrayExpression`:return Co(n,t);case`AssignmentExpression`:return G(n.right,t);case`ConditionalExpression`:return wo(n,t);case`Identifier`:return t.playerValues.has(n.name)?2:+!!t.playerContainers.has(n.name);case`MemberExpression`:return To(n,t);case`ObjectExpression`:return Eo(n,t);case`SequenceExpression`:{let e=n.expressions.at(-1);return e===void 0?0:G(e,t)}default:return 0}}function Co(e,t){for(let n of e.elements)if(n!==null&&G(n.type===`SpreadElement`?n.argument:n,t)!==0)return 1;return 0}function wo(e,t){let n=G(e.consequent,t);return n===G(e.alternate,t)?n:0}function To(e,t){return G(e.object,t)===1?2:0}function Eo(e,t){for(let n of e.properties)if(G(n.type===`SpreadElement`?n.argument:n.value,t)!==0)return 1;return 0}function Do(e,t){if(e.type===`TSParameterProperty`){W(e.parameter,t);return}W(e,t)}const Oo=t({create(e){let t=po(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=G(e.right,t);n!==0&&So(e.left,n,t)},CallExpression(t){let i=go(t,n);if(i){let e={playerContainers:new Set,playerValues:new Set},[t]=i.params;t&&Do(t,e),r.set(i,e)}let o=a();if(!(o&&_o(t,n)))return;let[s]=t.arguments;!s||s.type===`SpreadElement`||G(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){let{name:e}=t.local;if(t.type===`ImportDefaultSpecifier`){e===`Events`&&n.add(e);continue}if(t.type===`ImportSpecifier`){if(t.imported.type===`Identifier`&&t.imported.name===`Events`){n.add(e);continue}t.imported.type===`Literal`&&t.imported.value===`Events`&&n.add(e)}}},VariableDeclarator(e){let t=a();if(!(t&&e.init))return;let n=G(e.init,t);n!==0&&xo(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:{description:`Import paths that identify Events objects whose callbacks should be checked.`,items:{minLength:1,type:`string`},type:`array`}},required:[`eventsImportPaths`],type:`object`}],type:`problem`}}),ko=t({create(e){return{CallExpression(t){let n=C(t.callee);if(n.type!==`MemberExpression`||w(n)!==`map`)return;let r=C(n.object);if(r.type!==`CallExpression`)return;let i=C(r.callee);i.type===`MemberExpression`&&w(i)===`filter`&&e.report({messageId:`avoidFilterMapChain`,node:t})}}},meta:{docs:{description:`Disallow map(...) directly after filter(...).`},messages:{avoidFilterMapChain:`Do not chain map(...) directly after filter(...). Combine both operations in a single loop.`},schema:[],type:`suggestion`}}),Ao=/^[A-Z]/u;function K(e){return Ao.test(e)}function jo(e){return e.type===`FunctionDeclaration`&&e.id!==null&&K(e.id.name)}function Mo(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 No({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 Fo(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 Io(e){if(e.type===`BinaryExpression`)switch(e.operator){case`%`:case`*`:case`**`:case`+`:case`-`:case`/`:return Io(e.left)&&Io(e.right);default:return!1}return e.type===`Identifier`||e.type===`Literal`?!0:e.type===`MemberExpression`?!e.computed&&Io(e.object):e.type===`ParenthesizedExpression`?Io(e.expression):e.type===`TemplateLiteral`?e.expressions.length===0:e.type===`UnaryExpression`&&Io(e.argument)}function Lo(e,t){return e?.type===`CallExpression`&&e.callee.type===`Identifier`&&(y(t)?e.callee.name===t:t.has(e.callee.name))}function Ro(e){return e.type===`VariableDeclarator`&&e.id.type===`Identifier`&&K(e.id.name)&&e.init!==null&&(e.init.type===`ArrowFunctionExpression`||e.init.type===`FunctionExpression`)}function zo(e){return e.loc.end.line-e.loc.start.line+1}function Bo(e){if(!(e.type!==`FunctionDeclaration`||!jo(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 Vo(e){if(e.type!==`VariableDeclarator`||!Ro(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 Ho=t({create(e){function t(t,n,r){let i=zo(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=Vo(e);n!==void 0&&t(n.nameNode,n.name,n.body)}}},meta:{docs:{description:`Report React components whose bodies exceed 300 lines.`,recommended:!0},messages:{giantComponent:`Component "{{name}}" is {{lineCount}} lines — consider breaking it into smaller focused components`},type:`problem`}}),Uo=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 Go(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 Ko(e){if(!Ve(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 qo(e,t){return t?.type===`TSLiteralType`}function Jo(e,t){if(!Ve(e)||e.body===null)return{maxJsxDepth:0,nullLiterals:[],stateHookCount:0};let n=0,r=0,i=[],a=0;return Lr(e.body,o=>{if(!(Uo.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=R(o);e!==void 0&&e.length>0&&t.has(e)&&(r+=1)}o.type===`Literal`&&o.value===null&&!qo(o,o.parent)&&i.push(o)}}),{maxJsxDepth:n,nullLiterals:i,stateHookCount:r}}function Yo(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 Xo=t({create(e){let t=Yo(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=Ko(a);b(l)&&l>t.maxDestructuredProps&&e.report({data:{count:String(l),max:String(t.maxDestructuredProps),name:o},messageId:`tooManyProps`,node:a});let u=Jo(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(!No(e))return;let[t]=e.arguments;if(!t||t.type!==`FunctionExpression`&&t.type!==`ArrowFunctionExpression`)return;let n=Go(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:{default:[],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 Zo({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 Qo=t({create(e){let t=0;function n(){t+=1}function r(){--t}return{ArrowFunctionExpression:n,"ArrowFunctionExpression:exit":r,CallExpression(n){t===0||!Zo(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 $o(e){let t=C(e);if(t.type!==`CallExpression`)return!1;let n=C(t.callee);if(n.type!==`MemberExpression`||n.computed)return!1;let r=C(n.object);return r.type===`Identifier`&&r.name===`Ianitor`&&n.property.type===`Identifier`}function es(e){for(let{node:t}of e.defs){if(t.type!==`VariableDeclarator`)continue;let{init:e}=t;if(e!==null&&$o(e))return!0}return!1}function ts(e,t){let n=C(e.callee);if(n.type===`CallExpression`)return $o(n);if(n.type===`Identifier`){let r=T(t.getScope(e),n.name);return r!==void 0&&es(r)}return!1}function ns(e){let t=!1;for(let n of e.properties){if(n.type!==`Property`||n.key.type!==`Identifier`)continue;let{name:e}=n.key;if(e===`error`||e===`value`)return!1;e===`success`&&(t=!0)}return t}function rs(e){for(let t of e.properties)if(t.type===`Property`&&t.key.type===`Identifier`&&t.key.name===`success`)return t.key}const is=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=C(i);if(o.type===`CallExpression`&&a.name===`success`){ts(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=C(a);if(o.type===`CallExpression`){if(i.type===`Identifier`&&$o(o)){n.add(i.name);return}if(i.type===`ObjectPattern`&&ts(o,t)&&ns(i)){let t=rs(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`}}),as=[`binding`];function os(e){if(e.type===`Identifier`)return e.name;if(e.type===`AssignmentPattern`&&e.left.type===`Identifier`)return e.left.name}function ss({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 cs(e){if(e.params.length!==1)return;let[t]=e.params;return t===void 0?void 0:os(t)}function ls(e){if(e.type===`ArrowFunctionExpression`){let t=cs(e);if(t===void 0)return!1;let{body:n}=e;switch(n.type){case`BlockStatement`:return ss(n,t);case`Identifier`:return n.name===t;default:return!1}}if(e.type===`FunctionExpression`){let t=cs(e);return t===void 0||e.body===null?!1:ss(e.body,t)}return!1}function us(e){return R(e)===`joinBindings`}function ds(e){for(let t of e.defs){if(t.node.type!==`VariableDeclarator`)continue;let{init:e}=t.node;if(e?.type===`CallExpression`&&(R(e)===`useBinding`||us(e)||e.callee.type===`MemberExpression`&&w(e.callee)===`map`))return!0}return!1}function fs(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=T(e.getScope(t),t.name);if(i!==void 0&&ds(i))return!0}return t.type===`CallExpression`&&(t.callee.type===`MemberExpression`&&w(t.callee)===`map`||us(t))}const ps=t({create(e){let{sourceCode:t}=e,[n]=e.options,r=n?.bindingPatterns??as;return{CallExpression(n){let{callee:i}=n;if(i.type!==`MemberExpression`||i.computed||i.property.type!==`Identifier`||w(i)!==`map`||n.arguments.length!==1)return;let[a]=n.arguments;if(a===void 0||a.type===`SpreadElement`||!ls(a))return;let o=fs(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:[...as],description:`Variable name patterns to recognize as Bindings (case insensitive)`,items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}});function ms(e){let{parent:t}=e;return t?.type===`ExpressionStatement`||t?.type===`ForStatement`&&t.update===e}const hs=t({create(e){let[t]=e.options,n=wr(t)&&t.allowAutofix,{sourceCode:r}=e;return{UpdateExpression(t){if(!ms(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 and for-loop update clauses.",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,description:`Allow the fixer to replace standalone ++ and -- statements and for-loop updates.`,type:`boolean`}},type:`object`}],type:`suggestion`}});function gs(e){return e.name.type===`JSXIdentifier`?e.name.name:void 0}function _s(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 vs=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=gs(r);if(i===void 0||!t.has(i))return;let a=_s(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&&Mo(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`}}),ys={checkPrivate:!0,checkProtected:!0,checkPublic:!0};function bs(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}:ys}function xs(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 Ss(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)&&Cs(e[n],t))return!0;return!1}function Cs(e,t){if(Array.isArray(e)){for(let n of e)if(D(n)&&Ss(n,t))return!0;return!1}return D(e)&&Ss(e,t)}function ws({value:e}){return e.type===`FunctionExpression`&&Ss(e,new WeakSet)}function Ts(e){return e.key.type===`Identifier`?e.key.name:`unknown`}const Es=t({create(e){let t=bs(e.options[0]);return{MethodDefinition(n){!xs(n,t)||ws(n)||e.report({data:{methodName:Ts(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`}}),Ds=[`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`],Os=new Set([`!`,`+`,`-`,`typeof`,`void`,`~`]),ks=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 As(e){return ks.has(e.type)}function q(e){return e.type===`module`||e.type===`global`}function J(e){for(let t of e.defs)if(t.type===`ImportBinding`)return!0;return!1}function js(e){return e.type===`Variable`}function Ms(e){if(!js(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 Ns(e,t){let n=T(e.getScope(t),t.name);if(!(n===void 0||!q(n.scope)))for(let e of n.defs){let t=Ms(e);if(t!==void 0)return t}}function Ps(e,t){let n=T(e.getScope(t),t.name);if(n!==void 0)for(let e of n.defs){let t=Ms(e);if(t!==void 0)return t}}function Fs(e,t,n){let r=C(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=Ps(e,r);return i!==void 0&&Fs(e,i,n)}function Is(e,t,n,r){return t.type===`Identifier`?!0:As(t)?Y(e,t,n,r):!1}function Ls(e){let t=C(e);for(;t.type===`MemberExpression`;)t=C(t.object);return t.type===`Identifier`?t.name:void 0}function Rs(e,t,n,r){if(r.staticCallsRequireFactories===!0){let e=Ls(t);if(e===void 0||!r.staticGlobalFactories.has(e))return!1}let i=C(t);return i.type===`Identifier`?Bs(e,i,n,r):i.type!==`MemberExpression`||!Y(e,i.object,n,r)?!1:i.computed?Y(e,i.property,n,r):i.property.type===`Identifier`}function zs(e,t,n,r,i){return Rs(e,n,r,i)?t.every(t=>t.type!==`SpreadElement`&&Y(e,t,r,i)):!1}function Y(e,t,n,r){let i=C(t);if(n.has(i))return!1;switch(n.add(i),i.type){case`ArrayExpression`:return Us(e,i,n,r);case`BinaryExpression`:case`LogicalExpression`:return As(i.left)?Y(e,i.left,n,r)&&Y(e,i.right,n,r):!1;case`CallExpression`:return zs(e,i.arguments,i.callee,n,r);case`ChainExpression`:return Y(e,i.expression,n,r);case`ConditionalExpression`:return Y(e,i.test,n,r)&&Y(e,i.consequent,n,r)&&Y(e,i.alternate,n,r);case`Identifier`:return Bs(e,i,n,r);case`Literal`:return!0;case`MemberExpression`:return Y(e,i.object,n,r)&&(!i.computed||Is(e,i.property,n,r));case`NewExpression`:return zs(e,i.arguments,i.callee,n,r);case`ObjectExpression`:return Hs(e,i,n,r);case`SequenceExpression`:return i.expressions.length>0&&i.expressions.every(t=>Y(e,t,n,r));case`TemplateLiteral`:return i.expressions.length===0;case`UnaryExpression`:return Os.has(i.operator)&&Y(e,i.argument,n,r);default:return!1}}function Bs(e,t,n,r){let i=T(e.getScope(t),t.name);if(i===void 0)return r.staticGlobalFactories.has(t.name);if(!q(i.scope))return!1;if(J(i))return!0;for(let t of i.defs){let i=Ms(t);if(i!==void 0&&Y(e,i,n,r))return!0}return!1}function Vs(e){return e.type!==`PrivateIdentifier`&&e.type!==`Identifier`}function Hs(e,t,n,r){for(let i of t.properties)if(i.type!==`Property`||i.kind!==`init`||i.computed&&Vs(i.key)&&!Y(e,i.key,n,r)||!Y(e,i.value,n,r))return!1;return!0}function Us(e,{elements:t},n,r){for(let i of t)if(i===null||i.type===`SpreadElement`||!Y(e,i,n,r))return!1;return!0}function Ws(e){return e.type===`JSXIdentifier`?e.name:e.name.name}function Gs(e){return e===`nativeProperties`||e.endsWith(`NativeProperties`)}function Ks(e){if(e.type===`Variable`&&e.node.type===`VariableDeclarator`)return e.node.init??void 0}function qs(e){let t=C(e);for(;t.type===`MemberExpression`;){let e=C(t.object);if(e.type===`Identifier`)return e;if(e.type!==`MemberExpression`)return;t=e}return t.type===`Identifier`?t:void 0}function Js(e,t){let n=C(t);if(n.type===`ObjectExpression`)return!0;let r=qs(n);if(r===void 0)return!1;let i=T(e.getScope(r),r.name);return i===void 0?!1:J(i)||q(i.scope)}function Ys(e,t,n){let r=C(t);if(n.has(r))return;if(n.add(r),r.type===`ObjectExpression`)return r;if(r.type!==`Identifier`)return;let i=T(e.getScope(r),r.name);if(!(i===void 0||q(i.scope)))for(let t of i.defs){let r=Ks(t);if(r===void 0)continue;let i=Ys(e,r,n);if(i!==void 0)return i}}const Xs=t({create(e){let{sourceCode:t}=e;function n(n,r){for(let i of n.properties){if(i.type!==`SpreadElement`||!Js(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||!Gs(r))return;let{value:i}=e;if(i?.type!==`JSXExpressionContainer`)return;let{expression:a}=i;if(a.type===`JSXEmptyExpression`)return;let o=Ys(t,a,new Set);o!==void 0&&n(o,{messageId:`noNativePropertiesSpread`,propertyName:r})},JSXSpreadAttribute(e){let r=Ys(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 Zs(e){return e.parent.type===`ExpressionStatement`?!0:e.parent.type!==`UnaryExpression`||e.parent.operator!==`void`?!1:e.parent.parent.type===`ExpressionStatement`}function Qs(e,t,n,r){if(yn(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 $s=new Set([`Instance`]);function ec(e){let t=x(e)&&S(e.constructors)?new Set(e.constructors):$s,n=x(e)&&e.environment===`standard`?`standard`:`roblox-ts`,r=x(e)?e.maxHelperTraceDepth:void 0;return{constructors:t,environment:n,maxHelperTraceDepth:ie(r)&&Number.isInteger(r)&&r>=0?r:4}}function tc(e){return e?.type===`CallExpression`}function nc(e,t,n){let r=e.parent;for(;r!==null;){if(Pe(r)){let{parent:e}=r;if(tc(e)&&e.arguments[0]===r){if(!fe(e,t,n)){r=e.parent;continue}return!0}}r=r.parent}return!1}function rc(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=ic(a,t,n,r,i);for(let t of e)o.add(t)}return i.delete(e),r.set(e,o),o}function ic(e,t,n,r,i){if(e.type===`FunctionName`)return ac(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=C(a.init);if(Pe(o))return oc(o,n);if(o.type!==`Identifier`)return new Set;let s=T(t.getScope(o),o.name);return s===void 0?new Set:rc(s,t,n,r,i)}function ac(e,t){let{node:n}=e;return n.type===`FunctionDeclaration`?oc(n,t):new Set}function oc(e,t){let n=t.get(e)?.id;return n===void 0?new Set:new Set([n])}function sc(e,t,n,r){let i=T(t.getScope(e),e.name);return i===void 0?new Set:rc(i,t,n,r,new Set)}function cc(e,t,n,r){for(let i of t.values())for(let t of i.callIdentifiers){let a=sc(t,e,n,r);for(let e of a)i.callees.add(e)}}function lc(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 uc(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=sc(t,e,r,i);for(let e of n)a.add(e)}return a}const dc=t({create(e){let t=ec(e.options[0]);if(t.constructors.size===0)return{};let n=_n(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}Pe(t)&&u.push(t)}},FunctionDeclaration:h,"FunctionDeclaration:exit":g,FunctionExpression:h,"FunctionExpression:exit":g,ImportDeclaration(e){Qs(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:nc(e,r,i),node:e})},"Program:exit"(){cc(e.sourceCode,o,a,d);let n=lc(uc(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:{default:[...$s],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`}}),fc=uo({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 pc(e,t){let n=t;for(;n;){if(n.set.has(e))return!0;n=n.upper}return!1}function mc(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 hc=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=pc(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=mc(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`}]}}),gc=new m({extensions:[`.ts`,`.tsx`,`.js`,`.jsx`,`.mjs`,`.cjs`,`.json`,`.node`]}),_c={found:!1};function vc(e,t){if(!e.startsWith(`.`))return _c;let{path:n}=gc.sync(a(t),e);return n===void 0||n===``?_c:{found:!0,path:n}}const yc=`uiaspectratioconstraint`,bc=new Set([`ButtonSpritesheet`,`GenericSpritesheet`,`LabelSpritesheet`]);function xc({openingElement:e}){let{name:t}=e;return t.type===`JSXIdentifier`?t.name:void 0}function Sc(e){let t=!1;return Lr(e,e=>{t||e.type===`JSXElement`&&xc(e)===yc&&(t=!0)}),t}function Cc(e){if(e.type===`FunctionDeclaration`)return e.id?.name;if(Pe(e)){let{parent:t}=e;if(t.type===`VariableDeclarator`&&t.id.type===`Identifier`)return t.id.name}}function wc(e){if(e.body.type!==`BlockStatement`)return C(e.body)}function Tc(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 Ec=new Map;function Dc(e,t){if(!e.startsWith(`.`))return!1;let n=vc(e,t);if(!n.found)return!1;let r=Ec.get(n.path);if(r!==void 0)return r;try{let e=f(n.path,`utf8`).includes(`<uiaspectratioconstraint`);return Ec.set(n.path,e),e}catch{return Ec.set(n.path,!1),!1}}function Oc(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 kc(e){return e.type===`JSXElement`?xc(e)===yc:e.type===`JSXExpressionContainer`&&e.expression.type===`Identifier`&&e.expression.name===`UI_ASPECT_RATIO_CONSTRAINT`}function Ac(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||!J(i))return!1;let a=Tc(i);return a!==void 0&&(Dc(a,r)||bc.has(e))}const jc=t({create(e){let{filename:t,sourceCode:n}=e,r=new Set,i=[],a;return{ArrowFunctionExpression(e){let t=Cc(e),n=wc(e);t===void 0||n===void 0||n.type!==`JSXElement`&&n.type!==`JSXFragment`||Sc(n)&&r.add(t)},FunctionDeclaration(e){let t=Cc(e);if(t===void 0||e.body?.body.length!==1)return;let[n]=e.body.body;n?.type===`ReturnStatement`&&n.argument!==null&&Sc(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=xc(n);if(i!==void 0&&!(!Ac(i,r,o,t)||Oc(n)))for(let t of n.children)kc(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`}}),Mc=new Set([`JSXElement`,`ReactElement`,`ReactNode`]),Nc=new Set([`ChainExpression`,`ParenthesizedExpression`,`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]),Pc=/^use[A-Z]/u;function Fc(e){return Pc.test(e)}function Ic(e){if(e?.type!==`TSTypeReference`)return!1;let{typeName:t}=e;return t.type===`Identifier`?Mc.has(t.name):t.type===`TSQualifiedName`&&Mc.has(t.right.name)}function Lc({returnType:e}){return e?.typeAnnotation??void 0}function Rc(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 Rr(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 zc({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 Vc(e){return e.type===`Identifier`?e.name:void 0}function Hc(e){let t=e;for(;t!==void 0&&Nc.has(t.type);)t=t.parent??void 0;return t}function Uc(e){let t=Hc(e.parent??void 0);return t?.type===`Property`&&Gc(t.value)===e}function Wc(e){let t=Hc(e.parent??void 0);return t?.type===`CallExpression`&&t.arguments.some(t=>Gc(t)===e)}function Gc(e){let t=e;for(;Kc(t);)t=t.expression;return t}function Kc(e){return Nc.has(e.type)}function qc(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 Jc(e,t){let n=qc(t,e);if(n===void 0)return!1;let r=!1;for(let e of n.references)if(!e.isWrite()&&(r=!0,!(Uc(e.identifier)||Wc(e.identifier))))return!1;return r}const Yc=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&&K(a)){--t;return}if(t>0||zc(r)||i.type!==`VariableDeclarator`)return;let o=Vc(i.id);if(o===void 0||K(o)||Fc(o)||Jc(r,e.sourceCode))return;let s=ce(i.id),c=s!==void 0&&Ic(s.typeAnnotation),l=Ic(Lc(r));(c||l||Rc(r))&&n(i,o)}return{ArrowFunctionExpression(e){let n=Bc(e);n!==void 0&&K(n)&&(t+=1)},"ArrowFunctionExpression:exit":r,FunctionDeclaration({id:e}){e!==null&&K(e.name)&&(t+=1)},"FunctionDeclaration:exit"(r){if(r.id===null)return;let i=r.id.name;if(K(i)){--t;return}t>0||Fc(i)||Jc(r,e.sourceCode)||(Ic(Lc(r))||Rc(r))&&n(r,i)},FunctionExpression(e){let n=Bc(e);n!==void 0&&K(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`}}),Xc=h({"message?":`string | undefined`,object:`string`,properties:h(`string[]`).readonly()}).readonly(),Zc=h({"allowFiles?":h(`string[]`).readonly().or(`undefined`),"checkComputed?":`boolean | undefined`,restrictions:Xc.array().readonly()}).readonly(),Qc={matchBase:!0},$c={dot:!0,magicalBraces:!0};function el(e){return e.replaceAll(`\\`,`/`)}function tl(e){let t=el(e);if(!s(e))return[t];let n=el(l(process.cwd(),e));return n.length===0||n.startsWith(`..`)?[t]:[t,n]}function nl(e,t){let n=new g(e,t),r=n.hasMagic();return{hasMagic:r,matches:r?e=>n.match(e):t=>t===e}}function rl(e){let t=new Set,n=[],r=0;for(let i of e){let e=nl(i,$c);e.hasMagic?n[r++]=e.matches:t.add(i)}return e=>t.has(e)||n.some(t=>t(e))}function il(e){return{matchesObject:nl(e.object,$c).matches,matchesProperty:rl(e.properties),message:e.message}}function al(e){let[t]=e.options;if(!Zc.allows(t))return{checkComputed:!0,isAllowedFile:!1,restrictions:[]};let{allowFiles:n,checkComputed:r,restrictions:i}=t,a=tl(e.filename),o=n?.some(e=>a.some(t=>_(t,e,Qc)))??!1;return{checkComputed:r??!0,isAllowedFile:o,restrictions:i.map(il)}}const ol=t({create(e){let{checkComputed:t,isAllowedFile:n,restrictions:r}=al(e);function i(i,a){if(n||!N(i)||i.computed&&!t||i.object.type!==`Identifier`)return;let o=w(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`}}),sl=/\.spec\.(?:ts|tsx)$/u,cl=t({createOnce(e){return{Program(t){let{filename:n}=e;n&&sl.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`}}),ll=`Fragment`;function ul(e){return e.parent?.type===`ImportDeclaration`?e.parent:void 0}function dl(e,t){if(e.type!==`ImportBinding`)return!1;let n=ul(e.node);return n!==void 0&&t.has(n.source.value)}function fl(e,t){if(e===void 0)return!1;for(let n of e.defs)if(dl(n,t)&&(n.node.type===`ImportDefaultSpecifier`||n.node.type===`ImportNamespaceSpecifier`))return!0;return!1}function pl(e,t,n){if(e===void 0)return!1;for(let r of e.defs)if(dl(r,n)&&r.node.type===`ImportSpecifier`&&pe(r.node)===t)return!0;return!1}function ml(e,t,n){let{callee:r}=t;return r.type===`Identifier`?pl(T(e.getScope(r),r.name),`createElement`,n):r.type!==`MemberExpression`||r.computed||w(r)!==`createElement`||r.object.type!==`Identifier`?!1:fl(T(e.getScope(r.object),r.object.name),n)}function hl(e){return e.type===`Literal`&&y(e.value)}function gl(e,t){if(J(e))return O(t)||t===ll;if(!q(e.scope)||!O(t)&&t!==ll)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&&(Pe(e)||e.type===`ClassExpression`))return!0}return!1}function _l(e,t,n){let r=T(e.getScope(t),t.name);return pl(r,ll,n)?!0:r!==void 0&&gl(r,t.name)}function vl(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 yl(e){if(e.computed)return;let t=w(e);if(t!==void 0)return e.object.type===`MemberExpression`&&yl(e.object)===void 0?void 0:t}function bl(e,t,n){let r=vl(t);if(r===void 0)return!1;let i=yl(t);if(i===void 0)return!1;let a=T(e.getScope(r),r.name);return fl(a,n)&&i===ll?!0:a===void 0||!J(a)?!1:O(i)}function xl(e,t,n){return t.type===`SpreadElement`?!1:hl(t)?!0:t.type===`Identifier`?_l(e,t,n):t.type===`MemberExpression`&&bl(e,t,n)}const Sl=t({create(e){let t=vn(e.options[0]),{sourceCode:n}=e;return{CallExpression(r){if(!ml(n,r,t))return;let[i]=r.arguments;i!==void 0&&xl(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:pn},type:`object`}],type:`problem`}});function Cl(e,t){let n=C(t);if(n.type!==`CallExpression`||n.optional)return!1;let r=C(n.callee);if(r.type!==`MemberExpression`||r.optional||w(r)!==`create`)return!1;let i=C(r.object);return i.type!==`Identifier`||i.name!==`table`?!1:!E(e,i,`table`)}function wl(e,t){let n=C(t);if(n.type!==`NewExpression`||n.arguments.length!==1&&n.arguments.length!==2)return!1;let r=C(n.callee);return r.type!==`Identifier`||r.name!==`Array`?!1:!E(e,r,`Array`)}const Tl=t({create(e){return{CallExpression(t){if(t.optional)return;let n=C(t.callee);if(n.type!==`MemberExpression`||n.optional||w(n)!==`map`)return;let r=C(n.object);(Cl(e.sourceCode,r)||wl(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 El(e){let{callee:t}=e;if(t.type!==`MemberExpression`||w(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:w(n)===`delay`}const Dl=t({createOnce(e){return{CallExpression(t){if(El(t)){e.report({messageId:`noPromiseDelayAwait`,node:t});return}let{callee:n}=t;n.type===`MemberExpression`&&n.object.type===`Identifier`&&n.object.name===`task`&&w(n)===`wait`&&e.report({messageId:`noTaskWait`,node:t})}}},meta:{docs:{description:`Disallow task.wait() and Promise.delay(...).await() 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`}}),Ol=t({createOnce(e){return{JSXAttribute(t){t.name.type!==`JSXIdentifier`||!t.name.name.startsWith(`_`)||e.report({data:{propName:t.name.name},messageId:`noUnderscoreReactProperty`,node:t.name})}}},meta:{docs:{description:`Ban React property names that begin with an underscore in JSX.`},messages:{noUnderscoreReactProperty:`React prop '{{propName}}' starts with '_'. Remove the leading underscore from the prop name.`},schema:[],type:`problem`}}),kl=/@(?:link|linkcode|linkplain|see)\s+\{?(?<identifier>\w+)/gu,Al=/\{@(?:link|linkcode|linkplain|see)\s+(?<identifier>\w+)/gu,jl=/[@{](?:type|typedef|param|returns?|template|augments|extends|implements)\s+(?<annotation>[^}]*)/gu,Ml=/\b(?<identifier>\w+)\b/gu;function Nl(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`&&(Fl(n.value,t),Il(n.value,t));return t}function Fl(e,t){for(let n of[kl,Al])for(let r of e.matchAll(n)){let e=r.groups?.identifier;e!==void 0&&t.add(e)}}function Il(e,t){for(let n of e.matchAll(jl)){let e=n.groups?.annotation;if(e!==void 0)for(let n of e.matchAll(Ml)){let e=n.groups?.identifier;e!==void 0&&t.add(e)}}}function Ll(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 Rl=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)Nl(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 Ll(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`}}),zl=t({create(e){let t=new Set,n=new Set,r=vn(e.options[0]);return{CallExpression(r){fe(r,t,n)&&Zs(r)&&e.report({messageId:`unusedUseMemo`,node:r})},ImportDeclaration(e){Qs(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`,description:`The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.`,enum:[`roblox-ts`,`standard`],type:`string`}},type:`object`}],type:`problem`}});function Bl(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 Vl=t({create(e){return{CallExpression(t){if(!Lo(t,`useMemo`))return;let n=Ir(t);if(n===void 0)return;let r=Bl(n);r===void 0||!Io(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`}}),Hl=/^[A-Z][A-Z0-9_]*$/u,Ul={staticGlobalFactories:new Set(Ds)},Wl=[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 Gl(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 Kl(e){return Pe(e)||e.type===`ClassExpression`}const ql=new Set([`ArrayExpression`,`ObjectExpression`,`JSXElement`,`JSXFragment`]);function Jl(e,t,n){if(ql.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 Yl(e){return e.type===`Program`||e.type===`BlockStatement`}function Xl(e){switch(e.type){case`ChainExpression`:case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:return Xl(e.expression);case`Identifier`:return e.name;case`MemberExpression`:return Xl(e.object);default:return}}function X(e,t){switch(e.type){case`ArrayExpression`:return Zl(e,t);case`BinaryExpression`:case`LogicalExpression`:return Ql(e,t);case`CallExpression`:case`NewExpression`:return $l(e,t);case`ChainExpression`:return X(e.expression,t);case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:return X(e.expression,t);case`ConditionalExpression`:return eu(e,t);case`MemberExpression`:return tu(e,t);case`ObjectExpression`:return nu(e,t);case`SequenceExpression`:return!1;case`SpreadElement`:return!1;case`TemplateLiteral`:return ru(e.expressions,t);case`UnaryExpression`:return X(e.argument,t);default:return!0}}function Zl(e,t){for(let n of e.elements)if(n===null||!X(n,t))return!1;return!0}function Ql(e,t){return X(e.left,t)&&X(e.right,t)}function $l(e,t){let n=Xl(e.callee);return n===void 0||!t.has(n)||!X(e.callee,t)?!1:ru(e.arguments,t)}function eu(e,t){return X(e.test,t)&&X(e.consequent,t)&&X(e.alternate,t)}function tu(e,t){return X(e.object,t)&&(!e.computed||X(e.property,t))}function nu(e,t){for(let n of e.properties)if(n.type!==`Property`||n.computed&&!X(n.key,t)||!X(n.value,t))return!1;return!0}function ru(e,t){for(let n of e)if(!X(n,t))return!1;return!0}function iu(e,t){return t.type===`Literal`||Y(e,t,new Set,Ul)&&X(t,Ul.staticGlobalFactories)}function au(e,t){let n=t;for(;n.type===`ParenthesizedExpression`;)n=n.expression;return e.getText(n)}function ou(e,t){let{parent:n}=e;if(n==null||!Yl(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 su(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 cu(e){let t=e.parent,n=e;for(;t!=null;){if(k(t)&&t.init===n)return t;n=t,t=t.parent}}const lu=t({create(e){let{sourceCode:t}=e,[n]=e.options,r=(n?.ignoreCallPatterns??Wl).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(!Hl.test(i))return;let[o]=n.defs;if(o?.type!==`Variable`)return;let s=o.node;if(!(k(s)&&tt(s.id))||s.init===null)return;let c=o.parent;if(c===null||!je(c)||c.kind!==`const`||c.declarations.length!==1||Me(c.parent))return;let l=s.init;if(Kl(l)||Jl(l,r,t))return;let u=a(e,n);if(u===void 0||!tt(u.identifier))return;let d=cu(u.identifier);if(d===void 0)return;let f=d.parent;if(!(!je(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=ou(s.declarationNode,s.enclosingDeclaration),l=iu(t,s.initializer),u=X(s.initializer,Ul.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:au(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(su(t.text,a.declarationNode));return r},messageId:n.length===1?`uselessConstant`:`uselessConstants`,node:r.reportNode})}return{"Program:exit"(e){let n=Gl(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:[...Wl],description:`Regular expression patterns for call expressions that should be ignored.`,items:{type:`string`},type:`array`}},type:`object`}],type:`problem`}});var uu={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]},du=`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(`.`),fu=[[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 pu=new Set([`Name`,`Parent`]),mu=new Set(Array.from(pu,e=>e.toLowerCase())),hu=new Map(Object.entries(uu).map(([e])=>[e.toLowerCase(),e]));function gu(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 _u=[`Enum`,`bool`,`CFrame`,`Color3`,`number`,`Rect`,`string`,`UDim2`,`UDim`,`Vector2`,`Vector3`];function vu(e){let[t]=e;if(typeof t!=`number`)return;let n=_u[t];if(n===void 0)return;let r=n===`Enum`?{enumType:e[1],type:n,value:e[2]}:{type:n,value:e[1]};return Au(r)?r:void 0}const yu=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 bu(){let e=new Map;for(let[t,n]of Object.entries(uu)){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=du[t],o=fu[i],s=o===void 0?void 0:vu(o);a!==void 0&&s!==void 0&&(r[a]=s)}e.set(t,gu(r))}return e}const xu=bu();function Su(e,t){return e.type===`Identifier`&&e.name===t}function Cu(e){return e.type===`Literal`&&typeof e.value==`boolean`}function wu(e){if(e.type!==`JSXIdentifier`)return;let t=hu.get(e.name.toLowerCase());if(t!==void 0&&e.name!==t)return t}function Tu(e){if(e.type===`JSXIdentifier`)return e.name}function Eu(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 Du(e,t){let n=t.toLowerCase(),r=yu.get(e)?.get(n);if(r!==void 0)return r;let i=xu.get(e);if(i!==void 0)return i.get(n)}function Ou(e){return mu.has(e.toLowerCase())}function ku(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(ku);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 ku(e.value);case`Rect`:case`UDim2`:return Array.isArray(e.value)&&e.value.length===4&&e.value.every(ku);case`string`:return y(e.value);case`UDim`:case`Vector2`:return Array.isArray(e.value)&&e.value.length===2&&e.value.every(ku);case`Vector3`:return Array.isArray(e.value)&&e.value.length===3&&e.value.every(ku)}return!1}function ju(e){let t=C(e);if(t.type!==`NewExpression`||!Su(t.callee,`Instance`))return;let[n]=t.arguments;if(!(n===void 0||n.type===`SpreadElement`||!M(n)))return n.value}function Mu(e,t,n=new WeakSet){if(Array.isArray(e)){for(let r of e)if(Mu(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(Mu(r,t,n))return!0;return!1}function Nu(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 Pu(e){let t=Nu(e);return t?.length===2&&t[0]===`math`&&t[1]===`huge`}function Fu(e){return e===`inf`?1/0:e===`-inf`?-1/0:e}function Iu(e,t){return Fu(e)===t}function Lu(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||!Iu(r,e))return!1}return!0}function Z(e){if(Ue(e))return e.value;if(Pu(e))return 1/0;if(e.type!==`UnaryExpression`||e.operator!==`+`&&e.operator!==`-`)return;let t=Z(e.argument);if(t!==void 0)return e.operator===`+`?t:-t}function Ru(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 zu(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 Bu(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 Vu(e){if(e.type===`MemberExpression`){let t=Nu(e);return t?.length===2&&t[0]===`Vector2`&&t[1]===`zero`?[0,0]:void 0}if(!(e.type!==`NewExpression`||!Su(e.callee,`Vector2`)))return e.arguments.length===0?[0,0]:Hu(e.arguments)}function Hu(e){let t=Ru(e);if(t===void 0)return;let[n,r]=t,i=Z(n),a=Z(r);if(i!==void 0&&a!==void 0)return[i,a]}function Uu(e){let t=zu(e);if(t===void 0)return;let[n,r,i]=t,a=Z(n),o=Z(r),s=Z(i);if(a!==void 0&&o!==void 0&&s!==void 0)return[a,o,s]}function Wu(e){if(e.type===`MemberExpression`){let t=Nu(e);return t?.length===2&&t[0]===`Vector3`&&t[1]===`zero`?[0,0,0]:void 0}if(!(e.type!==`NewExpression`||!Su(e.callee,`Vector3`)))return e.arguments.length===0?[0,0,0]:Uu(e.arguments)}function Gu(e){if(!(e.type!==`NewExpression`||!Su(e.callee,`UDim`)))return e.arguments.length===0?[0,0]:Hu(e.arguments)}function Ku(e){let t=Bu(e);if(t===void 0)return;let[n,r,i,a]=t,o=Z(n),s=Z(r),c=Z(i),l=Z(a);if(o!==void 0&&s!==void 0&&c!==void 0&&l!==void 0)return[o,s,c,l]}function qu(e){if(e.type===`CallExpression`){let t=Nu(e.callee),n=Hu(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`||!Su(e.callee,`UDim2`)))return e.arguments.length===0?[0,0,0,0]:Ku(e.arguments)}function Ju(e){if(!(e.type!==`NewExpression`||!Su(e.callee,`Rect`)))return e.arguments.length===0?[0,0,0,0]:Ku(e.arguments)}function Yu(e){let[t,n,r]=e,i=Z(t),a=Z(n),o=Z(r);if(i!==void 0&&a!==void 0&&o!==void 0)return[i,a,o]}function Xu(e){if(e.type===`CallExpression`){let t=Nu(e.callee),n=zu(e.arguments);if(t?.length!==2||t[0]!==`Color3`||t[1]!==`fromRGB`||n===void 0)return;let r=Yu(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`||!Su(e.callee,`Color3`))return;if(e.arguments.length===0)return[0,0,0];let t=zu(e.arguments);if(t!==void 0)return Yu(t)}function Zu(e){if(e.type!==`NewExpression`||!Su(e.callee,`CFrame`))return;if(e.arguments.length===0)return[0,0,0,1,0,0,0,1,0,0,0,1];let t=Uu(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 Qu(e){let t=Nu(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 $u(e,t){switch(t.type){case`bool`:return Cu(e)&&e.value===t.value;case`CFrame`:{let n=Zu(e);return n!==void 0&&Lu(t.value,n)}case`Color3`:{let n=Xu(e);return n!==void 0&&n[0]===t.value[0]&&n[1]===t.value[1]&&n[2]===t.value[2]}case`Enum`:{let n=Qu(e);return n!==void 0&&n.enumType===t.enumType&&n.value===t.value}case`number`:{let n=Z(e);return n!==void 0&&Iu(t.value,n)}case`Rect`:{let n=Ju(e);return n!==void 0&&Lu(t.value,n)}case`string`:return M(e)&&e.value===t.value;case`UDim`:{let n=Gu(e);return n!==void 0&&Lu(t.value,n)}case`UDim2`:{let n=qu(e);return n!==void 0&&Lu(t.value,n)}case`Vector2`:{let n=Vu(e);return n!==void 0&&Lu(t.value,n)}case`Vector3`:{let n=Wu(e);return n!==void 0&&Lu(t.value,n)}default:return!1}}const ed=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(Ou(o))return;let s=Du(a.className,o);if(s===void 0||!$u(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`&&Mu(r,n)){t.delete(n);break}}function s(e,t){if(e.left.type===`Identifier`||e.left.type===`MemberExpression`)for(let[n]of t)Mu(e.right,n)&&t.delete(n)}function c(e,t){if(e.argument!==null)for(let[n]of t)Mu(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=C(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=ju(n.init);e!==void 0&&t.set(n.id.name,{className:e})}}return{BlockStatement(e){l(e.body)},JSXOpeningElement(t){let n=wu(t.name);if(n!==void 0)for(let r of t.attributes){if(r.type===`JSXSpreadAttribute`)continue;let a=Tu(r.name);if(a===void 0||Ou(a))continue;let o=Du(n,a);if(o===void 0)continue;let s=Eu(r);if(!(r.value===null&&o.value.type===`bool`&&o.value.value)&&(s===void 0||!$u(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:`Disallow Roblox JSX properties whose values already match the class defaults.`},fixable:`code`,messages:{uselessDefault:`Remove "{{propertyName}}" from {{className}}. It already matches the default value.`},schema:[],type:`suggestion`}}),td=[`useEffect`,`useLayoutEffect`,`useInsertionEffect`],nd=[`on`],rd=[`useRef`],id=[`useState`,`useReducer`];function ad(e){return e===void 0?{environment:`roblox-ts`,hooks:new Set(td),propertyCallbackPrefixes:new Set(nd),refHooks:new Set(rd),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(id)}:{environment:mn(e.environment)?e.environment:`roblox-ts`,hooks:new Set(S(e.hooks)?e.hooks:td),propertyCallbackPrefixes:new Set(S(e.propertyCallbackPrefixes)?e.propertyCallbackPrefixes:nd),refHooks:new Set(S(e.refHooks)?e.refHooks:rd),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:id)}}function od(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 sd(e){if(!(e.type!==`MemberExpression`||e.computed||e.property.type!==`Identifier`))return e.property.name}function cd(e,t,n,r){let{callee:i}=e;if(i.type===`Identifier`)return t.has(i.name);let a=od(i);return a!==void 0&&n.has(a.objectName)&&r.has(a.propertyName)}function ld(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 ud(e){return ne(e)&&e.startsWith(`use`)}function dd(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 fd(e,t){`body`in e&&D(e.body)&&(e.body.type===`BlockStatement`?t.push(...e.body.body):t.push(e.body))}function pd(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`){fd(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 md(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`:pd(e,t);continue;default:continue}}return!1}function hd(e){if(e.length===0)return e;let[t]=e;return t?.type!==`IfStatement`||t.alternate!==null||!dd(t.consequent)?e:e.slice(1)}function gd(e){return e.type===`ChainExpression`?e.expression:e}function Q(e){if(e.type!==`ExpressionStatement`)return;let t=gd(e.expression);return t.type===`CallExpression`?t:void 0}function _d(e,t){return e.callee.type===`Identifier`&&t.has(e.callee.name)}function vd(e){return e.type===`Literal`&&e.value===!1}function yd(e){return e.type===`Literal`||e.type===`UnaryExpression`&&e.operator===`void`&&e.argument.type===`Literal`&&e.argument.value===0}function bd(e){return e.type===`ArrayExpression`&&e.elements.length===0}function xd(e){return e.type===`ObjectExpression`&&e.properties.length===0}function Sd(e){if(e.type===`Literal`){let{value:t}=e;return t===``||t===0||t===!1||t===null}return yd(e)?!0:bd(e)||xd(e)}function Cd(e,t){let n=Q(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||!vd(i)))return r}function wd(e,t){let n=Q(e);if(!(n===void 0||_d(n,t)))return n}function Td(e,t){return e.type===`UnaryExpression`&&e.operator===`!`&&e.argument.type===`Identifier`&&e.argument.name===t}function Ed(e,t){return e.type===`Identifier`&&e.name===t}function Dd(e){return e.type===`BlockStatement`?e.body:[e]}function Od(e,t,n){let[r,i,a]=e;if(r?.type!==`IfStatement`||r.alternate!==null||i===void 0||a===void 0)return;let o=Cd(i,t),s=Cd(a,t),c=dd(r.consequent);if(o!==void 0&&s===void 0)return c&&Td(r.test,o)?wd(a,n)===void 0?void 0:o:void 0;if(s!==void 0&&o===void 0&&c&&Td(r.test,s))return wd(i,n)===void 0?void 0:s}function kd(e,t,n){if(e.type!==`IfStatement`||e.alternate!==null)return;let r=Dd(e.consequent),[i,a]=r;if(r.length!==2||i===void 0||a===void 0)return;let o=Cd(i,t),s=Cd(a,t);if(o!==void 0&&s===void 0)return Ed(e.test,o)?wd(a,n)===void 0?void 0:o:void 0;if(s!==void 0&&o===void 0&&Ed(e.test,s))return wd(i,n)===void 0?void 0:s}function Ad(e,t,n){if(e.length===3)return Od(e,t,n);if(e.length===1){let[r]=e;return r===void 0?void 0:kd(r,t,n)}}const jd=new Set([`ArrayExpression`,`BinaryExpression`,`CallExpression`,`ChainExpression`,`ConditionalExpression`,`Identifier`,`LogicalExpression`,`MemberExpression`,`ObjectExpression`,`PrivateIdentifier`,`TemplateLiteral`,`UnaryExpression`]);function Md(e){return jd.has(e.type)}function Nd(e,t){for(let n of e.elements)n!==null&&n.type!==`SpreadElement`&&t.push(n)}function Pd(e,t){t.push(e.callee);for(let n of e.arguments)n.type!==`SpreadElement`&&t.push(n)}function Fd(e,t){t.push(e.object),e.computed||t.push(e.property)}function Id(e,t){for(let n of e.properties)n.type===`Property`&&t.push(n.value)}function Ld(e,t){switch(e.type){case`ArrayExpression`:Nd(e,t);break;case`BinaryExpression`:case`LogicalExpression`:t.push(e.left,e.right);break;case`CallExpression`:Pd(e,t);break;case`ChainExpression`:t.push(e.expression);break;case`ConditionalExpression`:t.push(e.test,e.consequent,e.alternate);break;case`MemberExpression`:Fd(e,t);break;case`ObjectExpression`:Id(e,t);break;case`TemplateLiteral`:t.push(...e.expressions);break;case`UnaryExpression`:t.push(e.argument);break;default:}}function Rd(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;Ld(e,t)}}return!1}function zd(e,t){let n=0;for(let r of e){if(r.type===`IfStatement`){if(r.alternate!==null)return;let e=zd(Dd(r.consequent),t);if(e===void 0||e===0)return;n+=e;continue}let e=Q(r);if(e===void 0||!t(e))return;n+=1}return n>0?n:void 0}function Bd(e,t){return zd(e,e=>_d(e,t)?e.arguments.some(e=>e.type!==`SpreadElement`&&Rd(e)):!1)}function Vd(e,t,n){return zd(e,e=>Gd(e,t,n))}function Hd(e,t){for(let n of t)if(e.startsWith(n))return!0;return!1}function Ud(e){return e.type===`AssignmentPattern`?e.left:e}function Wd(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=Ud(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=Ur(e);if(n===void 0||!Hd(n,t))continue;let r=Wr(e);r!==void 0&&i.propertyCallbackIdentifiers.add(r.name)}return i}function Gd(e,t,n){let{callee:r}=e;if(r.type===`Identifier`)return t.propertyCallbackIdentifiers.has(r.name);let i=od(r);return i!==void 0&&t.propertyObjectName!==void 0&&i.objectName===t.propertyObjectName&&Hd(i.propertyName,n)}function Kd(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 qd(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 Jd(e){let[,t]=e.arguments;return t===void 0||t.type===`ArrayExpression`&&t.elements.length===0}function Yd(e,t){if(e.length===0)return!1;for(let n of e){if(n.type===`IfStatement`){if(n.alternate!==null||!Yd(Dd(n.consequent),t))return!1;continue}if(!t(n))return!1}return!0}function Xd(e,t){let n=new Set;for(let r of e){if(r.type===`IfStatement`){let e=Dd(r.consequent);for(let r of Xd(e,t))n.add(r);continue}let e=Q(r);e!==void 0&&_d(e,t)&&e.callee.type===`Identifier`&&n.add(e.callee.name)}return n}function Zd(e,t){let{callee:n}=e;if(n.type===`Identifier`)return t.has(n.name);let r=od(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(Dd(r.consequent),t,n))return!0;continue}let e=Q(r);if(e!==void 0&&!_d(e,t)&&!Zd(e,n))return!0}return!1}function $d(e,t,n){return Yd(e,e=>{let r=Q(e);if(r===void 0||!_d(r,t)||r.arguments.length!==1)return!1;let[i]=r.arguments;return i!==void 0&&n(i)})}function ef(e){return e.type===`Literal`&&typeof e.value!=`object`||bd(e)||xd(e)}function tf(e,t){return $d(e,t,Sd)}function nf(e,t){return $d(e,t,ef)}function rf(e){return Yd(e,e=>{let t=Q(e);return t!==void 0&&od(t.callee)?.objectName===`console`})}const af=new Set([`addEventListener`,`addListener`,`on`,`subscribe`]);function of(e){return e.some(e=>{let t=Q(e);if(t===void 0)return!1;let n=sd(t.callee);return n!==void 0&&af.has(n)})}function sf(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 cf(e,t,n){return e.callee.type===`Identifier`&&n.has(e.callee.name)&&e.arguments.some(e=>sf(e,t))}function lf(e,t,n){for(let r of e){if(r.type===`IfStatement`){if(lf(Dd(r.consequent),t,n))return!0;continue}let e=Q(r);if(e!==void 0&&cf(e,t,n))return!0}return!1}function uf(e){let t=new Set,n=new Set,r=Md(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}Md(e)&&Ld(e,r)}}return t}function df(e){return e.alternate===null?[]:e.alternate.type===`BlockStatement`?e.alternate.body:[e.alternate]}function ff(e,t,n){return[...uf(e.test)].some(e=>n.has(e)&&!t.has(e))}function pf(e,t){return e.some(e=>{let n=Q(e);return n!==void 0&&_d(n,t)})}function mf(e,t,n,r){for(let i of e)if(i.type===`IfStatement`&&(ff(i,n,r)&&pf(Dd(i.consequent),t)||mf(df(i),t,n,r)))return!0;return!1}const hf=new Set([`alert`,`confirm`,`display`,`hide`,`log`,`navigate`,`notify`,`post`,`prompt`,`redirect`,`report`,`send`,`show`,`submit`,`track`]);function gf(e){let t=e.toLowerCase();for(let e of hf)if(t.startsWith(e))return!0;return!1}function _f(e,t){let n=Q(e);return n===void 0||_d(n,t)?!1:n.callee.type===`Identifier`?gf(n.callee.name):n.callee.type!==`MemberExpression`||n.callee.computed||n.callee.property.type!==`Identifier`?!1:gf(n.callee.property.name)}function vf(e,t){return[...uf(e.test)].some(e=>t.has(e))}function yf(e,t,n){for(let r of e)if(r.type===`IfStatement`&&(vf(r,n)&&Dd(r.consequent).some(e=>_f(e,t))||r.alternate!==null&&yf(df(r),t,n)))return!0;return!1}function bf(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function xf(e,t){return`${e}:${t}`}function Sf(e){if(e.body?.type===`BlockStatement`)return e.body}function Cf(e){return e.body.type===`BlockStatement`}function wf(e){return e.body!==null}const Tf=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(`.`)),Ef=[`fetch`,`send`,`post`,`track`],Df=new Set([`addEventListener`,`addListener`,`cancelAnimationFrame`,`catch`,`clearInterval`,`clearTimeout`,`finally`,`observe`,`removeEventListener`,`removeListener`,`requestAnimationFrame`,`setInterval`,`setTimeout`,`subscribe`,`then`,`unobserve`,`unsubscribe`]),Of=[`log`,`fetch`,`send`,`track`,`report`,`show`,`navigate`,`submit`,`post`,`notify`];function kf(e){for(let t of Of)if(e.startsWith(t))return!0;return!1}function Af(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 jf(e){for(let t of Ef)if(e.startsWith(t))return!0;return Df.has(e)}function Mf(e,t,n){let{callee:r}=e;return _d(e,t)?!1:r.type===`Identifier`?n.has(r.name)?!1:Tf.has(r.name)||kf(r.name):r.type!==`MemberExpression`||r.computed||r.property.type!==`Identifier`||r.object.type===`Identifier`&&n.has(r.object.name)?!1:Af(r)||jf(r.property.name)}function Nf(e,t,n){for(let r of e){if(r.type===`IfStatement`){if(Nf(Dd(r.consequent),t,n))return!0;continue}let e=Q(r);if(e!==void 0&&Mf(e,t,n))return!0}return!1}const Pf=t({create(e){let t=ad(e.options[0]),n=_n(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 cd(e,i,r,t.hooks)}function g(e){return cd(e,a,r,t.stateHooks)}function _(e){return cd(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=ld(e);d.push(Wd(e,t.propertyCallbackPrefixes,n,ud(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?!Nf(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?Ad(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&&dd(f[0])),`emptyEffect`],[t.reportInitializeState&&Jd(d)&&nf(f,o),`initializeState`],[t.reportResetState&&tf(f,o)&&m,`resetState`],[p!==void 0&&Kd(d,p),`eventFlag`],[t.reportEventSpecificLogic&&yf(f,o,s),`eventSpecificLogic`],[t.reportAdjustState&&mf(f,o,s,r)&&!a,`adjustState`],[t.reportDerivedState&&Bd(n,o)!==void 0,`derivedState`],[x(e),`mixedDerivedState`],[t.reportPassRefToParent&&i!==void 0&&lf(f,u,i.propertyCallbackIdentifiers),`passRefToParent`],[t.reportNotifyParent&&i!==void 0&&!i.isCustomHook&&Vd(n,i,t.propertyCallbackPrefixes)!==void 0,`notifyParent`],[t.reportExternalStore&&of(f)&&l,`externalStore`],[t.reportLogOnly&&rf(f),`logOnly`]].find(([e])=>e)?.[1]}function S(t,n,r){let i=d.at(-1),a=hd(n),s=qd(t),c=Xd(n,o),l=Qd(n,o,i?.propertyCallbackIdentifiers??new Set),u=r!==void 0&&md(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 re(){if(!t.reportEffectChain)return;let n=ie();for(let t of m)if(!(t.hasNonSetterSideEffect||t.hasReturnWithCleanup))for(let r of t.depIdentifiers){let i=xf(t.ownerFunctionId,r),a=n.get(i);if(a!==void 0&&C(a)){e.report({messageId:`effectChain`,node:t.node});return}}}function ie(){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=xf(n.ownerFunctionId,i),o=e.get(a);o===void 0&&(o=new Set,e.set(a,o)),o.add(t)}return e}function C(e){return e.size!==0&&[...e].every(e=>{let t=m[e];return t!==void 0&&!t.hasNonSetterSideEffect&&!t.hasReturnWithCleanup})}function w(){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=T(t,e);n.length<2||E(n,e)}}function T(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&&bf(n.depIdentifiers,e.depIdentifiers)&&r.push(i)}return r}function E(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=Sf(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(!Cf(t))return;S(e,t.body.body.filter(e=>e.type!==`EmptyStatement`),t.body);return}wf(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}Ve(t)&&oe(e,t)}},FunctionDeclaration:y,"FunctionDeclaration:exit":b,FunctionExpression:y,"FunctionExpression:exit":b,ImportDeclaration(e){bn(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"(){re(),w()},VariableDeclarator(e){v(e),ee(e),te(e)}}},meta:{docs:{description:`Disallow empty effects, duplicate dependencies, effect chains, log-only effects, derived state, external-store state sync, state initialization, reset effects, parent notifications, parent ref callbacks, and event side effects routed 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:[...td],description:`Effect hook names checked for avoidable effect patterns.`,items:{type:`string`},type:`array`},propertyCallbackPrefixes:{default:[...nd],description:`Property name prefixes treated as event callback props.`,items:{type:`string`},type:`array`},refHooks:{default:[...rd],description:`Ref hook names that return mutable ref objects.`,items:{type:`string`},type:`array`},reportAdjustState:{default:!0,description:`Report effects that only adjust state after render.`,type:`boolean`},reportDerivedState:{default:!0,description:`Report effects that copy derived values into state.`,type:`boolean`},reportDuplicateDeps:{default:!0,description:`Report duplicate entries in effect dependency arrays.`,type:`boolean`},reportEffectChain:{default:!0,description:`Report effects that only trigger another effect through state.`,type:`boolean`},reportEmptyEffect:{default:!0,description:`Report effects whose callback body is empty.`,type:`boolean`},reportEventFlag:{default:!0,description:`Report effects that react to event flags stored in state.`,type:`boolean`},reportEventSpecificLogic:{default:!0,description:`Report effects that move event-specific logic out of the event callback.`,type:`boolean`},reportExternalStore:{default:!0,description:`Report effects that mirror external store values into local state.`,type:`boolean`},reportInitializeState:{default:!0,description:`Report effects that only initialize state after mount.`,type:`boolean`},reportLogOnly:{default:!0,description:`Report effects that only log values.`,type:`boolean`},reportMixedDerivedState:{default:!0,description:`Report effects that mix derived-state updates with other work.`,type:`boolean`},reportNotifyParent:{default:!0,description:`Report effects that only notify a parent through a callback prop.`,type:`boolean`},reportPassRefToParent:{default:!0,description:`Report effects that only pass a ref value to a parent callback.`,type:`boolean`},reportResetState:{default:!0,description:`Report effects that reset local state when inputs change.`,type:`boolean`},stateHooks:{default:[...id],description:`State hook names that return [value, setter] pairs.`,items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}});function Ff(e){return x(e)&&y(e.dependencyMode)&&(e.dependencyMode===`empty-or-omitted`||e.dependencyMode===`aggressive`)?e.dependencyMode:`non-updating`}function If(e){let t=x(e)&&S(e.staticGlobalFactories)?e.staticGlobalFactories:Ds;return{dependencyMode:Ff(e),environment:xn(e),staticGlobalFactories:new Set(t)}}function Lf(e){return{staticGlobalFactories:e.staticGlobalFactories}}function Rf(e){let t=Ir(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 zf(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,zf),e}}}const Bf=t({create(e){let t=If(e.options[0]),n=Lf(t),r=_n(t.environment),i=new Set,a=new Set;return{CallExpression(r){if(!fe(r,i,a)||Zs(r)||r.arguments.length===0)return;let o=Rf(r);if(o===void 0)return;let s=new Set;Y(e.sourceCode,o,s,n)&&zf(Kr(e.sourceCode,r.arguments[1],s,n,Us),t)&&e.report({messageId:`uselessUseMemo`,node:r})},ImportDeclaration(e){Qs(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`,description:`Dependency-array mode used to decide whether a memoized value is static.`,enum:[`empty-or-omitted`,`non-updating`,`aggressive`],type:`string`},environment:{default:`roblox-ts`,description:`The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.`,enum:[`roblox-ts`,`standard`],type:`string`},staticGlobalFactories:{default:Ds,description:`Global constructors and factories whose calls are treated as static values.`,items:{type:`string`},type:`array`}},type:`object`}],type:`suggestion`}}),Vf=[`useSpring`];function Hf(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 Uf(e,t,n){let r=C(t);if(r.type===`ObjectExpression`)return n(r);if(r.type!==`Identifier`)return!1;let i=T(e.getScope(r),r.name);if(i===void 0||!q(i.scope)||J(i))return!1;for(let e of i.defs){let t=Ms(e);if(t===void 0)continue;let r=C(t);if(r.type===`ObjectExpression`&&n(r))return!0}return!1}function Wf(e,t){return Uf(e,t,Hf)}function Gf(e,t,n,r){let i={staticGlobalFactories:r.staticGlobalFactories};return Uf(e,t,t=>Hs(e,t,n,i))}function Kf(e,t){return e===0||e===2||e===1&&t.treatEmptyDepsAsViolation}function qf({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 Jf=t({create(e){let[t]=e.options,n={springHooks:new Set(t?.springHooks??Vf),staticGlobalFactories:new Set(t?.staticGlobalFactories??Ds),treatEmptyDepsAsViolation:t?.treatEmptyDepsAsViolation??!0};return{CallExpression(t){if(!qf(t,n)||t.arguments.length===0)return;let[r]=t.arguments;if(r===void 0||r.type===`SpreadElement`)return;let i=new Set;if(!Gf(e.sourceCode,r,i,n)||Wf(e.sourceCode,r))return;let a=t.arguments.length>1?t.arguments[1]:void 0;Kf(Kr(e.sourceCode,a,i,n,Us),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:{springHooks:[...Vf],staticGlobalFactories:[...Ds],treatEmptyDepsAsViolation:!0},properties:{springHooks:{default:[...Vf],description:`Hook identifiers that should be treated as spring hooks`,items:{type:`string`},type:`array`},staticGlobalFactories:{default:[...Ds],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`}}),Yf=uo({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`}),Xf=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 Zf(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`&&Zf(e));default:return!1}}function $f(e){let t=e;for(;t.type===`MemberExpression`;){if(t.computed&&!ze(t.property))return!1;t=t.object}return!0}function ep(e){return e.type===`MethodDefinition`&&e.kind===`constructor`&&e.key.type===`Identifier`&&e.key.name===`constructor`}function tp(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`||ze(r))&&Qf(t.right)&&$f(n)}const np=t({create(e){let[t]=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(!(!ep(n)||n.value.body===null))for(let t of n.value.body.body)tp(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 rp(e){if(!q(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 ip(e,t){let n=T(e.getScope(t),t.name);return n===void 0?!1:J(n)||rp(n)}function ap(e,t){let n=T(e.getScope(t),t.name);return n===void 0?!1:J(n)||q(n.scope)}function op(e,t){let n=t;for(;n.type===`MemberExpression`;){if(n.computed)return!1;n=C(n.object)}return n.type===`Identifier`&&ap(e,n)}function sp(e,t){let n=C(t);switch(n.type){case`Identifier`:return ip(e,n);case`Literal`:return!0;case`MemberExpression`:return op(e,n);case`TemplateLiteral`:return n.expressions.length===0;case`UnaryExpression`:return n.operator===`-`&&C(n.argument).type===`Literal`;default:return!1}}function cp(e,t){for(let n of t.properties)if(n.type!==`Property`||n.kind!==`init`||n.computed||!sp(e,n.value))return!1;return!0}function lp(e,t){if(t.id.type!==`ArrayPattern`||t.init?.type!==`CallExpression`||R(t.init)!==`useReducer`)return;let n=t.id.elements[1];if(n!=null&&n.type===`Identifier`)return T(e.getScope(n),n.name)}function up(e){let t=e;for(;t!==void 0;){if(t.type===`Program`)return t;t=t.parent}}function dp(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 fp=t({create(e){let t=new Set,{sourceCode:n}=e,r=0;return{CallExpression(i){if(i.callee.type!==`Identifier`)return;let a=T(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=C(o);if(s.type!==`ObjectExpression`||!cp(n,s))return;let c=up(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[dp(e,n,s,l,c),e.replaceText(s,l)]}}]})},VariableDeclarator(e){let r=lp(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`}}),pp=new Set([`.js`,`.jsx`,`.ts`,`.tsx`]),mp=new Set([`.git`,`.next`,`.turbo`,`__fixtures__`,`__mocks__`,`__tests__`,`coverage`,`dist`,`documentation`,`example`,`examples`,`fixture`,`fixtures`,`node_modules`,`opensrc`,`stories`,`story`,`test`,`tests`]),hp=/\bexport\s+default\b/u,gp=/\/index$/u,_p=/\.(?:[cm]?jsx?|tsx?)$/u,vp=new Map,yp=new Map,bp=new Map,xp=/[.*+?^${}()|[\]\\]/gu,Sp=String.raw`\$&`;function Cp(e){return e.replaceAll(xp,Sp)}const wp=new Map;function Tp(e){return e.includes(`u`)||e.includes(`v`)?e:`${e}u`}function Ep(e,t){let n=`${t}:${e}`,r=wp.get(n);if(r!==void 0)return r;let i=new RegExp(e,Tp(t));if(wp.size>=64){let e=wp.keys().next().value;e!==void 0&&wp.delete(e)}return wp.set(n,i),i}function Dp(e){return e.replaceAll(`\\`,`/`)}function Op(e){let t=yp.get(e);if(t!==void 0)return t;let n=f(e,`utf8`);return yp.set(e,n),n}function kp(e,t){let n=Cp(t);return Ep(`\\bexport\\s+(?:const|function|class)\\s+${n}\\b`,`u`).test(e)||Ep(`\\bexport\\s*\\{[^}]*\\b${n}\\b[^}]*\\}`,`u`).test(e)?`named`:hp.test(e)&&Ep(`\\b${n}\\b`,`u`).test(e)?`default`:void 0}function Ap(e,t){for(let n of t)if(!Ep(`\\b${Cp(n)}\\b`,`u`).test(e))return!1;return!0}function jp(e){let t=bp.get(e);if(t!==void 0)return t;let n=e;for(;;){if(d(c(n,`package.json`))||d(c(n,`tsconfig.json`)))return bp.set(e,n),n;let t=a(n);if(t===n){bp.set(e,void 0);return}n=t}}function Mp(e){let t=vp.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`||mp.has(a))continue;let s=c(e,t.name);if(t.isDirectory()){r(s);continue}let l=o(t.name);if(!pp.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 vp.set(e,a),a}function Np(e,t){let n=Dp(l(a(e),t));return n=n.replace(_p,``),n=n.replace(gp,``),n.startsWith(`.`)||(n=`./${n}`),n}function Pp(e){let t=jp(a(e)),n=Dp(t===void 0?e:l(t,e));for(let e of n.split(`/`))if(mp.has(e.toLowerCase()))return!0;return!1}function Fp(e,t){if(Pp(e))return{importStyle:void 0,matches:!1};let n=o(e);if(!pp.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=Op(e);if(!Ep(`\\b${Cp(t.componentName)}\\b`,`u`).test(a)||t.markers!==void 0&&!Ap(a,t.markers))return{importStyle:void 0,matches:!1};let s=kp(a,t.componentName);return s===void 0?{importStyle:void 0,matches:!1}:{importStyle:s,matches:!0}}function Ip(e,t,n){let r=e.source.value;if(!(y(r)&&r.startsWith(`.`))||t===``)return{importStyle:void 0,matches:!1};let i=vc(r,t);return i.found?Fp(i.path,n):{importStyle:void 0,matches:!1}}function Lp(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 Rp(e,t){let n=jp(a(e));if(n===void 0)return{found:!1};let r=Mp(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=>Fp(e,t).matches);if(o.length!==1)return{found:!1};let[s]=o;if(s===void 0)return{found:!1};let c=Fp(s,t);return{found:!0,importSource:Np(e,s),importStyle:c.importStyle,path:s}}const zp={componentName:`ContextStack`,fileNames:[`context-stack`],markers:[`providers`]},Bp=new Set([`.jsx`,`.tsx`]);function Vp(e){return e.openingElement.name.type===`JSXMemberExpression`&&e.openingElement.name.property.name===`Provider`}function Hp(e){return e.children.filter(e=>e.type===`JSXText`?e.value.trim()!==``:e.type!==`JSXExpressionContainer`||e.expression.type!==`JSXEmptyExpression`)}function Up(e){let{parent:t}=e;if(t.type!==`JSXElement`||!Vp(t))return!1;let n=Hp(t);return n.length===1&&n[0]===e}function Wp(e){if(!Vp(e))return;let t=[e],n=e;for(;;){let e=Hp(n);if(e.length!==1)break;let[r]=e;if(r?.type!==`JSXElement`||!Vp(r))break;t.push(r),n=r}return t.length>1?t:void 0}function Gp(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 Kp(e){let t=0;for(let n of e){let r=e[t+1];if(r===void 0){t+=1;continue}if(!Gp(n,r))return!1;t+=1}return!0}function qp(e,t){let n=t.getText(e.openingElement);return e.openingElement.selfClosing?n:n.endsWith(`>`)?`${n.slice(0,-1)} />`:void 0}function Jp(e,t,n){let r=[];for(let e of t){let t=qp(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 Yp=t({create(e){let{filename:t,sourceCode:n}=e,r=t===``?{found:!1}:Rp(t,zp),i=new Set;return{ImportDeclaration(e){Lp(e,Ip(e,t,zp),zp.componentName,i)},JSXElement(a){if(Up(a))return;let s=Wp(a);if(s===void 0||i.size===0&&!r.found)return;let c=Bp.has(o(t))&&i.size===1&&Kp(s),[l]=i,u=c&&l!==void 0?Jp(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`}}),Xp=/^use[A-Z]/v;function Zp(e){return e.parent?.type===`ImportDeclaration`?e.parent:void 0}function Qp(e,t){if(e.type!==`ImportBinding`)return!1;let n=Zp(e.node);return n!==void 0&&t.has(n.source.value)}function $p(e,t){if(e===void 0)return!1;for(let n of e.defs)if(Qp(n,t)&&(n.node.type===`ImportDefaultSpecifier`||n.node.type===`ImportNamespaceSpecifier`))return!0;return!1}function em(e){if(typeof e!=`object`||!e)return{allowedHooks:new Set};let t=e;return{allowedHooks:new Set(S(t.allowedHooks)?t.allowedHooks:[])}}const tm=t({create(e){let t=vn(e.options[0]),{allowedHooks:n}=em(e.options[0]),{sourceCode:r}=e;return{CallExpression(i){let{callee:a}=i;if(a.type!==`MemberExpression`||a.computed||a.object.type!==`Identifier`||a.property.type!==`Identifier`)return;let o=a.property.name;Xp.test(o)&&(n.has(o)||$p(T(r.getScope(a.object),a.object.name),t)&&e.report({data:{hookName:o},messageId:`preferDirectHookImport`,node:i}))}}},meta:{docs:{description:`Prefer importing React hooks directly instead of calling them via the React namespace.`,recommended:!0},messages:{preferDirectHookImport:"Import `{{hookName}}` directly instead of calling `React.{{hookName}}`."},schema:[{additionalProperties:!1,properties:{allowedHooks:{description:`Hook names that are allowed to be called via React namespace.`,items:{type:`string`},type:`array`},environment:pn},type:`object`}],type:`suggestion`}});function nm(e){return x(e)&&b(e.maximumStatements)?e.maximumStatements:1}function rm(e){return e.type===`IfStatement`&&e.alternate===null}function im(e,t){return e.type===`ExpressionStatement`&&t===0||e.type===`BlockStatement`&&e.body.length>t}function am(e,t){if(e.body.length!==1)return!1;let[n]=e.body;return n===void 0||!rm(n)?!1:im(n.consequent,t)}const om=t({create(e){let t=nm(e.options[0]);function n(n){am(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,description:`Maximum allowed statement count inside the guarded branch before reporting.`,minimum:0,type:`number`}},type:`object`}],type:`suggestion`}});function sm(e){return e.type===`Identifier`&&(e.name===`it`||e.name===`test`)}function cm(e){if(e.callee.type!==`MemberExpression`||!sm(e.callee.object))return!1;let t=w(e.callee);return t===`only`||t===`skip`}function lm(e){return e.callee.type!==`MemberExpression`||!sm(e.callee.object)?!1:w(e.callee)===`each`}function um(e){let t=e.arguments.at(-1);return t===void 0||!Ve(t)?void 0:t}function dm(e){return e.type===`DoWhileStatement`||e.type===`ForInStatement`||e.type===`ForOfStatement`||e.type===`ForStatement`||e.type===`WhileStatement`}function fm(e,t){return e.type===t.type&&e.range[0]===t.range[0]&&e.range[1]===t.range[1]}function pm(e,t){return{hasCallback:e.hasCallback||t.hasCallback,hasIndeterminate:e.hasIndeterminate||t.hasIndeterminate,hasLoop:e.hasLoop||t.hasLoop}}function mm(e,t){if(fm(e,t))return{hasCallback:!1,hasIndeterminate:!1,hasLoop:!1};let n={hasCallback:Ve(e),hasIndeterminate:Ve(e)||dm(e)||e.type===`ConditionalExpression`||e.type===`IfStatement`||e.type===`SwitchCase`||e.type===`TryStatement`&&e.handler!==null,hasLoop:dm(e)};return e.parent===null?n:pm(n,mm(e.parent,t))}function hm(e){return e.callee.type===`Identifier`?sm(e.callee):cm(e)?!0:e.callee.type===`CallExpression`&&lm(e.callee)}function gm(e){return hm(e)?um(e):void 0}function _m({callee:e}){return e.type!==`MemberExpression`||e.object.type!==`Identifier`||e.object.name!==`expect`?!1:w(e)===`assertions`}function vm({callee:e}){return e.type!==`MemberExpression`||e.object.type!==`Identifier`||e.object.name!==`expect`?!1:w(e)===`hasAssertions`}function ym(e,t=[]){return e.callee.type===`Identifier`&&(e.callee.name===`expect`||t.includes(e.callee.name))}function bm(e,t=[]){let n=0,r=!1,i=!1,a=!1,o=0;return Lr(e,s=>{if(s.type!==`CallExpression`||!ym(s,t))return;let c=mm(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 xm(e){return Array.isArray(e)?e.filter(y):[]}function Sm(e){return x(e)?{additionalAssertionFunctions:xm(e.additionalAssertionFunctions),additionalExpectCallNames:xm(e.additionalExpectCallNames),onlyFunctionsWithAsyncKeyword:e.onlyFunctionsWithAsyncKeyword===!0,onlyFunctionsWithExpectInCallback:e.onlyFunctionsWithExpectInCallback===!0,onlyFunctionsWithExpectInLoop:e.onlyFunctionsWithExpectInLoop===!0}:{additionalAssertionFunctions:[],additionalExpectCallNames:[],onlyFunctionsWithAsyncKeyword:!1,onlyFunctionsWithExpectInCallback:!1,onlyFunctionsWithExpectInLoop:!1}}function Cm(e){return[...new Set([...e.additionalExpectCallNames,...e.additionalAssertionFunctions])]}function wm(e){return e.onlyFunctionsWithAsyncKeyword||e.onlyFunctionsWithExpectInCallback||e.onlyFunctionsWithExpectInLoop}function Tm(e){return e.body??void 0}function Em(e){let t=Tm(e);return t?.type===`BlockStatement`?t:void 0}function Dm(e,t,n,r,i,a){return n+r===0?!1:!wm(t)||t.onlyFunctionsWithAsyncKeyword&&e.async||t.onlyFunctionsWithExpectInCallback&&i||t.onlyFunctionsWithExpectInLoop&&a}function Om(e){let t=Em(e);if(t===void 0)return;let[n]=t.body;if(n?.type===`ExpressionStatement`&&n.expression.type===`CallExpression`)return n.expression}function km(e,t,n,r,i){let a=Em(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 Am(e,t,n,r){if(vm(t)){t.arguments.length>0&&e.report({messageId:`hasAssertionsTakesNoArguments`,node:t});return}if(!_m(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`||!Ue(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 jm=t({create(e){let t=Sm(e.options[0]);return{CallExpression(n){if(!hm(n))return;let r=gm(n);if(r===void 0)return;let i=Tm(r);if(i===void 0)return;let{deterministic:a,indeterminate:o,hasIndeterminate:s,hasExpectInCallback:c,hasExpectInLoop:l}=bm(i,Cm(t));if(!Dm(r,t,a,o,c,l))return;let u=Om(r);if(u!==void 0&&(_m(u)||vm(u))){if(Am(e,u,a,s),vm(u)&&u.arguments.length===0&&a>0&&!s){let[t]=Em(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}km(e,r,n,a,s)}}},meta:{docs:{description:`Enforce expect assertion guards in 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:{default:[],description:`Additional assertion function names counted as test assertions.`,items:{type:`string`},type:`array`},additionalExpectCallNames:{default:[],description:`Additional expect-like call names counted when checking assertion counts.`,items:{type:`string`},type:`array`},onlyFunctionsWithAsyncKeyword:{default:!1,description:`Only require assertion guards for test callbacks marked async.`,type:`boolean`},onlyFunctionsWithExpectInCallback:{default:!1,description:`Only require assertion guards when expect is called inside a nested callback.`,type:`boolean`},onlyFunctionsWithExpectInLoop:{default:!1,description:`Only require assertion guards when expect is called inside a loop.`,type:`boolean`}},type:`object`}],type:`suggestion`}});function Mm(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 Nm(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 Pm(e){let t=e;for(;t.type===`JSXMemberExpression`;)t=t.object;return t.type===`JSXIdentifier`?t.name:void 0}function Fm(e,t,n){let r=T(e.sourceCode.getScope(t),n);if(r===void 0||!q(r.scope))return!1;if(J(r))return!0;for(let e of r.defs)if(e.type===`FunctionName`||e.type===`ClassName`||Ms(e)!==void 0)return!0;return!1}function Im(e,t,n){let r=T(e.sourceCode.getScope(t),n);return r!==void 0&&J(r)}function Lm(e,t,n,r){let{name:i}=t.openingElement;if(i.type===`JSXIdentifier`){let e=i.name.charAt(0);if(e!==``&&e===e.toLowerCase())return!0}let a=Pm(i);if(a===void 0)return!1;let o=T(e.sourceCode.getScope(t),a),s=i.type===`JSXMemberExpression`;return n.has(a)?o===void 0?!s:s?Im(e,t,a):Fm(e,t,a):r===`standard`?s?Im(e,t,a):Fm(e,t,a):!1}function Rm(e,t,n,r,i){if(i===`roblox-ts`&&t.name.type===`JSXIdentifier`&&(t.name.name===`Event`||t.name.name===`Change`))return!1;let{value:a}=t;return a===null||a.type===`Literal`?!0:a.type!==`JSXExpressionContainer`||a.expression.type===`JSXEmptyExpression`?!1:Fs(e.sourceCode,a.expression,new Set)?i===`standard`:Y(e.sourceCode,a.expression,n,r)}function zm(e,t,n,r,i){for(let a of t.attributes)if(a.type===`JSXSpreadAttribute`||!Rm(e,a,new Set(n),r,i))return!1;return!0}function Bm(e,t,n,r,i,a){if(t.type===`JSXText`)return a===`standard`||t.value.trim().length===0;if(t.type===`JSXElement`||t.type===`JSXFragment`)return Hm(e,t,new Set(n),r,i,a);if(t.type!==`JSXExpressionContainer`)return!1;if(t.expression.type===`JSXEmptyExpression`)return!0;if(t.expression.type===`JSXElement`||t.expression.type===`JSXFragment`)return Hm(e,t.expression,new Set(n),r,i,a);if(t.expression.type===`Identifier`){let o=Ns(e.sourceCode,t.expression);if(o!==void 0){let t=C(o);if(t.type===`JSXElement`||t.type===`JSXFragment`)return Hm(e,t,new Set(n),r,i,a)}}return Y(e.sourceCode,t.expression,new Set(n),i)}function Vm(e,t,n,r,i,a){for(let o of t.children)if(!Bm(e,o,new Set(n),r,i,a))return!1;return!0}function Hm(e,t,n,r,i,a){return n.has(t)?!1:(n.add(t),(t.type===`JSXFragment`||Lm(e,t,r,a)&&zm(e,t.openingElement,n,i,a))&&Vm(e,t,n,r,i,a))}function Um(e,t,n,r,i){let{parent:a}=t;for(;a.type!==`Program`;){if((a.type===`JSXElement`||a.type===`JSXFragment`)&&Hm(e,a,new Set,n,r,i))return!0;({parent:a}=a)}return!1}function Wm(e,t){switch(e.type){case`ParenthesizedExpression`:case`TSAsExpression`:case`TSInstantiationExpression`:case`TSNonNullExpression`:case`TSSatisfiesExpression`:case`TSTypeAssertion`:return e.expression===t;default:return!1}}function Gm(e,t){return e.type===`JSXElement`||e.type===`JSXFragment`||e.type===`JSXExpressionContainer`&&e.expression===t}function Km(e,t){let n=t,{parent:r}=n;for(;Wm(r,n)||Gm(r,n);){n=r;let{parent:e}=n;if(e===null)return!1;r=e}if(r.type!==`VariableDeclarator`||r.id.type!==`Identifier`||r.init!==n||r.parent.type!==`VariableDeclaration`||r.parent.kind!==`const`)return!1;let i=T(e.sourceCode.getScope(n),r.id.name);return i!==void 0&&q(i.scope)}function qm(e,t){let n=e.sourceCode.getText(t);e.report({data:{elementText:n},messageId:`hoistableJsxElement`,node:t})}const Jm=t({create(e){let[t]=e.options,n=Mm(t),r=Nm(t),i=xn(t),a={staticCallsRequireFactories:!0,staticGlobalFactories:new Set([...i===`roblox-ts`?Ds:[],...r])};function o(t){Hm(e,t,new Set,n,a,i)&&(Km(e,t)||Um(e,t,n,a,i)||qm(e,t))}return{JSXElement:o,JSXFragment:o}},meta:{docs:{description:`Prefer extracting static JSX elements to module-level constants.`},messages:{hoistableJsxElement:"Extract `{{elementText}}` to a shared module-level const — this 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`},environment:pn},type:`object`}],type:`suggestion`}}),Ym={staticGlobalFactories:new Set(Ds)};function Xm(e){let{value:t}=e;if(t?.type===`JSXExpressionContainer`&&t.expression.type!==`JSXEmptyExpression`)return t.expression}function Zm(e,t){let n=t;for(;;){let{parent:r}=n;if(r===null)return!1;if(r.type===`VariableDeclarator`)return $m(e,t,r,n);let i=Qm(r);if(i===void 0)return!1;n=i}}function Qm(e){if(e.type===`JSXElement`||e.type===`JSXFragment`||e.type===`JSXExpressionContainer`||e.type===`ParenthesizedExpression`||e.type===`ArrayExpression`)return e}function $m(e,t,n,r){if(n.id.type!==`Identifier`||n.init!==r)return!1;let i=T(e.sourceCode.getScope(t),n.id.name);return i!==void 0&&q(i.scope)}function eh(e,t){let n=e.sourceCode.getText(t);e.report({data:{objectText:n},messageId:`hoistableObjectProp`,node:t})}function th(e,t){if(t.properties.some(e=>e.type===`Property`&&e.computed))return;let n=new Set;if(Y(e.sourceCode,t,n,Ym)){eh(e,t);return}for(let n of t.properties){if(n.type!==`Property`)continue;let t=C(n.value);t.type===`ObjectExpression`&&th(e,t)}}const nh=t({create(e){return{JSXAttribute(t){let n=Xm(t);if(n===void 0)return;let r=C(n);if(r.type!==`ObjectExpression`)return;let i=t.parent;if(i.type!==`JSXOpeningElement`)return;let a=i.parent;a.type===`JSXElement`&&Zm(e,a)||th(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 rh({type:e}){return e===`Identifier`||e===`MemberExpression`||e===`CallExpression`||e===`NewExpression`||e===`ThisExpression`}function ih(e){let t=e;for(;t.type===`ParenthesizedExpression`;)t=t.expression;return t}const ah=t({createOnce(e){return{CallExpression(t){if(t.optional)return;let n=C(t.callee);if(n.type!==`MemberExpression`||n.optional||w(n)!==`floor`)return;let r=C(n.object);if(r.type!==`Identifier`||r.name!==`math`||E(e.sourceCode,r,`math`)||t.arguments.length!==1)return;let[i]=t.arguments;if(i===void 0||i.type===`SpreadElement`)return;let a=C(i);if(a.type!==`BinaryExpression`||a.operator!==`/`)return;let o=C(a.left),s=e.sourceCode.getText(ih(a.left)),c=rh(o)?s:`(${s})`,l=e.sourceCode.getText(ih(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`}}),oh={componentName:`Portal`,fileNames:[`portal`],markers:[`target`]},sh=new Set([`@rbxts/react-roblox`,`react-dom`]),ch=new Set([`.jsx`,`.tsx`]);function lh(e){return e.type===`ImportBinding`}function uh(e){return e.parent?.type===`ImportDeclaration`?e.parent:void 0}function dh(e){if(e===void 0)return!1;for(let t of e.defs){if(!lh(t)||t.node.type!==`ImportSpecifier`)continue;let e=uh(t.node);if(e===void 0||!sh.has(e.source.value))continue;let{imported:n}=t.node;if(n.type===`Identifier`&&n.name===`createPortal`)return!0}return!1}function fh(e){if(e===void 0)return!1;for(let t of e.defs){if(!lh(t)||t.node.type!==`ImportNamespaceSpecifier`)continue;let e=uh(t.node);if(e!==void 0&&sh.has(e.source.value))return!0}return!1}function ph(e,{callee:t}){return t.type===`Identifier`?dh(T(e.getScope(t),t.name)):t.type!==`MemberExpression`||t.computed||t.property.type!==`Identifier`||t.property.name!==`createPortal`||t.object.type!==`Identifier`?!1:fh(T(e.getScope(t.object),t.object.name))}function mh(e,t){return e.type===`JSXElement`||e.type===`JSXFragment`?t.getText(e):`{${t.getText(e)}}`}function hh(e,t,n){if(t.arguments.length!==2)return;let[r,i]=t.arguments;if(r===void 0||i===void 0)return;let a=mh(r,n);return`<${e} target={${n.getText(i)}}>${a}</${e}>`}const gh=t({create(e){let{filename:t,sourceCode:n}=e,r=t===``?{found:!1}:Rp(t,oh),i=new Set;return{CallExpression(a){if(!ph(n,a)||a.arguments.length!==2||!(i.size>0||r.found))return;let s=ch.has(o(t))&&i.size===1,[c]=i,l=s&&c!==void 0?hh(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){Lp(e,Ip(e,t,oh),oh.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 _h(e){return e===void 0?!1:e.type===`TSTypeAnnotation`?_h(e.typeAnnotation):e.type===`TSNumberKeyword`||e.type===`TSTypeReference`&&e.typeName.type===`Identifier`&&e.typeName.name===`Number`}function vh(e){return e.type!==`PrivateIdentifier`}function yh(e){let t=C(e);return t.type===`Literal`&&!b(t.value)}function bh(e){if(e.type===`Parameter`){let t=e.name;if(t.type===`Identifier`&&t.typeAnnotation!==void 0&&t.typeAnnotation!==null)return!_h(t.typeAnnotation);let{parent:n}=t;return n?.type===`AssignmentPattern`&&yh(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?!_h(t.typeAnnotation):n!=null&&yh(n)}function xh(e,t){let n=T(e.getScope(t),t.name);if(n===void 0)return!1;for(let e of n.defs)if(bh(e))return!0;return!1}function Sh(e,t){if(t.type===`ParenthesizedExpression`)return Sh(e,t.expression);if(t.type===`TSAsExpression`||t.type===`TSTypeAssertion`)return!_h(t.typeAnnotation);if(yh(t))return!0;let n=C(t);return n.type===`Identifier`&&xh(e,n)}function Ch(e,t){return e.getText(C(t))}function wh(e){let t=e;for(;t.type===`ParenthesizedExpression`;)t=t.expression;return t}function Th(e,t){let n=wh(t);return n.type===`SequenceExpression`?`(${e.getText(n)})`:e.getText(n)}function Eh(e,t){if(t.test.type!==`BinaryExpression`)return;let{alternate:n,consequent:r,test:i}=t,{left:a,operator:o,right:s}=i;if(!(vh(a)&&vh(s))||!(L(a)&&L(s))||Sh(e,a)||Sh(e,s))return;let c=Ch(e,a),l=Ch(e,s),u=Ch(e,n),d=Ch(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(E(t,n,`math`))return;let r=Eh(t,n);if(r===void 0||n.test.type!==`BinaryExpression`)return;let{left:i,right:a}=n.test;if(!(vh(i)&&vh(a)))return;let o=Th(t,i),s=Th(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`}}),Oh=new Set([`ReadonlyRecord`,`Record`]);function kh(e){return e.type===`TSTypeReference`&&e.typeName.type===`Identifier`&&Oh.has(e.typeName.name)}function Ah(e){if(e.id.type!==`Identifier`)return;let t=ce(e.id);if(t===void 0)return;let{typeAnnotation:n}=t;if(!kh(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 jh(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 Mh=t({create(e){let{sourceCode:t}=e;return{VariableDeclarator(n){if(n.id.type!==`Identifier`)return;let r=n.id.name;if(!jh(n.init))return;let i=Ah(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`}}),Nh=/^[A-Z][A-Z0-9_]*$/u;function Ph(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 Fh=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`||!Nh.test(r.name))){if(!t){e.report({messageId:`mustUseConst`,node:n});return}Ph(e.sourceCode.getScope(n))||e.report({messageId:`mustBeModuleScope`,node:n})}}}},meta:{docs:{description:`Prefer screaming snake case constants at module scope or the allowed top-level wrapper 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`}}),Ih=new Set([`end`,`loc`,`parent`,`range`,`start`]),Lh=new Set([`.jsx`,`.tsx`]),Rh=new Set([`PaddingBottom`,`PaddingLeft`,`PaddingRight`,`PaddingTop`]),zh={componentName:`DirectionalPadding`,fileNames:[`directional-padding`],markers:[`horizontal`,`vertical`]},Bh={componentName:`EqualPadding`,fileNames:[`equal-padding`],markers:[`padding`]};function Vh(e,t){return Object.is(e,t)?!0:Array.isArray(e)?Array.isArray(t)&&Hh(e,t):Array.isArray(t)||typeof e!=`object`||typeof t!=`object`||e===null||t===null||!(x(e)&&x(t))?!1:Uh(e,t)}function Hh(e,t){if(e.length!==t.length)return!1;let n=0;for(let r of e)if(!Vh(r,t[n++]))return!1;return!0}function Uh(e,t){let n=Object.entries(e).filter(([e])=>!Ih.has(e)),r=Object.entries(t).filter(([e])=>!Ih.has(e));if(n.length!==r.length)return!1;for(let[e,r]of n)if(!(e in t)||!Vh(r,t[e]))return!1;return!0}function Wh(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 Gh({value:e}){if(e!==null){if(e.type===`JSXExpressionContainer`)switch(e.expression.type){case`JSXElement`:case`JSXEmptyExpression`:case`JSXFragment`:return;default:return C(e.expression)}return e.type===`Literal`?e:void 0}}function Kh(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(!Rh.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 qh({value:e},t){if(e!==null)switch(e.type){case`JSXExpressionContainer`:case`Literal`:return t.getText(e);default:return}}function Jh(e,t,n,r){let i=qh(n.paddingTop,r);if(i===void 0)return;if(t===`preferEqualPadding`)return`<${e} padding=${i} />`;let a=qh(n.paddingLeft,r);if(a!==void 0)return`<${e} horizontal=${i} vertical=${a} />`}function Yh(e){let t=Gh(e.paddingBottom),n=Gh(e.paddingLeft),r=Gh(e.paddingRight),i=Gh(e.paddingTop);if(t===void 0||n===void 0||r===void 0||i===void 0)return;if(Vh(i,t)&&Vh(i,n)&&Vh(i,r))return`preferEqualPadding`;let a=Vh(i,t),o=Vh(n,r);return a&&o?`preferDirectionalPadding`:void 0}function Xh(e){return e.type===`JSXIdentifier`}const Zh=t({create(e){let{filename:t}=e,n=t===``?{found:!1}:Rp(t,zh),r=t===``?{found:!1}:Rp(t,Bh),i=new Set,a=new Set;return{ImportDeclaration(e){let n=Ip(e,t,zh),r=Ip(e,t,Bh);Lp(e,n,zh.componentName,i),Lp(e,r,Bh.componentName,a)},JSXElement(s){if(Wh(s))return;let{openingElement:c}=s;if(!Xh(c.name)||c.name.name!==`uipadding`)return;let l=Kh(c);if(l===void 0)return;let u=Yh(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=Lh.has(o(t))&&d.size===1,[m]=[...d],h=p&&m!==void 0?Jh(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`}});function Qh(e){return e>=`0`&&e<=`9`}function $h(e){return e>=`a`&&e<=`z`}function eg(e){return e>=`A`&&e<=`Z`}function tg(e){return Qh(e)||$h(e)||eg(e)}function ng(e,t,n){return Qh(e)!==Qh(t)||$h(e)&&eg(t)?!0:eg(e)&&eg(t)&&n!==void 0&&$h(n)}function rg(e,t){let n=0;for(let r=1;r<t.length;r+=1){let i=r+1<t.length?t.charAt(r+1):void 0;ng(t.charAt(r-1),t.charAt(r),i)&&(e.push(t.slice(n,r)),n=r)}e.push(t.slice(n))}function ig(e){let t=[],n;for(let r=0;r<e.length;r+=1){if(tg(e.charAt(r))){n??=r;continue}n!==void 0&&(rg(t,e.slice(n,r)),n=void 0)}return n!==void 0&&rg(t,e.slice(n)),t}function ag(e){let t=ig(e),n=``;for(let e of t)e.length!==0&&(n+=`${e.slice(0,1).toUpperCase()}${e.slice(1).toLowerCase()}`);return n}const og=/^\d/u;function sg(e){if(e.id.type===`Identifier`)return e.id.name;if(!(e.id.type!==`Literal`||!y(e.id.value)))return og.test(e.id.value)?void 0:e.id.value}const cg=t({createOnce(e){return{TSEnumDeclaration(t){let n=t.id.name;ag(n)!==n&&e.report({data:{identifier:n},messageId:`notPascalCase`,node:t.id})},TSEnumMember(t){let n=sg(t);n!==void 0&&ag(n)!==n&&e.report({data:{identifier:n},messageId:`notPascalCase`,node:t.id})}}},meta:{docs:{description:`Enforce PascalCase names for enums and enum members.`,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 lg(e,t){return Ue(e)&&e.value===t}function ug(e){if(e===`ColorSequence`)return`ColorSequenceKeypoint`;if(e===`NumberSequence`)return`NumberSequenceKeypoint`}function dg(e,t,n){if(e.type!==`NewExpression`||!Fe(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 lg(r,n)?i:void 0}function fg(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 pg(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=dg(a,r,0),c=dg(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 mg=t({createOnce(e){return{NewExpression(t){if(t.callee.type!==`Identifier`)return;let n=t.callee.name,r=ug(n);if(r===void 0)return;let i=fg(e,t,n)??pg(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 identical direct arguments and 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 hg(e){return e.length===2}function gg(e){return e.type===`MemberExpression`&&!e.computed}function _g(e,t){if(e.type!==`CallExpression`)return!1;let{callee:n}=e;if(!gg(n)||n.property.name!==t||!hg(e.arguments))return!1;let[r,i]=e.arguments;return r.type!==`SpreadElement`&&i.type!==`SpreadElement`}function vg(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||!_g(i,t))return;let{callee:a}=i;if(!gg(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 yg=new Set([`ConditionalExpression`,`DoWhileStatement`,`ForStatement`,`IfStatement`,`WhileStatement`]);function bg(e){return x(e)&&`parent`in e}function xg(e){return x(e)&&y(e.type)?e.type:void 0}function Sg(e){return x(e)&&y(e.operator)?e.operator:void 0}function Cg(e){return xg(e)===`LogicalExpression`&&Sg(e)===`&&`}function wg(e){return x(e)&&e.type===`Identifier`&&y(e.name)}function Tg(e){let{parent:t}=e;if(Cg(t))return!0;let n=xg(t);if(n===void 0||!yg.has(n))return!1;let r=e;for(;r!==void 0&&r!==t&&bg(r);){let e=r.parent;if(Cg(e))return!0;r=e}return!1}function Eg(e){if(e.isWrite())return!1;let{identifier:t}=e;return wg(t)?Tg(t):!1}function Dg(e,t,n){return T(n.getScope(t),e)?.references.some(Eg)??!1}function Og(e,t){return e.every(e=>Dg(e.variableName,e.variableDeclaration,t))}const kg=/^[\s;]*$/u;function Ag(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 kg.test(a)}function jg(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 Ng(e,t){if(e.length<2)return;let{sourceCode:n}=t;if(!Og(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 Pg=t({create(e){let{sourceCode:t}=e,n=[],r=[];function i(){n.length>=2&&jg(n,e),n=[]}function a(){r.length>=2&&Ng(r,e),r=[]}function o(){i(),a()}return{":statement:not(VariableDeclaration[kind='const'])":o,"Program:exit":o,"VariableDeclaration[kind='const']"(e){let s=vg(e,`get`);if(s!==void 0){let e=n.at(-1);e!==void 0&&!Ag(e,s,t)&&i(),n.push(s),a();return}let c=vg(e,`has`);if(c!==void 0){let e=r.at(-1);e!==void 0&&!Ag(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`}}),Fg=new Set([`alumni`,`axes`,`cacti`,`children`,`criteria`,`data`,`dice`,`feet`,`fungi`,`geese`,`indices`,`matrices`,`media`,`men`,`mice`,`octopi`,`people`,`phenomena`,`teeth`,`vertices`,`women`]),Ig=new Set([`alias`,`analysis`,`axis`,`basis`,`business`,`class`,`crisis`,`glass`,`news`,`series`,`species`,`status`,`thesis`]),Lg=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`]),Rg=/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/gu,zg=/^[A-Z]{2,}[sS]?$/u;function Bg(e){let t=[],n=0;for(let r of e.split(`_`)){let e=r.match(Rg);if(e!==null)for(let r of e)t[n++]=r}return t}const Vg=/^\d+$/u;function Hg(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(!(n===void 0||Vg.test(n)))return{lowercased:n.toLowerCase(),original:n}}}const Ug=/[sS]$/u,Wg=/(?:ches|shes|xes|zes)$/u;function Gg(e,t){return Fg.has(e)||Lg.has(e)?!0:Ig.has(e)?!1:zg.test(t)&&Ug.test(t)||e.endsWith(`ies`)||e.endsWith(`ves`)||Wg.test(e)||e.endsWith(`s`)&&!e.endsWith(`ss`)&&!e.endsWith(`us`)&&!e.endsWith(`is`)}function Kg(e){if(zg.test(e)&&Ug.test(e))return!0;let t=Hg(Bg(e));return t!==void 0&&Gg(t.lowercased,t.original)}const qg=t({createOnce(e){return{TSEnumDeclaration({id:t}){let{name:n}=t;Kg(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 Jg(e){return e.type===`JSXElement`||e.type===`JSXFragment`}function Yg(e,t,n){return e.type===`Super`||t.type===`Super`?e.type===`Super`&&t.type===`Super`:Qg(e,t,n)}function Xg(e,t,n){return e.type===`SpreadElement`||t.type===`SpreadElement`?e.type!==`SpreadElement`||t.type!==`SpreadElement`?!1:Qg(e.argument,t.argument,n):Qg(e,t,n)}function Zg(e,t,n){return e.type===`PrivateIdentifier`||t.type===`PrivateIdentifier`?e.type===`PrivateIdentifier`&&t.type===`PrivateIdentifier`&&e.name===t.name:Qg(e,t,n)}function Qg(e,t,n){let r=C(e),i=C(t);if(r.type!==i.type)return!1;switch(r.type){case`BinaryExpression`:return i.type===`BinaryExpression`&&$g(r,i,n);case`CallExpression`:return i.type===`CallExpression`&&e_(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`&&t_(r,i,n);case`MemberExpression`:return i.type===`MemberExpression`&&n_(r,i,n);case`ThisExpression`:return i.type===`ThisExpression`;case`UnaryExpression`:return i.type===`UnaryExpression`&&r.operator===i.operator&&Qg(r.argument,i.argument,n);default:return n.getText(r)===n.getText(i)}}function $g(e,t,n){return e.operator===t.operator&&Zg(e.left,t.left,n)&&Zg(e.right,t.right,n)}function e_(e,t,n){if(e.optional!==t.optional||!Yg(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||!Xg(i,a,n))return!1}return!0}function t_(e,t,n){return e.operator===t.operator&&Qg(e.left,t.left,n)&&Qg(e.right,t.right,n)}function n_(e,t,n){return e.computed!==t.computed||e.optional!==t.optional||!Yg(e.object,t.object,n)?!1:e.computed?Zg(e.property,t.property,n):r_(e.property,t.property)}function r_(e,t){return(e.type===`Identifier`&&t.type===`Identifier`||e.type===`PrivateIdentifier`&&t.type===`PrivateIdentifier`)&&e.name===t.name}function i_(e){let t=C(e);if(t.type===`UnaryExpression`&&t.operator===`!`)return C(t.argument)}function a_(e){let t=C(e);if(t.type===`BinaryExpression`&&(t.operator===`===`||t.operator===`!==`))return{left:t.left,operator:t.operator,right:t.right}}function o_(e){let t=C(e);return t.type===`Identifier`||t.type===`ThisExpression`||t.type===`Literal`}function s_(e){return nt(e)&&o_(e)}function c_(e,t,n){let r=i_(e);if(r&&Qg(r,t,n))return{isFixSafe:o_(r)};let i=i_(t);if(i&&Qg(i,e,n))return{isFixSafe:o_(i)};let a=a_(e),o=a_(t);if(!(a&&o)||!(a.operator===`===`&&o.operator===`!==`||a.operator===`!==`&&o.operator===`===`))return;let s=Zg(a.left,o.left,n)&&Zg(a.right,o.right,n),c=Zg(a.left,o.right,n)&&Zg(a.right,o.left,n);if(s||c)return{isFixSafe:s_(a.left)&&s_(a.right)&&s_(o.left)&&s_(o.right)}}function l_(e){return e.type===`JSXText`&&e.value.trim()===``}function u_(e){if(e.type===`JSXExpressionContainer`&&e.expression.type!==`JSXEmptyExpression`&&e.expression.type===`LogicalExpression`&&e.expression.operator===`&&`&&Jg(e.expression.right))return{condition:e.expression.left,logical:e.expression,node:e,renderBranch:e.expression.right}}const d_=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||!l_(t))break;n+=1}let r=e[n];return r===void 0?void 0:u_(r)}function r(n,r){let i=c_(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=u_(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 f_(e){return e.type===`PrivateIdentifier`}function p_(e){return e===`+`||e===`-`||e===`*`||e===`/`||e===`%`}function m_(e){return e.type===`BinaryExpression`&&p_(e.operator)&&!f_(e.left)&&!f_(e.right)}function h_(e){switch(e.type){case`BinaryExpression`:{if(!m_(e))return;let{left:t,right:n}=e,r=h_(t),i=h_(n);return r===void 0||i===void 0?void 0:`${r} ${e.operator} ${i}`}case`Identifier`:return e.name;case`Literal`:return ie(e.value)?String(e.value):void 0;case`UnaryExpression`:{let t=h_(e.argument);return t===void 0||e.operator!==`+`&&e.operator!==`-`?void 0:`${e.operator}${t}`}default:return}}function g_(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 __(e){switch(e.type){case`BinaryExpression`:{if(!m_(e))return;let{left:t,right:n}=e,r=__(t),i=__(n);return r===void 0||i===void 0?void 0:g_(e.operator,r,i)}case`Identifier`:return;case`Literal`:return Number(e.value);case`UnaryExpression`:{let t=__(e.argument);return t===void 0?void 0:e.operator===`+`?t:e.operator===`-`?-t:void 0}default:return}}function v_(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=h_(t),o=h_(n),s=h_(r),c=h_(i);if(a!==void 0&&o!==void 0&&s!==void 0&&c!==void 0)return{offsetXText:o,offsetYText:c,scaleXText:a,scaleYText:s}}const y_=t({create(e){return{NewExpression(t){if(!Fe(t,`UDim2`))return;let n=v_(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=__(r),c=__(i),l=__(a),u=__(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 b_(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)Lo(t.init,`useState`)&&(r+=1);r<5||e.report({data:{componentName:n,useStateCount:String(r)},messageId:`excessiveUseState`,node:t})}const x_=t({create(e){return{FunctionDeclaration(t){t.id===null||!K(t.id.name)||`body`in t&&t.body&&b_(e,t.body,t.id.name)},VariableDeclarator(t){Ro(t)&&t.init&&`body`in t.init&&t.init.body&&`name`in t.id&&b_(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`}}),S_=`replace`,C_=`suggestion`,w_=`A more descriptive name will do too.`,T_={args:`parameters`,char:`character`,dt:`deltaTime`,plr:`player`},E_=[`char`],D_={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}},O_={EmberENV:!0,defaultProps:!0,devDependencies:!0,getDerivedStateFromProps:!0,getInitialProps:!0,getServerSideProps:!0,getStaticProps:!0,iOS:!0,obj:!0,propTypes:!0,setupFilesAfterEnv:!0},k_=[`i18n`,`l10n`],A_=/(?=[A-Z])|(?<=[_.-])/u,j_=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(`.`)),M_=/^[A-Za-z]+$/u;function N_(e){return e>=65&&e<=90||e>=97&&e<=122||e===36||e===95}function P_(e){return e<192?N_(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 F_(e){return!!(P_(e)||e>=48&&e<=57||e===8204||e===8205||e>=768&&e<=865||e>=8240&&e<=8266)}function I_(e){if(e.length===0||j_.has(e))return!1;let t=e.codePointAt(0);if(t===void 0||!P_(t))return!1;let n=t>65535?2:1;for(;n<e.length;){let t=e.codePointAt(n);if(t===void 0||!F_(t))return!1;n+=t>65535?2:1}return!0}function L_(e){let t=[e],n=1;for(let r of e.childScopes){let e=L_(r);for(let r of e)t[n++]=r}return t}function R_(e,t){return!t.some(t=>T(t,e)!==void 0)}function z_(e,t,n){let r=e;if(!(!I_(r)&&(r=`${r}_`,!I_(r)))){for(;!(R_(r,t)&&n(r,t));)r=`${r}_`;return r}}function B_(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 V_(e,t){return e.range[0]===t.range[0]&&e.range[1]===t.range[1]}function H_(e){let{parent:t}=e;return!ve(t)||t.local!==e?!1:V_(t.local,t.imported)}function U_(e){let{parent:t}=e;return!ye(t)||t.local!==e?!1:V_(t.local,t.exported)}function W_(e){if(!A(e))return!1;let{parent:t}=e;return be(t)&&t.shorthand&&t.value===e}function G_(e){if(!A(e))return!1;let{parent:t}=e;if(!Qe(t)||t.left!==e)return!1;let n=t.parent;return be(n)?n.shorthand:!1}function K_(e){if(!A(e))return!1;let{parent:t}=e;if(ke(t)&&t.local===e||Ae(t)&&t.local===e)return!0;if(ve(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&&et(t.init)}function q_(e){if(!A(e))return!1;let{parent:t}=e;if(k(t)&&t.id===e){let e=t.parent;return je(e)?Me(e.parent):!1}return Ne(t)&&t.id===e||Ie(t)&&t.id===e||Le(t)&&t.id===e?Me(t.parent):!1}function J_(e){return B_(e).every(e=>!(q_(e)||me(e)))}function Y_(e,t,n){if(A(e))return W_(e)||G_(e)?n.replaceText(e,`${e.name}: ${t}`):H_(e)?n.replaceText(e,`${e.name} as ${t}`):U_(e)?n.replaceText(e,`${t} as ${e.name}`):n.replaceText(e,t)}function X_(e,t,n){let r=[],i=0;for(let a of B_(e)){let e=Y_(a,t,n);e!==void 0&&(r[i++]=e)}return r}function Z_(e){if(!A(e))return!1;let{parent:t}=e;if(N(t)&&t.property===e&&!t.computed){let e=t.parent;if(xe(e)&&e.left===t)return!0}return be(t)&&t.key===e&&!t.computed&&!t.shorthand&&(Ke(t.parent)||qe(t.parent))||Re(t)&&t.key===e&&!t.computed||ye(t)&&t.exported===e&&t.local!==e?!0:(De(t)||Oe(t))&&t.key===e&&!t.computed}function Q_(e){if(!A(e))return!1;let{parent:t}=e;return be(t)&&t.key===e&&!t.computed&&!t.shorthand&&(Ke(t.parent)||qe(t.parent))}function $_(e){if(e.type===`ImportBinding`){let{parent:t}=e;if(t!==null&&ge(t)&&M(t.source))return t.source.value}if(e.type===`Variable`){let{node:t}=e;if(k(t)&&t.init!==null&&et(t.init)){let[e]=t.init.arguments;if(e!==void 0&&M(e))return e.value}}}function ev(e){let t=$_(e);return t!==void 0&&!t.includes(`node_modules`)&&(t.startsWith(`.`)||t.startsWith(`/`))}function tv(e,t){return e===!1?!1:e!==`internal`||ev(t)}function nv(e){return e.defs.length===1&&e.defs[0]?.type===`ClassName`}const rv=/^(?:[#$./]|[~@]\/)/u;function iv(e){return!rv.test(e)}function av(e){if(e?.type!==`ImportBinding`)return!1;let{parent:t}=e;return t===null||!ge(t)||!M(t.source)?!1:iv(t.source.value)}function ov(e){if(e.type===`Identifier`)return e;if(e.type===`TSQualifiedName`)return ov(e.left)}function sv(e,t){if(e.type===`TSImportType`)return iv(e.source.value);if(e.type!==`TSTypeReference`)return!1;let n=ov(e.typeName);if(n===void 0)return!1;let r=T(t.getScope(n),n.name)?.defs[0];return av(r)}function cv(e){let{parent:t}=e;if(k(t)&&t.init===e)return ce(t.id)?.typeAnnotation;if((t.type===`TSAsExpression`||t.type===`TSSatisfiesExpression`||t.type===`TSTypeAssertion`)&&t.expression===e)return t.typeAnnotation}function lv(e,t){let{parent:n}=e,r;return N(n)&&n.property===e&&!n.computed?r=n.object:He(n)&&n.right===e&&(r=n.left),r===void 0||!A(r)?!1:T(t.getScope(e),r.name)?.defs[0]?.type===`ImportBinding`}function uv(e,t){let n=e.parent;if(!_e(n))return!1;let{callee:r}=n;if(!j(r))return!1;let i=T(t.getScope(r),r.name)?.defs[0];return av(i)}function dv(e,t){if(lv(e,t))return!0;if(!Q_(e))return!1;let n=e.parent.parent;if(n===null||!Ke(n))return!1;let r=cv(n);return r!==void 0&&sv(r,t)||uv(n,t)}function fv(e,t,n){return e?t:n}const pv=/(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/u,mv=/(?<=[a-zA-Z])(?=\d)|(?<=\d)(?=[a-zA-Z])/u,hv=/[a-zA-Z]+|\d+|[^a-zA-Z\d]+/gu,gv=/[.+^${}()|[\]\\]/gu,_v=/^\/(?<first>.+)\/(?<second>[dgimsuvy]*)$/u,vv=new WeakMap;function yv(e){return e===e.toUpperCase()}function bv(e){return yv(e.charAt(0))}function xv(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Sv(e){return e.charAt(0).toLowerCase()+e.slice(1)}function Cv(e){return e.includes(`u`)||e.includes(`v`)?e:`${e}u`}function wv(e){let t=e.match(hv);if(t===null)return[e];let n=[],r=0;for(let e of t){if(!M_.test(e)){n[r++]=e;continue}r=Tv(e,n,r)}return n}function Tv(e,t,n){let r=n;for(let n of e.split(mv))if(n.length!==0)for(let e of n.split(pv))e.length>0&&(t[r++]=e);return r}const Ev=/\$\d+/gu;function Dv(e){let t=e.match(Ev);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 Ov(e){let t=Dv(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 kv(e){let t=[],n=[],r=0;for(let[i,a]of e)a&&(t[r]=Sv(i),n[r]=xv(i),r+=1);return{lowerFirst:t.toSorted((e,t)=>e.localeCompare(t)),upperFirst:n.toSorted((e,t)=>e.localeCompare(t))}}function Av(e,t){if(e.startsWith(`/`)){let n=_v.exec(e);if(n?.groups!==void 0)return{matcher:{original:e,pattern:RegExp(`^${n.groups.first}$`,Cv(n.groups.second??``)),replacement:t,replacementPatterns:Ov(t)},type:`pattern`}}if(e.includes(`*`)||e.includes(`?`)){let n=e.replaceAll(gv,String.raw`\$&`).replaceAll(`*`,`(.*)`).replaceAll(`?`,`(.)`),r=0,i=t.replaceAll(`*`,()=>`$${++r}`);return{matcher:{original:e,pattern:RegExp(`^${n}$`,`u`),replacement:i,replacementPatterns:Ov(i)},type:`pattern`}}return{original:e,replacement:t,type:`exact`}}function jv(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 Mv(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 Nv(e,t){return e===`internal`||typeof e==`boolean`?e:t}function Pv(e){if(!x(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r==`boolean`&&(t[n]=r);return t}function Fv(e,t){return typeof e==`boolean`?e:t}function Iv(e){let t=x(e)?e:void 0,n=Pv(t?.allowList),r=fv(Fv(t?.extendDefaultAllowList,!0),n===void 0?O_:{...O_,...n},n??{});return new Map(Object.entries(r))}function Lv(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 Rv(e){let t=x(e)?e:void 0,n=Fv(t?.extendDefaultReplacements,!0),r=Lv(t?.replacements),i=new Set([...Object.keys(D_),...Object.keys(r)]),a=[];for(let e of i){let t=r[e],i=n?D_[e]??{}:{},o=t===!1?{}:fv(t===void 0,i,{...i,...t}),s=new Map(Object.entries(o));vv.set(s,kv(s)),a.push([e,s])}return new Map(a)}function zv(e){let t=x(e)?e:void 0,n=[];for(let e of k_)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 Bv(e){let t=x(e)?e:void 0,n=new Set(E_);if(!S(t?.allowPropertyAccess))return n;for(let e of t.allowPropertyAccess)n.add(e);return n}function Vv(e){let t=x(e)?e:void 0,n=new Map,r=new Set,i=[],a=[],o=re(t?.shorthands)?t.shorthands:{},s={...T_,...o};for(let[e,t]of Object.entries(s)){let r=Av(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=Av(e,``);t.type===`exact`?r.add(t.original):i.push(t.matcher)}return{exactMatchers:n,ignoreExact:r,ignoreMatchers:i,matchers:a}}function Hv(e){let t=x(e)?e:void 0;return{allowList:Iv(t),allowPropertyAccess:Bv(t),checkDefaultAndNamespaceImports:Nv(t?.checkDefaultAndNamespaceImports,`internal`),checkFilenames:Fv(t?.checkFilenames,!0),checkProperties:Fv(t?.checkProperties,!1),checkShorthandImports:Nv(t?.checkShorthandImports,`internal`),checkShorthandProperties:Fv(t?.checkShorthandProperties,!0),checkVariables:Fv(t?.checkVariables,!0),ignore:zv(t),replacements:Rv(t),shorthandConfiguration:Vv(t)}}function Uv(e,t){if(yv(e)||t.allowList.get(e)===!0)return[];let n=t.replacements.get(Sv(e))??t.replacements.get(e)??t.replacements.get(xv(e));if(n===void 0)return[];let r=vv.get(n);return r===void 0?[]:bv(e)?r.upperFirst:r.lowerFirst}function Wv(e,t){if(e.length===0)return;let n=wv(e),r=[],i=!1;for(let e of n){let n=jv(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 Gv(e,t){if(Mv(e,t))return!0;let n=wv(e),r=!1;for(let e of n){let n=jv(e,t);if(n!==void 0&&(r=!0,!Mv(n.matchedWord,t)))return!1}return r}function Kv(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 qv(e,t,n=3){if(t.allowList.get(e)===!0||t.ignore.some(t=>t.test(e)))return{total:0};let r=Wv(e,t.shorthandConfiguration);if(r!==void 0)return Gv(e,t.shorthandConfiguration)?{total:0}:{samples:[r.replaced],total:1};if(yv(e))return{total:0};let i=Uv(e,t);if(i.length>0)return{samples:i.slice(0,n),total:i.length};let a=e.split(A_).filter(Boolean),o=!1,s=[],c=0;for(let e of a){let n=Uv(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:Jv(s,l,n).map(e=>e.join(``)),total:l}}function Jv(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]??``;M_.test(n)&&e[t-1]?.endsWith(n)===!0&&e.splice(t,1)}return i}function Yv(e,t){let n=t.replacements.get(e);if(n===void 0)return!1;let r=vv.get(n);return r!==void 0&&r.lowerFirst.length>0}function Xv(e,t,n){let{samples:r=[],total:i}=t;if(i===1)return{data:{discouragedName:e,nameTypeText:n,replacement:r[0]??``},messageId:S_};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:C_}}function Zv(e){return function(t,n){return n.every(n=>{let r=e.get(n);return r===void 0||!r.has(t)})}}function Qv(e){let{parent:t}=e;return N(t)&&t.property===e&&!t.computed||He(t)&&t.right===e}function $v(e,t,n,r){r({...Xv(e.name,{samples:[t],total:1},n?`property`:`variable`),node:e})}function ey(e,t,n){return K_(t)&&!tv(n.checkDefaultAndNamespaceImports,e)||H_(t)&&!tv(n.checkShorthandImports,e)?!0:!n.checkShorthandProperties&&W_(t)}function ty(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(N(n)&&!n.computed&&j(n.object)&&n.object.name===`Players`&&j(n.property)&&n.property.name===`LocalPlayer`)return`localPlayer`}function ny(e,t,n,r){let i=[],a=0,o=0;for(let s of e){let e=z_(s,t,n);if(e!==void 0){if(e!==s&&Yv(s,r)){o+=1;continue}e.length>0&&(i[a++]=e)}}return{droppedDiscouraged:o,safeSamples:i}}function ry(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 iy(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 X_(n,r,e)},node:o})}function ay(e,t,n,r,i){let[a]=e.defs;if(a===void 0)return;let o=a.name;if(!j(o)||ey(a,o,t))return;let s=ry(a,e,r),c=ty(e),l=c===void 0?qv(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}=ny(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,_=Xv(o.name,{samples:g,total:h},`variable`);if(h===1&&p.length===1&&J_(e)){let[t]=p;if(t!==void 0){iy(i,_,e,t,d,n,o);return}}i({..._,node:o})}function oy(e,t){if(!nv(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 sy(e,t){for(let n of L_(e))for(let e of n.variables)oy(e,t)}function cy(e,t,n,r){let i=Z_(e),a=Qv(e);dv(e,r)||ly(e,i,a,t,n)||t.checkProperties&&i&&uy(e,t,n)}function ly(e,t,n,r,i){let a=Wv(e.name,r.shorthandConfiguration);return a===void 0||!(t||n)?!1:(Gv(e.name,r.shorthandConfiguration)||!r.checkShorthandProperties||n&&Kv(e.name,a,r.allowPropertyAccess)||$v(e,a.replaced,!0,i),!0)}function uy(e,t,n){let r=qv(e.name,t);if(r.total===0)return;let i=Xv(e.name,r,`property`),a=dy(e,r.samples);if(a!==void 0){n({...i,fix(t){return t.replaceText(e,a)},node:e});return}n({...i,node:e})}function dy(e,t){if(t?.length!==1||!Q_(e))return;let[n]=t,{parent:r}=e;if(n!==void 0&&be(r)&&M(r.value)&&I_(n))return n}const fy=t({create(e){let t=Hv(e.options[0]),n=e.physicalFilename,r=new WeakMap,i=Zv(r),{sourceCode:a}=e;function o(n){ay(n,t,r,i,e.report)}return{Identifier(n){!A(n)||n.name===`__proto__`||cy(n,t,e.report,a)},JSXOpeningElement({name:n}){if(!(t.checkVariables&&me(n)&&bv(n.name)))return;let r=qv(n.name,t);if(r.total===0)return;let i=Xv(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=qv(o===-1?a:a.slice(0,o),t);if(c.total>0&&c.samples){let t=c.samples.map(e=>`${e}${s}`);e.report({...Xv(a,{samples:t,total:c.total},`filename`),node:r})}}t.checkVariables&&sy(a.getScope(r),o)}}},meta:{docs:{description:`Prevent abbreviations.`,recommended:!1},fixable:`code`,messages:{[S_]:`The {{nameTypeText}} \`{{discouragedName}}\` should be named \`{{replacement}}\`. ${w_}`,[C_]:`Please rename the {{nameTypeText}} \`{{discouragedName}}\`. Suggested names are: {{replacementsText}}. ${w_}`},schema:[{additionalProperties:!1,properties:{allowList:{additionalProperties:{type:`boolean`},default:O_,defaultLabel:`default allow list`,description:`Names that should be allowed even when they match a discouraged abbreviation.`,type:`object`},allowPropertyAccess:{default:E_,description:`Property names that may keep abbreviated member access.`,items:{type:`string`},type:`array`},checkDefaultAndNamespaceImports:{default:`internal`,description:`Whether default and namespace import local names should be checked.`,enum:[!1,!0,`internal`]},checkFilenames:{default:!0,description:`Whether file names should be checked for abbreviations.`,type:`boolean`},checkProperties:{default:!1,description:`Whether object, member, and JSX property names should be checked.`,type:`boolean`},checkShorthandImports:{default:`internal`,description:`Whether renamed shorthand imports should be checked.`,enum:[!1,!0,`internal`]},checkShorthandProperties:{default:!0,description:`Whether shorthand object property names should be checked.`,type:`boolean`},checkVariables:{default:!0,description:`Whether variable, function, class, and component names should be checked.`,type:`boolean`},extendDefaultAllowList:{default:!0,description:`Merge configured allowList entries with the default allow list.`,type:`boolean`},extendDefaultReplacements:{default:!0,description:`Merge configured replacements with the default replacement map.`,type:`boolean`},ignore:{default:k_,description:`Names or regular expression patterns that should be ignored.`,items:{type:`string`},type:`array`},ignoreShorthands:{default:[],description:`Shorthand names that should not be reported.`,items:{type:`string`},type:`array`},replacements:{additionalProperties:{oneOf:[{enum:[!1]},{additionalProperties:{type:`boolean`},type:`object`}]},default:D_,defaultLabel:`default replacement map`,description:`Replacement suggestions for discouraged names.`,type:`object`},shorthands:{additionalProperties:{type:`string`},default:T_,defaultLabel:`default shorthands`,description:`Shorthand names and the full names they should expand to.`,type:`object`}},type:`object`}],type:`suggestion`}}),py=/^use[A-Z0-9].*$/u;function my(e){return py.test(e)}function hy(e){if(e.id!==null)return e.id.name}function gy(e){return e.id.type===`Identifier`?e.id.name:void 0}function _y(e){let t=hy(e);return t!==void 0&&my(t)}function vy({parent:e}){if(e.type!==`VariableDeclarator`)return!1;let t=gy(e);return t!==void 0&&my(t)}function yy(e,t){let n=e.get(t);if(n!==void 0&&n.length!==0)return n.at(-1)}function by(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 xy(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 Sy(e,t,n,r){let i=T(e.getScope(t),n);if(i!==void 0){let e=by(i);if(e!==void 0)return e}return yy(r,n)}function Cy(e,t,n){if(e.argument.type===`Identifier`){let r=Sy(t,e,e.argument.name,n);return r===void 0?1:wy(r,t,n)}return e.argument.type===`ArrayExpression`?wy(e.argument,t,n):1}function wy(e,t,n){let r=0;for(let i of e.elements){if(i===null){r+=1;continue}if(i.type===`SpreadElement`){r+=Cy(i,t,n);continue}r+=1}return r}function Ty(e,t){let n=T(e.getScope(t),t.name);return n!==void 0&&xy(n)}function Ey(e){let t=gy(e);if(t!==void 0&&e.init?.type===`ArrayExpression`)return{init:e.init,name:t}}function Dy(e,t){let n=Ey(e);if(n===void 0)return;let{init:r,name:i}=n,a=t.get(i)??[];a.push(r),t.set(i,a)}function Oy(e,t){let n=Ey(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 ky=t({create(e){let{sourceCode:t}=e,n=new Map,r=0;function i(e){_y(e)&&(r+=1)}function a(e){_y(e)&&--r}function o(e){vy(e)&&(r+=1)}function s(e){vy(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(Ty(t,e.argument))return;let r=Sy(t,e,e.argument.name,n);if(r===void 0)return;wy(r,t,n)>2&&c(e);return}e.argument.type===`ArrayExpression`&&wy(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){Dy(e,n)},"VariableDeclarator:exit"(e){Oy(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 Ay(e){let{parent:t}=e;if(t.type!==`ObjectExpression`)return!1;let{parent:n}=t;return n.type===`TSSatisfiesExpression`?!0:n.type===`CallExpression`||n.type===`NewExpression`?n.arguments.includes(t):!1}const jy=t({create(e){let t=e.options[0]?.except,n=t===void 0?new Set:new Set(t);function r(t){t.name.endsWith(`Async`)||n.has(t.name)||e.report({messageId:`missingAsyncSuffix`,node:t})}return{FunctionDeclaration(e){!e.async||e.id===null||r(e.id)},MethodDefinition(e){!e.value.async||e.key.type!==`Identifier`||r(e.key)},Property(e){!e.method||e.value.type!==`FunctionExpression`||!e.value.async||e.key.type===`Identifier`&&(Ay(e)||r(e.key))},PropertyDefinition(e){(e.value?.type===`ArrowFunctionExpression`||e.value?.type===`FunctionExpression`)&&(!e.value.async||e.key.type!==`Identifier`||r(e.key))},VariableDeclarator(e){e.id.type===`Identifier`&&(e.init?.type===`ArrowFunctionExpression`||e.init?.type===`FunctionExpression`)&&e.init.async&&r(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 My(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 Ny(e){return e?.type===`module`||e?.type===`global`}function Py(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 Fy(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 Iy(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)Py(t)===i&&n.set(t.local.name,i)}const Ly=t({create(e){let{sourceCode:t}=e,n=My(e.options[0]);if(n.size===0)return{};let r=new Map;return{ImportDeclaration(e){Iy(e,n,r)},NewExpression(i){let a=Fy(i,r,n);a!==void 0&&(Ny(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`},description:`Class names mapped to the import source that must be instantiated at module scope.`,type:`object`}},type:`object`}],type:`problem`}}),Ry=[{allowAsync:!1,name:`useEffect`},{allowAsync:!1,name:`useLayoutEffect`},{allowAsync:!1,name:`useInsertionEffect`}];function zy(e){return x(e)&&y(e.name)&&typeof e.allowAsync==`boolean`}function By(e){if(!x(e))return{environment:`roblox-ts`,hooks:Ry};let t=mn(e.environment)?e.environment:`roblox-ts`,n=e.hooks;if(!Array.isArray(n))return{environment:t,hooks:Ry};let r=[];for(let e of n)zy(e)&&r.push(e);return r.length===0?{environment:t,hooks:Ry}:{environment:t,hooks:r}}function Vy(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 Hy(e,t){let n=T(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=R(t.init);if(n===`useCallback`||n===`useMemo`)return!0}return!1}const Uy=t({create(e){let{environment:t,hooks:n}=By(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=T(e.sourceCode.getScope(r),r.name);if(i===void 0){Hy(e.sourceCode,r)&&s(t,n,`identifierReferencesCallback`);return}let a=Vy(i);if(a===void 0){Hy(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=R(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:{default:[...Ry],description:`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 Wy=new Set([`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`WhileStatement`]),Gy=[`task.wait`,`wait`,`*.WaitForChild`,`*.*Async`];function Ky(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 qy(e,t){return t.filter(t=>t.some(t=>t.index===e.index))}function Jy({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 Yy(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 Xy(e){let t=[e.opener];return e.openerAlternatives&&t.push(...e.openerAlternatives),t}function Zy(e){return e.length===0?`configured opener`:e.length===1?e[0]??`configured opener`:e.join(`' or '`)}function Qy(e){return e?Wy.has(e.type):!1}function $y(e){return e?.type===`SwitchStatement`}function eb(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 tb(e,t){let n=e.label?eb(e.label,e.parent):void 0;if(n)return Qy(n)?n:void 0;let r=e.parent;for(;r;){if(Qy(r))return r;if(t&&$y(r))return;r=r.parent??void 0}}function nb(e){return tb(e,!0)}function rb(e){return tb(e,!1)}function ib(e){return{...e,loopAncestors:[...e.loopAncestors]}}const ab=t({create(e){let[t]=e.options,n={allowConditionalClosers:t?.allowConditionalClosers??!1,allowMultipleOpeners:t?.allowMultipleOpeners??!0,maxNestingDepth:t?.maxNestingDepth??0,pairs:t?.pairs??[]},r=n.pairs.length===0?[{closer:`debug.profileend`,opener:`debug.profilebegin`,platform:`roblox`,requireSync:!0,yieldingFunctions:[...Gy]}]: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(!Xy(r).includes(e))continue;let i=Yy(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(ib)}function y(e){f.set(e,te())}function b(e,t){return i.pairs.find(n=>(t?Xy(n):Yy(n)).includes(e))}function x(e,t){return t.platform===`roblox`&&(t.yieldingFunctions??Gy).some(t=>{if(t.startsWith(`*.`)){let n=t.slice(2);return e.endsWith(`.${n}`)}return e===t})}function ne(e){let t=Yy(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 re(e){a.length=0;for(let t of e)a.push({...t})}function ie(e){let t=p.get(e)??[];t.push(te()),p.set(e,t)}function C(e,t,n){for(let r of e){let e=qy(r,t);e.length<=0||e.length>=t.length||i.allowConditionalClosers===!1&&S(r,n)}}function w(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 T(){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 E(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){C(t,n,`not all execution paths`);let e=t.filter(e=>Ky(e,n));a.length=0,a.push(...e)}else re(t)}f.delete(e),p.delete(e)}function oe(e){let{parent:t}=e;if(t?.type===`IfStatement`){ie(t);let e=f.get(t);if(!e)return;re(e)}}function D(e){let{parent:t}=e;t?.type===`IfStatement`&&ie(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=Yy(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=>Ky(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`){ie(n);let e=f.get(n);e&&re(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){C(t,n,`not all execution paths`);let e=t.filter(e=>Ky(e,n));a.length=0,a.push(...e)}else re(t);f.delete(e),p.delete(e)}function j(e){if(e.type!==`SwitchCase`)return;let{parent:t}=e;if(t.type===`SwitchStatement`){ie(t);let e=f.get(t);if(!e)return;re(e)}}function me(e){Qy(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=Yy(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 M(t){if(t.type!==`BreakStatement`&&t.type!==`ContinueStatement`||a.length===0)return;let n=t.type===`ContinueStatement`?rb(t):nb(t);if(n)for(let{config:r,loopAncestors:i,node:o,opener:s}of a){if(!i.some(e=>e===n))continue;let a=Yy(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 _e(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 ve(t,n){let r=a.findLastIndex(e=>Yy(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=Zy(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 ye(t,n,r){let i=Yy(r.config),a=i.length===1?i[0]??`closer`:i.join(`' or '`);e.report({data:{closer:a,yieldingFunction:n},messageId:`robloxYieldViolation`,node:t})}function be(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=Yy(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 N(e){if(e.type!==`CallExpression`)return;let t=Jy(e);if(t===void 0||t===``)return;let n=b(t,!0);if(n){_e(e,t,n);return}if(b(t,!1)){ve(e,t);return}for(let n of a)if(x(t,n.config)){ye(e,t,n),a.length=0,l=!0;return}}return{ArrowFunctionExpression:w,"ArrowFunctionExpression:exit":T,AwaitExpression:be,BreakStatement:M,CallExpression:N,CatchClause:ue,"CatchClause:exit":de,ContinueStatement:M,DoWhileStatement:me,"DoWhileStatement:exit":he,ForInStatement:me,"ForInStatement:exit":he,ForOfStatement:e=>{e.await&&be(e),me(e)},"ForOfStatement:exit":he,ForStatement:me,"ForStatement:exit":he,FunctionDeclaration:w,"FunctionDeclaration:exit":T,FunctionExpression:w,"FunctionExpression:exit":T,IfStatement:E,"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:be}},meta:{docs:{description:`Enforces balanced opener/closer function calls across all execution paths`,recommended:!1},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,description:`Allow closer calls that appear only on some conditional paths.`,type:`boolean`},allowMultipleOpeners:{default:!0,description:`Allow repeated opener calls before matching closer calls.`,type:`boolean`},maxNestingDepth:{default:0,description:`Maximum opener nesting depth before reporting; 0 disables the limit.`,minimum:0,type:`number`},pairs:{default:[{closer:`debug.profileend`,opener:`debug.profilebegin`,platform:`roblox`,requireSync:!0,yieldingFunctions:[...Gy]}],description:`Opener and closer call pairs that must stay balanced.`,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`}},type:`object`}],type:`problem`}}),ob={allowRootKeys:!1,ignoreCallExpressions:[`ReactTree.mount`,`CreateReactStory`,`createReactStory`,`createPlatformStory`],iterationMethods:[`map`,`filter`,`forEach`,`flatMap`,`reduce`,`reduceRight`,`some`,`every`,`find`,`findIndex`],memoizationHooks:[`useCallback`,`useMemo`]},sb=new Set([`ChainExpression`,`ParenthesizedExpression`,`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]),cb=new Set([...sb,`AwaitExpression`,`ConditionalExpression`,`LogicalExpression`,`SequenceExpression`,`SpreadElement`]),lb={iteration:!1,memoization:!1},ub=new Set([`ConditionalExpression`,`LogicalExpression`]),db=new Set([`BlockStatement`,`CatchClause`,`DoWhileStatement`,`ForInStatement`,`ForOfStatement`,`ForStatement`,`IfStatement`,`LabeledStatement`,`SwitchCase`,`SwitchStatement`,`TryStatement`,`WhileStatement`,`WithStatement`]);function $(e){return e.parent??void 0}function fb(e){let t=e;for(;t!==void 0&&sb.has(t.type);)t=$(t);return t}function pb(e){let t=$(e);for(;t!==void 0;){if(P(t))return t;t=$(t)}}function mb(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 lb}function hb(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(cb.has(n.type)){t=n,n=$(n);continue}break}}function gb(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 _b(e,t){e.iteration||=t.iteration,e.memoization||=t.memoization}function vb(e,t,n){if(e.isWrite())return lb;let r=hb(e.identifier);return r===void 0||No(r)?lb:mb(r,t,n)}function yb(e,t,n,r){let i=hb(t);if(i!==void 0)return No(i)?lb:mb(i,n,r);let a=gb(e,t);if(a===void 0)return lb;let o={iteration:!1,memoization:!1};for(let e of a.references)if(_b(o,vb(e,n,r)),o.iteration&&o.memoization)return o;return o}function bb(e){let t=xb(e);return t===void 0?!1:t.type===`ReturnStatement`?Cb(t):t.type===`ArrowFunctionExpression`}function xb(e){let t=Sb(fb($(e)));for(;t!==void 0&&ub.has(t.type);)t=fb($(t));return Sb(t)}function Sb(e){return e?.type===`JSXExpressionContainer`?fb($(e)):e}function Cb(e){let t=fb($(e));for(;t!==void 0&&db.has(t.type);)t=fb($(t));return t!==void 0&&P(t)}function wb(e){if(!bb(e))return!1;let t=pb(e);if(t===void 0)return!1;let n=fb($(t));return n?.type!==`CallExpression`||No(n)}function Tb(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.has(e.name):e.type===`MemberExpression`&&e.object.type===`Identifier`&&e.property.type===`Identifier`&&t.has(`${e.object.name}.${e.property.name}`)}n=$(n)}return!1}function Eb(e){return e.toLowerCase().endsWith(`children`)}function Db(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||!Eb(n)}function Ob(e){let t=e,n=$(e);for(;n!==void 0&&sb.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 kb(e,t){let n=$(e);if(n===void 0)return!1;let r=!1;for(;n!==void 0&&(n.type===t||sb.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 Ab(e){return kb(e,`ConditionalExpression`)}function jb(e){return kb(e,`LogicalExpression`)}const Mb=t({create(e){let[t]=e.options,n={allowRootKeys:ob.allowRootKeys,ignoreCallExpressions:ob.ignoreCallExpressions,iterationMethods:ob.iterationMethods,memoizationHooks:ob.memoizationHooks,...t},r=new Set(n.ignoreCallExpressions),i=new Set(n.iterationMethods),a=new Set(n.memoizationHooks);function o(t){let o=pb(t),s=o===void 0?lb:yb(e.sourceCode,o,i,a),c=s.iteration||s.memoization;if(wb(t)&&!c){!n.allowRootKeys&&t.type===`JSXElement`&&Fo(t,`key`)&&e.report({messageId:`rootComponentWithKey`,node:t});return}if(!Tb(t,r)&&!(Ob(t)||Db(t)||Ab(t))&&!(t.type===`JSXFragment`&&jb(t))&&!(t.type===`JSXFragment`&&s.memoization&&!s.iteration&&bb(t))){if(t.type===`JSXFragment`){e.report({messageId:`missingKey`,node:t});return}Fo(t,`key`)||e.report({messageId:`missingKey`,node:t})}}return{JSXElement:o,JSXFragment:o}},meta:{docs:{description:`Require keys on nested React JSX children, fragments, and configured iteration or memoization contexts.`},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:ob.ignoreCallExpressions,description:`Function calls where JSX arguments don't need keys`,items:{type:`string`},type:`array`},iterationMethods:{default:ob.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 Nb(e){if(e.id.type===`Identifier`)return e.id.name}function Pb(e,t,n){return de(e,t,n,`memo`)}function Fb(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 Ib(e){let t=e;for(;t!==null;){if(t.type===`ExportNamedDeclaration`||t.type===`ExportDefaultDeclaration`)return!0;t=t.parent}return!1}function Lb(e){return e.parent.type===`VariableDeclaration`?e.parent.parent.type===`ExportNamedDeclaration`||e.parent.parent.type===`ExportDefaultDeclaration`:!1}function Rb(e,t,n){for(let r of e.getDeclaredVariables(t))if(r.name===n){for(let{identifier:e}of r.references)if(Ib(e))return!0;return!1}return!1}function zb(e,t,n,r){return r.has(t)||Lb(n)?!0:Rb(e,n,t)}function Bb(e,t,n){e.report({data:{variableName:n},messageId:t.kind===`context`?`missingContextDisplayName`:`missingMemoDisplayName`,node:t.node})}const Vb=t({create(e){let t=vn(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(Pb(t.declaration,n,i)){e.report({messageId:`directMemoExport`,node:t});return}Fb(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(yn(e,t))for(let t of e.specifiers){let{name:e}=t.local;if(t.type===`ImportSpecifier`){let i=pe(t);i===`memo`&&n.add(e),i===`createContext`&&r.add(e);continue}i.add(e)}},"Program:exit"(){for(let[t,n]of a)n.hasDisplayName||zb(e.sourceCode,t,n.node,o)&&Bb(e,n,t)},VariableDeclarator(e){if(e.init?.type!==`CallExpression`)return;let t=Nb(e);if(t!==void 0){if(Pb(e.init,n,i)){a.set(t,{hasDisplayName:!1,kind:`memo`,node:e});return}Fb(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:pn},type:`object`}],type:`problem`}});function Hb(e){return x(e)&&e.metric===`statements`?`statements`:`lines`}function Ub(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 Wb=t({create(e){let t=Hb(e.options[0]);return{SwitchCase(n){if(!Ub(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 pb(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:mb(t);case`ArrowFunctionExpression`:return mb(t);default:break}t=t.parent}}function mb({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 hb(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 gb(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 _b(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 vb(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 yb(e,t){return y(e)?t===e:(Array.isArray(e.name)?e.name:[e.name]).includes(t)}function bb(e,t,n,r){if(!yb(r,n.name))return!1;if(y(r))return!0;switch(r.from){case void 0:return!0;case`package`:return _b(e,n)===r.package;case`file`:return vb(e,n)&&_b(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 xb(e,t,n,r){return r.some(r=>bb(e,t,n,r))}const Sb=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`)||xb(t,r,o,n))return;let s=pb(i);if(s===void 0)return;let c=hb(i)?`this.${s}`:s;e.report({fix(e){let n=gb(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 Cb(e){return e.includes(`u`)||e.includes(`v`)}function wb(e,t){return e.type===`Identifier`&&e.name===t}function Tb(e){if(!(e.type!==`Literal`||!y(e.value)))return e.value}function Eb(e){return e.type!==`SpreadElement`}const Db=t({createOnce(e){return{CallExpression(t){if(!wb(t.callee,`regex`))return;if(t.arguments.length<2){e.report({messageId:`requireUnicodeFlag`,node:t});return}let[,n]=t.arguments;if(n===void 0||!Eb(n))return;let r=Tb(n);r!==void 0&&(Cb(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 Ob(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 kb(e,t){for(let n of t){if(n.type===`AssignmentPattern`&&n.left.type===`ObjectPattern`){Ab(e,n.left),O(n.right)&&Ob(e,n.right);continue}n.type===`ObjectPattern`&&Ab(e,n)}}function Ab(e,t){for(let n of t.properties){let t=jb(n);t!==void 0&&Ob(e,t)}}function jb(e){if(e.type!==`Property`||e.value.type!==`AssignmentPattern`)return;let t=e.value.right;return O(t)?t:void 0}function Mb(e){if(!(e.type!==`FunctionDeclaration`||!To(e)))return[...e.params]}function Nb(e){if(!(e.type!==`VariableDeclarator`||!No(e)||e.init===null)&&!(e.init.type!==`ArrowFunctionExpression`&&e.init.type!==`FunctionExpression`))return[...e.init.params]}const Pb=t({create(e){return{FunctionDeclaration(t){let n=Mb(t);n!==void 0&&kb(e,n)},VariableDeclarator(t){let n=Nb(t);n!==void 0&&kb(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`}}),Fb=/(?<first>[\p{Ll}\d])(?<second>\p{Lu})/gu,Ib=/(?<first>\p{Lu})(?<second>\p{Lu}\p{Ll})/gu,Lb=`$<first>\0$<second>`;function Rb(e){let t=e.trim();if(t.length===0)return``;let n=t.replace(Fb,Lb).replace(Ib,Lb),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 zb(e){return e.split(`/`).filter(e=>!e.startsWith(`.`))}function Bb(e){return e.split(`/`).filter(e=>e===`..`).length}function Vb(e){return e.some(e=>e===Rb(e)&&!e.includes(`.`))}function Hb(e){return r.basename(e,r.extname(e))===`index`}function Ub(e){if(!e.includes(`fixtures`))return!1;let t=e.indexOf(`fixtures`);return!Vb(e.slice(0,t))}const Wb=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=pc(n,o);if(!s.found)return;let c=r.relative(o,s.path).replaceAll(`\\`,`/`),l=zb(c);if((Bb(c)>1||l.includes(`components`))&&Vb(l)&&l.length>i&&!Hb(c)&&!Ub(l)){e.report({messageId:`noReachingIntoComponent`,node:t});return}l.includes(`components`)&&l.length>i+1&&!Hb(c)&&!Ub(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`}}),Gb=new Set([`ArrayExpression`,`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`,`ObjectExpression`]),Kb=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])]]),Jb=new Set([`ClassDeclaration`,`FunctionDeclaration`,`FunctionName`,`ImportBinding`]),Yb=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 Xb(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 Zb(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 Qb(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 $b(e){return e.type===`Identifier`?[e.name]:e.type===`MemberExpression`?$b(e.object):e.type===`ChainExpression`||e.type===`ParenthesizedExpression`||e.type===`TSNonNullExpression`||e.type===`TSAsExpression`||e.type===`TSSatisfiesExpression`||e.type===`TSTypeAssertion`?$b(e.expression):e.type===`BinaryExpression`||e.type===`LogicalExpression`?[...$b(e.left),...$b(e.right)]:e.type===`UnaryExpression`?$b(e.argument):e.type===`ConditionalExpression`?[...$b(e.test),...$b(e.consequent),...$b(e.alternate)]:[]}function ex(e){return mx.has(e.type)}function tx(e,t){if(e.type===`Identifier`)return e.name;if(e.type===`ChainExpression`||e.type===`ParenthesizedExpression`||ex(e))return tx(e.expression,t);if(e.type===`MemberExpression`){let n=tx(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 nx(e,t){return e.type===`VariableDeclarator`&&e.id.type===t}function rx(e,t,n){if(e===void 0||!(e instanceof Set&&nx(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 ix(e,t,n){if(e===void 0||!(e instanceof Set&&nx(t,`ObjectPattern`)))return!1;for(let r of t.id.properties){if(r.type!==`Property`||Wr(r)?.name!==n)continue;let t=Ur(r);return t!==void 0&&e.has(t)}return!1}function ax(e,t,n,r){if(e?.type!==`CallExpression`)return!1;let i=Xb(e);if(i===void 0)return!1;let a=r.get(i);return a===!0||rx(a,t,n)||ix(a,t,n)}function ox(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 sx(e){if(e?.type!==`CallExpression`)return!1;let{callee:t}=e;return t.type===`MemberExpression`&&t.property.type===`Identifier`&&t.property.name===`map`}function cx(e){return e?.type===`Literal`||e?.type===`TemplateLiteral`||e?.type===`UnaryExpression`&&e.argument.type===`Literal`}function lx(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 ux(e,t,n,r){let{node:i,type:a}=t;if(Jb.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 ax(s,i,n,r)||ox(s)||sx(s)||cx(s)||lx(e,i)}function dx(e,t,n){if(!e)return!1;let r=e.defs;if(r.length===0)return!1;for(let i of r)if(ux(e,i,t,n))return!0;return!1}function fx(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 px=new Set([`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`,`VariableDeclarator`]),mx=new Set([`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]);function hx(e){if(e.type!==`Identifier`)return!1;let{parent:t}=e;return t.type===`Property`&&t.computed&&t.key===e}function gx(e){if(e.type!==`Identifier`)return!1;let t=e.parent??void 0;for(;t;){if(mx.has(t.type)){t=t.parent??void 0;continue}if(t.type.startsWith(`TS`))return!0;if(px.has(t.type))return!1;t=t.parent??void 0}return!1}function _x(e,t){let n=t.parent??void 0;for(;n;){if(P(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 vx(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 yx(e,t){let n=t;for(;n;){let t=n.set.get(e);if(t)return t;n=n.upper}}function bx(e,t){let n=e.node;for(;n;){if(n===t)return!0;n=n.parent??void 0}return!1}function xx(e,t){return e!==void 0&&!e.defs.some(e=>bx(e,t))}function Sx(e,t,n,r){let i=fx(e,e.parent??void 0);return{depth:Zb(i),forceDependency:hx(e),name:t,node:i,usagePath:tx(i,r),variable:n}}function Cx(e){return e.type===`ParenthesizedExpression`||e.type===`TSSatisfiesExpression`||e.type===`TSAsExpression`||e.type===`TSTypeAssertion`||e.type===`TSNonNullExpression`}function wx(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)O(e)&&n(e);else O(r)&&n(r)}}function Tx(e,t){let n=[],r=new Set;function i(i){if(i.type!==`Identifier`)return;let{name:a}=i;if(r.has(a)||Yb.has(a)||gx(i))return;let o=yx(a,t.getScope(i));xx(o,e)&&o!==void 0&&_x(o,e)&&(r.add(a),n.push(Sx(i,a,o,t)))}function a(e){if(e.type===`Identifier`&&i(e),Cx(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}wx(e,t,a)}return a(e),n}function Ex(e,t){let n=[];for(let r of e.elements){if(!r)continue;let e=r.type===`SpreadElement`?r.argument:r,i=tx(e,t),a=Zb(e);n.push({depth:a,name:i,node:e})}return n}function Dx({name:e}){return e}function Ox(e){return e?Gb.has(e.type):!1}function kx(e,{parent:t}){return t.type===`VariableDeclarator`?e.variable?.defs.some(e=>e.node===t)??!1:!1}function Ax(e){return e.length>0&&b(e[0])}function jx(e){return e.length>0&&y(e[0])}function Mx(e){return typeof e==`boolean`?e:b(e)?new Set([e]):Array.isArray(e)&&(Ax(e)||jx(e))?new Set(e):!1}function Nx(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 Px(e){return e!==void 0&&P(e)}function Fx(e,t){return e.filter(e=>e.forceDependency||!dx(e.variable,e.name,t))}function Ix(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 Lx(e){let t=Qb(e);return t?.type===`Identifier`?t.name:void 0}function Rx(e,t){let n=Lx(t.node);return n===void 0?[]:e.filter(e=>Lx(e.node)===n)}function zx(e,t){return e.length>0&&e.every(e=>!e.forceDependency&&dx(e.variable,e.name,t))}function Bx(e,t,n,r,i,a,o){for(let s of t){let c=Rx(n,s);if(c.length===0){a&&Nx(e,t,s,r);continue}if(o&&zx(c,i)){Nx(e,t,s,r);continue}let l=Math.max(...c.map(({depth:e})=>e));a&&s.depth>l&&Nx(e,t,s,r)}}function Vx(e,t,n){let r=Qb(e.node);if(r?.type===`Identifier`&&e.depth<=t.depth)return r.name===Lx(t.node);if(!n)return!1;let i=Lx(t.node);return i!==void 0&&$b(e.node).includes(i)}function Hx(e,t,n,r){let i=[];for(let a of Fx(e,n))Lx(a.node)!==void 0&&(t.some(e=>Vx(e,a,r))||i.push(a));return i}function Ux(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 Wx(e){let t=e.variable?.defs[0];return t?.node.type===`VariableDeclarator`?t.node.init??void 0:void 0}function Gx(e,t,n,r){for(let i of Fx(t,r)){let t=Lx(i.node);if(t!==void 0){for(let r of n)if(Lx(r.node)===t&&r.depth===i.depth){r.depth===0&&Ox(Wx(i))&&e.report({data:{name:i.usagePath},messageId:`unstableDependency`,node:r.node});break}}}}const Kx=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(Kb);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,Mx(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(!(P(e)||e.type===`Identifier`))return;let n=vx(e,o(t));return Px(n)?n:void 0}return{CallExpression(t){let a=Xb(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){Ix(e,t,d,Fx(Tx(f,e.sourceCode).filter(e=>!kx(e,t)),i));return}if(!p||p.type!==`ArrayExpression`)return;let m=p,h=Tx(f,e.sourceCode).filter(e=>!kx(e,t)),g=Ex(m,e.sourceCode);(n.reportUnnecessaryDependencies||n.reportUnnecessaryStableDependencies)&&Bx(e,g,h,m,i,n.reportUnnecessaryDependencies,n.reportUnnecessaryStableDependencies),Ux(e,m,g,Hx(h,g,i,n.resolveExpressionDependencies)),Gx(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 Jx(e){return qx.test(e)}function Yx(e){return x(e)?e:{}}function Xx(e){if((e.type===`FunctionDeclaration`||e.type===`FunctionExpression`)&&e.id!==null)return k(e.id.name)||Jx(e.id.name);let{parent:t}=e;return t.type===`VariableDeclarator`&&M(t.id)?k(t.id.name)||Jx(t.id.name):t.type===`Property`&&M(t.key)||t.type===`MethodDefinition`&&M(t.key)?k(t.key.name)||Jx(t.key.name):!1}function Zx(e){let t=R(e);return t!==void 0&&Jx(t)}function Qx(e){let t=e.parent,n=!1;for(let r=0;r<20&&t!==null&&!P(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 $x(e,t){return t!==void 0&&e.callee.type===`Identifier`&&`name`in e.callee&&e.callee.name===t}function eS(e,t){return{afterEarlyReturn:!1,functionDepth:t,inConditional:!1,inLoop:!1,inNestedFunction:!1,inTryBlock:!1,isComponentOrHook:!1,...e}}function tS(e){if(e.type===`FunctionDeclaration`||e.type===`FunctionExpression`)return e.id?.name??void 0}function nS(e){return M(e)?e.name:void 0}function rS(e,t,n,r){if(n===void 0||Object.keys(n).length===0)return!1;let i=iS(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 iS(e,t){if(e.callee.type!==`MemberExpression`)return;let n=nS(e.callee.object);if(n!==void 0&&t[n]===!1)return!0;if(n!==void 0&&t[n]===!0)return!1}const aS=e({meta:{name:`small-rules`},rules:{"array-type-generic":te,"ban-instances":lt,"ban-react-fc":pt,"ban-types":_t,"directive-disable-enable-pair":Gt,"directive-no-aggregating-enable":Kt,"directive-no-duplicate-disable":qt,"directive-no-restricted-disable":Jt,"directive-no-unlimited-disable":Yt,"directive-no-unused-enable":Xt,"directive-no-use":Zt,"directive-require-description":en,"enforce-ianitor-check-type":fn,"memoized-effect-dependencies":In,"no-array-constructor-elements":pr,"no-array-constructor-index-assignment":Cr,"no-array-size-assignment":Nr,"no-async-constructor":ii,"no-async-in-system":ji,"no-cascading-set-state":Ni,"no-color3-constructor":Li,"no-commented-code":wa,"no-constant-condition-with-break":io,"no-error":oo,"no-events-in-events-callback":Co,"no-giant-component":Lo,"no-god-components":Go,"no-ianitor-in-function-body":qo,"no-ianitor-success-access":$o,"no-identity-map":cs,"no-increment-decrement":us,"no-inline-property-on-memo-component":ps,"no-instance-methods-without-this":xs,"no-native-properties-spread":Gs,"no-new-instance-in-use-memo":oc,"no-print":sc,"no-recursive":uc,"no-redundant-aspect-ratio-constraint":Ec,"no-render-helper-functions":Uc,"no-restricted-property-assignment":el,"no-spec-file-extension":nl,"no-static-react-create-element":gl,"no-table-create-map":yl,"no-task-wait":xl,"no-underscore-react-props":Sl,"no-unused-imports":Ml,"no-unused-use-memo":Nl,"no-use-memo-simple-expression":Fl,"no-useless-constants":ru,"no-useless-default":Wu,"no-useless-use-effect":Cf,"no-useless-use-memo":kf,"no-useless-use-spring":Lf,"no-warn":Rf,"only-type-imports":zf,"prefer-class-properties":Gf,"prefer-constant-dispatch":tp,"prefer-context-stack":Rp,"prefer-early-return":Up,"prefer-expect-assertions":mm,"prefer-hoisted-jsx-elements":Em,"prefer-hoisted-jsx-object-properties":Pm,"prefer-idiv":Lm,"prefer-local-portal-component":Jm,"prefer-math-min-max":ah,"prefer-modding-inspect":uh,"prefer-module-scope-constants":ph,"prefer-padding-components":kh,"prefer-pascal-case-enums":Rh,"prefer-sequence-overloads":Wh,"prefer-single-world-query":ug,"prefer-singular-enums":Cg,"prefer-ternary-conditional-rendering":Bg,"prefer-udim2-shorthand":Jg,"prefer-use-reducer":Xg,"prevent-abbreviations":Nv,"react-hooks-strict-return":Xv,"require-async-suffix":$v,"require-module-level-instantiation":ay,"require-named-effect-functions":dy,"require-paired-calls":Dy,"require-react-component-keys":eb,"require-react-display-names":lb,"require-switch-case-braces":fb,"require-throw-error-capture":Sb,"require-unicode-regex":Db,"rerender-memo-with-default-value":Pb,"strict-component-boundaries":Wb,"use-exhaustive-dependencies":Kx,"use-hook-at-top-level":t({create(e){let t=Yx(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||rS(e,n,i,a)}function d(e){let t=o(),n=t===void 0?0:t.functionDepth+1,a=Xx(e);r.push(i);let c=tS(e);c!==void 0&&(i=c),t?.isComponentOrHook===!0?s(eS({functionDepth:n,inNestedFunction:!0},n)):a&&s(eS({functionDepth:n,isComponentOrHook:!0},n))}function f(){o()!==void 0&&c(),i=r.pop()}return{ArrowFunctionExpression:d,"ArrowFunctionExpression:exit":f,CallExpression(t){if(!Zx(t))return;let n=R(t);if(n===void 0||u(n,t))return;let r=o();if(!(r===void 0||!(r.isComponentOrHook||r.inNestedFunction)||Qx(t))){if($x(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`&&M(t.imported)&&Jx(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{aS as default};
12
+ }`)]},messageId:`wrapCaseBody`,node:r})}}},meta:{docs:{description:`Require braces around switch case bodies selected by line span or statement count.`},fixable:`code`,messages:{wrapCaseBody:`Wrap this switch case body in braces.`},schema:[{additionalProperties:!1,properties:{metric:{default:`lines`,description:`Whether to report cases by line span or by statement count.`,enum:[`lines`,`statements`],type:`string`}},type:`object`}],type:`problem`}});function Gb(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:Kb(t);case`ArrowFunctionExpression`:return Kb(t);default:break}t=t.parent}}function Kb({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 qb(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 Jb(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 Yb(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 Xb(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 Zb(e,t){return y(e)?t===e:(Array.isArray(e.name)?e.name:[e.name]).includes(t)}function Qb(e,t,n,r){if(!Zb(r,n.name))return!1;if(y(r))return!0;switch(r.from){case void 0:return!0;case`package`:return Yb(e,n)===r.package;case`file`:return Xb(e,n)&&Yb(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 $b(e,t,n,r){return r.some(r=>Qb(e,t,n,r))}const ex=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`)||$b(t,r,o,n))return;let s=Gb(i);if(s===void 0)return;let c=qb(i)?`this.${s}`:s;e.report({fix(e){let n=Jb(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 directly throwing new Error instances in named functions.`,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 tx(e){return e.includes(`u`)||e.includes(`v`)}function nx(e,t){return e.type===`Identifier`&&e.name===t}function rx(e){if(!(e.type!==`Literal`||!y(e.value)))return e.value}function ix(e){return e.type!==`SpreadElement`}const ax=t({createOnce(e){return{CallExpression(t){if(!nx(t.callee,`regex`))return;if(t.arguments.length<2){e.report({messageId:`requireUnicodeFlag`,node:t});return}let[,n]=t.arguments;if(n===void 0||!ix(n))return;let r=rx(n);r!==void 0&&(tx(r)||e.report({messageId:`requireUnicodeFlag`,node:t}))}}},meta:{docs:{description:`Require the 'u' or 'v' unicode flag on calls named regex().`},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 ox(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 sx(e,t){for(let n of t){if(n.type===`AssignmentPattern`&&n.left.type===`ObjectPattern`){cx(e,n.left),D(n.right)&&ox(e,n.right);continue}n.type===`ObjectPattern`&&cx(e,n)}}function cx(e,t){for(let n of t.properties){let t=lx(n);t!==void 0&&ox(e,t)}}function lx(e){if(e.type!==`Property`||e.value.type!==`AssignmentPattern`)return;let t=e.value.right;return D(t)?t:void 0}function ux(e){if(!(e.type!==`FunctionDeclaration`||!jo(e)))return[...e.params]}function dx(e){if(!(e.type!==`VariableDeclarator`||!Ro(e)||e.init===null)&&(e.init.type===`ArrowFunctionExpression`||e.init.type===`FunctionExpression`))return[...e.init.params]}const fx=t({create(e){return{FunctionDeclaration(t){let n=ux(t);n!==void 0&&sx(e,n)},VariableDeclarator(t){let n=dx(t);n!==void 0&&sx(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`}}),px=/(?<first>[\p{Ll}\d])(?<second>\p{Lu})/gu,mx=/(?<first>\p{Lu})(?<second>\p{Lu}\p{Ll})/gu,hx=`$<first>\0$<second>`;function gx(e){let t=e.trim();if(t.length===0)return``;let n=t.replace(px,hx).replace(mx,hx),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 _x(e){return e.split(`/`).filter(e=>!e.startsWith(`.`))}function vx(e){return e.split(`/`).filter(e=>e===`..`).length}function yx(e){return e.some(e=>e===gx(e)&&!e.includes(`.`))}function bx(e){return r.basename(e,r.extname(e))===`index`}function xx(e){if(!e.includes(`fixtures`))return!1;let t=e.indexOf(`fixtures`);return!yx(e.slice(0,t))}const Sx=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=vc(n,o);if(!s.found)return;let c=r.relative(o,s.path).replaceAll(`\\`,`/`),l=_x(c);if((vx(c)>1||l.includes(`components`))&&yx(l)&&l.length>i&&!bx(c)&&!xx(l)){e.report({messageId:`noReachingIntoComponent`,node:t});return}l.includes(`components`)&&l.length>i+1&&!bx(c)&&!xx(l)&&e.report({messageId:`noReachingIntoComponent`,node:t})}}},meta:{docs:{description:`Prevent imports that reach into another component's nested modules.`},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:{default:[],description:`Regular expression patterns for imports allowed to cross component boundaries.`,items:{type:`string`},type:`array`},maxDepth:{default:1,description:`Maximum path depth allowed inside another component before reporting.`,type:`integer`}},type:`object`}],type:`problem`}}),Cx=new Set([`ArrayExpression`,`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`,`ObjectExpression`]),wx=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}]]),Tx=new Map([[`useBinding`,!0],[`useReducer`,new Set([1])],[`useRef`,!0],[`useState`,new Set([1])],[`useTransition`,new Set([1])]]),Ex=new Set([`ClassDeclaration`,`FunctionDeclaration`,`FunctionName`,`ImportBinding`]),Dx=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 Ox(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 kx(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 Ax(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 jx(e){return e.type===`Identifier`?[e.name]:e.type===`MemberExpression`?jx(e.object):e.type===`ChainExpression`||e.type===`ParenthesizedExpression`||e.type===`TSNonNullExpression`||e.type===`TSAsExpression`||e.type===`TSSatisfiesExpression`||e.type===`TSTypeAssertion`?jx(e.expression):e.type===`BinaryExpression`||e.type===`LogicalExpression`?[...jx(e.left),...jx(e.right)]:e.type===`UnaryExpression`?jx(e.argument):e.type===`ConditionalExpression`?[...jx(e.test),...jx(e.consequent),...jx(e.alternate)]:[]}function Mx(e){return Kx.has(e.type)}function Nx(e,t){if(e.type===`Identifier`)return e.name;if(e.type===`ChainExpression`||e.type===`ParenthesizedExpression`||Mx(e))return Nx(e.expression,t);if(e.type===`MemberExpression`){let n=Nx(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 Px(e,t){return e.type===`VariableDeclarator`&&e.id.type===t}function Fx(e,t,n){if(e===void 0||!(e instanceof Set&&Px(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 Ix(e,t,n){if(e===void 0||!(e instanceof Set&&Px(t,`ObjectPattern`)))return!1;for(let r of t.id.properties){if(r.type!==`Property`||Wr(r)?.name!==n)continue;let t=Ur(r);return t!==void 0&&e.has(t)}return!1}function Lx(e,t,n,r){if(e?.type!==`CallExpression`)return!1;let i=Ox(e);if(i===void 0)return!1;let a=r.get(i);return a===!0||Fx(a,t,n)||Ix(a,t,n)}function Rx(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 zx(e){if(e?.type!==`CallExpression`)return!1;let{callee:t}=e;return t.type===`MemberExpression`&&t.property.type===`Identifier`&&t.property.name===`map`}function Bx(e){return e?.type===`Literal`||e?.type===`TemplateLiteral`||e?.type===`UnaryExpression`&&e.argument.type===`Literal`}function Vx(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(Ex.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 Lx(s,i,n,r)||Rx(s)||zx(s)||Bx(s)||Vx(e,i)}function Ux(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 Wx(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 Gx=new Set([`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`,`VariableDeclarator`]),Kx=new Set([`TSAsExpression`,`TSInstantiationExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]);function qx(e){if(e.type!==`Identifier`)return!1;let{parent:t}=e;return t.type===`Property`&&t.computed&&t.key===e}function Jx(e){if(e.type!==`Identifier`)return!1;let t=e.parent??void 0;for(;t;){if(Kx.has(t.type)){t=t.parent??void 0;continue}if(t.type.startsWith(`TS`))return!0;if(Gx.has(t.type))return!1;t=t.parent??void 0}return!1}function Yx(e,t){let n=t.parent??void 0;for(;n;){if(P(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 Xx(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 Zx(e,t){let n=t;for(;n;){let t=n.set.get(e);if(t)return t;n=n.upper}}function Qx(e,t){let n=e.node;for(;n;){if(n===t)return!0;n=n.parent??void 0}return!1}function $x(e,t){return e!==void 0&&!e.defs.some(e=>Qx(e,t))}function eS(e,t,n,r){let i=Wx(e,e.parent??void 0);return{depth:kx(i),forceDependency:qx(e),name:t,node:i,usagePath:Nx(i,r),variable:n}}function tS(e){return e.type===`ParenthesizedExpression`||e.type===`TSSatisfiesExpression`||e.type===`TSAsExpression`||e.type===`TSTypeAssertion`||e.type===`TSNonNullExpression`}function nS(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 rS(e,t){let n=[],r=new Set;function i(i){if(i.type!==`Identifier`)return;let{name:a}=i;if(r.has(a)||Dx.has(a)||Jx(i))return;let o=Zx(a,t.getScope(i));$x(o,e)&&o!==void 0&&Yx(o,e)&&(r.add(a),n.push(eS(i,a,o,t)))}function a(e){if(e.type===`Identifier`&&i(e),tS(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}nS(e,t,a)}return a(e),n}function iS(e,t){let n=[];for(let r of e.elements){if(!r)continue;let e=r.type===`SpreadElement`?r.argument:r,i=Nx(e,t),a=kx(e);n.push({depth:a,name:i,node:e})}return n}function aS({name:e}){return e}function oS(e){return e?Cx.has(e.type):!1}function sS(e,{parent:t}){return t.type===`VariableDeclarator`?e.variable?.defs.some(e=>e.node===t)??!1:!1}function cS(e){return e.length>0&&b(e[0])}function lS(e){return e.length>0&&y(e[0])}function uS(e){return typeof e==`boolean`?e:b(e)?new Set([e]):Array.isArray(e)&&(cS(e)||lS(e))?new Set(e):!1}function dS(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 fS(e){return e!==void 0&&P(e)}function pS(e,t){return e.filter(e=>e.forceDependency||!Ux(e.variable,e.name,t))}function mS(e,t,n,r){if(r.length===0)return;let i=[...new Set(r.map(aS))].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 hS(e){let t=Ax(e);return t?.type===`Identifier`?t.name:void 0}function gS(e,t){let n=hS(t.node);return n===void 0?[]:e.filter(e=>hS(e.node)===n)}function _S(e,t){return e.length>0&&e.every(e=>!e.forceDependency&&Ux(e.variable,e.name,t))}function vS(e,t,n,r,i,a,o){for(let s of t){let c=gS(n,s);if(c.length===0){a&&dS(e,t,s,r);continue}if(o&&_S(c,i)){dS(e,t,s,r);continue}let l=Math.max(...c.map(({depth:e})=>e));a&&s.depth>l&&dS(e,t,s,r)}}function yS(e,t,n){let r=Ax(e.node);if(r?.type===`Identifier`&&e.depth<=t.depth)return r.name===hS(t.node);if(!n)return!1;let i=hS(t.node);return i!==void 0&&jx(e.node).includes(i)}function bS(e,t,n,r){let i=[];for(let a of pS(e,n))hS(a.node)!==void 0&&(t.some(e=>yS(e,a,r))||i.push(a));return i}function xS(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 SS(e){let t=e.variable?.defs[0];return t?.node.type===`VariableDeclarator`?t.node.init??void 0:void 0}function CS(e,t,n,r){for(let i of pS(t,r)){let t=hS(i.node);if(t!==void 0){for(let r of n)if(hS(r.node)===t&&r.depth===i.depth){r.depth===0&&oS(SS(i))&&e.report({data:{name:i.usagePath},messageId:`unstableDependency`,node:r.node});break}}}}const wS=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(wx);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(Tx);for(let e of n.hooks)e.stableResult!==void 0&&i.set(e.name,uS(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(!(P(e)||e.type===`Identifier`))return;let n=Xx(e,o(t));return fS(n)?n:void 0}return{CallExpression(t){let a=Ox(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){mS(e,t,d,pS(rS(f,e.sourceCode).filter(e=>!sS(e,t)),i));return}if(!p||p.type!==`ArrayExpression`)return;let m=p,h=rS(f,e.sourceCode).filter(e=>!sS(e,t)),g=iS(m,e.sourceCode);(n.reportUnnecessaryDependencies||n.reportUnnecessaryStableDependencies)&&vS(e,g,h,m,i,n.reportUnnecessaryDependencies,n.reportUnnecessaryStableDependencies),xS(e,m,g,bS(h,g,i,n.resolveExpressionDependencies)),CS(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:{default:[],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`}}),TS=/^use[A-Z]/u;function ES(e){return TS.test(e)}function DS(e){return x(e)?e:{}}function OS(e){if((e.type===`FunctionDeclaration`||e.type===`FunctionExpression`)&&e.id!==null)return O(e.id.name)||ES(e.id.name);let{parent:t}=e;return t.type===`VariableDeclarator`&&j(t.id)?O(t.id.name)||ES(t.id.name):t.type===`Property`&&j(t.key)||t.type===`MethodDefinition`&&j(t.key)?O(t.key.name)||ES(t.key.name):!1}function kS(e){let t=R(e);return t!==void 0&&ES(t)}function AS(e){let t=e.parent,n=!1;for(let r=0;r<20&&t!==null&&!P(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 jS(e,t){return t!==void 0&&e.callee.type===`Identifier`&&`name`in e.callee&&e.callee.name===t}function MS(e,t){return{afterEarlyReturn:!1,functionDepth:t,inConditional:!1,inLoop:!1,inNestedFunction:!1,inTryBlock:!1,isComponentOrHook:!1,...e}}function NS(e){if(e.type===`FunctionDeclaration`||e.type===`FunctionExpression`)return e.id?.name??void 0}function PS(e){return j(e)?e.name:void 0}function FS(e,t,n,r){if(n===void 0||Object.keys(n).length===0)return!1;let i=IS(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 IS(e,t){if(e.callee.type!==`MemberExpression`)return;let n=PS(e.callee.object);if(n!==void 0&&t[n]===!1)return!0;if(n!==void 0&&t[n]===!0)return!1}const LS=e({meta:{name:`small-rules`},rules:{"array-type-generic":te,"ban-instances":lt,"ban-react-fc":pt,"ban-types":_t,"directive-disable-enable-pair":Gt,"directive-no-aggregating-enable":Kt,"directive-no-duplicate-disable":qt,"directive-no-restricted-disable":Jt,"directive-no-unlimited-disable":Yt,"directive-no-unused-enable":Xt,"directive-no-use":Zt,"directive-require-description":en,"enforce-ianitor-check-type":fn,"memoized-effect-dependencies":In,"no-array-constructor-elements":pr,"no-array-constructor-index-assignment":Cr,"no-array-size-assignment":Nr,"no-async-constructor":ii,"no-async-in-system":Ii,"no-cascading-set-state":Ri,"no-color3-constructor":Hi,"no-commented-code":ka,"no-constant-condition-with-break":lo,"no-error":fo,"no-events-in-events-callback":Oo,"no-filter-map-chain":ko,"no-giant-component":Ho,"no-god-components":Xo,"no-ianitor-in-function-body":Qo,"no-ianitor-success-access":is,"no-identity-map":ps,"no-increment-decrement":hs,"no-inline-property-on-memo-component":vs,"no-instance-methods-without-this":Es,"no-native-properties-spread":Xs,"no-new-instance-in-use-memo":dc,"no-print":fc,"no-recursive":hc,"no-redundant-aspect-ratio-constraint":jc,"no-render-helper-functions":Yc,"no-restricted-property-assignment":ol,"no-spec-file-extension":cl,"no-static-react-create-element":Sl,"no-table-create-map":Tl,"no-task-wait":Dl,"no-underscore-react-props":Ol,"no-unused-imports":Rl,"no-unused-use-memo":zl,"no-use-memo-simple-expression":Vl,"no-useless-constants":lu,"no-useless-default":ed,"no-useless-use-effect":Pf,"no-useless-use-memo":Bf,"no-useless-use-spring":Jf,"no-warn":Yf,"only-type-imports":Xf,"prefer-class-properties":np,"prefer-constant-dispatch":fp,"prefer-context-stack":Yp,"prefer-direct-hook-imports":tm,"prefer-early-return":om,"prefer-expect-assertions":jm,"prefer-hoisted-jsx-elements":Jm,"prefer-hoisted-jsx-object-properties":nh,"prefer-idiv":ah,"prefer-local-portal-component":gh,"prefer-math-min-max":Dh,"prefer-modding-inspect":Mh,"prefer-module-scope-constants":Fh,"prefer-padding-components":Zh,"prefer-pascal-case-enums":cg,"prefer-sequence-overloads":mg,"prefer-single-world-query":Pg,"prefer-singular-enums":qg,"prefer-ternary-conditional-rendering":d_,"prefer-udim2-shorthand":y_,"prefer-use-reducer":x_,"prevent-abbreviations":fy,"react-hooks-strict-return":ky,"require-async-suffix":jy,"require-module-level-instantiation":Ly,"require-named-effect-functions":Uy,"require-paired-calls":ab,"require-react-component-keys":Mb,"require-react-display-names":Vb,"require-switch-case-braces":Wb,"require-throw-error-capture":ex,"require-unicode-regex":ax,"rerender-memo-with-default-value":fx,"strict-component-boundaries":Sx,"use-exhaustive-dependencies":wS,"use-hook-at-top-level":t({create(e){let t=DS(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||FS(e,n,i,a)}function d(e){let t=o(),n=t===void 0?0:t.functionDepth+1,a=OS(e);r.push(i);let c=NS(e);c!==void 0&&(i=c),t?.isComponentOrHook===!0?s(MS({functionDepth:n,inNestedFunction:!0},n)):a&&s(MS({functionDepth:n,isComponentOrHook:!0},n))}function f(){o()!==void 0&&c(),i=r.pop()}return{ArrowFunctionExpression:d,"ArrowFunctionExpression:exit":f,CallExpression(t){if(!kS(t))return;let n=R(t);if(n===void 0||u(n,t))return;let r=o();if(!(r===void 0||!(r.isComponentOrHook||r.inNestedFunction)||AS(t))){if(jS(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)&&ES(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:{description:`Hook names that should be ignored even when they match the hook naming pattern.`,items:{type:`string`},type:`array`},importSources:{additionalProperties:{type:`boolean`},description:`Import sources or namespace names mapped to whether their hooks should be checked.`,type:`object`},onlyHooks:{description:`If set, only these hook names are checked.`,items:{type:`string`},type:`array`}},type:`object`}],type:`problem`}})}});export{LS as default};