@2digits/oxlint-plugin 0.3.1 → 0.3.3

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.d.mts CHANGED
@@ -85,7 +85,7 @@ interface PaddingLineOption {
85
85
  //#endregion
86
86
  //#region src/index.d.ts
87
87
  export type RuleName = keyof typeof rules;
88
- export declare const recommendedRules: Partial<Record<`2digits/${RuleName}`, 'error'>>;
88
+ export declare const recommendedRules: Record<`2digits/${string}`, "error">;
89
89
  declare const plugin: Plugin;
90
90
  //#endregion
91
91
  export { type PaddingLineOption, plugin as default };
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import{defineRule as e,eslintCompatPlugin as t}from"@oxlint/plugins";import*as n from"effect/Array";import*as r from"effect/Function";import*as i from"effect/Record";import*as a from"effect/Match";import*as o from"effect/Option";import*as s from"effect/Predicate";import*as c from"effect/String";import*as l from"effect/Result";import*as u from"effect/Number";import{Rule as d,RuleContext as f,Visitor as ee}from"effect-oxlint";import*as p from"effect/Effect";import*as m from"effect/Ref";const h={bindings:/* @__PURE__ */ new Map,hasEffectImport:!1},g=a.type().pipe(a.discriminatorsExhaustive(`type`)({Identifier:({name:e})=>e,Literal:({value:e})=>e})),te=/^(?:effect|@effect\/platform|alchemy)\//u;function ne(e){let t=n.lastNonEmpty(c.split(e,`/`));return/^\p{Ll}/u.test(t)?[]:[t]}const _=a.type().pipe(a.withReturnType(),a.when(`alchemy`,()=>[`Alchemy`]),a.when(a.is(`effect`,`@effect/platform`),()=>[]),a.when(e=>te.test(e),ne),a.orElse(r.constUndefined));function re(e){let t=/* @__PURE__ */ new Map,n=!1;for(let r of e.body){if(r.type!==`ImportDeclaration`)continue;let e=r.source.value;(e===`effect`||e.startsWith(`effect/`)||e.startsWith(`@effect/`))&&(n=!0);let i=_(e);if(i!==void 0)for(let e of r.specifiers)e.type===`ImportNamespaceSpecifier`||e.type===`ImportDefaultSpecifier`?t.set(e.local.name,i):t.set(e.local.name,[...i,g(e.imported)])}return{bindings:t,hasEffectImport:n}}function v(t,n){return e({meta:t,createOnce:n})}function y(t,n){return e({meta:t,createOnce(e){let t=h,{before:r,Program:i,...a}=n(e,()=>t);return{before(){t=h,r?.()},Program(e){t=re(e),i?.(e)},...a}}})}function b(e,t,n,r){return{type:e,docs:{description:t,recommended:!0,...r===void 0?{}:{url:r}},schema:[],messages:n}}const x=a.type().pipe(a.when({computed:!1,property:{type:`Identifier`}},({property:e})=>e.name),a.when({computed:!0,property:{type:`Literal`,value:c.isString}},({property:e})=>e.value),a.orElse(r.constUndefined));function S(e){let t=[],n=e;for(;n.type===`ChainExpression`||n.type===`MemberExpression`;){if(n.type===`ChainExpression`){n=n.expression;continue}let e=x(n);if(e===void 0)return;t.unshift(e),n=n.object}return n.type===`Identifier`?[n.name,...t]:void 0}function C(e,t,n){for(let r=e.sourceCode.getScope(t);r!==null;r=r.upper){let e=r.set.get(n);if(e!==void 0)return e}}function ie(e){return e?.defs.length===1?e.defs[0]:void 0}function w(e,t,n){return e.type===`Identifier`&&e.name===n&&C(t,e,n)===void 0}function T(e,t){let n=S(e),r=n?.[0];if(n===void 0||r===void 0)return;let i=t.bindings.get(r);return i===void 0?void 0:[...i,...n.slice(1)]}function E(e,t,n,r){let i=T(e,t);return i?.length===2&&i[0]===n&&i[1]===r}function D(e,t,r,i){let a=T(e,t);return a?.length===2&&a[0]===r&&n.contains(i,a[1])}function O(e,t,r){let i=T(e,t);return i?.length===r.length&&n.every(i,(e,t)=>e===r[t])}const ae=a.type().pipe(a.when({type:a.is(`ArrowFunctionExpression`,`FunctionExpression`)},r.constTrue),a.orElse(r.constFalse));function k(e){return ae(e)}function A(e,t){let n=e.arguments[t];return n===void 0||n.type===`SpreadElement`?void 0:n}const j=a.type().pipe(a.when({computed:!1,key:{type:`Identifier`}},({key:e})=>e.name),a.when({key:{type:`Literal`,value:c.isString}},({key:e})=>e.value),a.orElse(r.constUndefined));function M(e,t){return o.getOrUndefined(n.findFirst(e.properties,e=>e.type===`Property`&&j(e)===t))}const oe=/* @__PURE__ */ new Set([`ParenthesizedExpression`,`TSAsExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]);function se(e){return oe.has(e.type)}const ce=/* @__PURE__ */ new Set([`loc`,`parent`,`range`]);function N(e){let t=e;for(;se(t);)t=t.expression;return t}function le(e,t){if(n.isArray(e))for(let n of e)t.push(n);else for(let[n,r]of i.toEntries(e))ce.has(n)||t.push(r)}function P(e,t){let n=[e],r=/* @__PURE__ */ new WeakSet;for(;n.length>0;){let e=n.pop();if(s.isObjectOrArray(e)&&!r.has(e)){if(r.add(e),s.hasProperty(e,`type`)&&s.isString(e.type)&&t(e)===!0)return!0;le(e,n)}}return!1}function ue(e,t){return P(e,e=>e.type===`Identifier`&&e.name===t)}function F(e){let t=e.params[0];return t?.type===`Identifier`?t:void 0}function de(e){let t=F(e);return t===void 0||!e.body||t.name.startsWith(`_`)?!1:ue(e.body,t.name)}function fe(e,t){for(let n=e.parent;n;n=n.parent)if(t(n))return n}function I(e){return fe(e,k)}function L(e){let t=e.parent;if(t.type===`CallExpression`&&t.arguments.includes(e))return t}function pe(e,t){return e.range[0]<=t.range[0]&&t.range[1]<=e.range[1]}function R(e){return e.type===`Literal`&&c.isString(e.value)}const me=/* @__PURE__ */ new Set([`==`,`===`,`!=`,`!==`]);function he(e){return me.has(e)}function z(e,t){return e.type===`Literal`&&e.value===t}function ge(e){let t=e.parent;return t?t.type===`ExpressionStatement`||t.type===`UnaryExpression`&&t.operator===`void`||t.type===`SequenceExpression`&&t.expressions.at(-1)!==e:!1}const _e=s.mapInput(s.compose(s.isString,c.endsWith(`Error`)),e=>S(e.callee)?.at(-1)),ve=/* @__PURE__ */ new Set([`alarm`,`fetch`,`queue`,`rpc`,`scheduled`,`tail`,`trace`,`webSocketClose`,`webSocketError`,`webSocketMessage`]),ye=[[`Cloudflare`,`Worker`],[`Cloudflare`,`Workers`,`Worker`]];function be(e,t){return n.some(ye,n=>O(e,t,n))}function xe(e,t){return fe(e,e=>e.type===`CallExpression`&&be(e.callee,t))}function Se(e,t){let n=I(e),r=n===void 0?void 0:L(n);return r!==void 0&&E(r.callee,t,`Effect`,`gen`)?r:void 0}function Ce(e){let t=e.parent;for(;t;){if(k(t))return;if(t.type===`Property`){let e=j(t);if(e!==void 0&&ve.has(e))return e}t=t.parent}}const we=y(b(`problem`,`Disallow finalizers in Cloudflare Worker initialization, where workerd never runs them.`,{finalizer:`A Cloudflare Worker init finalizer never runs because workerd has no isolate teardown hook. Acquire disposable resources inside an event handler.`},`https://alchemy.run/cloudflare/compute/workers`),(e,t)=>({CallExpression(n){let r=t();if(!E(n.callee,r,`Effect`,`addFinalizer`))return;let i=Se(n,r);i!==void 0&&xe(i,r)?.arguments.includes(i)&&e.report({node:n,messageId:`finalizer`})}}));function B(e,t){let r=S(t)?.[0],i=r===void 0?void 0:C(e,t,r);return n.some(i?.defs??[],e=>{let t=e.node;return e.type===`ImportBinding`&&t.parent?.type===`ImportDeclaration`&&t.parent.importKind!==`type`&&(t.type!==`ImportSpecifier`||t.importKind!==`type`)})}function Te(e,t,r,i,a){let s=e.sourceCode.ast,c=n.findFirst(n.flatMap(s.body,e=>e.type===`ImportDeclaration`&&e.source.value===r&&e.importKind!==`type`?e.specifiers:[]),r=>r.type===`ImportNamespaceSpecifier`&&n.some(C(e,t,r.local.name)?.defs??[],e=>e.node===r));if(o.isSome(c))return{name:c.value.local.name,fixes:[]};let l=new Set(n.flatMap(e.sourceCode.scopeManager.scopes,e=>[...n.map(e.variables,e=>e.name),...n.map(e.references,e=>e.identifier.name)])),u=i,d=2;for(;l.has(u);)u=`${i}${d++}`;let f=`import * as ${u} from '${r}';\n`,ee=o.getOrUndefined(n.findFirst(s.body,e=>e.type!==`ExpressionStatement`||!R(e.expression)));return{name:u,fixes:[ee===void 0?a.insertTextAfter(s,`\n${f}`):a.insertTextBefore(ee,f)]}}function Ee(e,t){let r=/* @__PURE__ */ new Set;return n.every(e.properties,e=>{if(e.type!==`Property`||e.computed||e.method||e.kind!==`init`||e.key.type!==`Identifier`&&e.key.type!==`Literal`)return!1;let n=e.key.type===`Identifier`?e.key.name:String(e.key.value);return n===t||r.has(n)?!1:(r.add(n),!0)})}const De=y({...b(`problem`,`Disallow the deprecated top-level Docker Service constraints property.`,{constraints:`Docker.Service constraints is deprecated. Move it to placement: { constraints: ... }.`},`https://alchemy.run/providers/docker/service`),fixable:`code`},(e,t)=>({CallExpression(n){if(!E(n.callee,t(),`Docker`,`Service`))return;let r=A(n,1),i=r?.type===`ObjectExpression`?M(r,`constraints`):void 0;i!==void 0&&e.report({node:i,messageId:`constraints`,fix(t){if(B(e,n.callee)&&r?.type===`ObjectExpression`&&Ee(r,`placement`))return t.replaceText(i,`placement: { ${e.sourceCode.getText(i)} }`)}})}})),Oe=/* @__PURE__ */ new Map([[`Cloudflare.Access.Bookmark`,`Cloudflare.Access.Application with type: "bookmark"`],[`AWS.RDSData.ExecuteSql`,`AWS.RDSData.ExecuteStatement`],[`AWS.EKS.Deployment`,`Kubernetes.Deployment from alchemy/Kubernetes`],[`AWS.EKS.HelmChart`,`Kubernetes.HelmChart from alchemy/Kubernetes`],[`AWS.EKS.Job`,`Kubernetes.Job from alchemy/Kubernetes`],[`AWS.EKS.Manifest`,`Kubernetes.Manifest from alchemy/Kubernetes`]]),ke=y(b(`problem`,`Disallow deprecated Alchemy resource APIs that have supported replacements.`,{deprecated:`{{api}} is deprecated. Use {{replacement}}.`},`https://alchemy.run/llms-full.txt`),(e,t)=>({CallExpression(r){let i=T(r.callee,t());if(i===void 0)return;let a=n.join(i,`.`),o=Oe.get(a);o!==void 0&&e.report({node:r.callee,messageId:`deprecated`,data:{api:a,replacement:o}})}}));function Ae(e,t){let n=N(e);if(R(n)||n.type===`TemplateLiteral`)return!0;let r=S(n);return r?.[0]===`process`&&r[1]===`env`||n.type===`CallExpression`&&E(n.callee,t,`Config`,`string`)}const je=y(b(`problem`,`Require singular GitHub Secret values to use Redacted.`,{plaintext:`GitHub.Secret value must be Redacted so it stays out of logs and state. Use Redacted.make(...) or Config.redacted(...).`},`https://alchemy.run/providers/github/secret`),(e,t)=>({CallExpression(n){let r=t();if(!E(n.callee,r,`GitHub`,`Secret`))return;let i=A(n,1),a=i?.type===`ObjectExpression`?M(i,`value`):void 0;a!==void 0&&Ae(a.value,r)&&e.report({node:a.value,messageId:`plaintext`})}})),Me=y(b(`problem`,`Disallow removed Alchemy Secret and Variable APIs.`,{removed:`Alchemy.{{api}} was removed. Use effect/Config (Config.redacted for secrets, Config.string for variables).`},`https://alchemy.run/blog/2026-05-29-beta-45`),(e,t)=>({CallExpression(n){let r=T(n.callee,t());r?.[0]===`Alchemy`&&(r[1]===`Secret`||r[1]===`Variable`)&&e.report({node:n.callee,messageId:`removed`,data:{api:r[1]}})}})),Ne=y(b(`problem`,`Disallow creating an EventBridge bus with the reserved default name.`,{reserved:`EventBridge reserves the name "default". Omit the bus argument to use the account default, or choose another name.`},`https://alchemy.run/aws/messaging/eventbridge`),(e,t)=>({CallExpression(n){if(!O(n.callee,t(),[`AWS`,`EventBridge`,`EventBus`]))return;let r=A(n,1),i=r?.type===`ObjectExpression`?M(r,`name`):void 0;i!==void 0&&z(i.value,`default`)&&e.report({node:i.value,messageId:`reserved`})}})),Pe=y(b(`problem`,`Require Effect Config values to be resolved during Alchemy Worker initialization.`,{runtime:`Config resolved inside the {{handler}} handler is invisible to Alchemy deployment. Resolve it in Worker init and close over the value, or put it in env.`},`https://alchemy.run/environments/secrets`),(e,t)=>({YieldExpression(n){let r=t(),i=n.argument;if(i?.type!==`CallExpression`||T(i.callee,r)?.[0]!==`Config`)return;let a=Se(n,r);if(a===void 0)return;let o=Ce(a);o!==void 0&&xe(a,r)!==void 0&&e.report({node:i,messageId:`runtime`,data:{handler:o}})}})),Fe=/* @__PURE__ */ new Map([[`alchemy/aws`,`alchemy/AWS`],[`alchemy/cloudflare`,`alchemy/Cloudflare`]]),Ie=v(b(`problem`,`Disallow Alchemy v1 imports that bypass the Effect-based Stack API.`,{defaultImport:`The default alchemy() API is from v1. Use import * as Alchemy and Alchemy.Stack.`,providerImport:`Use the v2 provider entrypoint {{replacement}} (capitalization is significant).`},`https://alchemy.run/migrating-from-v1`),e=>({ImportDeclaration(t){let r=t.source.value;if(r===`alchemy`){let r=o.getOrUndefined(n.findFirst(t.specifiers,e=>e.type===`ImportDefaultSpecifier`));r!==void 0&&e.report({node:r,messageId:`defaultImport`});return}let i=Fe.get(r);i!==void 0&&e.report({node:t.source,messageId:`providerImport`,data:{replacement:i}})}})),Le=[[`entrypoint`,`main`],[`bindings`,`env`]],Re=y({...b(`problem`,`Disallow Alchemy v1 Cloudflare Worker property names.`,{property:`Cloudflare.Worker {{old}} was replaced in v2. Use {{replacement}}.`},`https://alchemy.run/migrating-from-v1`),fixable:`code`},(e,t)=>({CallExpression(n){if(!be(n.callee,t()))return;let r=A(n,1);if(r?.type===`ObjectExpression`)for(let[t,i]of Le){let a=M(r,t);a!==void 0&&e.report({node:a,messageId:`property`,data:{old:t,replacement:i},fix(o){if(B(e,n.callee)&&Ee(r,i))return o.replaceText(a.key,a.shorthand?`${i}: ${t}`:i)}})}}})),ze=y(b(`suggestion`,`Prefer schema-based tagged errors so errors have a serializable contract.`,{taggedError:`Prefer Schema.TaggedErrorClass over Data.TaggedError.`}),(e,t)=>({CallExpression(n){E(n.callee,t(),`Data`,`TaggedError`)&&e.report({node:n.callee,messageId:`taggedError`})}})),Be=/* @__PURE__ */ new Set([`error`,`err`,`e`,`cause`,`exception`,`ex`]);function Ve(e){return e?.type===`Identifier`&&Be.has(e.name)?e.name:void 0}function He(e){if(e.type!==`CallExpression`||e.arguments.length!==1)return!1;let t=S(e.callee);return t?.at(-1)===`String`&&t.length<=2}const Ue=v({...b(`problem`,`Disallow string coercion that discards an error value’s stack, type, and cause chain.`,{errorString:`Do not stringify {{name}}. Preserve the original error as an Error cause instead.`,useCause:`Replace {{pattern}} with {{replacement}} to preserve the original error.`}),hasSuggestions:!0},e=>({NewExpression(t){let n=A(t,0);if(n===void 0||!He(n)||!_e(t))return;let r=A(n,0);if(r===void 0)return;let i=e.sourceCode.getText(r),a=`'Error occurred', { cause: ${i} }`;e.report({node:n,messageId:`errorString`,data:{name:i},suggest:[{messageId:`useCause`,data:{pattern:e.sourceCode.getText(n),replacement:a},fix:e=>e.replaceText(n,a)}]})},CallExpression(t){if(He(t)){if(t.parent.type===`NewExpression`&&t.parent.arguments[0]===t&&_e(t.parent))return;let n=Ve(t.arguments[0]);n!==void 0&&e.report({node:t,messageId:`errorString`,data:{name:n}});return}if(t.callee.type!==`MemberExpression`||S(t.callee)?.at(-1)!==`toString`||t.arguments.length>0)return;let n=Ve(t.callee.object);n!==void 0&&e.report({node:t,messageId:`errorString`,data:{name:n}})},TemplateLiteral(t){let[n,r]=t.quasis,i=Ve(t.expressions[0]);i!==void 0&&t.quasis.length===2&&n?.value.raw===``&&r?.value.raw===``&&e.report({node:t,messageId:`errorString`,data:{name:i}})}})),We=/* @__PURE__ */ new Set(/* @__PURE__ */ `flip.fromFormData.fromJsonString.fromURLSearchParams.mutable.mutableKey.NullishOr.NullOr.optional.optionalKey.OptionFromNullishOr.OptionFromNullOr.OptionFromOptional.OptionFromOptionalKey.OptionFromOptionalNullOr.OptionFromUndefinedOr.readonlyKey.RedactedFromValue.required.requiredKey.toCodecArrayFromSingle.toCodecIso.toCodecJson.toCodecStringTree.toEncoded.toType.UndefinedOr`.split(`.`)),Ge=/* @__PURE__ */ new Set([`Array`,`ArrayEnsure`,`Chunk`,`HashSet`,`NonEmptyArray`,`Option`,`ReadonlySet`,`Redacted`,`Tree`,`UniqueArray`]),Ke=/* @__PURE__ */ new Set(/* @__PURE__ */ `annotate.annotateEncoded.annotateKey.brand.catchDecoding.catchDecodingWithContext.catchEncoding.catchEncodingWithContext.check.decode.decodeTo.encode.encodeKeys.encodeTo.extendTo.fieldsAssign.fromBrand.middlewareDecoding.middlewareEncoding.overrideToCodecIso.overrideToEquivalence.overrideToFormatter.refine.toTaggedUnion.withConstructorDefault.withDecodingDefault.withDecodingDefaultKey.withDecodingDefaultType.withDecodingDefaultTypeKey`.split(`.`)),qe=/* @__PURE__ */ new Set([`annotate`,`annotateKey`,`check`,`mapFields`]),Je=/* @__PURE__ */ new Set([`CallExpression`,`Identifier`,`MemberExpression`,`ThisExpression`]),Ye=/^\p{Lu}/u;function V(e,t,n){let r=T(e,n);return S(e)?.length===2&&r?.length===2&&r[0]===`Schema`&&B(t,e)?r[1]:void 0}function Xe(e){return e!==void 0&&Ge.has(e)}function Ze(e){return e!==void 0&&(We.has(e)||Ge.has(e))}const Qe=/* @__PURE__ */ new Set([`ArrowFunctionExpression`,`FunctionExpression`,`Identifier`,`Literal`,`ThisExpression`]);function $e(e,t,r){return n.every(e,e=>e===null||H(e,t,r))}function H(e,t,r){if(Qe.has(e.type))return!0;if(e.type===`MemberExpression`)return H(e.object,t,r)&&(!e.computed||H(e.property,t,r));if(e.type===`TemplateLiteral`)return $e(e.expressions,t,r);if(e.type===`ArrayExpression`)return $e(e.elements,t,r);if(e.type===`ObjectExpression`)return n.every(e.properties,e=>e.type===`SpreadElement`?H(e.argument,t,r):(!e.computed||H(e.key,t,r))&&H(e.value,t,r));if(e.type!==`CallExpression`)return!1;let i=e.callee.type===`CallExpression`?e.callee.callee:e.callee;return V(i,t,r)!==void 0&&(e.callee===i||H(e.callee,t,r))&&$e(e.arguments,t,r)}function et(e,t){if(e.type===`Identifier`)return t.bindings.get(e.name);if(e.type!==`TSQualifiedName`)return;let n=et(e.left,t);return n===void 0?void 0:[...n,e.right.name]}function tt(e,t){for(let i=t.parent;i!==null;i=i.parent){let t=`typeParameters`in i&&i.typeParameters?.type===`TSTypeParameterDeclaration`?r.pipe(i.typeParameters.params,n.findFirst(t=>t.name.name===e),o.getOrUndefined):void 0;if(t!==void 0)return t}}function nt(e,t,n){let r=/* @__PURE__ */ new Set,i=e,a=t;for(;i?.type===`TSTypeReference`;){let e=et(i.typeName,n),t=e?.length===2&&e[0]===`Schema`?e[1]:void 0;if(t!==void 0)return!t.startsWith(`Constraint`);let o=i.typeName.type===`Identifier`?tt(i.typeName.name,a):void 0;if(o===void 0||r.has(o))return r.size===0&&void 0;r.add(o),i=o.constraint,a=o}return r.size===0&&void 0}function rt(e,t){let n=C(t,e,e.name)?.defs[0]?.name;return n!==void 0&&`typeAnnotation`in n?n.typeAnnotation??void 0:void 0}function it(e,t,n){let r=e;for(;r.type===`TSSatisfiesExpression`||r.type===`TSNonNullExpression`;)r=r.expression;if(r.type===`TSAsExpression`)return nt(r.typeAnnotation,r,n)===!1;let i=r.type===`Identifier`?rt(r,t):void 0;return i!==void 0&&nt(i.typeAnnotation,i,n)===!1}function at(e){return n.some(e.arguments,e=>e.type===`SpreadElement`)}function ot(e){let[t]=e.arguments;return e.arguments.length===1&&t?.type!==`SpreadElement`&&!e.typeArguments?t:void 0}function st(e){return e.callee.type===`MemberExpression`&&!e.callee.optional&&x(e.callee)===`pipe`&&!e.typeArguments&&!at(e)}function ct(e,t,n){return(O(e.callee,n,[`pipe`])||O(e.callee,n,[`Function`,`pipe`]))&&B(t,e.callee)}function lt(e,t,n){return Ze(V(e,t,n))?!0:e.type===`CallExpression`&&Ke.has(V(e.callee,t,n)??``)}function ut(e,t,n){if(Ye.test(V(e,t,n)??``)||U(e,t,n)!==void 0)return!0;if(e.type!==`CallExpression`)return!1;let r=V(e.callee,t,n);return r===void 0?e.callee.type===`MemberExpression`&&qe.has(x(e.callee)??``)&&ut(e.callee.object,t,n):Ye.test(r)||Ze(r)}function dt(e,t,n){let[r,i]=e.arguments;if(!(r===void 0||i===void 0||r.type===`SpreadElement`||e.typeArguments||at(e)||!ut(r,t,n)&&!lt(i,t,n)))return[r,e.arguments.slice(1)]}function ft(e,t,n,r,i,a){let o=gt(e,i,a);return{head:o.head,steps:[...o.steps,t],violation:o.violation??n,reordersEffects:o.reordersEffects||r}}function pt(e,t,n){let r=ot(e);if(r===void 0)return;let i=V(e.callee,t,n);if(Ze(i)){let a=Xe(i);return ft(r,{text:t.sourceCode.getText(e.callee),wrapper:a},a?void 0:{kind:`modifierCall`,name:i},!1,t,n)}let a=e.callee.type===`CallExpression`?V(e.callee.callee,t,n):void 0;if(a!==void 0&&Ke.has(a))return ft(r,{text:t.sourceCode.getText(e.callee),wrapper:!1},{kind:`dataLastCall`,name:a},!H(e.callee,t,n)&&!H(r,t,n),t,n)}function mt(e,t,i){let a=ct(e,t,i),s=a?dt(e,t,i):st(e)?[e.callee.object,e.arguments]:void 0;if(s===void 0)return;let[c,l]=s,u=n.map(l,e=>V(e,t,i)),d=r.pipe(u,n.findFirst(Xe),o.getOrUndefined),f=d!==void 0&&n.some(l.slice(u.indexOf(d)+1),e=>!H(e,t,i));return ht(c,n.map(l,(e,n)=>({text:t.sourceCode.getText(e),wrapper:Xe(u[n])})),a?{kind:`functionPipe`}:d===void 0?void 0:{kind:`wrapperPipe`,name:d},f,t,i)}function ht(e,t,n,r,i,a){let o=gt(e,i,a);return{head:o.head,steps:[...o.steps,...t],violation:o.violation??n,reordersEffects:o.reordersEffects||r}}function U(e,t,n){return e.type===`CallExpression`?pt(e,t,n)??mt(e,t,n):void 0}function gt(e,t,n){return U(e,t,n)??{head:e,steps:[],violation:void 0,reordersEffects:!1}}function _t(e,t,n){let r=e.parent;return r.type===`MemberExpression`&&r.object===e&&r.parent.type===`CallExpression`?r.parent.callee===r&&st(r.parent):r.type===`CallExpression`&&r.arguments[0]===e&&(ct(r,t,n)||!st(r))&&U(r,t,n)!==void 0}function vt(e,t,r){return n.isReadonlyArrayNonEmpty(t)?`${e===`\0`&&!Je.has(r.type)?`(\0)`:e}.pipe(${n.join(t,`, `)})`:e}function yt(e,t){let n=`\0`,r=[];for(let i of t)if(i.wrapper){let t=vt(n,r,e),a=t===`\0`&&e.type===`SequenceExpression`?`(${t})`:t;n=`${i.text}(${a})`,r=[]}else r.push(i.text);return vt(n,r,e)}const bt=y({...b(`suggestion`,"Apply Schema modifiers with `.pipe(...)` and call Schema wrappers directly.",{modifierCall:"Apply Schema.{{name}} with `.pipe(...)` instead of calling it.",dataLastCall:"Apply Schema.{{name}}(...) with `.pipe(...)` instead of calling it on the schema.",functionPipe:"Call `.pipe(...)` on the schema instead of passing it to `pipe(...)`.",wrapperPipe:`Call Schema.{{name}}(...) directly instead of piping into it.`},`https://github.com/2digits-agency/configs/blob/main/docs/adr/0001-schema-modifiers-pipe-wrappers-call.md`),fixable:`code`},(e,t)=>({CallExpression(r){let i=t();if(!i.hasEffectImport)return;let a=U(r,e,i);if(a?.violation===void 0||_t(r,e,i))return;let{head:o}=a;if(a.steps[0]?.wrapper===!1&&it(o,e,i))return;let s=n.some(e.sourceCode.getCommentsInside(r),e=>!pe(o,e)),[c=``,l=``]=yt(o,a.steps).split(`\0`);e.report({node:r,messageId:a.violation.kind,data:{name:a.violation.name??``},fix:s||a.reordersEffects?void 0:e=>[e.replaceTextRange([r.range[0],o.range[0]],c),e.replaceTextRange([o.range[1],r.range[1]],l)]})}}));function xt(e){return o.getOrUndefined(n.findFirst(e.arguments,e=>e.type===`ObjectExpression`))}function St(e,t){let n=e.parent;if(n.type!==`Property`||j(n)!==t)return;let r=n.parent,i=r.parent;return r.type===`ObjectExpression`&&i?.type===`CallExpression`?i:void 0}function Ct(e,t){let n=L(e);return n===void 0?void 0:T(n.callee,t)}const wt=/* @__PURE__ */ new Set([`catch`,`finally`,`then`]);function Tt(e){let t=S(e.callee);return t!==void 0&&n.join(t,`.`)===`Promise`}function Et(e){let t=S(e.callee);return t!==void 0&&n.join(t,`.`)===`fetch`||t?.[0]===`Promise`&&t[1]!==`withResolvers`||wt.has(t?.at(-1)??``)||k(e.callee)&&e.callee.async}const Dt=a.type().pipe(a.discriminators(`type`)({CallExpression:Et,NewExpression:Tt}),a.orElse(r.constFalse));function Ot(e){return Dt(N(e))}function kt(e){if(e.body){if(e.body.type!==`BlockStatement`)return N(e.body);if(e.body.body.length===1&&e.body.body[0]?.type===`ReturnStatement`&&e.body.body[0].argument)return N(e.body.body[0].argument)}}function At(e){let t=e?.type===`ObjectExpression`?M(e,`try`)?.value:e;return k(t)?t:void 0}function jt(e){let t=N(e);return z(t,`*`)?!0:t.type===`ArrayExpression`&&(t.elements.length===0||n.some(t.elements,e=>e!==null&&z(e,`*`)))}const Mt=y(b(`problem`,`Disallow credentialed CORS with wildcard origins because browsers reject that combination.`,{wildcard:`Credentialed CORS cannot use a wildcard origin. Set allowedOrigins to explicit trusted origins or disable credentials.`},`https://github.com/Effect-TS/tsgo/issues/400`),(e,t)=>({CallExpression(n){let r=t();if(!E(n.callee,r,`HttpMiddleware`,`cors`)&&!E(n.callee,r,`HttpRouter`,`cors`)&&!E(n.callee,r,`HttpApiBuilder`,`middlewareCors`))return;let i=xt(n);if(i===void 0||!z(M(i,`credentials`)?.value??i,!0))return;let a=M(i,`allowedOrigins`);(a===void 0||jt(a.value))&&e.report({node:n,messageId:`wildcard`})}}));function Nt(e){return e.type===`AssignmentPattern`||e.type===`RestElement`||e.optional===!0}const Pt=y(b(`problem`,`Disallow numeric dual arity with optional or rest parameters because dispatch becomes ambiguous.`,{unsafeArity:`Function.dual with numeric arity misdispatches an implementation with optional/default/rest parameters. Use predicate dispatch.`},`https://github.com/Effect-TS/tsgo/issues/401`),(e,t)=>({CallExpression(r){let i=A(r,0),a=A(r,1);a!==void 0&&E(r.callee,t(),`Function`,`dual`)&&i?.type===`Literal`&&s.isNumber(i.value)&&k(a)&&n.some(a.params,Nt)&&e.report({node:i,messageId:`unsafeArity`})}})),Ft=y(b(`problem`,`Require Effect.tryPromise so Promise rejections enter the typed error channel.`,{tryPromise:`Use Effect.tryPromise instead of Effect.promise so rejections are typed failures.`}),(e,t)=>({CallExpression(n){E(n.callee,t(),`Effect`,`promise`)&&e.report({node:n.callee,messageId:`tryPromise`})}}));function It(e,t){if(D(e.callee,t,`Effect`,[`promise`,`tryPromise`]))return At(A(e,0))}const Lt=y(b(`problem`,`Ensure Effect Promise thunks start fresh asynchronous work rather than reusing an already-started Promise.`,{prestarted:`This thunk returns an already-started Promise. Start the asynchronous work inside the thunk so retries and repeats run it again.`},`https://github.com/Effect-TS/tsgo/issues/475`),(e,t)=>{let n=/* @__PURE__ */ new Set;return{before(){n=/* @__PURE__ */ new Set},VariableDeclarator(e){e.id.type===`Identifier`&&e.init&&Ot(e.init)&&n.add(e.id.name)},CallExpression(r){let i=It(r,t()),a=i===void 0?void 0:kt(i);a?.type===`Identifier`&&n.has(a.name)&&e.report({node:a,messageId:`prestarted`})}}}),Rt=y(b(`problem`,`Disallow async thunks in Effect.try because rejected Promises bypass its catch mapper.`,{asyncTry:`Effect.try does not await Promises. Use Effect.tryPromise so rejection enters the typed error channel.`},`https://github.com/Effect-TS/tsgo/issues/657`),(e,t)=>({CallExpression(n){if(!E(n.callee,t(),`Effect`,`try`))return;let r=A(n,0),i=r!==void 0&&k(r)?r:void 0;if(i===void 0&&r?.type===`ObjectExpression`){let e=M(r,`try`)?.value;e!==void 0&&k(e)&&(i=e)}let a=i===void 0?void 0:kt(i);i!==void 0&&(i.async||a!==void 0&&Ot(a))&&e.report({node:i,messageId:`asyncTry`})}})),zt=y(b(`problem`,`Disallow discarded Effect.runPromise results that can become unhandled rejections.`,{discarded:`The Promise returned by Effect.runPromise is discarded. Await/return/handle it, or use Effect.runFork for fire-and-forget work.`},`https://github.com/Effect-TS/tsgo/issues/643`),(e,t)=>({CallExpression(n){let r=t(),i=E(n.callee,r,`Effect`,`runPromise`),a=n.callee.type===`CallExpression`&&E(n.callee.callee,r,`Effect`,`runPromiseWith`);(i||a)&&ge(n)&&e.report({node:n,messageId:`discarded`})}})),Bt=/* @__PURE__ */ new Set([`mapElements`,`mapFields`,`mapMembers`]);function Vt(e,t){let n=N(e);if(n.type===`CallExpression`&&n.callee.type===`MemberExpression`&&x(n.callee)===t)return n}const Ht=y(b(`problem`,`Disallow schema mapping that silently drops checks attached to the receiver.`,{discarded:`{{method}} creates a new schema and drops the preceding check. Re-attach the check after mapping or explicitly preserve it.`},`https://github.com/Effect-TS/tsgo/issues/435`),(e,t)=>({CallExpression(r){if(!t().hasEffectImport||r.callee.type!==`MemberExpression`)return;let i=x(r.callee);i!==void 0&&Bt.has(i)&&Vt(r.callee.object,`check`)!==void 0&&(n.findFirst(r.arguments,e=>e.type===`ObjectExpression`).pipe(o.flatMapNullishOr(e=>M(e,`unsafePreserveChecks`)),o.exists(e=>z(e.value,!0)))||e.report({node:r,messageId:`discarded`,data:{method:i}}))}})),Ut={Array:`Arr`,Boolean:`Bool`,Equal:`Eq`,Function:`Fn`,Number:`Num`,Option:`Opt`,Predicate:`P`,Record:`R`,String:`Str`},Wt=/^\p{Lu}/u;function Gt(e){return Wt.test(e)}function Kt(e){return e===`@effect/vitest`||e.startsWith(`@effect/vitest/`)}function W(e,t){return e.importKind===`type`||t?.importKind===`type`}function qt(e){return o.getOrElse(i.get(Ut,e),()=>e)}function Jt(e,t){if(e===`effect`||e===`alchemy`||/^@effect\/[^/]+$/u.test(e)&&!Kt(e))return`${e}/${t}`}function Yt(e){if(Kt(e)||!(e.startsWith(`effect/`)||e.startsWith(`alchemy/`)||/^@effect\/[^/]+\//u.test(e)))return;let t=n.lastNonEmpty(c.split(e,`/`));return Gt(t)?t:void 0}function Xt(e,t,r){let i=t.specifiers;if(e.sourceCode.getCommentsInside(t).length>0||t.attributes.length>0||!n.every(i,e=>e.type===`ImportSpecifier`))return;let[a,o]=n.partition(i,n=>{let r=g(n.imported),i=Gt(r)&&!W(t,n)?Jt(t.source.value,r):void 0;return i===void 0?l.fail(e.sourceCode.getText(n)):l.succeed(`import * as ${n.local.name} from '${i}';`)}),s=n.isReadonlyArrayNonEmpty(o)?n.prepend(a,`import { ${n.join(o,`, `)} } from ${e.sourceCode.getText(t.source)};`):a;return[r.replaceText(t,n.join(s,`
2
- `))]}function Zt(e,t,r){let i=Yt(t.source.value);if(i===void 0||t.attributes.length>0||e.sourceCode.getCommentsInside(t).length>0)return;let a=qt(i),s=e.sourceCode.getDeclaredVariables(t),c=o.getOrUndefined(n.findFirst(s,e=>e.name===a));if(n.some(e.sourceCode.scopeManager.scopes,e=>n.some(e.variables,e=>e.name===a&&e!==c)||n.some(e.references,e=>e.identifier.name===a&&e.resolved!==c)))return;let l=[],u=[];for(let n of t.specifiers){if(n.type===`ImportDefaultSpecifier`)return;if(n.type===`ImportSpecifier`&&W(t,n)){if(n.local.name===a)return;u.push(e.sourceCode.getText(n));continue}let i=Qt(n,s,a,r);if(i===void 0)return;l.push(...i)}let d=e.sourceCode.getText(t.source),f=`import * as ${a} from ${d};${u.length===0?``:`\nimport { ${n.join(u,`, `)} } from ${d};`}`;return[r.replaceText(t,f),...l]}function Qt(e,t,r,i){let a=o.getOrUndefined(n.findFirst(t,t=>t.name===e.local.name));if(a!==void 0){if(e.type===`ImportNamespaceSpecifier`)return $t(a,r,!1,i);if(e.imported.type===`Identifier`)return $t(a,`${r}.${e.imported.name}`,!0,i)}}function $t(e,t,n,r){let i=[],a=/* @__PURE__ */ new Set;for(let o of e.references){let e=o.identifier;if(a.has(e.range[0]))continue;a.add(e.range[0]);let s=e.parent;if(o.isWrite()||s.type===`ExportSpecifier`||s.type.startsWith(`JSX`))return;let c=s.type===`Property`&&s.shorthand?`${e.name}: ${t}`:t;n&&(s.type===`CallExpression`&&s.callee===e||s.type===`TaggedTemplateExpression`&&s.tag===e)&&(c=`(0, ${t})`),i.push(r.replaceText(e,c))}return i}const en=v({...b(`suggestion`,`Import Effect and Alchemy module namespaces from their submodule entrypoints instead of root barrels.`,{barrelImport:'Import this module as `import * as {{alias}} from "{{source}}"` instead of from the root barrel.'},`https://github.com/Effect-TS/language-service/blob/main/packages/language-service/src/diagnostics/importFromBarrel.ts`),fixable:`code`},e=>({ImportDeclaration(t){for(let n of t.specifiers){if(n.type!==`ImportSpecifier`||W(t,n))continue;let r=g(n.imported),i=Gt(r)?Jt(t.source.value,r):void 0;i!==void 0&&e.report({node:n,messageId:`barrelImport`,data:{alias:qt(r),source:i},fix:n=>Xt(e,t,n)})}}})),tn=y({...b(`suggestion`,`Prefer Effect.never to an empty Effect.callback registration.`,{emptyCallback:`An empty Effect.callback registration is Effect.never. Use the explicit primitive.`},`https://github.com/Effect-TS/tsgo/issues/636`),fixable:`code`},(e,t)=>({CallExpression(r){if(!E(r.callee,t(),`Effect`,`callback`)&&!E(r.callee,t(),`Effect`,`async`))return;let i=A(r,0);i!==void 0&&k(i)&&i.body?.type===`BlockStatement`&&i.body.body.length===0&&e.report({node:r,messageId:`emptyCallback`,fix(t){if(!B(e,r.callee)||r.arguments.length!==1||i.async||i.generator||n.some(i.params,e=>e.type!==`Identifier`)||e.sourceCode.getCommentsInside(r).length>0)return;let a=Te(e,r,`effect/Effect`,`Effect`,t);return[...a.fixes,t.replaceText(r,`${a.name}.never`)]}})}})),nn=y(b(`problem`,`Disallow Schema.Struct({}), which accepts every non-null object-like value.`,{emptyStruct:`Schema.Struct({}) does not validate an exact empty object. Define the intended fields explicitly.`},`https://github.com/Effect-TS/tsgo/issues/403`),(e,t)=>({CallExpression(n){let r=A(n,0);E(n.callee,t(),`Schema`,`Struct`)&&r?.type===`ObjectExpression`&&r.properties.length===0&&e.report({node:n,messageId:`emptyStruct`})}}));function rn(e,t){let r=N(e),i=/* @__PURE__ */ new Set;for(;r.type===`Identifier`;){let e=C(t,r,r.name),a=ie(e),o=a?.node;if(e===void 0||i.has(e)||o?.type!==`VariableDeclarator`||o.id.type!==`Identifier`||a?.parent?.type!==`VariableDeclaration`||a.parent.kind!==`const`||!o.init||n.some(e.references,e=>e.isWrite()&&!e.init))return;i.add(e),r=N(o.init)}return r}function an(e){if(e.arguments.length===2)return A(e,0);let t=e.parent;if(e.arguments.length===1&&t.type===`CallExpression`&&t.arguments[0]===e&&t.callee.type===`MemberExpression`&&x(t.callee)===`pipe`)return t.callee.object}const on=y(b(`problem`,`Disallow obsolete lazy callbacks passed to the now-eager Config.withDefault API.`,{functionDefault:`Config.withDefault takes an eager value. This callback becomes the configured value; pass the returned value directly.`},`https://github.com/Effect-TS/tsgo/issues/408`),(e,t)=>({CallExpression(n){if(!E(n.callee,t(),`Config`,`withDefault`)||!B(e,n.callee))return;let r=A(n,n.arguments.length-1),i=an(n),a=i===void 0?void 0:rn(i,e);a?.type===`CallExpression`&&E(a.callee,t(),`Config`,`succeed`)&&B(e,a.callee)&&k(A(a,0))||k(r)&&r.params.length===0&&e.report({node:r,messageId:`functionDefault`})}})),sn=/* @__PURE__ */ new Set([`delete`,`get`,`has`,`set`]);function cn(e,t){return e.type===`CallExpression`&&E(e.callee,t,`Hash`,`hash`)}const ln=y(b(`problem`,`Disallow using Hash.hash output as collision-free identity.`,{hashIdentity:`Hash.hash is a bucketing hint, not a unique identity. Use HashMap/Equal.equals or a real identifier instead.`},`https://github.com/Effect-TS/tsgo/issues/482`),(e,t)=>{let n=/* @__PURE__ */ new Set;function r(e){return cn(e,t())||e.type===`Identifier`&&n.has(e.name)}return{before(){n=/* @__PURE__ */ new Set},VariableDeclarator(e){e.id.type===`Identifier`&&e.init&&cn(e.init,t())&&n.add(e.id.name)},CallExpression(t){if(t.callee.type!==`MemberExpression`||!sn.has(S(t.callee)?.at(-1)??``))return;let n=A(t,0);n!==void 0&&r(n)&&e.report({node:n,messageId:`hashIdentity`})},BinaryExpression(t){he(t.operator)&&r(t.left)&&r(t.right)&&e.report({node:t,messageId:`hashIdentity`})},MemberExpression(t){t.computed&&r(t.property)&&e.report({node:t.property,messageId:`hashIdentity`})}}}),un=/* @__PURE__ */ new Set(/* @__PURE__ */ `asserts.decodeEffect.decodeExit.decodeOption.decodePromise.decodeResult.decodeSync.decodeUnknownEffect.decodeUnknownExit.decodeUnknownOption.decodeUnknownPromise.decodeUnknownResult.decodeUnknownSync.encodeEffect.encodeExit.encodeOption.encodePromise.encodeResult.encodeSync.encodeUnknownEffect.encodeUnknownExit.encodeUnknownOption.encodeUnknownPromise.encodeUnknownResult.encodeUnknownSync.is`.split(`.`)),dn=/* @__PURE__ */ new Set([`global`,`module`]),fn=/* @__PURE__ */ new Set([`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`]),pn=/* @__PURE__ */ new Set([`AssignmentExpression`,`AwaitExpression`,`ImportExpression`,`TaggedTemplateExpression`,`UpdateExpression`,`YieldExpression`]),mn=/* @__PURE__ */ new Set([`ParenthesizedExpression`,`TSAsExpression`,`TSNonNullExpression`]);function hn(e,t,r){let i=T(e,t),a=i?.length===2&&i[0]===`Schema`?i[1]:void 0,o=S(e)?.[0];if(a===void 0||o===void 0||!un.has(a))return;let s=C(r,e,o);return s!==void 0&&n.every(s.defs,e=>e.type===`ImportBinding`)?a:void 0}function gn(e){let t=e.parent;for(;t;){if(fn.has(t.type))return!0;t=t.parent}return!1}function _n(e){let t=e,n=e.parent;for(;mn.has(n.type)&&n.parent!==null;)t=n,n=n.parent;return n.type===`CallExpression`&&n.callee===t}function vn(e,t){return e.type===`CallExpression`&&T(e.callee,t)?.[0]===`Schema`}function yn(e){let t=e,n=e.parent;for(;n?.type===`MemberExpression`&&n.object===t;)t=n,n=n.parent;return t!==e&&(n?.type===`AssignmentExpression`&&n.left===t||n?.type===`UpdateExpression`&&n.argument===t||n?.type===`UnaryExpression`&&n.operator===`delete`&&n.argument===t)}function bn(e){return n.every(e.references,e=>(!e.isWrite()||e.init)&&!yn(e.identifier))}function xn(e,t,n,r){let i=C(r,e,t);return i===void 0||pe(n,i.scope.block)?!0:dn.has(i.scope.type)&&bn(i)}function Sn(e){let t=e.parent;return t?.type===`MemberExpression`&&t.property===e&&!t.computed||t?.type===`Property`&&t.key===e&&!t.computed&&!t.shorthand}function Cn(e,t){if(e===t)return!1;let n=e.parent;for(;n!==null&&n!==t;){if(fn.has(n.type))return!0;n=n.parent}return!1}function wn(e,t,n){return Cn(e,t)?!1:e.type===`CallExpression`||e.type===`NewExpression`?T(e.callee,n)===void 0:pn.has(e.type)}function Tn(e,t,n){return!P(e,r=>r.type===`ThisExpression`||r.type===`Super`||r.type===`MetaProperty`&&r.meta.name===`new`||wn(r,e,t)||r.type===`Identifier`&&!Sn(r)&&!xn(r,r.name,e,n))}const En=y(b(`problem`,`Disallow compiling Schema decoders, encoders, and guards inside function bodies.`,{inlineSchema:`Hoist Schema.{{method}}(...) to module scope: both the inline schema and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.`,inlineCompile:`Hoist Schema.{{method}}(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.`},`https://github.com/pingdotgg/t3code/blob/main/oxlint-plugin-t3code/rules/no-inline-schema-compile.ts`),(e,t)=>({CallExpression(r){let i=t();if(!i.hasEffectImport)return;let a=hn(r.callee,i,e),[o]=r.arguments;if(a===void 0||o===void 0||o.type===`SpreadElement`||n.some(r.arguments,e=>e.type===`SpreadElement`)||!_n(r)||!gn(r))return;let s=N(o),c=vn(s,i);(c||s.type===`Identifier`||s.type===`MemberExpression`)&&n.every(r.arguments,t=>Tn(t,i,e))&&e.report({node:r.callee,messageId:c?`inlineSchema`:`inlineCompile`,data:{method:a}})}})),Dn=/* @__PURE__ */ new Set([`catch`,`catchAll`,`catchAllCause`,`catchIf`,`catchSome`,`catchSomeCause`,`catchTag`,`orElse`,`orElseFail`,`orElseSucceed`]),On=/* @__PURE__ */ new Set([`log`,`logDebug`,`logError`,`logInfo`,`logTrace`,`logWarning`]);function kn(e,t){let n=e.parent;for(;n;){if(k(n)){let e=L(n);if(e?.arguments.at(-1)===n){let n=T(e.callee,t),r=n?.[1];if(r!==void 0&&n?.[0]===`Effect`&&Dn.has(r))return{method:r}}}n=n.parent}}const An=y(b(`suggestion`,`Keep logging separate from Effect recovery handlers.`,{logging:`Move {{logger}} out of Effect.{{catchMethod}} and use Effect.tapError before recovery.`}),(e,t)=>({CallExpression(r){let i=t(),a=T(r.callee,i),o=a?.[1]!==void 0&&a[0]===`Effect`&&On.has(a[1])?n.join(a,`.`):void 0;if(o===void 0)return;let s=kn(r,i);s!==void 0&&e.report({node:r,messageId:`logging`,data:{logger:o,catchMethod:s.method}})}})),jn=a.type().pipe(a.when({type:`MemberExpression`,computed:!1,object:{type:`Identifier`,name:`Effect`},property:{type:`Identifier`,name:a.is(`catch`,`catchAll`,`catchIf`)}},r.constTrue),a.orElse(r.constFalse)),Mn=a.type().pipe(a.when({type:`MemberExpression`,computed:!1,object:{type:`Identifier`,name:`Match`},property:{type:`Identifier`,name:a.is(`when`,`not`)}},r.constTrue),a.orElse(r.constFalse)),G=a.type().pipe(a.when({type:`MemberExpression`,computed:!1,property:{type:`Identifier`,name:`_tag`}},r.constTrue),a.when({type:`MemberExpression`,computed:!0,property:{type:`Literal`,value:`_tag`}},r.constTrue),a.orElse(r.constFalse));function Nn(e){if(he(e.operator)){if(G(e.left)&&R(e.right))return e.left;if(G(e.right)&&R(e.left))return e.right}}function K(e){let t=I(e),n=t===void 0?void 0:L(t);return n!==void 0&&jn(n.callee)}function Pn(e){return e.object.type===`MemberExpression`&&x(e.object)===`reason`}function Fn(e){let t=e.parent;return t.type===`CallExpression`&&t.arguments.includes(e)&&Mn(t.callee)}const In=v(b(`problem`,"Use Effect tagged error handlers instead of manually branching on `_tag` in a catch handler.",{tag:`Use Effect.catchTag or Effect.catchTags instead of manually discriminating a tagged error in a broad Effect catch handler.`,reason:"Use Effect.catchReason or Effect.catchReasons instead of manually discriminating a tagged `reason` in a broad Effect catch handler."},`https://github.com/dmmulroy/anti-slop/blob/main/src/effect/rules/no-manual-effect-error-tag.ts`),e=>({BinaryExpression(t){let n=Nn(t);n!==void 0&&K(t)&&e.report({node:t,messageId:Pn(n)?`reason`:`tag`})},SwitchStatement(t){G(t.discriminant)&&K(t)&&e.report({node:t,messageId:Pn(t.discriminant)?`reason`:`tag`})}})),Ln=v(b(`problem`,"Use Effect Match or Predicate helpers instead of manually branching on `_tag`.",{manualComparison:`Use Match.tag/Match.tags for tagged-value branching, or Predicate.isTagged for a simple reusable predicate.`,manualSwitch:"Use Match.value(value).pipe(Match.tag/Match.tags/Match.tagsExhaustive) or the tagged enum `$match` helper instead of switching on `_tag`."},`https://github.com/dmmulroy/anti-slop/blob/main/src/effect/rules/no-manual-tag-comparison.ts`),e=>({BinaryExpression(t){Nn(t)===void 0||K(t)||e.report({node:t,messageId:`manualComparison`})},SwitchStatement(t){G(t.discriminant)&&!K(t)&&e.report({node:t,messageId:`manualSwitch`})}})),Rn=v(b(`problem`,"Construct tagged values with their existing Effect constructor instead of writing `_tag` manually.",{manualConstruction:"Use the existing Schema tagged `.make`, tagged class/error constructor, or Data.taggedEnum variant constructor instead of writing a literal `_tag` object."},`https://github.com/dmmulroy/anti-slop/blob/main/src/effect/rules/no-manual-tagged-construction.ts`),e=>({ObjectExpression(t){if(Fn(t))return;let r=o.getOrUndefined(n.findFirst(t.properties,e=>e.type===`Property`&&j(e)===`_tag`&&R(e.value)));r!==void 0&&e.report({node:r,messageId:`manualConstruction`})}})),zn=/* @__PURE__ */ new Map([[`addEventListener`,1],[`on`,1],[`setInterval`,0]]);function Bn(e,t){let n=S(e.callee)?.at(-1),r=n===void 0?void 0:zn.get(n);if(r===void 0)return!1;if(n===`addEventListener`){let t=A(e,2);if(t?.type===`ObjectExpression`){let e=M(t,`once`);if(e!==void 0&&z(e.value,!0))return!1}}let i=A(e,r);return i!==void 0&&ue(i,t)}const Vn=y(b(`problem`,`Disallow attaching Effect.callback resume to repeating event sources.`,{multiShot:`Effect.callback is single-shot, but this source emits repeatedly. Use a once-style subscription or Stream.callback.`},`https://github.com/Effect-TS/tsgo/issues/484`),(e,t)=>({CallExpression(n){if(!E(n.callee,t(),`Effect`,`callback`))return;let r=A(n,0);if(r===void 0||!k(r))return;let i=F(r)?.name,a=r.body;i!==void 0&&a&&P(a,e=>e.type===`CallExpression`&&Bn(e,i))&&e.report({node:n,messageId:`multiShot`})}})),Hn=/* @__PURE__ */ new Set([`NaN`,`Infinity`,`undefined`]),Un=/* @__PURE__ */ new Set([`annotate`,`annotateEncoded`,`annotateKey`]),Wn=[`default`,`examples`];function Gn(e){return e.type===`Literal`&&s.isBigInt(e.value)||e.type===`Identifier`&&Hn.has(e.name)||k(e)||e.type===`CallExpression`&&S(e.callee)?.at(-1)===`Symbol`}function Kn(e,t){if(e.type===`ArrayExpression`)for(let n of e.elements)n&&n.type!==`SpreadElement`&&t.push(n);else if(e.type===`ObjectExpression`)for(let n of e.properties)n.type===`Property`&&t.push(n.value)}function qn(e){let t=[e];for(;t.length>0;){let e=t.pop();if(e===void 0)continue;let n=N(e);if(Gn(n))return n;Kn(n,t)}}const Jn=y(b(`problem`,`Disallow schema examples and defaults that cannot be represented in JSON Schema.`,{nonJson:`This schema annotation value is not JSON-serializable and will be omitted from or corrupt generated JSON Schema.`},`https://github.com/Effect-TS/tsgo/issues/440`),(e,t)=>({CallExpression(n){let r=t();if(!r.hasEffectImport)return;let i=T(n.callee,r),a=n.callee.type===`MemberExpression`?x(n.callee):i?.[0]===`Schema`?i[1]:void 0;if(a===void 0||!Un.has(a))return;let o=xt(n);if(o!==void 0&&M(o,`jsonSchema`)===void 0)for(let t of Wn){let n=M(o,t);if(n===void 0)continue;let r=qn(n.value);r!==void 0&&e.report({node:r,messageId:`nonJson`})}}})),Yn=y(b(`problem`,`Disallow wrapping infallible Effect.service access in Option or Either.`,{mandatory:`Effect.service never fails, so this wrapper is always present and keeps the service requirement. Use Effect.serviceOption.`},`https://github.com/Effect-TS/tsgo/issues/648`),(e,t)=>({CallExpression(n){let r=t(),i=D(n.callee,r,`Effect`,[`option`,`either`]),a=A(n,0);if(i&&a?.type===`CallExpression`&&E(a.callee,r,`Effect`,`service`)){e.report({node:n,messageId:`mandatory`});return}if(n.callee.type!==`MemberExpression`||S(n.callee)?.at(-1)!==`pipe`)return;let o=N(n.callee.object),s=A(n,0);s!==void 0&&o.type===`CallExpression`&&E(o.callee,r,`Effect`,`service`)&&D(s,r,`Effect`,[`option`,`either`])&&e.report({node:n,messageId:`mandatory`})}})),Xn=y(b(`problem`,`Ensure a later object spread cannot overwrite an explicitly assigned _tag.`,{overwritten:`A later spread can overwrite _tag at runtime. Move _tag after all spreads.`},`https://github.com/Effect-TS/tsgo/issues/426`),e=>({ObjectExpression(t){let r=n.findFirstWithIndex(t.properties,e=>e.type===`Property`&&j(e)===`_tag`);if(o.isNone(r))return;let[i,a]=r.value;n.some(n.drop(t.properties,a+1),e=>e.type===`SpreadElement`)&&e.report({node:i,messageId:`overwritten`})}})),Zn=/^make[A-Z]/u,Qn=/\.(?:test|spec)\.[cm]?[jt]sx?$/u,$n=v(b(`problem`,`Disallow project-local make<CapabilityName> imports outside test and spec files.`,{serviceConstructorImport:`Do not import Effect service constructor "{{name}}" into runtime code. Import the owning Layer, yield the contextual service, and allow its requirements to propagate to the composition root.`},`https://github.com/dmmulroy/anti-slop/blob/main/src/effect/rules/no-service-constructor-imports.ts`),e=>({ImportDeclaration(t){if(!Qn.test(e.filename.replaceAll(`\\`,`/`))&&(t.source.value.startsWith(`./`)||t.source.value.startsWith(`../`)))for(let n of t.specifiers){if(n.type!==`ImportSpecifier`)continue;let t=g(n.imported);Zn.test(t)&&e.report({node:n,messageId:`serviceConstructorImport`,data:{name:t}})}}})),er=y(b(`problem`,`Disallow turning missing Effect services into untyped Option defects.`,{getOrThrow:`Option.getOrThrow after Effect.serviceOption hides a mandatory service until runtime. Use Effect.service so it remains a typed requirement.`},`https://github.com/Effect-TS/tsgo/issues/650`),(e,t)=>({CallExpression(n){let r=t();if(D(n.callee,r,`Option`,[`getOrThrow`,`getOrThrowWith`])){let t=A(n,0),i=t?.type===`YieldExpression`?t.argument:t;i?.type===`CallExpression`&&E(i.callee,r,`Effect`,`serviceOption`)&&e.report({node:n,messageId:`getOrThrow`});return}if(n.callee.type!==`MemberExpression`||S(n.callee)?.at(-1)!==`pipe`)return;let i=N(n.callee.object),a=A(n,0);if(i.type!==`CallExpression`||!E(i.callee,r,`Effect`,`serviceOption`)||a?.type!==`CallExpression`||!E(a.callee,r,`Effect`,`map`))return;let o=A(a,0);o!==void 0&&D(o,r,`Option`,[`getOrThrow`,`getOrThrowWith`])&&e.report({node:n,messageId:`getOrThrow`})}})),tr=/* @__PURE__ */ new Set([`andThen`,`map`,`mapError`,`tap`,`tapError`,`tapErrorCause`]),nr=y(b(`problem`,`Disallow throw in Effect callbacks that cannot add the thrown value to the typed error channel.`,{callbackThrow:`Throwing in this Effect callback creates an untyped defect. Return Effect.fail(...) or return the mapped error value instead.`},`https://github.com/Effect-TS/tsgo/issues/406`),(e,t)=>({ThrowStatement(n){let r=I(n);if(r===void 0)return;let i=t(),a=Ct(r,i),o=St(r,`catch`);(a?.[0]===`Effect`&&a[1]!==void 0&&tr.has(a[1])||o!==void 0&&D(o.callee,i,`Effect`,[`try`,`tryPromise`]))&&e.report({node:n,messageId:`callbackThrow`})}})),rr=/* @__PURE__ */ new Set([`get`,`post`,`put`,`patch`,`delete`,`head`,`options`]);function ir(e,t){let n=e.parent,r=e.node;if(e.type!==`ImportBinding`||n?.type!==`ImportDeclaration`||W(n,r.type===`ImportSpecifier`?r:void 0))return!1;let i=n.source.value;return r.type===`ImportNamespaceSpecifier`?i===`effect/unstable/httpapi/HttpApiEndpoint`&&t.length===2||i===`effect/unstable/httpapi`&&t.length===3&&t[1]===`HttpApiEndpoint`:r.type===`ImportSpecifier`&&r.imported.type===`Identifier`&&r.imported.name===`HttpApiEndpoint`&&i===`effect/unstable/httpapi`&&t.length===2}function ar(e,t){let n=S(e.callee),r=n?.[0],i=n?.at(-1);if(n===void 0||r===void 0||i===void 0||!rr.has(i))return!1;let a=ie(C(t,e,r));return a!==void 0&&ir(a,n)}function or(e){if(e?.type!==`ObjectExpression`)return;let t=/* @__PURE__ */ new Set,n=[];for(let r of e.properties){if(r.type!==`Property`||r.computed||r.method||r.kind!==`init`)return;let e=j(r)??(r.key.type===`Literal`&&s.isNumber(r.key.value)?String(r.key.value):void 0);if(e===void 0||t.has(e))return;t.add(e),n.push(r)}return n}const sr=v(b(`problem`,`Require lowercase static keys in Effect v4 endpoint header field schemas.`,{uppercase:`Header schema key "{{name}}" contains ASCII uppercase letters. Incoming headers use exact lowercase runtime lookup; review the schema and its consumers before renaming this key.`},`https://github.com/Effect-TS/tsgo/issues/413`),e=>({CallExpression(t){if(n.some(t.arguments,e=>e.type===`SpreadElement`)||!ar(t,e))return;let r=or(A(t,2)),i=or(o.getOrUndefined(n.findFirst(r??[],e=>j(e)===`headers`))?.value);if(i!==void 0)for(let t of i){let n=j(t);n!==void 0&&/[A-Z]/u.test(n)&&e.report({node:t.key,messageId:`uppercase`,data:{name:n}})}}})),cr=y(b(`problem`,`Disallow no-op retry and repeat wrappers with times: 0.`,{zeroTimes:`times: 0 performs no retries or repeats. Remove the wrapper or use a positive count.`},`https://github.com/Effect-TS/tsgo/issues/412`),(e,t)=>({CallExpression(n){let r=t();if(!D(n.callee,r,`Effect`,[`retry`,`repeat`]))return;let i=xt(n);if(i===void 0)return;let a=M(i,`times`);a!==void 0&&z(a.value,0)&&e.report({node:a,messageId:`zeroTimes`})}})),lr=v({...b(`suggestion`,`Use consistently aliased namespace imports for Effect and Alchemy submodule entrypoints.`,{alias:"Import {{source}} as the canonical namespace alias `{{alias}}`.",namespace:'Use `import * as {{alias}} from "{{source}}"` instead of importing values directly.'},`https://github.com/Effect-TS/language-service/blob/main/packages/language-service/src/core/AutoImport.ts`),fixable:`code`},e=>({ImportDeclaration(t){let n=Yt(t.source.value);if(n===void 0||t.importKind===`type`)return;let r=qt(n);for(let n of t.specifiers)n.type===`ImportSpecifier`&&W(t,n)||(n.type===`ImportNamespaceSpecifier`?n.local.name!==r&&e.report({node:n.local,messageId:`alias`,data:{alias:r,source:t.source.value},fix:n=>Zt(e,t,n)}):e.report({node:n,messageId:`namespace`,data:{alias:r,source:t.source.value},fix:n=>Zt(e,t,n)}))}})),ur=y(b(`suggestion`,`Prefer immutable, Order-based Effect Array sorting in Effect projects.`,{effectArraySort:`Use Arr.sort with an Order instead of the mutable native Array.sort method.`},`https://www.effect.website/docs/v4/api/effect/Array#sort`),(e,t)=>({CallExpression(n){let r=t();r.hasEffectImport&&n.callee.type===`MemberExpression`&&x(n.callee)===`sort`&&!E(n.callee,r,`Array`,`sort`)&&e.report({node:n,messageId:`effectArraySort`})}})),dr=/* @__PURE__ */ new Set([`toISOString`,`toLocaleDateString`,`toLocaleTimeString`]),fr=y(b(`suggestion`,`Prefer Effect DateTime formatting so time-zone behavior is explicit and composable.`,{effectDateTime:`Convert to DateTime and use DateTime.format, DateTime.formatIso, or another explicit formatter.`},`https://www.effect.website/docs/v4/api/effect/DateTime`),(e,t)=>({CallExpression(n){t().hasEffectImport&&n.callee.type===`MemberExpression`&&dr.has(x(n.callee)??``)&&e.report({node:n,messageId:`effectDateTime`})}})),pr=/* @__PURE__ */ new Map([[`Effect.cachedInvalidateWithTTL`,`last`],[`Effect.cachedWithTTL`,`last`],[`Effect.delay`,`last`],[`Effect.sleep`,`last`],[`Effect.timeout`,`last`],[`Effect.timeoutOption`,`last`],[`Effect.timeoutOrElse`,`options.duration`],[`Schedule.duration`,`last`],[`Schedule.during`,`last`],[`Schedule.exponential`,`first`],[`Schedule.fibonacci`,`last`],[`Schedule.fixed`,`last`],[`Schedule.spaced`,`last`],[`Schedule.windowed`,`last`],[`Stream.debounce`,`last`],[`Stream.groupedWithin`,`last`],[`Stream.throttle`,`options.duration`],[`Stream.timeout`,`last`],[`TestClock.adjust`,`last`]]),mr={first:e=>A(e,0),last:e=>A(e,e.arguments.length-1),"options.duration":e=>{let t=A(e,e.arguments.length-1);return t?.type===`ObjectExpression`?M(t,`duration`)?.value:void 0}};function hr(e,t,r){let i=T(e.callee,r),a=i===void 0?void 0:pr.get(n.join(i,`.`));return a!==void 0&&B(t,e.callee)?mr[a](e):void 0}function gr(e,t){return e**t}const _r=a.type().pipe(a.withReturnType(),a.when(`*`,()=>u.multiply),a.when(`+`,()=>u.sum),a.when(`-`,()=>u.subtract),a.when(`/`,()=>u.divideUnsafe),a.when(`%`,()=>u.remainder),a.when(`**`,()=>gr),a.orElse(r.constUndefined));function q(e){let t=N(e);if(t.type===`Literal`)return s.isNumber(t.value)?t.value:void 0;if(t.type===`UnaryExpression`&&(t.operator===`-`||t.operator===`+`)){let e=q(t.argument);return e===void 0||t.operator===`+`?e:-e}if(t.type!==`BinaryExpression`||t.left.type===`PrivateIdentifier`)return;let n=q(t.left),r=q(t.right);if(n!==void 0&&r!==void 0)return _r(t.operator)?.(n,r)}function vr(e){let t=N(e);if(t.type===`Literal`)return s.isNumber(t.value)?[t.value]:void 0;if(t.type!==`BinaryExpression`||t.operator!==`*`)return;let r=vr(t.left),i=vr(t.right);return r===void 0||i===void 0?void 0:n.appendAll(r,i)}const yr=/* @__PURE__ */ new Set([6e4,36e5,864e5]),br=/* @__PURE__ */ new Set([60,3600,86400]),xr=/* @__PURE__ */ new Set([7,24,60,1e3,3600,86400]);function Sr(e){let t=vr(e);if(!(t===void 0||t.length<2)&&(n.some(t,e=>yr.has(e))||n.some(t,e=>br.has(e))&&n.filter(t,e=>xr.has(e)).length>=2))return{millis:n.contains(t,1e3)||n.some(t,e=>e%6e4==0)}}const Cr=[[`weeks`,6048e5],[`days`,864e5],[`hours`,36e5],[`minutes`,6e4],[`seconds`,1e3],[`millis`,1]];function wr(e){return!Number.isSafeInteger(e)||Math.abs(e)<1e4?String(e):String(e).replaceAll(/\B(?=(?:\d{3})+$)/gu,`_`)}function Tr(e,t){let r=e*n.findFirst(Cr,([e])=>e===t).pipe(o.map(([,e])=>e),o.getOrElse(()=>1));return r===0?`Duration.zero`:n.findFirst(Cr,([,e])=>Number.isSafeInteger(r/e)).pipe(o.match({onNone:()=>`Duration.millis(${wr(r)})`,onSome:([e,t])=>`Duration.${e}(${wr(r/t)})`}))}const Er=y({...b(`suggestion`,`Prefer explicit Effect Duration constructors over ambiguous millisecond literals.`,{effectDuration:`Wrap this number with Duration.millis or use a more descriptive Duration constructor.`},`https://www.effect.website/docs/v4/api/effect/Duration`),fixable:`code`},(e,t)=>({CallExpression(n){let r=hr(n,e,t());r!==void 0&&q(r)!==void 0&&e.report({node:r,messageId:`effectDuration`,fix(t){let i=Te(e,n,`effect/Duration`,`Duration`,t);return[...i.fixes,t.replaceText(r,`${i.name}.millis(${e.sourceCode.getText(r)})`)]}})}})),Dr=/* @__PURE__ */ new Map([[`ms`,`millis`],[`milli`,`millis`],[`millis`,`millis`],[`millisecond`,`millis`],[`milliseconds`,`millis`],[`sec`,`seconds`],[`secs`,`seconds`],[`seconds`,`seconds`],[`mins`,`minutes`],[`minutes`,`minutes`],[`hr`,`hours`],[`hrs`,`hours`],[`hours`,`hours`],[`days`,`days`],[`weeks`,`weeks`]]),Or=/* @__PURE__ */ new Set([`day`,`hour`,`minute`,`second`,`week`]),kr=/* @__PURE__ */ new Set([`backoff`,`cooldown`,`day`,`debounce`,`delay`,`duration`,`expiration`,`expiry`,`hour`,`interval`,`lifetime`,`minute`,`second`,`throttle`,`timeout`,`ttl`,`week`]),Ar=r.flow(c.split(/[_$]+|(?<=[\da-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/u),n.filter(c.isNonEmpty),n.map(c.toLowerCase)),jr=/* @__PURE__ */ new Set([`at`,`epoch`,`per`,`timestamp`]);function Mr(e){return e!==void 0&&e!==`excluded`&&e!==`unknown`}function Nr(e){let t=Ar(e),r=t.indexOf(`in`),i=t[r-1]??``;if(r>0&&r<t.length-1&&(Dr.has(i)||Or.has(i))||n.some(t,e=>jr.has(e)))return`excluded`;let a=t.at(-1),o=t.at(-2);if(a===void 0)return;let s=Dr.get(a);if(s!==void 0)return s;if(kr.has(a)||a===`age`&&o===`max`||a===`in`&&o===`expires`)return`unknown`}function Pr(e,t,r){return n.some(C(r,e,t)?.defs??[],e=>e.type===`ImportBinding`)}const Fr=a.type().pipe(a.discriminators(`type`)({Identifier:({name:e})=>[e],TSQualifiedName:({left:e,right:t})=>{let r=Fr(e);return r===void 0?void 0:n.append(r,t.name)}}),a.orElse(r.constUndefined));function Ir(e,t,n){return P(e,e=>{if(e.type!==`TSTypeReference`)return!1;let[r,...i]=Fr(e.typeName)??[],a=r===void 0||!Pr(e,r,t)?void 0:n.bindings.get(r);return a!==void 0&&[...a,...i][0]===`Duration`})}function Lr(e){return e.parent.type===`VariableDeclaration`&&e.parent.kind===`const`&&e.id.type===`Identifier`&&e.init!==null&&q(e.init)!==void 0}function Rr(e,t){let n=N(e);if(n.type!==`Identifier`)return;let r=ie(C(t,n,n.name))?.node;return r?.type===`VariableDeclarator`&&Lr(r)?r:void 0}const zr=y(b(`suggestion`,`Prefer Effect Duration values over plain-number duration constants.`,{durationConstant:`{{name}} holds a duration as a plain number. Declare it as {{replacement}} and convert at non-Effect boundaries with Duration.toMillis or Duration.toSeconds.`},`https://www.effect.website/docs/v4/api/effect/Duration`),(e,t)=>{let n=/* @__PURE__ */ new Map;function r(n,r){if(n.id.typeAnnotation&&Ir(n.id.typeAnnotation,e,t()))return`none`;let i=Nr(n.id.name);if(r)return Mr(i)?i:`millis`;if(i===`excluded`||(q(n.init)??0)<=0)return`none`;if(Mr(i))return i;let a=Sr(n.init);return a?.millis===!0?`millis`:a!==void 0||i===`unknown`?void 0:`none`}return{before(){n=/* @__PURE__ */ new Map},VariableDeclarator(e){t().hasEffectImport&&Lr(e)&&!n.has(e)&&n.set(e,!1)},CallExpression(r){let i=hr(r,e,t()),a=i===void 0?void 0:Rr(i,e);a!==void 0&&n.set(a,!0)},"Program:exit":function(){for(let[t,i]of n){let n=r(t,i),a=q(t.init);n!==`none`&&e.report({node:t.id,messageId:`durationConstant`,data:{name:t.id.name,replacement:n===void 0||a===void 0?`a Duration constructor such as Duration.seconds`:Tr(a,n)}})}}}}),Br=/* @__PURE__ */ new Set([`base64`,`base64url`,`hex`]);function Vr(e){return e!==void 0&&R(e)&&Br.has(e.value)}const Hr=y(b(`suggestion`,`Prefer Effect Encoding for portable Base64, Base64Url, and hexadecimal encoding.`,{effectEncoding:`Use Encoding encode/decode helpers; decoders return Result instead of throwing.`},`https://www.effect.website/docs/v4/api/effect/Encoding`),(e,t)=>({CallExpression(r){if(!t().hasEffectImport)return;if((w(r.callee,e,`atob`)||w(r.callee,e,`btoa`))&&r.arguments.length>0){e.report({node:r,messageId:`effectEncoding`});return}let i=S(r.callee),a=i!==void 0&&n.join(i,`.`)===`Buffer.from`&&Vr(A(r,1)),o=i?.at(-1)===`toString`&&Vr(A(r,0));(a||o)&&e.report({node:r,messageId:`effectEncoding`})}})),Ur=/* @__PURE__ */ new Set([`fs`,`fs/promises`,`node:fs`,`node:fs/promises`]),Wr=y(b(`suggestion`,`Prefer the Effect FileSystem service over direct Node.js filesystem imports in Effect projects.`,{effectFileSystem:`Use the FileSystem service from effect/FileSystem instead of {{source}}.`},`https://www.effect.website/docs/v4/api/effect/FileSystem`),(e,t)=>({ImportDeclaration(n){t().hasEffectImport&&Ur.has(n.source.value)&&e.report({node:n.source,messageId:`effectFileSystem`,data:{source:n.source.value}})}}));function Gr(e,t,n){return e.type===`CallExpression`&&E(e.callee,t,`Result`,n)?A(e,0):void 0}function Kr(e,t,n){let r=F(t),i=kt(t);if(r===void 0||i?.type!==`ConditionalExpression`)return;let a=Gr(i.consequent,n,`succeed`),o=Gr(i.alternate,n,`fail`);a?.type===`Identifier`&&a.name===r.name&&o?.type===`Identifier`&&o.name===r.name&&e.report({node:t,messageId:`effectFilter`})}const qr=y(b(`suggestion`,`Prefer Effect Filter constructors for reusable Result-valued predicates.`,{effectFilter:`Use Filter.fromPredicate for this Result-valued predicate so it composes as a Filter.`},`https://www.effect.website/docs/v4/api/effect/Filter`),(e,t)=>({ArrowFunctionExpression(n){Kr(e,n,t())},FunctionExpression(n){Kr(e,n,t())}})),Jr=y(b(`suggestion`,`Prefer immutable Effect Headers values in Effect projects.`,{effectHeaders:`Use Headers.fromInput to construct normalized, immutable Effect headers.`},`https://www.effect.website/docs/v4/api/effect/unstable/http/Headers`),(e,t)=>({NewExpression(n){t().hasEffectImport&&w(n.callee,e,`Headers`)&&e.report({node:n,messageId:`effectHeaders`})}}));function Yr(e){return e.type===`Literal`||e.type===`TemplateLiteral`&&e.expressions.length===0}function Xr(e,t){if(e.type===`BinaryExpression`&&he(e.operator)){if(Yr(e.left))return t.sourceCode.getText(e.right);if(Yr(e.right))return t.sourceCode.getText(e.left)}}const Zr=y(b(`suggestion`,`Prefer Effect Match for composable and exhaustive branching in Effect projects.`,{effectMatch:`Use Match.type, Match.value, or Match.tags with Match.exhaustive instead of switch.`,preferMatch:`Use Match from Effect instead of a chained literal ternary.`},`https://www.effect.website/docs/v4/api/effect/Match`),(e,t)=>({SwitchStatement(n){t().hasEffectImport&&e.report({node:n,messageId:`effectMatch`})},ConditionalExpression(t){if(t.parent.type===`ConditionalExpression`)return;let n=Xr(t.test,e);if(n===void 0)return;let r=t.alternate,i=1;for(;r.type===`ConditionalExpression`;){if(Xr(r.test,e)!==n)return;i+=1,r=r.alternate}i>1&&e.report({node:t,messageId:`preferMatch`})}})),Qr=/* @__PURE__ */ new Set([`node:path`,`path`]),$r=y(b(`suggestion`,`Prefer the Effect Path service over direct Node.js path imports in Effect projects.`,{effectPath:`Use the Path service from effect/Path instead of {{source}}.`},`https://www.effect.website/docs/v4/api/effect/Path`),(e,t)=>({ImportDeclaration(n){t().hasEffectImport&&Qr.has(n.source.value)&&e.report({node:n.source,messageId:`effectPath`,data:{source:n.source.value}})}})),ei=/* @__PURE__ */ new Set([`canParse`,`parse`]),ti=y(b(`suggestion`,`Prefer Effect Url helpers for safe URL parsing in Effect projects.`,{effectUrl:`Use Url.fromString or Url.make so invalid URLs are represented as Result failures.`},`https://www.effect.website/docs/v4/api/effect/unstable/http/Url`),(e,t)=>({NewExpression(n){t().hasEffectImport&&w(n.callee,e,`URL`)&&e.report({node:n,messageId:`effectUrl`})},CallExpression(n){let r=S(n.callee);t().hasEffectImport&&r?.[0]===`URL`&&ei.has(r[1]??``)&&n.callee.type===`MemberExpression`&&w(n.callee.object,e,`URL`)&&e.report({node:n,messageId:`effectUrl`})}})),ni=/* @__PURE__ */ new Map([[`interruptibleMask`,`interruptible`],[`uninterruptibleMask`,`uninterruptible`]]),ri=y(b(`suggestion`,`Prefer the non-mask interruptibility API when the restore callback is unused.`,{unusedRestore:`The mask callback never uses restore, so the mask is equivalent to {{replacement}} and misleadingly suggests a restored region.`},`https://github.com/Effect-TS/tsgo/issues/659`),(e,t)=>({CallExpression(n){let r=T(n.callee,t()),i=r?.length===2&&r[0]===`Effect`?ni.get(r[1]??``):void 0,a=A(n,0);i!==void 0&&a!==void 0&&k(a)&&!de(a)&&e.report({node:n,messageId:`unusedRestore`,data:{replacement:`Effect.${i}`}})}})),ii=y(b(`suggestion`,`Prefer Effect.withSpan when the callback does not use the span handle.`,{unusedSpan:`The useSpan callback ignores its span. Use Effect.withSpan so nested spans are parented beneath this span.`},`https://github.com/Effect-TS/tsgo/issues/663`),(e,t)=>({CallExpression(n){if(!E(n.callee,t(),`Effect`,`useSpan`))return;let r=A(n,n.arguments.length-1);r!==void 0&&k(r)&&!de(r)&&e.report({node:n,messageId:`unusedSpan`})}}));function ai(e,t){let n=N(e);if(z(n,0))return!0;if(R(n))return/^0\s*(?:nanos?|micros?|millis?|seconds?|minutes?|hours?|days?|weeks?)$/i.test(n.value);if(E(n,t,`Duration`,`zero`))return!0;if(n.type===`CallExpression`){let e=T(n.callee,t),r=A(n,0);return r!==void 0&&e?.[0]===`Duration`&&z(r,0)}return!1}const oi=y(b(`suggestion`,`Prefer scheduler yielding to a zero-duration Clock sleep.`,{zeroSleep:`Effect.sleep(0) uses Clock and interacts with TestClock. Use Effect.yieldNow for a cooperative scheduler yield.`},`https://github.com/Effect-TS/tsgo/issues/661`),(e,t)=>({CallExpression(n){let r=t(),i=A(n,0);i!==void 0&&E(n.callee,r,`Effect`,`sleep`)&&ai(i,r)&&e.report({node:n,messageId:`zeroSleep`})}})),si=/* @__PURE__ */ new Set([`catch`,`catchAll`,`mapError`]);function ci(e,t){let n=Ct(e,t),r=St(e,`catch`);if(!(n?.[0]===`Effect`&&n[1]!==void 0&&si.has(n[1])||r!==void 0&&D(r.callee,t,`Effect`,[`try`,`tryPromise`]))||!e.body)return!1;let i=F(e);return P(e.body,e=>e.type===`NewExpression`&&_e(e)&&(i===void 0||!ue(e,i.name)))}const li=y(b(`suggestion`,`Preserve the underlying cause when wrapping an Effect failure.`,{droppedCause:`This handler constructs a new error but drops the caught failure. Accept it as a parameter and attach it as cause.`},`https://github.com/Effect-TS/tsgo/issues/490`),(e,t)=>({ArrowFunctionExpression(n){ci(n,t())&&e.report({node:n,messageId:`droppedCause`})},FunctionExpression(n){ci(n,t())&&e.report({node:n,messageId:`droppedCause`})}})),ui=y(b(`problem`,`Require Schema.Class declarations to carry a nominal brand.`,{missingBrand:`Schema.Class without a second type parameter is structural. Add a unique brand so plain objects cannot masquerade as instances.`},`https://github.com/Effect-TS/tsgo/issues/468`),(e,t)=>({CallExpression(n){E(n.callee,t(),`Schema`,`Class`)&&(n.typeArguments?.params.length??0)<2&&e.report({node:n,messageId:`missingBrand`})}}));function di(e,t){if(E(e.callee,t,`Effect`,`tryPromise`))return At(A(e,0))}const fi=y(b(`suggestion`,`Require Effect.tryPromise thunks to accept and use their AbortSignal for interruption.`,{missingSignal:"Accept the AbortSignal parameter and pass it to the Promise API. Name it `_signal` only when cancellation is unsupported.",unusedSignal:"Pass this AbortSignal to the Promise API, or rename it to `_signal` to explicitly acknowledge that cancellation is unsupported."},`https://www.effect.website/docs/v4/api/effect/Effect#tryPromise`),(e,t)=>({CallExpression(n){let r=di(n,t());if(r===void 0)return;let i=F(r);i===void 0?e.report({node:r,messageId:`missingSignal`}):!i.name.startsWith(`_`)&&!de(r)&&e.report({node:i,messageId:`unusedSignal`})}})),pi=[`fn`,`fnUntraced`,`gen`],mi=[`fn`,`fnUntraced`];function hi(e,t){let n=e.parent;if(n.type===`CallExpression`&&A(n,0)===e)return D(n.callee,t,`Effect`,[`try`,`tryPromise`]);if(n.type!==`Property`||n.key.type!==`Identifier`||n.key.name!==`try`)return!1;let r=n.parent;return r.type===`ObjectExpression`&&r.parent.type===`CallExpression`&&D(r.parent.callee,t,`Effect`,[`try`,`tryPromise`])}const gi=y(b(`problem`,`Disallow throw in Effect generator APIs because it creates an untyped defect.`,{throwInGen:`Use yield* Effect.fail(...) instead of throw so the failure stays in the typed error channel.`}),(e,t)=>({ThrowStatement(r){let i=t(),a=I(r);if(a===void 0||hi(a,i))return;let o=L(a),s=o!==void 0&&n.some(pi,e=>E(o.callee,i,`Effect`,e)),c=o?.callee,l=c?.type===`CallExpression`&&n.some(mi,e=>E(c.callee,i,`Effect`,e));(s||l)&&e.report({node:r,messageId:`throwInGen`})}})),_i=String.raw`(?:\r\n|\r(?!\n)|[\n\u2028\u2029])`,vi=String.raw`[^\S\r\n\u2028\u2029]*`,yi=RegExp(`^(${vi}${_i})(?:${vi}${_i})+(${vi};?)$`,`u`),bi=/^(?:module\s*\.\s*)?exports(?:\s*\.|\s*\[|$)/u,xi=/* @__PURE__ */ new Set([`FunctionDeclaration`,`FunctionExpression`,`ArrowFunctionExpression`]),Si=/* @__PURE__ */ new Set([`any`,`never`,`always`]),Ci=/* @__PURE__ */ new Set([`any`,`singleline`,`multiline`]),wi=/* @__PURE__ */ new Set([`blankLine`,`prev`,`next`]),Ti=/* @__PURE__ */ new Set([`selector`,`lineMode`]);function Ei(e){return e.type===`Punctuator`&&e.value===`;`}function J(e,t){return e.loc.end.line===t.loc.start.line}function Y(e){return e.loc.start.line===e.loc.end.line}function Di(e){return xi.has(e.type)}function Oi(e){return e.type===`ChainExpression`?e.expression:e}function X(e,t){let r=new Set(n.ensure(e));return(e,n)=>n.getFirstToken(e)?.value===t&&r.has(e.type)}function Z(e){return t=>t.type===e}function Q(e,t){return(n,r)=>e(n,r)&&Y(n)===(t===`singleline`)}function ki(e){if(e.type!==`ExpressionStatement`)return!1;let t=Oi(e.expression);if(t.type===`UnaryExpression`&&(t=Oi(t.argument)),t.type!==`CallExpression`)return!1;let r=t.callee;for(;r.type===`SequenceExpression`;)r=o.getOrThrowWith(n.last(r.expressions),()=>/* @__PURE__ */ Error(`Padding rule invariant: sequence expression is empty`));return Di(r)}function Ai(e){if(e.type!==`VariableDeclaration`)return!1;let t=e.declarations[0]?.init;if(t==null)return!1;for(;t.type===`MemberExpression`;)t=t.object;return t.type===`CallExpression`&&t.callee.type===`Identifier`&&t.callee.name===`require`}function ji(e,t){if(e.type===`DoWhileStatement`&&e.body.type===`BlockStatement`||ki(e))return!0;let n=t.getLastToken(e,e=>!Ei(e)),r=n?.type===`Punctuator`&&n.value===`}`?t.getNodeByRangeIndex(n.range[0]):null;return r?.type===`BlockStatement`||r?.type===`SwitchStatement`}function Mi(e,t){return e.type===`ExpressionStatement`&&(e.parent.type===`Program`||e.parent.type===`BlockStatement`&&Di(e.parent.parent))&&e.expression.type===`Literal`&&s.isString(e.expression.value)&&(t.getTokenBefore(e.expression)?.value!==`(`||t.getTokenAfter(e.expression)?.value!==`)`)}function Ni(e,t){if(!Mi(e,t)||!e.parent||!(`body`in e.parent)||!n.isArray(e.parent.body))return!1;let i=e.parent.body;return r.pipe(i,n.takeWhile(t=>t!==e),n.every(e=>Mi(e,t)))}function Pi(e){if(e.type!==`ExpressionStatement`||e.expression.type!==`AssignmentExpression`)return!1;let t=e.expression.left;if(t.type!==`MemberExpression`)return!1;for(;t.object.type===`MemberExpression`;)t=t.object;return t.object.type===`Identifier`&&(t.object.name===`exports`||t.object.name===`module`&&t.property.type===`Identifier`&&t.property.name===`exports`)}function Fi(e,t){let n=t.getLastToken(e);if(n===null)throw Error(`Padding rule invariant: statement has no token`);let r=t.getTokenBefore(n),i=t.getTokenAfter(n);return r&&i&&r.range[0]>=e.range[0]&&Ei(n)&&!J(r,n)&&J(n,i)?r:n}function Ii(e,t){if(Y(e))return e.loc;let n=e.loc.start.line,r=t.lines[n-1];if(r===void 0)throw Error(`Padding rule invariant: statement source line is missing`);return{start:e.loc.start,end:{line:n,column:r.length}}}const $={"block-like":ji,expression:(e,t)=>e.type===`ExpressionStatement`&&!Ni(e,t),return:X(`ReturnStatement`,`return`),export:X([`ExportAllDeclaration`,`ExportDefaultDeclaration`,`ExportNamedDeclaration`],`export`),var:X(`VariableDeclaration`,`var`),let:X(`VariableDeclaration`,`let`),const:X(`VariableDeclaration`,`const`),using:e=>e.type===`VariableDeclaration`&&(e.kind===`using`||e.kind===`await using`),type:X(`TSTypeAliasDeclaration`,`type`)},Li={"*":()=>!0,exports:Pi,require:Ai,directive:Ni,iife:ki,block:Z(`BlockStatement`),empty:Z(`EmptyStatement`),function:Z(`FunctionDeclaration`),"ts-method":Z(`TSMethodSignature`),break:X(`BreakStatement`,`break`),case:X(`SwitchCase`,`case`),class:X(`ClassDeclaration`,`class`),continue:X(`ContinueStatement`,`continue`),debugger:X(`DebuggerStatement`,`debugger`),default:X([`SwitchCase`,`ExportDefaultDeclaration`],`default`),do:X(`DoWhileStatement`,`do`),for:X([`ForStatement`,`ForInStatement`,`ForOfStatement`],`for`),if:X(`IfStatement`,`if`),import:X(`ImportDeclaration`,`import`),switch:X(`SwitchStatement`,`switch`),throw:X(`ThrowStatement`,`throw`),try:X(`TryStatement`,`try`),while:X([`WhileStatement`,`DoWhileStatement`],`while`),with:X(`WithStatement`,`with`),"cjs-export":(e,t)=>e.type===`ExpressionStatement`&&e.expression.type===`AssignmentExpression`&&bi.test(t.getText(e.expression.left)),"cjs-import":(e,t)=>e.type===`VariableDeclaration`&&e.declarations[0]?.init!=null&&t.getText(e.declarations[0].init).startsWith(`require(`),enum:X(`TSEnumDeclaration`,`enum`),interface:X(`TSInterfaceDeclaration`,`interface`),"function-overload":Z(`TSDeclareFunction`),...$,"singleline-block-like":Q($[`block-like`],`singleline`),"multiline-block-like":Q($[`block-like`],`multiline`),"singleline-expression":Q($.expression,`singleline`),"multiline-expression":Q($.expression,`multiline`),"singleline-return":Q($.return,`singleline`),"multiline-return":Q($.return,`multiline`),"singleline-export":Q($.export,`singleline`),"multiline-export":Q($.export,`multiline`),"singleline-var":Q($.var,`singleline`),"multiline-var":Q($.var,`multiline`),"singleline-let":Q($.let,`singleline`),"multiline-let":Q($.let,`multiline`),"singleline-const":Q($.const,`singleline`),"multiline-const":Q($.const,`multiline`),"singleline-using":Q($.using,`singleline`),"multiline-using":Q($.using,`multiline`),"singleline-type":Q($.type,`singleline`),"multiline-type":Q($.type,`multiline`)};function Ri(e){return Ci.has(e)}function zi(e){return Si.has(e)}function Bi(e){return s.isString(e)&&i.has(Li,e)}function Vi(e){return n.isArray(e)}function Hi(e){if(Bi(e))return e;if(s.isObject(e)&&s.isString(e.selector)&&n.every(i.keys(e),e=>Ti.has(e))){if(!(`lineMode`in e))return{selector:e.selector};if(Ri(e.lineMode))return{selector:e.selector,lineMode:e.lineMode}}throw Error(`Invalid padding-line-between-statements statement matcher`)}function Ui(e){if(!n.isArray(e))return Hi(e);let t=e;if(!n.isReadonlyArrayNonEmpty(t))throw Error(`Padding statement matcher arrays must not be empty`);return n.map(t,e=>Hi(e))}function Wi(e){return n.map(e,e=>{if(!s.isObject(e)||!(`blankLine`in e)||!(`prev`in e)||!(`next`in e)||n.some(i.keys(e),e=>!wi.has(e))||!zi(e.blankLine))throw Error(`Invalid padding-line-between-statements configuration`);return{blankLine:e.blankLine,prev:Ui(e.prev),next:Ui(e.next)}})}function Gi(e,t,n){let r=[],i=Fi(e,n);if(t.loc.start.line-i.loc.end.line>=2)do{let e=n.getTokenAfter(i,{includeComments:!0});if(e===null)throw Error(`Padding rule invariant: next statement token is missing`);e.loc.start.line-i.loc.end.line>=2&&r.push([i,e]),i=e}while(i.range[0]<t.range[0]);return r}function Ki(e,t,r){return p.gen(function*(){if(r===`any`)return yield*p.void;let i=yield*f,a=i.sourceCode,o=Gi(e,t,a);return r===`never`?n.isArrayNonEmpty(o)?yield*i.report({node:t,messageId:`unexpectedBlankLine`,loc:Ii(t,a),fix(e){if(o.length>=2)return null;let t=n.headNonEmpty(o),r=t[0].range[1],i=t[1].range[0];return e.replaceTextRange([r,i],a.text.slice(r,i).replace(yi,`$1$2`))}}):yield*p.void:n.isArrayNonEmpty(o)?yield*p.void:yield*i.report({node:t,messageId:`expectedBlankLine`,loc:Ii(t,a),fix(n){let r=Fi(e,a),i=a.getFirstTokenBetween(r,t,{includeComments:!0,filter(e){return!J(r,e)||(r=e,!1)}})??t;return n.insertTextAfter(r,J(r,i)?`
1
+ import{defineRule as e,eslintCompatPlugin as t}from"@oxlint/plugins";import*as n from"effect/Record";import*as r from"effect/Array";import*as i from"effect/Effect";import*as a from"effect/Function";import*as o from"effect/Match";import*as s from"effect/Option";import*as c from"effect/Predicate";import*as l from"effect/Schema";import*as u from"effect/String";import*as d from"effect/Result";import*as f from"effect/Number";import*as p from"effect/Struct";import{Rule as m,RuleContext as h,Visitor as ee}from"effect-oxlint";import*as g from"effect/Ref";var te=class extends l.Class(`FileState`)({bindings:l.ReadonlyMap(l.String,l.Array(l.String)).pipe(l.withConstructorDefault(i.succeed(/* @__PURE__ */ new Map))),hasEffectImport:l.Boolean.pipe(l.withConstructorDefault(i.succeed(!1)))}){};const _=te.make(),v=o.type().pipe(o.discriminatorsExhaustive(`type`)({Identifier:({name:e})=>e,Literal:({value:e})=>e}));function ne(e){let t=r.lastNonEmpty(u.split(e,`/`));return/^\p{Ll}/u.test(t)?[]:[t]}const re=o.type().pipe(o.withReturnType(),o.when(`alchemy`,a.constant([`Alchemy`])),o.when(o.is(`effect`,`@effect/platform`),a.constant([])),o.whenOr(u.startsWith(`effect/`),u.startsWith(`alchemy/`),u.startsWith(`@effect/`),ne),o.orElse(a.constUndefined));function ie(e){let t=/* @__PURE__ */ new Map,n=!1;for(let r of e.body){if(r.type!==`ImportDeclaration`)continue;let e=r.source.value;(e===`effect`||u.startsWith(`effect/`)(e)||u.startsWith(`@effect/`)(e))&&(n=!0);let i=re(e);if(i!==void 0)for(let e of r.specifiers)e.type===`ImportNamespaceSpecifier`||e.type===`ImportDefaultSpecifier`?t.set(e.local.name,i):t.set(e.local.name,[...i,v(e.imported)])}return te.make({bindings:t,hasEffectImport:n})}function y(t,n){return e({meta:t,createOnce:n})}function b(t,n){return e({meta:t,createOnce(e){let t=_,{before:r,Program:i,...a}=n(e,()=>t);return{before(){t=_,r?.()},Program(e){t=ie(e),i?.(e)},...a}}})}function x(e,t,n,r){return{type:e,docs:{description:t,recommended:!0,...r===void 0?{}:{url:r}},schema:[],messages:n}}const S=o.type().pipe(o.when({computed:!1,property:{type:`Identifier`}},({property:e})=>e.name),o.when({computed:!0,property:{type:`Literal`,value:u.isString}},({property:e})=>e.value),o.orElse(a.constUndefined));function C(e){let t=[],n=e;for(;n.type===`ChainExpression`||n.type===`MemberExpression`;){if(n.type===`ChainExpression`){n=n.expression;continue}let e=S(n);if(e===void 0)return;t.unshift(e),n=n.object}return n.type===`Identifier`?[n.name,...t]:void 0}function w(e,t,n){for(let r=e.sourceCode.getScope(t);r!==null;r=r.upper){let e=r.set.get(n);if(e!==void 0)return e}}function ae(e){return e?.defs.length===1?e.defs[0]:void 0}function T(e,t,n){return e.type===`Identifier`&&e.name===n&&w(t,e,n)===void 0}function E(e,t){let n=C(e),r=n?.[0];if(n===void 0||r===void 0)return;let i=t.bindings.get(r);return i===void 0?void 0:[...i,...n.slice(1)]}function D(e,t,n,r){let i=E(e,t);return i?.length===2&&i[0]===n&&i[1]===r}function O(e,t,n,i){let a=E(e,t);return a?.length===2&&a[0]===n&&r.contains(i,a[1])}function k(e,t,n){let i=E(e,t);return i?.length===n.length&&r.every(i,(e,t)=>e===n[t])}const oe=o.type().pipe(o.when({type:o.is(`ArrowFunctionExpression`,`FunctionExpression`)},a.constTrue),o.orElse(a.constFalse));function A(e){return oe(e)}function j(e,t){let n=e.arguments[t];return n===void 0||n.type===`SpreadElement`?void 0:n}const M=o.type().pipe(o.when({computed:!1,key:{type:`Identifier`}},({key:e})=>e.name),o.when({key:{type:`Literal`,value:u.isString}},({key:e})=>e.value),o.orElse(a.constUndefined));function N(e,t){return s.getOrUndefined(r.findFirst(e.properties,e=>e.type===`Property`&&M(e)===t))}const se=/* @__PURE__ */ new Set([`ParenthesizedExpression`,`TSAsExpression`,`TSNonNullExpression`,`TSSatisfiesExpression`,`TSTypeAssertion`]);function ce(e){return se.has(e.type)}const le=/* @__PURE__ */ new Set([`loc`,`parent`,`range`]);function P(e){let t=e;for(;ce(t);)t=t.expression;return t}function ue(e,t){if(r.isArray(e))for(let n of e)t.push(n);else for(let[r,i]of n.toEntries(e))le.has(r)||t.push(i)}function F(e,t){let n=[e],r=/* @__PURE__ */ new WeakSet;for(;n.length>0;){let e=n.pop();if(c.isObjectOrArray(e)&&!r.has(e)){if(r.add(e),c.hasProperty(e,`type`)&&c.isString(e.type)&&t(e)===!0)return!0;ue(e,n)}}return!1}function de(e,t){return F(e,e=>e.type===`Identifier`&&e.name===t)}function I(e){let t=e.params[0];return t?.type===`Identifier`?t:void 0}function fe(e){let t=I(e);return t===void 0||!e.body||u.startsWith(`_`)(t.name)?!1:de(e.body,t.name)}function pe(e,t){for(let n=e.parent;n;n=n.parent)if(t(n))return n}function me(e){return pe(e,A)}function L(e){let t=e.parent;if(t.type===`CallExpression`&&t.arguments.includes(e))return t}function he(e,t){return e.range[0]<=t.range[0]&&t.range[1]<=e.range[1]}function R(e){return e.type===`Literal`&&u.isString(e.value)}const ge=/* @__PURE__ */ new Set([`==`,`===`,`!=`,`!==`]);function _e(e){return ge.has(e)}function z(e,t){return e.type===`Literal`&&e.value===t}function ve(e){let t=e.parent;return t?t.type===`ExpressionStatement`||t.type===`UnaryExpression`&&t.operator===`void`||t.type===`SequenceExpression`&&t.expressions.at(-1)!==e:!1}const ye=c.mapInput(c.compose(c.isString,u.endsWith(`Error`)),e=>C(e.callee)?.at(-1)),be=/* @__PURE__ */ new Set([`alarm`,`fetch`,`queue`,`rpc`,`scheduled`,`tail`,`trace`,`webSocketClose`,`webSocketError`,`webSocketMessage`]),xe=[[`Cloudflare`,`Worker`],[`Cloudflare`,`Workers`,`Worker`]];function Se(e,t){return r.some(xe,n=>k(e,t,n))}function Ce(e,t){return pe(e,e=>e.type===`CallExpression`&&Se(e.callee,t))}function we(e,t){let n=me(e),r=n===void 0?void 0:L(n);return r!==void 0&&D(r.callee,t,`Effect`,`gen`)?r:void 0}function Te(e){let t=e.parent;for(;t;){if(A(t))return;if(t.type===`Property`){let e=M(t);if(e!==void 0&&be.has(e))return e}t=t.parent}}const Ee=b(x(`problem`,`Disallow finalizers in Cloudflare Worker initialization, where workerd never runs them.`,{finalizer:`A Cloudflare Worker init finalizer never runs because workerd has no isolate teardown hook. Acquire disposable resources inside an event handler.`},`https://alchemy.run/cloudflare/compute/workers`),(e,t)=>({CallExpression(n){let r=t();if(!D(n.callee,r,`Effect`,`addFinalizer`))return;let i=we(n,r);i!==void 0&&Ce(i,r)?.arguments.includes(i)&&e.report({node:n,messageId:`finalizer`})}}));function B(e,t){let n=C(t)?.[0],i=n===void 0?void 0:w(e,t,n);return r.some(i?.defs??[],e=>{let t=e.node;return e.type===`ImportBinding`&&t.parent?.type===`ImportDeclaration`&&t.parent.importKind!==`type`&&(t.type!==`ImportSpecifier`||t.importKind!==`type`)})}function De(e,t,n,i,a){let o=e.sourceCode.ast,c=r.findFirst(r.flatMap(o.body,e=>e.type===`ImportDeclaration`&&e.source.value===n&&e.importKind!==`type`?e.specifiers:[]),n=>n.type===`ImportNamespaceSpecifier`&&r.some(w(e,t,n.local.name)?.defs??[],e=>e.node===n));if(s.isSome(c))return{name:c.value.local.name,fixes:[]};let l=new Set(r.flatMap(e.sourceCode.scopeManager.scopes,e=>[...r.map(e.variables,e=>e.name),...r.map(e.references,e=>e.identifier.name)])),u=i,d=2;for(;l.has(u);)u=`${i}${d++}`;let f=`import * as ${u} from '${n}';\n`,p=s.getOrUndefined(r.findFirst(o.body,e=>e.type!==`ExpressionStatement`||!R(e.expression)));return{name:u,fixes:[p===void 0?a.insertTextAfter(o,`\n${f}`):a.insertTextBefore(p,f)]}}function Oe(e,t){let n=/* @__PURE__ */ new Set;return r.every(e.properties,e=>{if(e.type!==`Property`||e.computed||e.method||e.kind!==`init`||e.key.type!==`Identifier`&&e.key.type!==`Literal`)return!1;let r=e.key.type===`Identifier`?e.key.name:String(e.key.value);return r===t||n.has(r)?!1:(n.add(r),!0)})}const ke=b({...x(`problem`,`Disallow the deprecated top-level Docker Service constraints property.`,{constraints:`Docker.Service constraints is deprecated. Move it to placement: { constraints: ... }.`},`https://alchemy.run/providers/docker/service`),fixable:`code`},(e,t)=>({CallExpression(n){if(!D(n.callee,t(),`Docker`,`Service`))return;let r=j(n,1),i=r?.type===`ObjectExpression`?N(r,`constraints`):void 0;i!==void 0&&e.report({node:i,messageId:`constraints`,fix(t){if(B(e,n.callee)&&r?.type===`ObjectExpression`&&Oe(r,`placement`))return t.replaceText(i,`placement: { ${e.sourceCode.getText(i)} }`)}})}})),Ae=/* @__PURE__ */ new Map([[`Cloudflare.Access.Bookmark`,`Cloudflare.Access.Application with type: "bookmark"`],[`AWS.RDSData.ExecuteSql`,`AWS.RDSData.ExecuteStatement`],[`AWS.EKS.Deployment`,`Kubernetes.Deployment from alchemy/Kubernetes`],[`AWS.EKS.HelmChart`,`Kubernetes.HelmChart from alchemy/Kubernetes`],[`AWS.EKS.Job`,`Kubernetes.Job from alchemy/Kubernetes`],[`AWS.EKS.Manifest`,`Kubernetes.Manifest from alchemy/Kubernetes`]]),je=b(x(`problem`,`Disallow deprecated Alchemy resource APIs that have supported replacements.`,{deprecated:`{{api}} is deprecated. Use {{replacement}}.`},`https://alchemy.run/llms-full.txt`),(e,t)=>({CallExpression(n){let i=E(n.callee,t());if(i===void 0)return;let a=r.join(i,`.`),o=Ae.get(a);o!==void 0&&e.report({node:n.callee,messageId:`deprecated`,data:{api:a,replacement:o}})}}));function Me(e,t){let n=P(e);if(R(n)||n.type===`TemplateLiteral`)return!0;let r=C(n);return r?.[0]===`process`&&r[1]===`env`||n.type===`CallExpression`&&D(n.callee,t,`Config`,`string`)}const Ne=b(x(`problem`,`Require singular GitHub Secret values to use Redacted.`,{plaintext:`GitHub.Secret value must be Redacted so it stays out of logs and state. Use Redacted.make(...) or Config.redacted(...).`},`https://alchemy.run/providers/github/secret`),(e,t)=>({CallExpression(n){let r=t();if(!D(n.callee,r,`GitHub`,`Secret`))return;let i=j(n,1),a=i?.type===`ObjectExpression`?N(i,`value`):void 0;a!==void 0&&Me(a.value,r)&&e.report({node:a.value,messageId:`plaintext`})}})),Pe=b(x(`problem`,`Disallow removed Alchemy Secret and Variable APIs.`,{removed:`Alchemy.{{api}} was removed. Use effect/Config (Config.redacted for secrets, Config.string for variables).`},`https://alchemy.run/blog/2026-05-29-beta-45`),(e,t)=>({CallExpression(n){let r=E(n.callee,t());r?.[0]===`Alchemy`&&(r[1]===`Secret`||r[1]===`Variable`)&&e.report({node:n.callee,messageId:`removed`,data:{api:r[1]}})}})),Fe=b(x(`problem`,`Disallow creating an EventBridge bus with the reserved default name.`,{reserved:`EventBridge reserves the name "default". Omit the bus argument to use the account default, or choose another name.`},`https://alchemy.run/aws/messaging/eventbridge`),(e,t)=>({CallExpression(n){if(!k(n.callee,t(),[`AWS`,`EventBridge`,`EventBus`]))return;let r=j(n,1),i=r?.type===`ObjectExpression`?N(r,`name`):void 0;i!==void 0&&z(i.value,`default`)&&e.report({node:i.value,messageId:`reserved`})}})),Ie=b(x(`problem`,`Require Effect Config values to be resolved during Alchemy Worker initialization.`,{runtime:`Config resolved inside the {{handler}} handler is invisible to Alchemy deployment. Resolve it in Worker init and close over the value, or put it in env.`},`https://alchemy.run/environments/secrets`),(e,t)=>({YieldExpression(n){let r=t(),i=n.argument;if(i?.type!==`CallExpression`||E(i.callee,r)?.[0]!==`Config`)return;let a=we(n,r);if(a===void 0)return;let o=Te(a);o!==void 0&&Ce(a,r)!==void 0&&e.report({node:i,messageId:`runtime`,data:{handler:o}})}})),Le=/* @__PURE__ */ new Map([[`alchemy/aws`,`alchemy/AWS`],[`alchemy/cloudflare`,`alchemy/Cloudflare`]]),Re=y(x(`problem`,`Disallow Alchemy v1 imports that bypass the Effect-based Stack API.`,{defaultImport:`The default alchemy() API is from v1. Use import * as Alchemy and Alchemy.Stack.`,providerImport:`Use the v2 provider entrypoint {{replacement}} (capitalization is significant).`},`https://alchemy.run/migrating-from-v1`),e=>({ImportDeclaration(t){let n=t.source.value;if(n===`alchemy`){let n=s.getOrUndefined(r.findFirst(t.specifiers,e=>e.type===`ImportDefaultSpecifier`));n!==void 0&&e.report({node:n,messageId:`defaultImport`});return}let i=Le.get(n);i!==void 0&&e.report({node:t.source,messageId:`providerImport`,data:{replacement:i}})}})),ze=[[`entrypoint`,`main`],[`bindings`,`env`]],Be=b({...x(`problem`,`Disallow Alchemy v1 Cloudflare Worker property names.`,{property:`Cloudflare.Worker {{old}} was replaced in v2. Use {{replacement}}.`},`https://alchemy.run/migrating-from-v1`),fixable:`code`},(e,t)=>({CallExpression(n){if(!Se(n.callee,t()))return;let r=j(n,1);if(r?.type===`ObjectExpression`)for(let[t,i]of ze){let a=N(r,t);a!==void 0&&e.report({node:a,messageId:`property`,data:{old:t,replacement:i},fix(o){if(B(e,n.callee)&&Oe(r,i))return o.replaceText(a.key,a.shorthand?`${i}: ${t}`:i)}})}}})),Ve=b(x(`suggestion`,`Prefer schema-based tagged errors so errors have a serializable contract.`,{taggedError:`Prefer Schema.TaggedErrorClass over Data.TaggedError.`}),(e,t)=>({CallExpression(n){D(n.callee,t(),`Data`,`TaggedError`)&&e.report({node:n.callee,messageId:`taggedError`})}})),He=/* @__PURE__ */ new Set([`error`,`err`,`e`,`cause`,`exception`,`ex`]);function Ue(e){return e?.type===`Identifier`&&He.has(e.name)?e.name:void 0}function We(e){if(e.type!==`CallExpression`||e.arguments.length!==1)return!1;let t=C(e.callee);return t?.at(-1)===`String`&&t.length<=2}const Ge=y({...x(`problem`,`Disallow string coercion that discards an error value’s stack, type, and cause chain.`,{errorString:`Do not stringify {{name}}. Preserve the original error as an Error cause instead.`,useCause:`Replace {{pattern}} with {{replacement}} to preserve the original error.`}),hasSuggestions:!0},e=>({NewExpression(t){let n=j(t,0);if(n===void 0||!We(n)||!ye(t))return;let r=j(n,0);if(r===void 0)return;let i=e.sourceCode.getText(r),a=`'Error occurred', { cause: ${i} }`;e.report({node:n,messageId:`errorString`,data:{name:i},suggest:[{messageId:`useCause`,data:{pattern:e.sourceCode.getText(n),replacement:a},fix:e=>e.replaceText(n,a)}]})},CallExpression(t){if(We(t)){if(t.parent.type===`NewExpression`&&t.parent.arguments[0]===t&&ye(t.parent))return;let n=Ue(t.arguments[0]);n!==void 0&&e.report({node:t,messageId:`errorString`,data:{name:n}});return}if(t.callee.type!==`MemberExpression`||C(t.callee)?.at(-1)!==`toString`||t.arguments.length>0)return;let n=Ue(t.callee.object);n!==void 0&&e.report({node:t,messageId:`errorString`,data:{name:n}})},TemplateLiteral(t){let[n,r]=t.quasis,i=Ue(t.expressions[0]);i!==void 0&&t.quasis.length===2&&n?.value.raw===``&&r?.value.raw===``&&e.report({node:t,messageId:`errorString`,data:{name:i}})}})),Ke=/* @__PURE__ */ new Set(/* @__PURE__ */ `flip.fromFormData.fromJsonString.fromURLSearchParams.mutable.mutableKey.NullishOr.NullOr.optional.optionalKey.OptionFromNullishOr.OptionFromNullOr.OptionFromOptional.OptionFromOptionalKey.OptionFromOptionalNullOr.OptionFromUndefinedOr.readonlyKey.RedactedFromValue.required.requiredKey.toCodecArrayFromSingle.toCodecIso.toCodecJson.toCodecStringTree.toEncoded.toType.UndefinedOr`.split(`.`)),qe=/* @__PURE__ */ new Set([`Array`,`ArrayEnsure`,`Chunk`,`HashSet`,`NonEmptyArray`,`Option`,`ReadonlySet`,`Redacted`,`Tree`,`UniqueArray`]),Je=/* @__PURE__ */ new Set(/* @__PURE__ */ `annotate.annotateEncoded.annotateKey.brand.catchDecoding.catchDecodingWithContext.catchEncoding.catchEncodingWithContext.check.decode.decodeTo.encode.encodeKeys.encodeTo.extendTo.fieldsAssign.fromBrand.middlewareDecoding.middlewareEncoding.overrideToCodecIso.overrideToEquivalence.overrideToFormatter.refine.toTaggedUnion.withConstructorDefault.withDecodingDefault.withDecodingDefaultKey.withDecodingDefaultType.withDecodingDefaultTypeKey`.split(`.`)),Ye=/* @__PURE__ */ new Set([`annotate`,`annotateKey`,`check`,`mapFields`]),Xe=/* @__PURE__ */ new Set([`CallExpression`,`Identifier`,`MemberExpression`,`ThisExpression`]),Ze=/^\p{Lu}/u;function V(e,t,n){let r=E(e,n);return C(e)?.length===2&&r?.length===2&&r[0]===`Schema`&&B(t,e)?r[1]:void 0}function Qe(e){return e!==void 0&&qe.has(e)}function $e(e){return e!==void 0&&(Ke.has(e)||qe.has(e))}const et=/* @__PURE__ */ new Set([`ArrowFunctionExpression`,`FunctionExpression`,`Identifier`,`Literal`,`ThisExpression`]);function tt(e,t,n){return r.every(e,e=>e===null||H(e,t,n))}function H(e,t,n){if(et.has(e.type))return!0;if(e.type===`MemberExpression`)return H(e.object,t,n)&&(!e.computed||H(e.property,t,n));if(e.type===`TemplateLiteral`)return tt(e.expressions,t,n);if(e.type===`ArrayExpression`)return tt(e.elements,t,n);if(e.type===`ObjectExpression`)return r.every(e.properties,e=>e.type===`SpreadElement`?H(e.argument,t,n):(!e.computed||H(e.key,t,n))&&H(e.value,t,n));if(e.type!==`CallExpression`)return!1;let i=e.callee.type===`CallExpression`?e.callee.callee:e.callee;return V(i,t,n)!==void 0&&(e.callee===i||H(e.callee,t,n))&&tt(e.arguments,t,n)}function nt(e,t){if(e.type===`Identifier`)return t.bindings.get(e.name);if(e.type!==`TSQualifiedName`)return;let n=nt(e.left,t);return n===void 0?void 0:[...n,e.right.name]}function rt(e,t){for(let n=t.parent;n!==null;n=n.parent){let t=`typeParameters`in n&&n.typeParameters?.type===`TSTypeParameterDeclaration`?a.pipe(n.typeParameters.params,r.findFirst(t=>t.name.name===e),s.getOrUndefined):void 0;if(t!==void 0)return t}}function it(e,t,n){let r=/* @__PURE__ */ new Set,i=e,a=t;for(;i?.type===`TSTypeReference`;){let e=nt(i.typeName,n),t=e?.length===2&&e[0]===`Schema`?e[1]:void 0;if(t!==void 0)return!u.startsWith(`Constraint`)(t);let o=i.typeName.type===`Identifier`?rt(i.typeName.name,a):void 0;if(o===void 0||r.has(o))return r.size===0&&void 0;r.add(o),i=o.constraint,a=o}return r.size===0&&void 0}function at(e,t){let n=w(t,e,e.name)?.defs[0]?.name;return n!==void 0&&`typeAnnotation`in n?n.typeAnnotation??void 0:void 0}function ot(e,t,n){let r=e;for(;r.type===`TSSatisfiesExpression`||r.type===`TSNonNullExpression`;)r=r.expression;if(r.type===`TSAsExpression`)return it(r.typeAnnotation,r,n)===!1;let i=r.type===`Identifier`?at(r,t):void 0;return i!==void 0&&it(i.typeAnnotation,i,n)===!1}function st(e){return r.some(e.arguments,e=>e.type===`SpreadElement`)}function ct(e){let[t]=e.arguments;return e.arguments.length===1&&t?.type!==`SpreadElement`&&!e.typeArguments?t:void 0}function lt(e){return e.callee.type===`MemberExpression`&&!e.callee.optional&&S(e.callee)===`pipe`&&!e.typeArguments&&!st(e)}function ut(e,t,n){return(k(e.callee,n,[`pipe`])||k(e.callee,n,[`Function`,`pipe`]))&&B(t,e.callee)}function dt(e,t,n){return $e(V(e,t,n))?!0:e.type===`CallExpression`&&Je.has(V(e.callee,t,n)??``)}function ft(e,t,n){if(Ze.test(V(e,t,n)??``)||U(e,t,n)!==void 0)return!0;if(e.type!==`CallExpression`)return!1;let r=V(e.callee,t,n);return r===void 0?e.callee.type===`MemberExpression`&&Ye.has(S(e.callee)??``)&&ft(e.callee.object,t,n):Ze.test(r)||$e(r)}function pt(e,t,n){let[r,i]=e.arguments;if(!(r===void 0||i===void 0||r.type===`SpreadElement`||e.typeArguments||st(e)||!ft(r,t,n)&&!dt(i,t,n)))return[r,e.arguments.slice(1)]}function mt(e,t,n,r,i,a){let o=vt(e,i,a);return{head:o.head,steps:[...o.steps,t],violation:o.violation??n,reordersEffects:o.reordersEffects||r}}function ht(e,t,n){let r=ct(e);if(r===void 0)return;let i=V(e.callee,t,n);if($e(i)){let a=Qe(i);return mt(r,{text:t.sourceCode.getText(e.callee),wrapper:a},a?void 0:{kind:`modifierCall`,name:i},!1,t,n)}let a=e.callee.type===`CallExpression`?V(e.callee.callee,t,n):void 0;if(a!==void 0&&Je.has(a))return mt(r,{text:t.sourceCode.getText(e.callee),wrapper:!1},{kind:`dataLastCall`,name:a},!H(e.callee,t,n)&&!H(r,t,n),t,n)}function gt(e,t,n){let i=ut(e,t,n),o=i?pt(e,t,n):lt(e)?[e.callee.object,e.arguments]:void 0;if(o===void 0)return;let[c,l]=o,u=r.map(l,e=>V(e,t,n)),d=a.pipe(u,r.findFirst(Qe),s.getOrUndefined),f=d!==void 0&&r.some(l.slice(u.indexOf(d)+1),e=>!H(e,t,n));return _t(c,r.map(l,(e,n)=>({text:t.sourceCode.getText(e),wrapper:Qe(u[n])})),i?{kind:`functionPipe`}:d===void 0?void 0:{kind:`wrapperPipe`,name:d},f,t,n)}function _t(e,t,n,r,i,a){let o=vt(e,i,a);return{head:o.head,steps:[...o.steps,...t],violation:o.violation??n,reordersEffects:o.reordersEffects||r}}function U(e,t,n){return e.type===`CallExpression`?ht(e,t,n)??gt(e,t,n):void 0}function vt(e,t,n){return U(e,t,n)??{head:e,steps:[],violation:void 0,reordersEffects:!1}}function yt(e,t,n){let r=e.parent;return r.type===`MemberExpression`&&r.object===e&&r.parent.type===`CallExpression`?r.parent.callee===r&&lt(r.parent):r.type===`CallExpression`&&r.arguments[0]===e&&(ut(r,t,n)||!lt(r))&&U(r,t,n)!==void 0}function bt(e,t,n){return r.isReadonlyArrayNonEmpty(t)?`${e===`\0`&&!Xe.has(n.type)?`(\0)`:e}.pipe(${r.join(t,`, `)})`:e}function xt(e,t){let n=`\0`,r=[];for(let i of t)if(i.wrapper){let t=bt(n,r,e),a=t===`\0`&&e.type===`SequenceExpression`?`(${t})`:t;n=`${i.text}(${a})`,r=[]}else r.push(i.text);return bt(n,r,e)}const St=b({...x(`suggestion`,"Apply Schema modifiers with `.pipe(...)` and call Schema wrappers directly.",{modifierCall:"Apply Schema.{{name}} with `.pipe(...)` instead of calling it.",dataLastCall:"Apply Schema.{{name}}(...) with `.pipe(...)` instead of calling it on the schema.",functionPipe:"Call `.pipe(...)` on the schema instead of passing it to `pipe(...)`.",wrapperPipe:`Call Schema.{{name}}(...) directly instead of piping into it.`},`https://github.com/2digits-agency/configs/blob/main/docs/adr/0001-schema-modifiers-pipe-wrappers-call.md`),fixable:`code`},(e,t)=>({CallExpression(n){let i=t();if(!i.hasEffectImport)return;let a=U(n,e,i);if(a?.violation===void 0||yt(n,e,i))return;let{head:o}=a;if(a.steps[0]?.wrapper===!1&&ot(o,e,i))return;let s=r.some(e.sourceCode.getCommentsInside(n),e=>!he(o,e)),[c,l=``]=u.split(xt(o,a.steps),`\0`);e.report({node:n,messageId:a.violation.kind,data:{name:a.violation.name??``},fix:s||a.reordersEffects?void 0:e=>[e.replaceTextRange([n.range[0],o.range[0]],c),e.replaceTextRange([o.range[1],n.range[1]],l)]})}}));function Ct(e){return s.getOrUndefined(r.findFirst(e.arguments,e=>e.type===`ObjectExpression`))}function wt(e,t){let n=e.parent;if(n.type!==`Property`||M(n)!==t)return;let r=n.parent,i=r.parent;return r.type===`ObjectExpression`&&i?.type===`CallExpression`?i:void 0}function Tt(e,t){let n=L(e);return n===void 0?void 0:E(n.callee,t)}const Et=/* @__PURE__ */ new Set([`catch`,`finally`,`then`]);function Dt(e){let t=C(e.callee);return t!==void 0&&r.join(t,`.`)===`Promise`}function Ot(e){let t=C(e.callee);return t!==void 0&&r.join(t,`.`)===`fetch`||t?.[0]===`Promise`&&t[1]!==`withResolvers`||Et.has(t?.at(-1)??``)||A(e.callee)&&e.callee.async}const kt=o.type().pipe(o.discriminators(`type`)({CallExpression:Ot,NewExpression:Dt}),o.orElse(a.constFalse));function At(e){return kt(P(e))}function jt(e){if(e.body){if(e.body.type!==`BlockStatement`)return P(e.body);if(e.body.body.length===1&&e.body.body[0]?.type===`ReturnStatement`&&e.body.body[0].argument)return P(e.body.body[0].argument)}}function Mt(e){let t=e?.type===`ObjectExpression`?N(e,`try`)?.value:e;return A(t)?t:void 0}function Nt(e){let t=P(e);return z(t,`*`)?!0:t.type===`ArrayExpression`&&(t.elements.length===0||r.some(t.elements,e=>e!==null&&z(e,`*`)))}const Pt=b(x(`problem`,`Disallow credentialed CORS with wildcard origins because browsers reject that combination.`,{wildcard:`Credentialed CORS cannot use a wildcard origin. Set allowedOrigins to explicit trusted origins or disable credentials.`},`https://github.com/Effect-TS/tsgo/issues/400`),(e,t)=>({CallExpression(n){let r=t();if(!D(n.callee,r,`HttpMiddleware`,`cors`)&&!D(n.callee,r,`HttpRouter`,`cors`)&&!D(n.callee,r,`HttpApiBuilder`,`middlewareCors`))return;let i=Ct(n);if(i===void 0||!z(N(i,`credentials`)?.value??i,!0))return;let a=N(i,`allowedOrigins`);(a===void 0||Nt(a.value))&&e.report({node:n,messageId:`wildcard`})}}));function Ft(e){return e.type===`AssignmentPattern`||e.type===`RestElement`||e.optional===!0}const It=b(x(`problem`,`Disallow numeric dual arity with optional or rest parameters because dispatch becomes ambiguous.`,{unsafeArity:`Function.dual with numeric arity misdispatches an implementation with optional/default/rest parameters. Use predicate dispatch.`},`https://github.com/Effect-TS/tsgo/issues/401`),(e,t)=>({CallExpression(n){let i=j(n,0),a=j(n,1);a!==void 0&&D(n.callee,t(),`Function`,`dual`)&&i?.type===`Literal`&&c.isNumber(i.value)&&A(a)&&r.some(a.params,Ft)&&e.report({node:i,messageId:`unsafeArity`})}})),Lt=b(x(`problem`,`Require Effect.tryPromise so Promise rejections enter the typed error channel.`,{tryPromise:`Use Effect.tryPromise instead of Effect.promise so rejections are typed failures.`}),(e,t)=>({CallExpression(n){D(n.callee,t(),`Effect`,`promise`)&&e.report({node:n.callee,messageId:`tryPromise`})}}));function Rt(e,t){if(O(e.callee,t,`Effect`,[`promise`,`tryPromise`]))return Mt(j(e,0))}const zt=b(x(`problem`,`Ensure Effect Promise thunks start fresh asynchronous work rather than reusing an already-started Promise.`,{prestarted:`This thunk returns an already-started Promise. Start the asynchronous work inside the thunk so retries and repeats run it again.`},`https://github.com/Effect-TS/tsgo/issues/475`),(e,t)=>{let n=/* @__PURE__ */ new Set;return{before(){n=/* @__PURE__ */ new Set},VariableDeclarator(e){e.id.type===`Identifier`&&e.init&&At(e.init)&&n.add(e.id.name)},CallExpression(r){let i=Rt(r,t()),a=i===void 0?void 0:jt(i);a?.type===`Identifier`&&n.has(a.name)&&e.report({node:a,messageId:`prestarted`})}}}),Bt=b(x(`problem`,`Disallow async thunks in Effect.try because rejected Promises bypass its catch mapper.`,{asyncTry:`Effect.try does not await Promises. Use Effect.tryPromise so rejection enters the typed error channel.`},`https://github.com/Effect-TS/tsgo/issues/657`),(e,t)=>({CallExpression(n){if(!D(n.callee,t(),`Effect`,`try`))return;let r=j(n,0),i=r!==void 0&&A(r)?r:void 0;if(i===void 0&&r?.type===`ObjectExpression`){let e=N(r,`try`)?.value;e!==void 0&&A(e)&&(i=e)}let a=i===void 0?void 0:jt(i);i!==void 0&&(i.async||a!==void 0&&At(a))&&e.report({node:i,messageId:`asyncTry`})}})),Vt=b(x(`problem`,`Disallow discarded Effect.runPromise results that can become unhandled rejections.`,{discarded:`The Promise returned by Effect.runPromise is discarded. Await/return/handle it, or use Effect.runFork for fire-and-forget work.`},`https://github.com/Effect-TS/tsgo/issues/643`),(e,t)=>({CallExpression(n){let r=t(),i=D(n.callee,r,`Effect`,`runPromise`),a=n.callee.type===`CallExpression`&&D(n.callee.callee,r,`Effect`,`runPromiseWith`);(i||a)&&ve(n)&&e.report({node:n,messageId:`discarded`})}})),Ht=/* @__PURE__ */ new Set([`mapElements`,`mapFields`,`mapMembers`]);function Ut(e,t){let n=P(e);if(n.type===`CallExpression`&&n.callee.type===`MemberExpression`&&S(n.callee)===t)return n}const Wt=b(x(`problem`,`Disallow schema mapping that silently drops checks attached to the receiver.`,{discarded:`{{method}} creates a new schema and drops the preceding check. Re-attach the check after mapping or explicitly preserve it.`},`https://github.com/Effect-TS/tsgo/issues/435`),(e,t)=>({CallExpression(n){if(!t().hasEffectImport||n.callee.type!==`MemberExpression`)return;let i=S(n.callee);i!==void 0&&Ht.has(i)&&Ut(n.callee.object,`check`)!==void 0&&(r.findFirst(n.arguments,e=>e.type===`ObjectExpression`).pipe(s.flatMapNullishOr(e=>N(e,`unsafePreserveChecks`)),s.exists(e=>z(e.value,!0)))||e.report({node:n,messageId:`discarded`,data:{method:i}}))}})),Gt={Array:`Arr`,Boolean:`Bool`,Equal:`Eq`,Function:`Fn`,Number:`Num`,Option:`Opt`,Predicate:`P`,Record:`R`,String:`Str`},Kt=/^\p{Lu}/u;function qt(e){return Kt.test(e)}function Jt(e){return e===`@effect/vitest`||u.startsWith(`@effect/vitest/`)(e)}function W(e,t){return e.importKind===`type`||t?.importKind===`type`}function Yt(e){return s.getOrElse(n.get(Gt,e),()=>e)}function Xt(e,t){if(e===`effect`||e===`alchemy`||/^@effect\/[^/]+$/u.test(e)&&!Jt(e))return`${e}/${t}`}function Zt(e){if(Jt(e)||!(u.startsWith(`effect/`)(e)||u.startsWith(`alchemy/`)(e)||/^@effect\/[^/]+\//u.test(e)))return;let t=r.lastNonEmpty(u.split(e,`/`));return qt(t)?t:void 0}function Qt(e,t,n){let i=t.specifiers;if(e.sourceCode.getCommentsInside(t).length>0||t.attributes.length>0||!r.every(i,e=>e.type===`ImportSpecifier`))return;let[a,o]=r.partition(i,n=>{let r=v(n.imported),i=qt(r)&&!W(t,n)?Xt(t.source.value,r):void 0;return i===void 0?d.fail(e.sourceCode.getText(n)):d.succeed(`import * as ${n.local.name} from '${i}';`)}),s=r.isReadonlyArrayNonEmpty(o)?r.prepend(a,`import { ${r.join(o,`, `)} } from ${e.sourceCode.getText(t.source)};`):a;return[n.replaceText(t,r.join(s,`
2
+ `))]}function $t(e,t,n){let i=Zt(t.source.value);if(i===void 0||t.attributes.length>0||e.sourceCode.getCommentsInside(t).length>0)return;let a=Yt(i),o=e.sourceCode.getDeclaredVariables(t),c=s.getOrUndefined(r.findFirst(o,e=>e.name===a));if(r.some(e.sourceCode.scopeManager.scopes,e=>r.some(e.variables,e=>e.name===a&&e!==c)||r.some(e.references,e=>e.identifier.name===a&&e.resolved!==c)))return;let l=[],u=[];for(let r of t.specifiers){if(r.type===`ImportDefaultSpecifier`)return;if(r.type===`ImportSpecifier`&&W(t,r)){if(r.local.name===a)return;u.push(e.sourceCode.getText(r));continue}let i=en(r,o,a,n);if(i===void 0)return;l.push(...i)}let d=e.sourceCode.getText(t.source),f=`import * as ${a} from ${d};${u.length===0?``:`\nimport { ${r.join(u,`, `)} } from ${d};`}`;return[n.replaceText(t,f),...l]}function en(e,t,n,i){let a=s.getOrUndefined(r.findFirst(t,t=>t.name===e.local.name));if(a!==void 0){if(e.type===`ImportNamespaceSpecifier`)return tn(a,n,!1,i);if(e.imported.type===`Identifier`)return tn(a,`${n}.${e.imported.name}`,!0,i)}}function tn(e,t,n,r){let i=[],a=/* @__PURE__ */ new Set;for(let o of e.references){let e=o.identifier;if(a.has(e.range[0]))continue;a.add(e.range[0]);let s=e.parent;if(o.isWrite()||s.type===`ExportSpecifier`||u.startsWith(`JSX`)(s.type))return;let c=s.type===`Property`&&s.shorthand?`${e.name}: ${t}`:t;n&&(s.type===`CallExpression`&&s.callee===e||s.type===`TaggedTemplateExpression`&&s.tag===e)&&(c=`(0, ${t})`),i.push(r.replaceText(e,c))}return i}const nn=y({...x(`suggestion`,`Import Effect and Alchemy module namespaces from their submodule entrypoints instead of root barrels.`,{barrelImport:'Import this module as `import * as {{alias}} from "{{source}}"` instead of from the root barrel.'},`https://github.com/Effect-TS/language-service/blob/main/packages/language-service/src/diagnostics/importFromBarrel.ts`),fixable:`code`},e=>({ImportDeclaration(t){for(let n of t.specifiers){if(n.type!==`ImportSpecifier`||W(t,n))continue;let r=v(n.imported),i=qt(r)?Xt(t.source.value,r):void 0;i!==void 0&&e.report({node:n,messageId:`barrelImport`,data:{alias:Yt(r),source:i},fix:n=>Qt(e,t,n)})}}})),rn=b({...x(`suggestion`,`Prefer Effect.never to an empty Effect.callback registration.`,{emptyCallback:`An empty Effect.callback registration is Effect.never. Use the explicit primitive.`},`https://github.com/Effect-TS/tsgo/issues/636`),fixable:`code`},(e,t)=>({CallExpression(n){if(!D(n.callee,t(),`Effect`,`callback`)&&!D(n.callee,t(),`Effect`,`async`))return;let i=j(n,0);i!==void 0&&A(i)&&i.body?.type===`BlockStatement`&&i.body.body.length===0&&e.report({node:n,messageId:`emptyCallback`,fix(t){if(!B(e,n.callee)||n.arguments.length!==1||i.async||i.generator||r.some(i.params,e=>e.type!==`Identifier`)||e.sourceCode.getCommentsInside(n).length>0)return;let a=De(e,n,`effect/Effect`,`Effect`,t);return[...a.fixes,t.replaceText(n,`${a.name}.never`)]}})}})),an=b(x(`problem`,`Disallow Schema.Struct({}), which accepts every non-null object-like value.`,{emptyStruct:`Schema.Struct({}) does not validate an exact empty object. Define the intended fields explicitly.`},`https://github.com/Effect-TS/tsgo/issues/403`),(e,t)=>({CallExpression(n){let r=j(n,0);D(n.callee,t(),`Schema`,`Struct`)&&r?.type===`ObjectExpression`&&r.properties.length===0&&e.report({node:n,messageId:`emptyStruct`})}}));function on(e,t){let n=P(e),i=/* @__PURE__ */ new Set;for(;n.type===`Identifier`;){let e=w(t,n,n.name),a=ae(e),o=a?.node;if(e===void 0||i.has(e)||o?.type!==`VariableDeclarator`||o.id.type!==`Identifier`||a?.parent?.type!==`VariableDeclaration`||a.parent.kind!==`const`||!o.init||r.some(e.references,e=>e.isWrite()&&!e.init))return;i.add(e),n=P(o.init)}return n}function sn(e){if(e.arguments.length===2)return j(e,0);let t=e.parent;if(e.arguments.length===1&&t.type===`CallExpression`&&t.arguments[0]===e&&t.callee.type===`MemberExpression`&&S(t.callee)===`pipe`)return t.callee.object}const cn=b(x(`problem`,`Disallow obsolete lazy callbacks passed to the now-eager Config.withDefault API.`,{functionDefault:`Config.withDefault takes an eager value. This callback becomes the configured value; pass the returned value directly.`},`https://github.com/Effect-TS/tsgo/issues/408`),(e,t)=>({CallExpression(n){if(!D(n.callee,t(),`Config`,`withDefault`)||!B(e,n.callee))return;let r=j(n,n.arguments.length-1),i=sn(n),a=i===void 0?void 0:on(i,e);a?.type===`CallExpression`&&D(a.callee,t(),`Config`,`succeed`)&&B(e,a.callee)&&A(j(a,0))||A(r)&&r.params.length===0&&e.report({node:r,messageId:`functionDefault`})}})),ln=/* @__PURE__ */ new Set([`delete`,`get`,`has`,`set`]);function un(e,t){return e.type===`CallExpression`&&D(e.callee,t,`Hash`,`hash`)}const dn=b(x(`problem`,`Disallow using Hash.hash output as collision-free identity.`,{hashIdentity:`Hash.hash is a bucketing hint, not a unique identity. Use HashMap/Equal.equals or a real identifier instead.`},`https://github.com/Effect-TS/tsgo/issues/482`),(e,t)=>{let n=/* @__PURE__ */ new Set;function r(e){return un(e,t())||e.type===`Identifier`&&n.has(e.name)}return{before(){n=/* @__PURE__ */ new Set},VariableDeclarator(e){e.id.type===`Identifier`&&e.init&&un(e.init,t())&&n.add(e.id.name)},CallExpression(t){if(t.callee.type!==`MemberExpression`||!ln.has(C(t.callee)?.at(-1)??``))return;let n=j(t,0);n!==void 0&&r(n)&&e.report({node:n,messageId:`hashIdentity`})},BinaryExpression(t){_e(t.operator)&&r(t.left)&&r(t.right)&&e.report({node:t,messageId:`hashIdentity`})},MemberExpression(t){t.computed&&r(t.property)&&e.report({node:t.property,messageId:`hashIdentity`})}}}),fn=/* @__PURE__ */ new Set(/* @__PURE__ */ `asserts.decodeEffect.decodeExit.decodeOption.decodePromise.decodeResult.decodeSync.decodeUnknownEffect.decodeUnknownExit.decodeUnknownOption.decodeUnknownPromise.decodeUnknownResult.decodeUnknownSync.encodeEffect.encodeExit.encodeOption.encodePromise.encodeResult.encodeSync.encodeUnknownEffect.encodeUnknownExit.encodeUnknownOption.encodeUnknownPromise.encodeUnknownResult.encodeUnknownSync.is`.split(`.`)),pn=/* @__PURE__ */ new Set([`global`,`module`]),mn=/* @__PURE__ */ new Set([`ArrowFunctionExpression`,`FunctionDeclaration`,`FunctionExpression`]),hn=/* @__PURE__ */ new Set([`AssignmentExpression`,`AwaitExpression`,`ImportExpression`,`TaggedTemplateExpression`,`UpdateExpression`,`YieldExpression`]),gn=/* @__PURE__ */ new Set([`ParenthesizedExpression`,`TSAsExpression`,`TSNonNullExpression`]);function _n(e,t,n){let i=E(e,t),a=i?.length===2&&i[0]===`Schema`?i[1]:void 0,o=C(e)?.[0];if(a===void 0||o===void 0||!fn.has(a))return;let s=w(n,e,o);return s!==void 0&&r.every(s.defs,e=>e.type===`ImportBinding`)?a:void 0}function vn(e){let t=e.parent;for(;t;){if(mn.has(t.type))return!0;t=t.parent}return!1}function yn(e){let t=e,n=e.parent;for(;gn.has(n.type)&&n.parent!==null;)t=n,n=n.parent;return n.type===`CallExpression`&&n.callee===t}function bn(e,t){return e.type===`CallExpression`&&E(e.callee,t)?.[0]===`Schema`}function xn(e){let t=e,n=e.parent;for(;n?.type===`MemberExpression`&&n.object===t;)t=n,n=n.parent;return t!==e&&(n?.type===`AssignmentExpression`&&n.left===t||n?.type===`UpdateExpression`&&n.argument===t||n?.type===`UnaryExpression`&&n.operator===`delete`&&n.argument===t)}function Sn(e){return r.every(e.references,e=>(!e.isWrite()||e.init)&&!xn(e.identifier))}function Cn(e,t,n,r){let i=w(r,e,t);return i===void 0||he(n,i.scope.block)?!0:pn.has(i.scope.type)&&Sn(i)}function wn(e){let t=e.parent;return t?.type===`MemberExpression`&&t.property===e&&!t.computed||t?.type===`Property`&&t.key===e&&!t.computed&&!t.shorthand}function Tn(e,t){if(e===t)return!1;let n=e.parent;for(;n!==null&&n!==t;){if(mn.has(n.type))return!0;n=n.parent}return!1}function En(e,t,n){return Tn(e,t)?!1:e.type===`CallExpression`||e.type===`NewExpression`?E(e.callee,n)===void 0:hn.has(e.type)}function Dn(e,t,n){return!F(e,r=>r.type===`ThisExpression`||r.type===`Super`||r.type===`MetaProperty`&&r.meta.name===`new`||En(r,e,t)||r.type===`Identifier`&&!wn(r)&&!Cn(r,r.name,e,n))}const On=b(x(`problem`,`Disallow compiling Schema decoders, encoders, and guards inside function bodies.`,{inlineSchema:`Hoist Schema.{{method}}(...) to module scope: both the inline schema and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.`,inlineCompile:`Hoist Schema.{{method}}(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.`},`https://github.com/pingdotgg/t3code/blob/main/oxlint-plugin-t3code/rules/no-inline-schema-compile.ts`),(e,t)=>({CallExpression(n){let i=t();if(!i.hasEffectImport)return;let a=_n(n.callee,i,e),[o]=n.arguments;if(a===void 0||o===void 0||o.type===`SpreadElement`||r.some(n.arguments,e=>e.type===`SpreadElement`)||!yn(n)||!vn(n))return;let s=P(o),c=bn(s,i);(c||s.type===`Identifier`||s.type===`MemberExpression`)&&r.every(n.arguments,t=>Dn(t,i,e))&&e.report({node:n.callee,messageId:c?`inlineSchema`:`inlineCompile`,data:{method:a}})}})),kn=/* @__PURE__ */ new Set([`catch`,`catchAll`,`catchAllCause`,`catchIf`,`catchSome`,`catchSomeCause`,`catchTag`,`orElse`,`orElseFail`,`orElseSucceed`]),An=/* @__PURE__ */ new Set([`log`,`logDebug`,`logError`,`logInfo`,`logTrace`,`logWarning`]);function jn(e,t){let n=e.parent;for(;n;){if(A(n)){let e=L(n);if(e?.arguments.at(-1)===n){let n=E(e.callee,t),r=n?.[1];if(r!==void 0&&n?.[0]===`Effect`&&kn.has(r))return{method:r}}}n=n.parent}}const Mn=b(x(`suggestion`,`Keep logging separate from Effect recovery handlers.`,{logging:`Move {{logger}} out of Effect.{{catchMethod}} and use Effect.tapError before recovery.`}),(e,t)=>({CallExpression(n){let i=t(),a=E(n.callee,i),o=a?.[1]!==void 0&&a[0]===`Effect`&&An.has(a[1])?r.join(a,`.`):void 0;if(o===void 0)return;let s=jn(n,i);s!==void 0&&e.report({node:n,messageId:`logging`,data:{logger:o,catchMethod:s.method}})}})),Nn=o.type().pipe(o.when({type:`MemberExpression`,computed:!1,object:{type:`Identifier`,name:`Effect`},property:{type:`Identifier`,name:o.is(`catch`,`catchAll`,`catchIf`)}},a.constTrue),o.orElse(a.constFalse)),Pn=o.type().pipe(o.when({type:`MemberExpression`,computed:!1,object:{type:`Identifier`,name:`Match`},property:{type:`Identifier`,name:o.is(`when`,`not`)}},a.constTrue),o.orElse(a.constFalse)),G=o.type().pipe(o.when({type:`MemberExpression`,computed:!1,property:{type:`Identifier`,name:`_tag`}},a.constTrue),o.when({type:`MemberExpression`,computed:!0,property:{type:`Literal`,value:`_tag`}},a.constTrue),o.orElse(a.constFalse));function Fn(e){if(_e(e.operator)){if(G(e.left)&&R(e.right))return e.left;if(G(e.right)&&R(e.left))return e.right}}function K(e){let t=me(e),n=t===void 0?void 0:L(t);return n!==void 0&&Nn(n.callee)}function In(e){return e.object.type===`MemberExpression`&&S(e.object)===`reason`}function Ln(e){let t=e.parent;return t.type===`CallExpression`&&t.arguments.includes(e)&&Pn(t.callee)}const Rn=y(x(`problem`,"Use Effect tagged error handlers instead of manually branching on `_tag` in a catch handler.",{tag:`Use Effect.catchTag or Effect.catchTags instead of manually discriminating a tagged error in a broad Effect catch handler.`,reason:"Use Effect.catchReason or Effect.catchReasons instead of manually discriminating a tagged `reason` in a broad Effect catch handler."},`https://github.com/dmmulroy/anti-slop/blob/main/src/effect/rules/no-manual-effect-error-tag.ts`),e=>({BinaryExpression(t){let n=Fn(t);n!==void 0&&K(t)&&e.report({node:t,messageId:In(n)?`reason`:`tag`})},SwitchStatement(t){G(t.discriminant)&&K(t)&&e.report({node:t,messageId:In(t.discriminant)?`reason`:`tag`})}})),zn=y(x(`problem`,"Use Effect Match or Predicate helpers instead of manually branching on `_tag`.",{manualComparison:`Use Match.tag/Match.tags for tagged-value branching, or Predicate.isTagged for a simple reusable predicate.`,manualSwitch:"Use Match.value(value).pipe(Match.tag/Match.tags/Match.tagsExhaustive) or the tagged enum `$match` helper instead of switching on `_tag`."},`https://github.com/dmmulroy/anti-slop/blob/main/src/effect/rules/no-manual-tag-comparison.ts`),e=>({BinaryExpression(t){Fn(t)===void 0||K(t)||e.report({node:t,messageId:`manualComparison`})},SwitchStatement(t){G(t.discriminant)&&!K(t)&&e.report({node:t,messageId:`manualSwitch`})}})),Bn=y(x(`problem`,"Construct tagged values with their existing Effect constructor instead of writing `_tag` manually.",{manualConstruction:"Use the existing Schema tagged `.make`, tagged class/error constructor, or Data.taggedEnum variant constructor instead of writing a literal `_tag` object."},`https://github.com/dmmulroy/anti-slop/blob/main/src/effect/rules/no-manual-tagged-construction.ts`),e=>({ObjectExpression(t){if(Ln(t))return;let n=s.getOrUndefined(r.findFirst(t.properties,e=>e.type===`Property`&&M(e)===`_tag`&&R(e.value)));n!==void 0&&e.report({node:n,messageId:`manualConstruction`})}})),Vn=/* @__PURE__ */ new Map([[`addEventListener`,1],[`on`,1],[`setInterval`,0]]);function Hn(e,t){let n=C(e.callee)?.at(-1),r=n===void 0?void 0:Vn.get(n);if(r===void 0)return!1;if(n===`addEventListener`){let t=j(e,2);if(t?.type===`ObjectExpression`){let e=N(t,`once`);if(e!==void 0&&z(e.value,!0))return!1}}let i=j(e,r);return i!==void 0&&de(i,t)}const Un=b(x(`problem`,`Disallow attaching Effect.callback resume to repeating event sources.`,{multiShot:`Effect.callback is single-shot, but this source emits repeatedly. Use a once-style subscription or Stream.callback.`},`https://github.com/Effect-TS/tsgo/issues/484`),(e,t)=>({CallExpression(n){if(!D(n.callee,t(),`Effect`,`callback`))return;let r=j(n,0);if(r===void 0||!A(r))return;let i=I(r)?.name,a=r.body;i!==void 0&&a&&F(a,e=>e.type===`CallExpression`&&Hn(e,i))&&e.report({node:n,messageId:`multiShot`})}})),Wn=/* @__PURE__ */ new Set([`NaN`,`Infinity`,`undefined`]),Gn=/* @__PURE__ */ new Set([`annotate`,`annotateEncoded`,`annotateKey`]),Kn=[`default`,`examples`];function qn(e){return e.type===`Literal`&&c.isBigInt(e.value)||e.type===`Identifier`&&Wn.has(e.name)||A(e)||e.type===`CallExpression`&&C(e.callee)?.at(-1)===`Symbol`}function Jn(e,t){if(e.type===`ArrayExpression`)for(let n of e.elements)n&&n.type!==`SpreadElement`&&t.push(n);else if(e.type===`ObjectExpression`)for(let n of e.properties)n.type===`Property`&&t.push(n.value)}function Yn(e){let t=[e];for(;t.length>0;){let e=t.pop();if(e===void 0)continue;let n=P(e);if(qn(n))return n;Jn(n,t)}}const Xn=b(x(`problem`,`Disallow schema examples and defaults that cannot be represented in JSON Schema.`,{nonJson:`This schema annotation value is not JSON-serializable and will be omitted from or corrupt generated JSON Schema.`},`https://github.com/Effect-TS/tsgo/issues/440`),(e,t)=>({CallExpression(n){let r=t();if(!r.hasEffectImport)return;let i=E(n.callee,r),a=n.callee.type===`MemberExpression`?S(n.callee):i?.[0]===`Schema`?i[1]:void 0;if(a===void 0||!Gn.has(a))return;let o=Ct(n);if(o!==void 0&&N(o,`jsonSchema`)===void 0)for(let t of Kn){let n=N(o,t);if(n===void 0)continue;let r=Yn(n.value);r!==void 0&&e.report({node:r,messageId:`nonJson`})}}})),Zn=b(x(`problem`,`Disallow wrapping infallible Effect.service access in Option or Either.`,{mandatory:`Effect.service never fails, so this wrapper is always present and keeps the service requirement. Use Effect.serviceOption.`},`https://github.com/Effect-TS/tsgo/issues/648`),(e,t)=>({CallExpression(n){let r=t(),i=O(n.callee,r,`Effect`,[`option`,`either`]),a=j(n,0);if(i&&a?.type===`CallExpression`&&D(a.callee,r,`Effect`,`service`)){e.report({node:n,messageId:`mandatory`});return}if(n.callee.type!==`MemberExpression`||C(n.callee)?.at(-1)!==`pipe`)return;let o=P(n.callee.object),s=j(n,0);s!==void 0&&o.type===`CallExpression`&&D(o.callee,r,`Effect`,`service`)&&O(s,r,`Effect`,[`option`,`either`])&&e.report({node:n,messageId:`mandatory`})}})),Qn=b(x(`problem`,`Ensure a later object spread cannot overwrite an explicitly assigned _tag.`,{overwritten:`A later spread can overwrite _tag at runtime. Move _tag after all spreads.`},`https://github.com/Effect-TS/tsgo/issues/426`),e=>({ObjectExpression(t){let n=r.findFirstWithIndex(t.properties,e=>e.type===`Property`&&M(e)===`_tag`);if(s.isNone(n))return;let[i,a]=n.value;r.some(r.drop(t.properties,a+1),e=>e.type===`SpreadElement`)&&e.report({node:i,messageId:`overwritten`})}})),$n=/^make[A-Z]/u,er=/\.(?:test|spec)\.[cm]?[jt]sx?$/u,tr=y(x(`problem`,`Disallow project-local make<CapabilityName> imports outside test and spec files.`,{serviceConstructorImport:`Do not import Effect service constructor "{{name}}" into runtime code. Import the owning Layer, yield the contextual service, and allow its requirements to propagate to the composition root.`},`https://github.com/dmmulroy/anti-slop/blob/main/src/effect/rules/no-service-constructor-imports.ts`),e=>({ImportDeclaration(t){if(!er.test(u.replaceAll(`\\`,`/`)(e.filename))&&(u.startsWith(`./`)(t.source.value)||u.startsWith(`../`)(t.source.value)))for(let n of t.specifiers){if(n.type!==`ImportSpecifier`)continue;let t=v(n.imported);$n.test(t)&&e.report({node:n,messageId:`serviceConstructorImport`,data:{name:t}})}}})),nr=b(x(`problem`,`Disallow turning missing Effect services into untyped Option defects.`,{getOrThrow:`Option.getOrThrow after Effect.serviceOption hides a mandatory service until runtime. Use Effect.service so it remains a typed requirement.`},`https://github.com/Effect-TS/tsgo/issues/650`),(e,t)=>({CallExpression(n){let r=t();if(O(n.callee,r,`Option`,[`getOrThrow`,`getOrThrowWith`])){let t=j(n,0),i=t?.type===`YieldExpression`?t.argument:t;i?.type===`CallExpression`&&D(i.callee,r,`Effect`,`serviceOption`)&&e.report({node:n,messageId:`getOrThrow`});return}if(n.callee.type!==`MemberExpression`||C(n.callee)?.at(-1)!==`pipe`)return;let i=P(n.callee.object),a=j(n,0);if(i.type!==`CallExpression`||!D(i.callee,r,`Effect`,`serviceOption`)||a?.type!==`CallExpression`||!D(a.callee,r,`Effect`,`map`))return;let o=j(a,0);o!==void 0&&O(o,r,`Option`,[`getOrThrow`,`getOrThrowWith`])&&e.report({node:n,messageId:`getOrThrow`})}})),rr=/* @__PURE__ */ new Set([`andThen`,`map`,`mapError`,`tap`,`tapError`,`tapErrorCause`]),ir=b(x(`problem`,`Disallow throw in Effect callbacks that cannot add the thrown value to the typed error channel.`,{callbackThrow:`Throwing in this Effect callback creates an untyped defect. Return Effect.fail(...) or return the mapped error value instead.`},`https://github.com/Effect-TS/tsgo/issues/406`),(e,t)=>({ThrowStatement(n){let r=me(n);if(r===void 0)return;let i=t(),a=Tt(r,i),o=wt(r,`catch`);(a?.[0]===`Effect`&&a[1]!==void 0&&rr.has(a[1])||o!==void 0&&O(o.callee,i,`Effect`,[`try`,`tryPromise`]))&&e.report({node:n,messageId:`callbackThrow`})}})),ar=/* @__PURE__ */ new Set([`get`,`post`,`put`,`patch`,`delete`,`head`,`options`]);function or(e,t){let n=e.parent,r=e.node;if(e.type!==`ImportBinding`||n?.type!==`ImportDeclaration`||W(n,r.type===`ImportSpecifier`?r:void 0))return!1;let i=n.source.value;return r.type===`ImportNamespaceSpecifier`?i===`effect/unstable/httpapi/HttpApiEndpoint`&&t.length===2||i===`effect/unstable/httpapi`&&t.length===3&&t[1]===`HttpApiEndpoint`:r.type===`ImportSpecifier`&&r.imported.type===`Identifier`&&r.imported.name===`HttpApiEndpoint`&&i===`effect/unstable/httpapi`&&t.length===2}function sr(e,t){let n=C(e.callee),r=n?.[0],i=n?.at(-1);if(n===void 0||r===void 0||i===void 0||!ar.has(i))return!1;let a=ae(w(t,e,r));return a!==void 0&&or(a,n)}function cr(e){if(e?.type!==`ObjectExpression`)return;let t=/* @__PURE__ */ new Set,n=[];for(let r of e.properties){if(r.type!==`Property`||r.computed||r.method||r.kind!==`init`)return;let e=M(r)??(r.key.type===`Literal`&&c.isNumber(r.key.value)?String(r.key.value):void 0);if(e===void 0||t.has(e))return;t.add(e),n.push(r)}return n}const lr=y(x(`problem`,`Require lowercase static keys in Effect v4 endpoint header field schemas.`,{uppercase:`Header schema key "{{name}}" contains ASCII uppercase letters. Incoming headers use exact lowercase runtime lookup; review the schema and its consumers before renaming this key.`},`https://github.com/Effect-TS/tsgo/issues/413`),e=>({CallExpression(t){if(r.some(t.arguments,e=>e.type===`SpreadElement`)||!sr(t,e))return;let n=cr(j(t,2)),i=cr(s.getOrUndefined(r.findFirst(n??[],e=>M(e)===`headers`))?.value);if(i!==void 0)for(let t of i){let n=M(t);n!==void 0&&/[A-Z]/u.test(n)&&e.report({node:t.key,messageId:`uppercase`,data:{name:n}})}}})),ur=b(x(`problem`,`Disallow no-op retry and repeat wrappers with times: 0.`,{zeroTimes:`times: 0 performs no retries or repeats. Remove the wrapper or use a positive count.`},`https://github.com/Effect-TS/tsgo/issues/412`),(e,t)=>({CallExpression(n){let r=t();if(!O(n.callee,r,`Effect`,[`retry`,`repeat`]))return;let i=Ct(n);if(i===void 0)return;let a=N(i,`times`);a!==void 0&&z(a.value,0)&&e.report({node:a,messageId:`zeroTimes`})}})),dr=y({...x(`suggestion`,`Use consistently aliased namespace imports for Effect and Alchemy submodule entrypoints.`,{alias:"Import {{source}} as the canonical namespace alias `{{alias}}`.",namespace:'Use `import * as {{alias}} from "{{source}}"` instead of importing values directly.'},`https://github.com/Effect-TS/language-service/blob/main/packages/language-service/src/core/AutoImport.ts`),fixable:`code`},e=>({ImportDeclaration(t){let n=Zt(t.source.value);if(n===void 0||t.importKind===`type`)return;let r=Yt(n);for(let n of t.specifiers)n.type===`ImportSpecifier`&&W(t,n)||(n.type===`ImportNamespaceSpecifier`?n.local.name!==r&&e.report({node:n.local,messageId:`alias`,data:{alias:r,source:t.source.value},fix:n=>$t(e,t,n)}):e.report({node:n,messageId:`namespace`,data:{alias:r,source:t.source.value},fix:n=>$t(e,t,n)}))}})),fr=b(x(`suggestion`,`Prefer immutable, Order-based Effect Array sorting in Effect projects.`,{effectArraySort:`Use Arr.sort with an Order instead of the mutable native Array.sort method.`},`https://www.effect.website/docs/v4/api/effect/Array#sort`),(e,t)=>({CallExpression(n){let r=t();r.hasEffectImport&&n.callee.type===`MemberExpression`&&S(n.callee)===`sort`&&!D(n.callee,r,`Array`,`sort`)&&e.report({node:n,messageId:`effectArraySort`})}})),pr=/* @__PURE__ */ new Set([`toISOString`,`toLocaleDateString`,`toLocaleTimeString`]),mr=b(x(`suggestion`,`Prefer Effect DateTime formatting so time-zone behavior is explicit and composable.`,{effectDateTime:`Convert to DateTime and use DateTime.format, DateTime.formatIso, or another explicit formatter.`},`https://www.effect.website/docs/v4/api/effect/DateTime`),(e,t)=>({CallExpression(n){t().hasEffectImport&&n.callee.type===`MemberExpression`&&pr.has(S(n.callee)??``)&&e.report({node:n,messageId:`effectDateTime`})}})),hr=/* @__PURE__ */ new Map([[`Effect.cachedInvalidateWithTTL`,`last`],[`Effect.cachedWithTTL`,`last`],[`Effect.delay`,`last`],[`Effect.sleep`,`last`],[`Effect.timeout`,`last`],[`Effect.timeoutOption`,`last`],[`Effect.timeoutOrElse`,`options.duration`],[`Schedule.duration`,`last`],[`Schedule.during`,`last`],[`Schedule.exponential`,`first`],[`Schedule.fibonacci`,`last`],[`Schedule.fixed`,`last`],[`Schedule.spaced`,`last`],[`Schedule.windowed`,`last`],[`Stream.debounce`,`last`],[`Stream.groupedWithin`,`last`],[`Stream.throttle`,`options.duration`],[`Stream.timeout`,`last`],[`TestClock.adjust`,`last`]]),gr={first:e=>j(e,0),last:e=>j(e,e.arguments.length-1),"options.duration":e=>{let t=j(e,e.arguments.length-1);return t?.type===`ObjectExpression`?N(t,`duration`)?.value:void 0}};function _r(e,t,n){let i=E(e.callee,n),a=i===void 0?void 0:hr.get(r.join(i,`.`));return a!==void 0&&B(t,e.callee)?gr[a](e):void 0}function vr(e,t){return e**t}const yr=o.type().pipe(o.withReturnType(),o.when(`*`,()=>f.multiply),o.when(`+`,()=>f.sum),o.when(`-`,()=>f.subtract),o.when(`/`,()=>f.divideUnsafe),o.when(`%`,()=>f.remainder),o.when(`**`,()=>vr),o.orElse(a.constUndefined));function q(e){let t=P(e);if(t.type===`Literal`)return c.isNumber(t.value)?t.value:void 0;if(t.type===`UnaryExpression`&&(t.operator===`-`||t.operator===`+`)){let e=q(t.argument);return e===void 0||t.operator===`+`?e:-e}if(t.type!==`BinaryExpression`||t.left.type===`PrivateIdentifier`)return;let n=q(t.left),r=q(t.right);if(n!==void 0&&r!==void 0)return yr(t.operator)?.(n,r)}function br(e){let t=P(e);if(t.type===`Literal`)return c.isNumber(t.value)?[t.value]:void 0;if(t.type!==`BinaryExpression`||t.operator!==`*`)return;let n=br(t.left),i=br(t.right);return n===void 0||i===void 0?void 0:r.appendAll(n,i)}const xr=/* @__PURE__ */ new Set([6e4,36e5,864e5]),Sr=/* @__PURE__ */ new Set([60,3600,86400]),Cr=/* @__PURE__ */ new Set([7,24,60,1e3,3600,86400]);function wr(e){let t=br(e);if(!(t===void 0||t.length<2)&&(r.some(t,e=>xr.has(e))||r.some(t,e=>Sr.has(e))&&r.filter(t,e=>Cr.has(e)).length>=2))return{millis:r.contains(t,1e3)||r.some(t,e=>e%6e4==0)}}const Tr=[[`weeks`,6048e5],[`days`,864e5],[`hours`,36e5],[`minutes`,6e4],[`seconds`,1e3],[`millis`,1]];function Er(e){return!Number.isSafeInteger(e)||Math.abs(e)<1e4?String(e):u.replaceAll(/\B(?=(?:\d{3})+$)/gu,`_`)(String(e))}function Dr(e,t){let n=e*r.findFirst(Tr,([e])=>e===t).pipe(s.map(([,e])=>e),s.getOrElse(()=>1));return n===0?`Duration.zero`:r.findFirst(Tr,([,e])=>Number.isSafeInteger(n/e)).pipe(s.match({onNone:()=>`Duration.millis(${Er(n)})`,onSome:([e,t])=>`Duration.${e}(${Er(n/t)})`}))}const Or=b({...x(`suggestion`,`Prefer explicit Effect Duration constructors over ambiguous millisecond literals.`,{effectDuration:`Wrap this number with Duration.millis or use a more descriptive Duration constructor.`},`https://www.effect.website/docs/v4/api/effect/Duration`),fixable:`code`},(e,t)=>({CallExpression(n){let r=_r(n,e,t());r!==void 0&&q(r)!==void 0&&e.report({node:r,messageId:`effectDuration`,fix(t){let i=De(e,n,`effect/Duration`,`Duration`,t);return[...i.fixes,t.replaceText(r,`${i.name}.millis(${e.sourceCode.getText(r)})`)]}})}})),kr=/* @__PURE__ */ new Map([[`ms`,`millis`],[`milli`,`millis`],[`millis`,`millis`],[`millisecond`,`millis`],[`milliseconds`,`millis`],[`sec`,`seconds`],[`secs`,`seconds`],[`seconds`,`seconds`],[`mins`,`minutes`],[`minutes`,`minutes`],[`hr`,`hours`],[`hrs`,`hours`],[`hours`,`hours`],[`days`,`days`],[`weeks`,`weeks`]]),Ar=/* @__PURE__ */ new Set([`day`,`hour`,`minute`,`second`,`week`]),jr=/* @__PURE__ */ new Set([`backoff`,`cooldown`,`day`,`debounce`,`delay`,`duration`,`expiration`,`expiry`,`hour`,`interval`,`lifetime`,`minute`,`second`,`throttle`,`timeout`,`ttl`,`week`]),Mr=a.flow(u.split(/[_$]+|(?<=[\da-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/u),r.filter(u.isNonEmpty),r.map(u.toLowerCase)),Nr=/* @__PURE__ */ new Set([`at`,`epoch`,`per`,`timestamp`]);function Pr(e){return e!==void 0&&e!==`excluded`&&e!==`unknown`}function Fr(e){let t=Mr(e),n=t.indexOf(`in`),i=t[n-1]??``;if(n>0&&n<t.length-1&&(kr.has(i)||Ar.has(i))||r.some(t,e=>Nr.has(e)))return`excluded`;let a=t.at(-1),o=t.at(-2);if(a===void 0)return;let s=kr.get(a);if(s!==void 0)return s;if(jr.has(a)||a===`age`&&o===`max`||a===`in`&&o===`expires`)return`unknown`}function Ir(e,t,n){return r.some(w(n,e,t)?.defs??[],e=>e.type===`ImportBinding`)}const Lr=o.type().pipe(o.withReturnType(),o.discriminators(`type`)({Identifier:a.flow(p.get(`name`),r.make),TSQualifiedName:({left:e,right:t})=>{let n=Lr(e);return n===void 0?void 0:r.append(n,t.name)}}),o.orElse(a.constUndefined));function Rr(e,t,n){return F(e,e=>{if(e.type!==`TSTypeReference`)return!1;let[r,...i]=Lr(e.typeName)??[],a=r===void 0||!Ir(e,r,t)?void 0:n.bindings.get(r);return a!==void 0&&[...a,...i][0]===`Duration`})}function zr(e){return e.parent.type===`VariableDeclaration`&&e.parent.kind===`const`&&e.id.type===`Identifier`&&e.init!==null&&q(e.init)!==void 0}function Br(e,t){let n=P(e);if(n.type!==`Identifier`)return;let r=ae(w(t,n,n.name))?.node;return r?.type===`VariableDeclarator`&&zr(r)?r:void 0}const Vr=b(x(`suggestion`,`Prefer Effect Duration values over plain-number duration constants.`,{durationConstant:`{{name}} holds a duration as a plain number. Declare it as {{replacement}} and convert at non-Effect boundaries with Duration.toMillis or Duration.toSeconds.`},`https://www.effect.website/docs/v4/api/effect/Duration`),(e,t)=>{let n=/* @__PURE__ */ new Map;function r(n,r){if(n.id.typeAnnotation&&Rr(n.id.typeAnnotation,e,t()))return`none`;let i=Fr(n.id.name);if(r)return Pr(i)?i:`millis`;if(i===`excluded`||(q(n.init)??0)<=0)return`none`;if(Pr(i))return i;let a=wr(n.init);return a?.millis===!0?`millis`:a!==void 0||i===`unknown`?void 0:`none`}return{before(){n.clear()},VariableDeclarator(e){t().hasEffectImport&&zr(e)&&!n.has(e)&&n.set(e,!1)},CallExpression(r){let i=_r(r,e,t()),a=i===void 0?void 0:Br(i,e);a!==void 0&&n.set(a,!0)},"Program:exit":function(){for(let[t,i]of n){let n=r(t,i),a=q(t.init);n!==`none`&&e.report({node:t.id,messageId:`durationConstant`,data:{name:t.id.name,replacement:n===void 0||a===void 0?`a Duration constructor such as Duration.seconds`:Dr(a,n)}})}}}}),Hr=/* @__PURE__ */ new Set([`base64`,`base64url`,`hex`]);function Ur(e){return e!==void 0&&R(e)&&Hr.has(e.value)}const Wr=b(x(`suggestion`,`Prefer Effect Encoding for portable Base64, Base64Url, and hexadecimal encoding.`,{effectEncoding:`Use Encoding encode/decode helpers; decoders return Result instead of throwing.`},`https://www.effect.website/docs/v4/api/effect/Encoding`),(e,t)=>({CallExpression(n){if(!t().hasEffectImport)return;if((T(n.callee,e,`atob`)||T(n.callee,e,`btoa`))&&n.arguments.length>0){e.report({node:n,messageId:`effectEncoding`});return}let i=C(n.callee),a=i!==void 0&&r.join(i,`.`)===`Buffer.from`&&Ur(j(n,1)),o=i?.at(-1)===`toString`&&Ur(j(n,0));(a||o)&&e.report({node:n,messageId:`effectEncoding`})}})),Gr=/* @__PURE__ */ new Set([`fs`,`fs/promises`,`node:fs`,`node:fs/promises`]),Kr=b(x(`suggestion`,`Prefer the Effect FileSystem service over direct Node.js filesystem imports in Effect projects.`,{effectFileSystem:`Use the FileSystem service from effect/FileSystem instead of {{source}}.`},`https://www.effect.website/docs/v4/api/effect/FileSystem`),(e,t)=>({ImportDeclaration(n){t().hasEffectImport&&Gr.has(n.source.value)&&e.report({node:n.source,messageId:`effectFileSystem`,data:{source:n.source.value}})}}));function qr(e,t,n){return e.type===`CallExpression`&&D(e.callee,t,`Result`,n)?j(e,0):void 0}function Jr(e,t,n){let r=I(t),i=jt(t);if(r===void 0||i?.type!==`ConditionalExpression`)return;let a=qr(i.consequent,n,`succeed`),o=qr(i.alternate,n,`fail`);a?.type===`Identifier`&&a.name===r.name&&o?.type===`Identifier`&&o.name===r.name&&e.report({node:t,messageId:`effectFilter`})}const Yr=b(x(`suggestion`,`Prefer Effect Filter constructors for reusable Result-valued predicates.`,{effectFilter:`Use Filter.fromPredicate for this Result-valued predicate so it composes as a Filter.`},`https://www.effect.website/docs/v4/api/effect/Filter`),(e,t)=>({ArrowFunctionExpression(n){Jr(e,n,t())},FunctionExpression(n){Jr(e,n,t())}})),Xr=b(x(`suggestion`,`Prefer immutable Effect Headers values in Effect projects.`,{effectHeaders:`Use Headers.fromInput to construct normalized, immutable Effect headers.`},`https://www.effect.website/docs/v4/api/effect/unstable/http/Headers`),(e,t)=>({NewExpression(n){t().hasEffectImport&&T(n.callee,e,`Headers`)&&e.report({node:n,messageId:`effectHeaders`})}}));function Zr(e){return e.type===`Literal`||e.type===`TemplateLiteral`&&e.expressions.length===0}function Qr(e,t){if(e.type===`BinaryExpression`&&_e(e.operator)){if(Zr(e.left))return t.sourceCode.getText(e.right);if(Zr(e.right))return t.sourceCode.getText(e.left)}}const $r=b(x(`suggestion`,`Prefer Effect Match for composable and exhaustive branching in Effect projects.`,{effectMatch:`Use Match.type, Match.value, or Match.tags with Match.exhaustive instead of switch.`,preferMatch:`Use Match from Effect instead of a chained literal ternary.`},`https://www.effect.website/docs/v4/api/effect/Match`),(e,t)=>({SwitchStatement(n){t().hasEffectImport&&e.report({node:n,messageId:`effectMatch`})},ConditionalExpression(t){if(t.parent.type===`ConditionalExpression`)return;let n=Qr(t.test,e);if(n===void 0)return;let r=t.alternate,i=1;for(;r.type===`ConditionalExpression`;){if(Qr(r.test,e)!==n)return;i+=1,r=r.alternate}i>1&&e.report({node:t,messageId:`preferMatch`})}})),ei=/* @__PURE__ */ new Set([`node:path`,`path`]),ti=b(x(`suggestion`,`Prefer the Effect Path service over direct Node.js path imports in Effect projects.`,{effectPath:`Use the Path service from effect/Path instead of {{source}}.`},`https://www.effect.website/docs/v4/api/effect/Path`),(e,t)=>({ImportDeclaration(n){t().hasEffectImport&&ei.has(n.source.value)&&e.report({node:n.source,messageId:`effectPath`,data:{source:n.source.value}})}})),ni=/* @__PURE__ */ new Set([`canParse`,`parse`]),ri=b(x(`suggestion`,`Prefer Effect Url helpers for safe URL parsing in Effect projects.`,{effectUrl:`Use Url.fromString or Url.make so invalid URLs are represented as Result failures.`},`https://www.effect.website/docs/v4/api/effect/unstable/http/Url`),(e,t)=>({NewExpression(n){t().hasEffectImport&&T(n.callee,e,`URL`)&&e.report({node:n,messageId:`effectUrl`})},CallExpression(n){let r=C(n.callee);t().hasEffectImport&&r?.[0]===`URL`&&ni.has(r[1]??``)&&n.callee.type===`MemberExpression`&&T(n.callee.object,e,`URL`)&&e.report({node:n,messageId:`effectUrl`})}})),ii=/* @__PURE__ */ new Map([[`interruptibleMask`,`interruptible`],[`uninterruptibleMask`,`uninterruptible`]]),ai=b(x(`suggestion`,`Prefer the non-mask interruptibility API when the restore callback is unused.`,{unusedRestore:`The mask callback never uses restore, so the mask is equivalent to {{replacement}} and misleadingly suggests a restored region.`},`https://github.com/Effect-TS/tsgo/issues/659`),(e,t)=>({CallExpression(n){let r=E(n.callee,t()),i=r?.length===2&&r[0]===`Effect`?ii.get(r[1]??``):void 0,a=j(n,0);i!==void 0&&a!==void 0&&A(a)&&!fe(a)&&e.report({node:n,messageId:`unusedRestore`,data:{replacement:`Effect.${i}`}})}})),oi=b(x(`suggestion`,`Prefer Effect.withSpan when the callback does not use the span handle.`,{unusedSpan:`The useSpan callback ignores its span. Use Effect.withSpan so nested spans are parented beneath this span.`},`https://github.com/Effect-TS/tsgo/issues/663`),(e,t)=>({CallExpression(n){if(!D(n.callee,t(),`Effect`,`useSpan`))return;let r=j(n,n.arguments.length-1);r!==void 0&&A(r)&&!fe(r)&&e.report({node:n,messageId:`unusedSpan`})}}));function si(e,t){let n=P(e);if(z(n,0))return!0;if(R(n))return/^0\s*(?:nanos?|micros?|millis?|seconds?|minutes?|hours?|days?|weeks?)$/i.test(n.value);if(D(n,t,`Duration`,`zero`))return!0;if(n.type===`CallExpression`){let e=E(n.callee,t),r=j(n,0);return r!==void 0&&e?.[0]===`Duration`&&z(r,0)}return!1}const ci=b(x(`suggestion`,`Prefer scheduler yielding to a zero-duration Clock sleep.`,{zeroSleep:`Effect.sleep(0) uses Clock and interacts with TestClock. Use Effect.yieldNow for a cooperative scheduler yield.`},`https://github.com/Effect-TS/tsgo/issues/661`),(e,t)=>({CallExpression(n){let r=t(),i=j(n,0);i!==void 0&&D(n.callee,r,`Effect`,`sleep`)&&si(i,r)&&e.report({node:n,messageId:`zeroSleep`})}})),li=/* @__PURE__ */ new Set([`catch`,`catchAll`,`mapError`]);function ui(e,t){let n=Tt(e,t),r=wt(e,`catch`);if(!(n?.[0]===`Effect`&&n[1]!==void 0&&li.has(n[1])||r!==void 0&&O(r.callee,t,`Effect`,[`try`,`tryPromise`]))||!e.body)return!1;let i=I(e);return F(e.body,e=>e.type===`NewExpression`&&ye(e)&&(i===void 0||!de(e,i.name)))}const di=b(x(`suggestion`,`Preserve the underlying cause when wrapping an Effect failure.`,{droppedCause:`This handler constructs a new error but drops the caught failure. Accept it as a parameter and attach it as cause.`},`https://github.com/Effect-TS/tsgo/issues/490`),(e,t)=>({ArrowFunctionExpression(n){ui(n,t())&&e.report({node:n,messageId:`droppedCause`})},FunctionExpression(n){ui(n,t())&&e.report({node:n,messageId:`droppedCause`})}})),fi=b(x(`problem`,`Require Schema.Class declarations to carry a nominal brand.`,{missingBrand:`Schema.Class without a second type parameter is structural. Add a unique brand so plain objects cannot masquerade as instances.`},`https://github.com/Effect-TS/tsgo/issues/468`),(e,t)=>({CallExpression(n){D(n.callee,t(),`Schema`,`Class`)&&(n.typeArguments?.params.length??0)<2&&e.report({node:n,messageId:`missingBrand`})}}));function pi(e,t){if(D(e.callee,t,`Effect`,`tryPromise`))return Mt(j(e,0))}const mi=b(x(`suggestion`,`Require Effect.tryPromise thunks to accept and use their AbortSignal for interruption.`,{missingSignal:"Accept the AbortSignal parameter and pass it to the Promise API. Name it `_signal` only when cancellation is unsupported.",unusedSignal:"Pass this AbortSignal to the Promise API, or rename it to `_signal` to explicitly acknowledge that cancellation is unsupported."},`https://www.effect.website/docs/v4/api/effect/Effect#tryPromise`),(e,t)=>({CallExpression(n){let r=pi(n,t());if(r===void 0)return;let i=I(r);i===void 0?e.report({node:r,messageId:`missingSignal`}):!u.startsWith(`_`)(i.name)&&!fe(r)&&e.report({node:i,messageId:`unusedSignal`})}})),hi=[`fn`,`fnUntraced`,`gen`],gi=[`fn`,`fnUntraced`];function _i(e,t){let n=e.parent;if(n.type===`CallExpression`&&j(n,0)===e)return O(n.callee,t,`Effect`,[`try`,`tryPromise`]);if(n.type!==`Property`||n.key.type!==`Identifier`||n.key.name!==`try`)return!1;let r=n.parent;return r.type===`ObjectExpression`&&r.parent.type===`CallExpression`&&O(r.parent.callee,t,`Effect`,[`try`,`tryPromise`])}const vi=b(x(`problem`,`Disallow throw in Effect generator APIs because it creates an untyped defect.`,{throwInGen:`Use yield* Effect.fail(...) instead of throw so the failure stays in the typed error channel.`}),(e,t)=>({ThrowStatement(n){let i=t(),a=me(n);if(a===void 0||_i(a,i))return;let o=L(a),s=o!==void 0&&r.some(hi,e=>D(o.callee,i,`Effect`,e)),c=o?.callee,l=c?.type===`CallExpression`&&r.some(gi,e=>D(c.callee,i,`Effect`,e));(s||l)&&e.report({node:n,messageId:`throwInGen`})}})),yi=String.raw`(?:\r\n|\r(?!\n)|[\n\u2028\u2029])`,bi=String.raw`[^\S\r\n\u2028\u2029]*`,xi=RegExp(`^(${bi}${yi})(?:${bi}${yi})+(${bi};?)$`,`u`),Si=/^(?:module\s*\.\s*)?exports(?:\s*\.|\s*\[|$)/u,Ci=/* @__PURE__ */ new Set([`FunctionDeclaration`,`FunctionExpression`,`ArrowFunctionExpression`]),wi=/* @__PURE__ */ new Set([`any`,`never`,`always`]),Ti=/* @__PURE__ */ new Set([`any`,`singleline`,`multiline`]),Ei=/* @__PURE__ */ new Set([`blankLine`,`prev`,`next`]),Di=/* @__PURE__ */ new Set([`selector`,`lineMode`]);function Oi(e){return e.type===`Punctuator`&&e.value===`;`}function J(e,t){return e.loc.end.line===t.loc.start.line}function Y(e){return e.loc.start.line===e.loc.end.line}function ki(e){return Ci.has(e.type)}function Ai(e){return e.type===`ChainExpression`?e.expression:e}function X(e,t){let n=new Set(r.ensure(e));return(e,r)=>r.getFirstToken(e)?.value===t&&n.has(e.type)}function Z(e){return t=>t.type===e}function Q(e,t){return(n,r)=>e(n,r)&&Y(n)===(t===`singleline`)}function ji(e){if(e.type!==`ExpressionStatement`)return!1;let t=Ai(e.expression);if(t.type===`UnaryExpression`&&(t=Ai(t.argument)),t.type!==`CallExpression`)return!1;let n=t.callee;for(;n.type===`SequenceExpression`;)n=s.getOrThrowWith(r.last(n.expressions),()=>/* @__PURE__ */ Error(`Padding rule invariant: sequence expression is empty`));return ki(n)}function Mi(e){if(e.type!==`VariableDeclaration`)return!1;let t=e.declarations[0]?.init;if(t==null)return!1;for(;t.type===`MemberExpression`;)t=t.object;return t.type===`CallExpression`&&t.callee.type===`Identifier`&&t.callee.name===`require`}function Ni(e,t){if(e.type===`DoWhileStatement`&&e.body.type===`BlockStatement`||ji(e))return!0;let n=t.getLastToken(e,e=>!Oi(e)),r=n?.type===`Punctuator`&&n.value===`}`?t.getNodeByRangeIndex(n.range[0]):null;return r?.type===`BlockStatement`||r?.type===`SwitchStatement`}function Pi(e,t){return e.type===`ExpressionStatement`&&(e.parent.type===`Program`||e.parent.type===`BlockStatement`&&ki(e.parent.parent))&&e.expression.type===`Literal`&&c.isString(e.expression.value)&&(t.getTokenBefore(e.expression)?.value!==`(`||t.getTokenAfter(e.expression)?.value!==`)`)}function Fi(e,t){if(!Pi(e,t)||!e.parent||!(`body`in e.parent)||!r.isArray(e.parent.body))return!1;let n=e.parent.body;return a.pipe(n,r.takeWhile(t=>t!==e),r.every(e=>Pi(e,t)))}function Ii(e){if(e.type!==`ExpressionStatement`||e.expression.type!==`AssignmentExpression`)return!1;let t=e.expression.left;if(t.type!==`MemberExpression`)return!1;for(;t.object.type===`MemberExpression`;)t=t.object;return t.object.type===`Identifier`&&(t.object.name===`exports`||t.object.name===`module`&&t.property.type===`Identifier`&&t.property.name===`exports`)}function Li(e,t){let n=t.getLastToken(e);if(n===null)throw Error(`Padding rule invariant: statement has no token`);let r=t.getTokenBefore(n),i=t.getTokenAfter(n);return r&&i&&r.range[0]>=e.range[0]&&Oi(n)&&!J(r,n)&&J(n,i)?r:n}function Ri(e,t){if(Y(e))return e.loc;let n=e.loc.start.line,r=t.lines[n-1];if(r===void 0)throw Error(`Padding rule invariant: statement source line is missing`);return{start:e.loc.start,end:{line:n,column:r.length}}}const $={"block-like":Ni,expression:(e,t)=>e.type===`ExpressionStatement`&&!Fi(e,t),return:X(`ReturnStatement`,`return`),export:X([`ExportAllDeclaration`,`ExportDefaultDeclaration`,`ExportNamedDeclaration`],`export`),var:X(`VariableDeclaration`,`var`),let:X(`VariableDeclaration`,`let`),const:X(`VariableDeclaration`,`const`),using:e=>e.type===`VariableDeclaration`&&(e.kind===`using`||e.kind===`await using`),type:X(`TSTypeAliasDeclaration`,`type`)},zi={"*":()=>!0,exports:Ii,require:Mi,directive:Fi,iife:ji,block:Z(`BlockStatement`),empty:Z(`EmptyStatement`),function:Z(`FunctionDeclaration`),"ts-method":Z(`TSMethodSignature`),break:X(`BreakStatement`,`break`),case:X(`SwitchCase`,`case`),class:X(`ClassDeclaration`,`class`),continue:X(`ContinueStatement`,`continue`),debugger:X(`DebuggerStatement`,`debugger`),default:X([`SwitchCase`,`ExportDefaultDeclaration`],`default`),do:X(`DoWhileStatement`,`do`),for:X([`ForStatement`,`ForInStatement`,`ForOfStatement`],`for`),if:X(`IfStatement`,`if`),import:X(`ImportDeclaration`,`import`),switch:X(`SwitchStatement`,`switch`),throw:X(`ThrowStatement`,`throw`),try:X(`TryStatement`,`try`),while:X([`WhileStatement`,`DoWhileStatement`],`while`),with:X(`WithStatement`,`with`),"cjs-export":(e,t)=>e.type===`ExpressionStatement`&&e.expression.type===`AssignmentExpression`&&Si.test(t.getText(e.expression.left)),"cjs-import":(e,t)=>e.type===`VariableDeclaration`&&e.declarations[0]?.init!=null&&u.startsWith(`require(`)(t.getText(e.declarations[0].init)),enum:X(`TSEnumDeclaration`,`enum`),interface:X(`TSInterfaceDeclaration`,`interface`),"function-overload":Z(`TSDeclareFunction`),...$,"singleline-block-like":Q($[`block-like`],`singleline`),"multiline-block-like":Q($[`block-like`],`multiline`),"singleline-expression":Q($.expression,`singleline`),"multiline-expression":Q($.expression,`multiline`),"singleline-return":Q($.return,`singleline`),"multiline-return":Q($.return,`multiline`),"singleline-export":Q($.export,`singleline`),"multiline-export":Q($.export,`multiline`),"singleline-var":Q($.var,`singleline`),"multiline-var":Q($.var,`multiline`),"singleline-let":Q($.let,`singleline`),"multiline-let":Q($.let,`multiline`),"singleline-const":Q($.const,`singleline`),"multiline-const":Q($.const,`multiline`),"singleline-using":Q($.using,`singleline`),"multiline-using":Q($.using,`multiline`),"singleline-type":Q($.type,`singleline`),"multiline-type":Q($.type,`multiline`)};function Bi(e){return Ti.has(e)}function Vi(e){return wi.has(e)}function Hi(e){return c.isString(e)&&n.has(zi,e)}function Ui(e){return r.isArray(e)}function Wi(e){if(Hi(e))return e;if(c.isObject(e)&&c.isString(e.selector)&&r.every(n.keys(e),e=>Di.has(e))){if(!(`lineMode`in e))return{selector:e.selector};if(Bi(e.lineMode))return{selector:e.selector,lineMode:e.lineMode}}throw Error(`Invalid padding-line-between-statements statement matcher`)}function Gi(e){if(!r.isArray(e))return Wi(e);let t=e;if(!r.isReadonlyArrayNonEmpty(t))throw Error(`Padding statement matcher arrays must not be empty`);return r.map(t,e=>Wi(e))}function Ki(e){return r.map(e,e=>{if(!c.isObject(e)||!(`blankLine`in e)||!(`prev`in e)||!(`next`in e)||r.some(n.keys(e),e=>!Ei.has(e))||!Vi(e.blankLine))throw Error(`Invalid padding-line-between-statements configuration`);return{blankLine:e.blankLine,prev:Gi(e.prev),next:Gi(e.next)}})}function qi(e,t,n){let r=[],i=Li(e,n);if(t.loc.start.line-i.loc.end.line>=2)do{let e=n.getTokenAfter(i,{includeComments:!0});if(e===null)throw Error(`Padding rule invariant: next statement token is missing`);e.loc.start.line-i.loc.end.line>=2&&r.push([i,e]),i=e}while(i.range[0]<t.range[0]);return r}function Ji(e,t,n){return i.gen(function*(){if(n===`any`)return yield*i.void;let o=yield*h,s=o.sourceCode,c=qi(e,t,s);return n===`never`?r.isArrayNonEmpty(c)?yield*o.report({node:t,messageId:`unexpectedBlankLine`,loc:Ri(t,s),fix(e){if(c.length>=2)return null;let t=r.headNonEmpty(c),n=t[0].range[1],i=t[1].range[0];return e.replaceTextRange([n,i],a.pipe(s.text,u.slice(n,i),u.replace(xi,`$1$2`)))}}):yield*i.void:r.isArrayNonEmpty(c)?yield*i.void:yield*o.report({node:t,messageId:`expectedBlankLine`,loc:Ri(t,s),fix(n){let r=Li(e,s),i=s.getFirstTokenBetween(r,t,{includeComments:!0,filter(e){return!J(r,e)||(r=e,!1)}})??t;return n.insertTextAfter(r,J(r,i)?`
3
3
 
4
4
  `:`
5
- `)}})})}function*qi(e,t){let i=e.sourceCode,c=n.fromIterable(new Set(r.pipe(t,n.flatMap(e=>[...n.ensure(e.prev),...n.ensure(e.next)]),n.flatMap(e=>s.isString(e)?[]:[e.selector])))),l=yield*m.make(new Map(n.map(c,e=>[e,/* @__PURE__ */ new Set]))),u=yield*m.make(n.empty()),d=yield*m.make(o.none());function f(){return m.update(d,e=>o.some({upper:e,prevNode:o.none()}))}function h(){return m.update(d,o.flatMap(e=>e.upper))}function g(e,t,r){let a=e;for(;a.type===`LabeledStatement`;)a=a.body;return Vi(t)?n.some(t,e=>g(a,e,r)):s.isString(t)?Li[t](a,i):r.get(t.selector)?.has(a)===!0&&(t.lineMode===`singleline`?Y(a):t.lineMode!==`multiline`||!Y(a))}function te(e,i,a){return r.pipe(n.findLast(t,t=>g(e,t.prev,a)&&g(i,t.next,a)),o.match({onNone:()=>`any`,onSome:e=>e.blankLine}))}let ne=a.type().pipe(a.when({parent:a.null},r.constant(p.void)),a.not({parent:{type:a.is(`BlockStatement`,`Program`,`StaticBlock`,`SwitchCase`,`SwitchStatement`,`TSInterfaceBody`,`TSModuleBlock`,`TSTypeLiteral`)}},r.constant(p.void)),a.orElse(e=>p.gen(function*(){let t=yield*m.get(d);if(o.isNone(t))return yield*p.die(/* @__PURE__ */ Error(`Padding rule invariant: statement scope is missing`));if(o.isSome(t.value.prevNode)){let n=t.value.prevNode.value;yield*m.update(u,t=>(t.push({prevNode:n,nextNode:e}),t))}yield*m.set(d,o.some({upper:t.value.upper,prevNode:o.some(e)}))})));function _(e){return p.andThen(ne(e),f())}let re={Program:f,"Program:exit":p.fn(`'Program:exit'`)(function*(){let e=yield*m.get(l);yield*m.get(u).pipe(p.flatMap(t=>p.all(n.map(t,({prevNode:t,nextNode:n})=>Ki(t,n,te(t,n,e)))))),yield*h()}),BlockStatement:f,"BlockStatement:exit":h,SwitchStatement:f,"SwitchStatement:exit":h,SwitchCase:_,"SwitchCase:exit":h,StaticBlock:f,"StaticBlock:exit":h,TSInterfaceBody:f,"TSInterfaceBody:exit":h,TSModuleBlock:f,"TSModuleBlock:exit":h,TSTypeLiteral:f,"TSTypeLiteral:exit":h,TSDeclareFunction:_,"TSDeclareFunction:exit":h,TSMethodSignature:_,"TSMethodSignature:exit":h,":statement":ne};return ee.merge(re,...n.map(c,e=>ee.on(e,t=>m.update(l,n=>(n.get(e)?.add(t),n)))))}const Ji={"alchemy-no-cloudflare-init-finalizer":we,"alchemy-no-deprecated-docker-constraints":De,"alchemy-no-deprecated-resource":ke,"alchemy-no-plaintext-github-secret":je,"alchemy-no-removed-config-api":Me,"alchemy-no-reserved-eventbridge-default-name":Ne,"alchemy-no-runtime-config":Pe,"alchemy-no-v1-import":Ie,"alchemy-no-v1-worker-properties":Re,"avoid-data-tagged-error":ze,"ban-error-string":Ue,"consistent-schema-pipe":bt,"cors-credentials-with-wildcard":Mt,"dual-numeric-arity-with-optional-parameter":Pt,"effect-promise-vs-trypromise":Ft,"no-already-started-promise":Lt,"no-async-effect-try":Rt,"no-discarded-run-promise":zt,"no-discarded-schema-checks":Ht,"no-empty-effect-callback":tn,"no-empty-schema-struct":nn,"no-effect-alchemy-barrel-imports":en,"no-function-config-default":on,"no-hash-as-identity":ln,"no-inline-schema-compile":En,"no-logging-in-catch":An,"no-manual-effect-error-tag":In,"no-manual-tag-comparison":Ln,"no-manual-tagged-construction":Rn,"no-multi-shot-effect-callback":Vn,"no-non-json-schema-annotation":Jn,"no-option-of-service":Yn,"no-overwritten-discriminant":Xn,"no-service-option-get-or-throw":er,"no-service-constructor-imports":$n,"no-throw-in-effect-callback":nr,"no-uppercase-http-api-header":sr,"no-zero-retry-times":cr,"padding-line-between-statements":d.define({name:`padding-line-between-statements`,meta:{type:`layout`,docs:{description:`Require or disallow padding lines between statements`,url:`https://eslint.style/rules/padding-line-between-statements`,recommended:!0},fixable:`whitespace`,schema:{type:`array`,items:{type:`object`,properties:{blankLine:{enum:[`any`,`never`,`always`]},prev:{$ref:`#/$defs/statementOption`},next:{$ref:`#/$defs/statementOption`}},required:[`blankLine`,`prev`,`next`],additionalProperties:!1},$defs:{statementMatcher:{anyOf:[{type:`string`,enum:i.keys(Li)},{type:`object`,properties:{selector:{type:`string`},lineMode:{enum:[`any`,`singleline`,`multiline`]}},required:[`selector`],additionalProperties:!1}]},statementOption:{anyOf:[{$ref:`#/$defs/statementMatcher`},{type:`array`,items:{$ref:`#/$defs/statementMatcher`},minItems:1,uniqueItems:!0}]}}},messages:{unexpectedBlankLine:`Unexpected blank line before this statement.`,expectedBlankLine:`Expected blank line before this statement.`}},*create(){let e=yield*f;return yield*qi(e,Wi(e.options))}}),"prefer-effect-alchemy-namespace-imports":lr,"prefer-effect-array-sort":ur,"prefer-effect-datetime":fr,"prefer-effect-duration":Er,"prefer-effect-duration-constants":zr,"prefer-effect-encoding":Hr,"prefer-effect-filesystem":Wr,"prefer-effect-filter":qr,"prefer-effect-headers":Jr,"prefer-effect-match":Zr,"prefer-effect-path":$r,"prefer-effect-url":ti,"prefer-uninterruptible":ri,"prefer-with-span":ii,"prefer-yield-now":oi,"preserve-caught-error":li,"require-schema-class-brand":ui,"require-try-promise-abort-signal":fi,"throw-in-effect-gen":gi},Yi=/* @__PURE__ */ new Set([`prefer-effect-filesystem`,`prefer-effect-path`]),Xi=i.fromEntries(r.pipe(i.keys(Ji),n.filter(e=>!Yi.has(e)),n.map(e=>[`2digits/${e}`,`error`]))),Zi=t({meta:{name:`@2digits/oxlint-plugin`},rules:Ji});export{Zi as default,Xi as recommendedRules,Ji as rules};
5
+ `)}})})}function*Yi(e,t){let n=e.sourceCode,l=r.fromIterable(new Set(a.pipe(t,r.flatMap(e=>[...r.ensure(e.prev),...r.ensure(e.next)]),r.flatMap(e=>c.isString(e)?[]:[e.selector])))),u=yield*g.make(new Map(r.map(l,e=>[e,/* @__PURE__ */ new Set]))),d=yield*g.make(r.empty()),f=yield*g.make(s.none());function p(){return g.update(f,e=>s.some({upper:e,prevNode:s.none()}))}function m(){return g.update(f,s.flatMap(e=>e.upper))}function h(e,t,i){let a=e;for(;a.type===`LabeledStatement`;)a=a.body;return Ui(t)?r.some(t,e=>h(a,e,i)):c.isString(t)?zi[t](a,n):i.get(t.selector)?.has(a)===!0&&(t.lineMode===`singleline`?Y(a):t.lineMode!==`multiline`||!Y(a))}function te(e,n,i){return a.pipe(r.findLast(t,t=>h(e,t.prev,i)&&h(n,t.next,i)),s.match({onNone:()=>`any`,onSome:e=>e.blankLine}))}let _=o.type().pipe(o.when({parent:o.null},a.constant(i.void)),o.not({parent:{type:o.is(`BlockStatement`,`Program`,`StaticBlock`,`SwitchCase`,`SwitchStatement`,`TSInterfaceBody`,`TSModuleBlock`,`TSTypeLiteral`)}},a.constant(i.void)),o.orElse(e=>i.gen(function*(){let t=yield*g.get(f);if(s.isNone(t))return yield*i.die(/* @__PURE__ */ Error(`Padding rule invariant: statement scope is missing`));if(s.isSome(t.value.prevNode)){let n=t.value.prevNode.value;yield*g.update(d,t=>(t.push({prevNode:n,nextNode:e}),t))}yield*g.set(f,s.some({upper:t.value.upper,prevNode:s.some(e)}))})));function v(e){return i.andThen(_(e),p())}let ne={Program:p,"Program:exit":i.fn(`'Program:exit'`)(function*(){let e=yield*g.get(u);yield*g.get(d).pipe(i.flatMap(t=>i.all(r.map(t,({prevNode:t,nextNode:n})=>Ji(t,n,te(t,n,e)))))),yield*m()}),BlockStatement:p,"BlockStatement:exit":m,SwitchStatement:p,"SwitchStatement:exit":m,SwitchCase:v,"SwitchCase:exit":m,StaticBlock:p,"StaticBlock:exit":m,TSInterfaceBody:p,"TSInterfaceBody:exit":m,TSModuleBlock:p,"TSModuleBlock:exit":m,TSTypeLiteral:p,"TSTypeLiteral:exit":m,TSDeclareFunction:v,"TSDeclareFunction:exit":m,TSMethodSignature:v,"TSMethodSignature:exit":m,":statement":_};return ee.merge(ne,...r.map(l,e=>ee.on(e,t=>g.update(u,n=>(n.get(e)?.add(t),n)))))}const Xi={"alchemy-no-cloudflare-init-finalizer":Ee,"alchemy-no-deprecated-docker-constraints":ke,"alchemy-no-deprecated-resource":je,"alchemy-no-plaintext-github-secret":Ne,"alchemy-no-removed-config-api":Pe,"alchemy-no-reserved-eventbridge-default-name":Fe,"alchemy-no-runtime-config":Ie,"alchemy-no-v1-import":Re,"alchemy-no-v1-worker-properties":Be,"avoid-data-tagged-error":Ve,"ban-error-string":Ge,"consistent-schema-pipe":St,"cors-credentials-with-wildcard":Pt,"dual-numeric-arity-with-optional-parameter":It,"effect-promise-vs-trypromise":Lt,"no-already-started-promise":zt,"no-async-effect-try":Bt,"no-discarded-run-promise":Vt,"no-discarded-schema-checks":Wt,"no-empty-effect-callback":rn,"no-empty-schema-struct":an,"no-effect-alchemy-barrel-imports":nn,"no-function-config-default":cn,"no-hash-as-identity":dn,"no-inline-schema-compile":On,"no-logging-in-catch":Mn,"no-manual-effect-error-tag":Rn,"no-manual-tag-comparison":zn,"no-manual-tagged-construction":Bn,"no-multi-shot-effect-callback":Un,"no-non-json-schema-annotation":Xn,"no-option-of-service":Zn,"no-overwritten-discriminant":Qn,"no-service-option-get-or-throw":nr,"no-service-constructor-imports":tr,"no-throw-in-effect-callback":ir,"no-uppercase-http-api-header":lr,"no-zero-retry-times":ur,"padding-line-between-statements":m.define({name:`padding-line-between-statements`,meta:{type:`layout`,docs:{description:`Require or disallow padding lines between statements`,url:`https://eslint.style/rules/padding-line-between-statements`,recommended:!0},fixable:`whitespace`,schema:{type:`array`,items:{type:`object`,properties:{blankLine:{enum:[`any`,`never`,`always`]},prev:{$ref:`#/$defs/statementOption`},next:{$ref:`#/$defs/statementOption`}},required:[`blankLine`,`prev`,`next`],additionalProperties:!1},$defs:{statementMatcher:{anyOf:[{type:`string`,enum:n.keys(zi)},{type:`object`,properties:{selector:{type:`string`},lineMode:{enum:[`any`,`singleline`,`multiline`]}},required:[`selector`],additionalProperties:!1}]},statementOption:{anyOf:[{$ref:`#/$defs/statementMatcher`},{type:`array`,items:{$ref:`#/$defs/statementMatcher`},minItems:1,uniqueItems:!0}]}}},messages:{unexpectedBlankLine:`Unexpected blank line before this statement.`,expectedBlankLine:`Expected blank line before this statement.`}},*create(){let e=yield*h;return yield*Yi(e,Ki(e.options))}}),"prefer-effect-alchemy-namespace-imports":dr,"prefer-effect-array-sort":fr,"prefer-effect-datetime":mr,"prefer-effect-duration":Or,"prefer-effect-duration-constants":Vr,"prefer-effect-encoding":Wr,"prefer-effect-filesystem":Kr,"prefer-effect-filter":Yr,"prefer-effect-headers":Xr,"prefer-effect-match":$r,"prefer-effect-path":ti,"prefer-effect-url":ri,"prefer-uninterruptible":ai,"prefer-with-span":oi,"prefer-yield-now":ci,"preserve-caught-error":di,"require-schema-class-brand":fi,"require-try-promise-abort-signal":mi,"throw-in-effect-gen":vi},Zi=/* @__PURE__ */ new Set([`prefer-effect-filesystem`,`prefer-effect-path`]),Qi=n.mapEntries(n.filter(Xi,(e,t)=>!Zi.has(t)),(e,t)=>[`2digits/${t}`,`error`]),$i=t({meta:{name:`@2digits/oxlint-plugin`},rules:Xi});export{$i as default,Qi as recommendedRules,Xi as rules};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@2digits/oxlint-plugin",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Custom Oxlint rules for 2digits projects.",
5
5
  "keywords": [
6
6
  "2digits",
@@ -28,17 +28,17 @@
28
28
  "access": "public"
29
29
  },
30
30
  "dependencies": {
31
- "@oxlint/plugins": "1.88.0",
31
+ "@oxlint/plugins": "1.89.0",
32
32
  "effect": "4.0.5",
33
33
  "effect-oxlint": "0.4.0"
34
34
  },
35
35
  "devDependencies": {
36
- "@2digits/tsconfig": "1.0.1",
36
+ "@2digits/tsconfig": "1.0.3",
37
37
  "@arethetypeswrong/core": "0.18.5",
38
38
  "@effect/platform-node": "4.0.5",
39
39
  "@effect/vitest": "4.0.5",
40
40
  "dedent": "1.7.2",
41
- "oxlint": "1.88.0",
41
+ "oxlint": "1.89.0",
42
42
  "publint": "0.3.25",
43
43
  "typescript": "7.0.2",
44
44
  "vite-plus": "1.3.0",